JFIF$        dd7 

Viewing File: /usr/lib/python3.9/site-packages/acme/_internal/tests/__pycache__/messages_test.cpython-39.pyc

a

}|�gM�@s�dZddlZddlZddlmZddlZddlmZddlZddlZ	ddl
Z
ddlmZddl
mZe�d�Ze�d�Ze�d	�ZGd
d�dej�ZGdd
�d
ej�ZGdd�dej�ZGdd�dej�ZGdd�dej�ZGdd�dej�ZGdd�dej�ZGdd�dej�ZGdd�dej�ZGdd�dej�ZGdd�dej�Z Gd d!�d!ej�Z!Gd"d#�d#ej�Z"Gd$d%�d%ej�Z#Gd&d'�d'ej�Z$Gd(d)�d)ej�Z%Gd*d+�d+ej�Z&e'd,k�r�e�(e
�)ej*d-d�e+g��dS).zTests for acme.messages.�N)�Dict)�mock)�
challenges)�	test_utilzcert.derzcsr.derzrsa512_key.pemc@speZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�ZdS)�	ErrorTestzTests for acme.messages.Error.cCs�ddlm}ddlm}ddlm}ddlm}|jdddd	�|_dd
|dd�|_|dd
d�|_||dd�|_	|jdd
d|j	d�|_
|jddd|j
gd�|_|�|_dS)Nr��Error)�ERROR_PREFIX��
Identifier��IDENTIFIER_FQDN�	malformed�foo�title��detailrz
some title)rr�typeZcustom�bar)�typr�example.com�r�valueZcaa)rr�
identifier)rr�subproblems)
�
acme.messagesrr	rr
�	with_code�error�jobj�error_customr�
subproblem�error_with_subproblems�empty_error)�selfrr	rr
�r$�F/usr/lib/python3.9/site-packages/acme/_internal/tests/messages_test.py�setUps�zErrorTest.setUpcCs ddlm}|�jdksJ�dS)Nrrzabout:blank)rrr�r#rr$r$r%�test_default_typ(szErrorTest.test_default_typcCs$ddlm}|�|�d�ks J�dS)Nrr�{})rr�	from_jsonr'r$r$r%�test_from_json_empty,szErrorTest.test_from_json_emptycCs$ddlm}t|�|j����dS)Nrr)rr�hashr*r�to_jsonr'r$r$r%�test_from_json_hashable0sz!ErrorTest.test_from_json_hashablecCsFddlm}|�|j���}dt|j�ks.J�|j|jdksBJ�dS)Nrr�)rrr*r!r-�lenrr )r#rZparsed_errorr$r$r%�test_from_json_with_subproblems4sz)ErrorTest.test_from_json_with_subproblemscCs$d|jjksJ�|jjdus J�dS)Nz!The request message was malformed)r�descriptionr�r#r$r$r%�test_description<szErrorTest.test_descriptioncCs@ddlm}d|jjksJ�|jjdus,J�|�jdus<J�dS)Nrrr)rrr�coderr'r$r$r%�	test_code@szErrorTest.test_codecCs`ddlm}ddlm}||j�s&J�||j�r4J�||��rBJ�||j�rPJ�|d�r\J�dS)Nrr��
is_acme_errorzmust pet all the {dogs|rabbits})rrr8rrr"�r#rr8r$r$r%�test_is_acme_errorFszErrorTest.test_is_acme_errorcCs8ddlm}ddlm}|jdddd�}||�s4J�dS)Nrrr7ru
عدالةrr)rrr8r)r#rr8Zarabic_errorr$r$r%�test_unicode_errorOs�zErrorTest.test_unicode_errorcCsbddlm}ddlm}||�d��s*J�t�t��|�d�Wd�n1sT0YdS)Nrrr7ZbadCSRznot an ACME error code)rrr8r�pytest�raises�
ValueErrorr9r$r$r%�test_with_codeVs
zErrorTest.test_with_codecCs<t|j�d�|j�ksJ�t|j�d�|j|j�ks8J�dS)Nz5{0.typ} :: {0.description} :: {0.detail} :: {0.title}z�{0.typ} :: {0.description} :: {0.detail} :: {0.title}
Problem for {1.identifier.value}: {1.typ} :: {1.description} :: {1.detail} :: {1.title})�strr�formatr!r r3r$r$r%�test_str]s����zErrorTest.test_strc
Cs`|jjdusJ�zddWn.tyJ}z|j|j_WYd}~n
d}~00|jjdus\J�dS)Nr/r)r�
__traceback__�ZeroDivisionError)r#�er$r$r%�test_setting_tracebackhs z ErrorTest.test_setting_tracebackN)�__name__�
__module__�__qualname__�__doc__r&r(r+r.r1r4r6r:r;r?rBrFr$r$r$r%rs	rc@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�ConstantTestz"Tests for acme.messages._Constant.cCs:ddlm}Gdd�d|�}||_|d�|_|d�|_dS)Nr)�	_Constantc@seZdZUiZeed<dS)z(ConstantTest.setUp.<locals>.MockConstant�POSSIBLE_NAMESN)rGrHrIrMr�__annotations__r$r$r$r%�MockConstantys
rO�a�b)rrLrO�const_a�const_b)r#rLrOr$r$r%r&vs

zConstantTest.setUpcCs(d|j��ksJ�d|j��ks$J�dS)NrPrQ)rR�to_partial_jsonrSr3r$r$r%�test_to_partial_json�sz!ConstantTest.test_to_partial_jsoncCsR|j|j�d�ksJ�t�tj��|j�d�Wd�n1sD0YdS)NrP�c)rRrOr*r<r=�joseZDeserializationErrorr3r$r$r%�test_from_json�szConstantTest.test_from_jsoncCst|j�d��dS�NrP)r,rOr*r3r$r$r%r.�sz$ConstantTest.test_from_json_hashablecCs(dt|j�ksJ�dt|j�ks$J�dS)NzMockConstant(a)zMockConstant(b))�reprrRrSr3r$r$r%�	test_repr�szConstantTest.test_reprcCsJ|�d�}|j|jksJ�|j|ks(J�|j|jks8J�|j|ksFJ�dSrY)rOrRrS)r#Z
const_a_primer$r$r%�
test_equality�s

zConstantTest.test_equalityN)
rGrHrIrJr&rUrXr.r[r\r$r$r$r%rKss
rKc@sXeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�ZdS)�
DirectoryTestz"Tests for acme.messages.Directory.cCs0ddlm}|dd|jdddgd�d	��|_dS)
Nr��	Directory�reg�cert�https://example.com/acme/terms�https://www.example.com/r)�terms_of_service�websiteZcaa_identities��newRegZnewCert�meta)rr_ZMeta�dir�r#r_r$r$r%r&�s��zDirectoryTest.setUpcCsddlm}|ddi�dS�Nrr^rr)rr_rjr$r$r%�!test_init_wrong_key_value_success�sz/DirectoryTest.test_init_wrong_key_value_successcCsd|jdksJ�dS)Nr`rg)rir3r$r$r%�test_getitem�szDirectoryTest.test_getitemcCs:t�t��|j�d�Wd�n1s,0YdS�Nr)r<r=�KeyErrorri�__getitem__r3r$r$r%�!test_getitem_fails_with_key_error�sz/DirectoryTest.test_getitem_fails_with_key_errorcCsd|jjksJ�dS)Nr`)rirgr3r$r$r%�test_getattr�szDirectoryTest.test_getattrcCs:t�t��|j�d�Wd�n1s,0YdSrn)r<r=�AttributeErrorri�__getattr__r3r$r$r%�'test_getattr_fails_with_attribute_error�sz5DirectoryTest.test_getattr_fails_with_attribute_errorcCs(|j��dddddgd�d�ks$J�dS)Nr`rarbrcr)ZtermsOfServicereZ
caaIdentitiesrf)rir-r3r$r$r%�test_to_json�s��zDirectoryTest.test_to_jsoncCsddlm}|�ddi�dSrk)rr_r*rjr$r$r%�2test_from_json_deserialization_unknown_key_success�sz@DirectoryTest.test_from_json_deserialization_unknown_key_successcCs6d}|jjD]}|dkr|jj|dk}q|s2J�dS)NFrdrb)rirh)r#�result�kr$r$r%�test_iter_meta�s
zDirectoryTest.test_iter_metaN)
rGrHrIrJr&rlrmrqrrrurvrwrzr$r$r$r%r]�sr]c@seZdZdd�Zdd�ZdS)�ExternalAccountBindingTestcCs>ddlm}tjjt��d�|_d|_d|_	|ddi�|_
dS)Nrr^��key�kid-for-testing�hmac-key-for-testing�
newAccount�http://url/acme/new-account)rr_rW�jwk�JWKRSA�KEY�
public_keyr}�kid�hmac_keyrirjr$r$r%r&�s�z ExternalAccountBindingTest.setUpcCsTddlm}|�|j|j|j|j�}t|�dks4J�t|�	��tgd��ksPJ�dS)Nr��ExternalAccountBinding��Z	protectedZpayloadZ	signature)
rr��	from_datar}r�r�rir0�sorted�keys)r#r��eabr$r$r%�test_from_data�sz)ExternalAccountBindingTest.test_from_dataN)rGrHrIr&r�r$r$r$r%r{�s	r{c@sXeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�ZdS)�RegistrationTestz%Tests for acme.messages.Registration.cCsjtjjt��d�}d}d}ddlm}||||d�|_|�|_|||d�|_	|j	�
�|_|��|jd<dS)	Nr|)�mailto:admin@foo.com�tel:1234zhttps://letsencrypt.org/termsr��Registration)r}�contact�	agreement)r�r�r}r})
rWr�r�r�r�rr�r`Zreg_none�jobj_to�copy�	jobj_fromr-)r#r}r�r�r�r$r$r%r&�s�zRegistrationTest.setUpcCs,ddlm}|jddd�}|jdks(J�dS)Nrr��1234�
admin@foo.com)Zphone�email)r�r�)rr�r�r�)r#r�r`r$r$r%r��szRegistrationTest.test_from_datac
Cs�ddlm}ddlm}ddlm}tjjt��d�}d}d}|dd	i�}|�	||||�}|j	d
|d�}	|	j
dksvJ�t|	j�
��tgd
��ks�J�dS)Nrr^r���NewRegistrationr|r~rr�r�r�)r��external_account_binding)r�r�)rr_r�r�rWr�r�r�r�r�r�r�r�r�)
r#r_r�r�r}r�r�Z	directoryr�r`r$r$r%�(test_new_registration_from_data_with_eabs�
�z9RegistrationTest.test_new_registration_from_data_with_eabcCsd|jjksJ�dS)N)r�)r`Zphonesr3r$r$r%�test_phonesszRegistrationTest.test_phonescCsd|jjksJ�dS)N)r�)r`Zemailsr3r$r$r%�test_emailsszRegistrationTest.test_emailscCs|j|j��ksJ�dS�N)r�r`rTr3r$r$r%rUsz%RegistrationTest.test_to_partial_jsoncCs&ddlm}|j|�|j�ks"J�dS�Nrr�)rr�r`r*r��r#r�r$r$r%rXszRegistrationTest.test_from_jsoncCs ddlm}t|�|j��dSr�)rr�r,r*r�r�r$r$r%r.!sz(RegistrationTest.test_from_json_hashablecCs|ddlm}|�}|dd�}|jdks*J�|jdks8J�d|��vsHJ�d|��vsXJ�d|��vshJ�d|��vsxJ�dS)Nrr�r$)r�r�)rr�r�rTZfields_to_partial_json)r#r�Z
empty_new_regZnew_reg_with_contactr$r$r%�test_default_not_transmitted%s
z-RegistrationTest.test_default_not_transmittedN)
rGrHrIrJr&r�r�r�r�rUrXr.r�r$r$r$r%r��sr�c@seZdZdZdd�ZdS)�UpdateRegistrationTestz+Tests for acme.messages.UpdateRegistration.cCs:ddlm}d}d|���ks"J�|�|�|�ks6J�dS)Nr)�UpdateRegistrationz{"resource": "reg"}r))rr��
json_dumpsZ
json_loads)r#r�Zjstringr$r$r%�
test_empty6sz!UpdateRegistrationTest.test_emptyN)rGrHrIrJr�r$r$r$r%r�3sr�c@s eZdZdZdd�Zdd�ZdS)�RegistrationResourceTestz-Tests for acme.messages.RegistrationResource.cCs,ddlm}|tjjtjjtjjd�|_dS)Nr)�RegistrationResource��body�urird)rr�r�sentinelr�r�rd�regr)r#r�r$r$r%r&@s
�zRegistrationResourceTest.setUpcCs*|j��tjjtjjtjjd�ks&J�dS)Nr�)r�r-rr�r�r�rdr3r$r$r%rUFs
�z-RegistrationResourceTest.test_to_partial_jsonN�rGrHrIrJr&rUr$r$r$r%r�=sr�c@seZdZdZdd�ZdS)�ChallengeResourceTestz*Tests for acme.messages.ChallengeResource.cCs.ddlm}d|tjdd�dd�jks*J�dS)Nr)�ChallengeResource�
http://challb�r�zhttp://authz)r�Z
authzr_uri)rr�rZ	MagicMockr�)r#r�r$r$r%�test_uriQs��zChallengeResourceTest.test_uriN)rGrHrIrJr�r$r$r$r%r�Nsr�c@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�ChallengeBodyTestz&Tests for acme.messages.ChallengeBody.cCs�tjt�d�d�|_ddlm}ddlm}ddlm}||_	|j
ddd	�}|d
|j|j	|d�|_d
|j	dd|d
�|_|j�
�|_d|jd<ddd�|jd<dS)N�+evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA��tokenr��
ChallengeBodyr)�STATUS_INVALIDZserverInternalz%Unable to communicate with DNS server)rr�)r��chall�statusrZdns)�urlr�rr�rZinvalidr�z)urn:ietf:params:acme:error:serverInternal)rrr)r�DNSrW�	b64decoder�rr�rr�r�r�challbr�r�r�)r#r�rr�rr$r$r%r&Zs.�

��
�zChallengeBodyTest.setUpcCs|j�d�|jjksJ�dS)Nr�)r��encoder�r3r$r$r%�test_encodeuszChallengeBodyTest.test_encodecCs|j|j��ksJ�dSr�)r�r�rTr3r$r$r%rUxsz&ChallengeBodyTest.test_to_partial_jsoncCs&ddlm}|j|�|j�ks"J�dS�Nrr�)rr�r�r*r��r#r�r$r$r%rX{sz ChallengeBodyTest.test_from_jsoncCs ddlm}t|�|j��dSr�)rr�r,r*r�r�r$r$r%r.sz)ChallengeBodyTest.test_from_json_hashablecCst�d�|jjksJ�dS)Nr�)rWr�r�r�r3r$r$r%�
test_proxy�s
��zChallengeBodyTest.test_proxyN)
rGrHrIrJr&r�rUrXr.r�r$r$r$r%r�Wsr�c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�AuthorizationTestz&Tests for acme.messages.Authorization.cCs�ddlm}ddlm}|d|tjdd�d�|d|tjd	d�d�f|_dd
lm}ddlm}ddlm	}||d
d�}|||jd�|_
|��dd�|jD�d�|_dS)Nrr�)�STATUS_VALID�http://challb1�IlirfxKKXAsHtmzK29Pj8Ar��r�r�r��http://challb2�DGyRejmCefe7v4NfDGDKfA��
Authorizationr
rrr�rrcSsg|]}|���qSr$)r-��.0r�r$r$r%�
<listcomp>��z+AuthorizationTest.setUp.<locals>.<listcomp>)
rr�r�r�HTTP01r��challbsr�rr
�authzr-r�)r#r�r�r�rr
rr$r$r%r&�s,
����	��zAuthorizationTest.setUpcCsddlm}|�|j�dS�Nrr�)rr�r*r��r#r�r$r$r%rX�sz AuthorizationTest.test_from_jsoncCs ddlm}t|�|j��dSr�)rr�r,r*r�r�r$r$r%r.�sz)AuthorizationTest.test_from_json_hashableN)rGrHrIrJr&rXr.r$r$r$r%r��sr�c@seZdZdZdd�ZdS)�AuthorizationResourceTestz.Tests for acme.messages.AuthorizationResource.cCs4ddlm}|tjjtjjd�}t|tj�s0J�dS)Nr��AuthorizationResource�r�r�)	rr�rr�r�r��
isinstancerW�JSONDeSerializable)r#r�Zauthzrr$r$r%�test_json_de_serializable�s�z3AuthorizationResourceTest.test_json_de_serializableN)rGrHrIrJr�r$r$r$r%r��sr�c@s eZdZdZdd�Zdd�ZdS)�CertificateRequestTestz+Tests for acme.messages.CertificateRequest.cCsddlm}|td�|_dS)Nr��CertificateRequest)Zcsr)rr��CSR�req�r#r�r$r$r%r&�szCertificateRequestTest.setUpcCs<t|jtj�sJ�ddlm}|j|�|j���ks8J�dS)Nrr�)r�r�rWr�rr�r*r-r�r$r$r%r��sz0CertificateRequestTest.test_json_de_serializableN�rGrHrIrJr&r�r$r$r$r%r��sr�c@s eZdZdZdd�Zdd�ZdS)�CertificateResourceTestz0Tests for acme.messages.CertificateResourceTest.cCs*ddlm}|ttjjdtjjd�|_dS)Nr��CertificateResourcer$)r�r�Zauthzrs�cert_chain_uri)rr��CERTrr�r�r��certr�r#r�r$r$r%r&�s

�zCertificateResourceTest.setUpcCs<t|jtj�sJ�ddlm}|j|�|j���ks8J�dS)Nrr�)r�r�rWr�rr�r*r-r�r$r$r%r��sz1CertificateResourceTest.test_json_de_serializableNr�r$r$r$r%r��sr�c@s eZdZdZdd�Zdd�ZdS)�RevocationTestz'Tests for acme.messages.RevocationTest.cCsddlm}|td�|_dS)Nr��
Revocation)Zcertificate)rr�r��rev�r#r�r$r$r%r&�szRevocationTest.setUpcCs$ddlm}t|�|j����dS)Nrr�)rr�r,r*r�r-r�r$r$r%r.�sz&RevocationTest.test_from_json_hashableN)rGrHrIrJr&r.r$r$r$r%r��sr�c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�OrderResourceTestz&Tests for acme.messages.OrderResource.cCs&ddlm}|tjjtjjd�|_dS)Nr��
OrderResource)r�r�)rr�rr�r�r�r�)r#r�r$r$r%r&�s�zOrderResourceTest.setUpcCs&|j��tjjtjjdd�ks"J�dS)N)r�r��authorizations)r�r-rr�r�r�r3r$r$r%rU�s
�z&OrderResourceTest.test_to_partial_jsoncCs�ddlm}ddlm}|d|tjdd�d�|d|tjd	d�d�f}dd
lm}ddlm}ddlm}dd
lm	}||dd�}|d|||d�d�}	ddlm
}
|
|f|tdd�|D��d�}ddlm}|d|d|	fd�}
|�
|
|�|
����dS)Nrr�)�STATUS_PENDINGr�r�r�r�r�r�r�r�r
rrrz
http://authz1r�r�)�Ordercss|]}|jVqdSr�r�r�r$r$r%�	<genexpr>r�z>OrderResourceTest.test_json_de_serializable.<locals>.<genexpr>)�identifiersr�r�r�z
http://order1s	test blob)r�r�Zcsr_pemr�)rr�r�rr�r�r�r�rr
r��tupler�ZassertEqualr*r-)r#r�r�r�r�r�rr
rr�r�r�r�Zorderrr$r$r%r��sF
����	�����z+OrderResourceTest.test_json_de_serializableN)rGrHrIrJr&rUr�r$r$r$r%r��sr�c@s eZdZdZdd�Zdd�ZdS)�NewOrderTestz!Tests for acme.messages.NewOrder.cCs ddlm}|tjjd�|_dS)Nr)�NewOrder)r�)rrrr�r�r`)r#rr$r$r%r&s�zNewOrderTest.setUpcCs|j��dtjjiksJ�dS)Nr�)r`r-rr�r�r3r$r$r%rUs�z!NewOrderTest.test_to_partial_jsonNr�r$r$r$r%rsrc@seZdZdZdd�ZdS)�JWSPayloadRFC8555CompliantzFTest for RFC8555 compliance of JWS generated from resources/challengescCs2ddlm}|�}|jdd���}|dks.J�dS)Nr)�NewAuthorization�)�indents{})rrr�r�)r#rZ	new_orderrr$r$r%�test_message_payloadsz/JWSPayloadRFC8555Compliant.test_message_payloadN)rGrHrIrJrr$r$r$r%rsr�__main__r/),rJ�
contextlib�sys�typingrZunittestr�warningsZjosepyrWr<ZacmerZacme._internal.testsrZload_comparable_certr�Zload_comparable_csrr�Zload_rsa_private_keyr�ZTestCaserrKr]r{r�r�r�r�r�r�r�r�r�r�r�rrrG�exit�main�argv�__file__r$r$r$r%�<module>s@


_&8P
	1%
.

Back to Directory  nL+D550H?Mx ,D"v]qv;6*Zqn)ZP0!1 A "#a$2Qr D8 a Ri[f\mIykIw0cuFcRı?lO7к_f˓[C$殷WF<_W ԣsKcëIzyQy/_LKℂ;C",pFA:/]=H  ~,ls/9ć:[=/#f;)x{ٛEQ )~ =𘙲r*2~ a _V=' kumFD}KYYC)({ *g&f`툪ry`=^cJ.I](*`wq1dđ#̩͑0;H]u搂@:~וKL Nsh}OIR*8:2 !lDJVo(3=M(zȰ+i*NAr6KnSl)!JJӁ* %݉?|D}d5:eP0R;{$X'xF@.ÊB {,WJuQɲRI;9QE琯62fT.DUJ;*cP A\ILNj!J۱+O\͔]ޒS߼Jȧc%ANolՎprULZԛerE2=XDXgVQeӓk yP7U*omQIs,K`)6\G3t?pgjrmۛجwluGtfh9uyP0D;Uڽ"OXlif$)&|ML0Zrm1[HXPlPR0'G=i2N+0e2]]9VTPO׮7h(F*癈'=QVZDF,d߬~TX G[`le69CR(!S2!P <0x<!1AQ "Raq02Br#SCTb ?Ζ"]mH5WR7k.ۛ!}Q~+yԏz|@T20S~Kek *zFf^2X*(@8r?CIuI|֓>^ExLgNUY+{.RѪ τV׸YTD I62'8Y27'\TP.6d&˦@Vqi|8-OΕ]ʔ U=TL8=;6c| !qfF3aů&~$l}'NWUs$Uk^SV:U# 6w++s&r+nڐ{@29 gL u"TÙM=6(^"7r}=6YݾlCuhquympǦ GjhsǜNlɻ}o7#S6aw4!OSrD57%|?x>L |/nD6?/8w#[)L7+6〼T ATg!%5MmZ/c-{1_Je"|^$'O&ޱմTrb$w)R$& N1EtdU3Uȉ1pM"N*(DNyd96.(jQ)X 5cQɎMyW?Q*!R>6=7)Xj5`J]e8%t!+'!1Q5 !1 AQaqё#2"0BRb?Gt^## .llQT $v,,m㵜5ubV =sY+@d{N! dnO<.-B;_wJt6;QJd.Qc%p{ 1,sNDdFHI0ГoXшe黅XۢF:)[FGXƹ/w_cMeD,ʡcc.WDtA$j@:) -# u c1<@ۗ9F)KJ-hpP]_x[qBlbpʖw q"LFGdƶ*s+ډ_Zc"?%t[IP 6J]#=ɺVvvCGsGh1 >)6|ey?Lӣm,4GWUi`]uJVoVDG< SB6ϏQ@ TiUlyOU0kfV~~}SZ@*WUUi##; s/[=!7}"WN]'(L! ~y5g9T̅JkbM' +s:S +B)v@Mj e Cf jE 0Y\QnzG1д~Wo{T9?`Rmyhsy3!HAD]mc1~2LSu7xT;j$`}4->L#vzŏILS ֭T{rjGKC;bpU=-`BsK.SFw4Mq]ZdHS0)tLg