Files
pyGoEdge-UserPanel/.venv/Lib/site-packages/dns/__pycache__/tsig.cpython-312.pyc

117 lines
17 KiB
Plaintext
Raw Normal View History

2025-11-18 03:36:49 +08:00
<EFBFBD>
g<> i8-<00><00><><00>dZddlZddlZddlZddlZddlZddlZddlZddl Zddl
ZGd<03>dejj<00>Z Gd<05>dejj<00>ZGd<07>dejj<00>ZGd <09>d
ejj<00>ZGd <0B>d ejj<00>ZGd <0A>de<11>ZGd<0F>de<11>ZGd<11>de<11>ZGd<13>de<11>Zej,j/d<15>Zej,j/d<16>Zej,j/d<17>Zej,j/d<18>Zej,j/d<19>Zej,j/d<1A>Zej,j/d<1B>Zej,j/d<1C>Zej,j/d<1D>Z ej,j/d<1E>Z!eZ"eded ed!ed"ed#ed$ed%e d!ed"e!d&i
Z#Gd'<27>d(<28>Z$Gd)<29>d*<2A>Z%Gd+<2B>d,<2C>Z&d4d-<2D>Z'd.<2E>Z(d5d/<2F>Z) d6d0<64>Z*d1<64>Z+Gd2<64>d3<64>Z,y)7zDNS TSIG support.<2E>Nc<00><00>eZdZdZy)<03>BadTimez8The current time is not within the TSIG's validity time.N<><04>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__<5F><00><00>7E:\Project\pygoedge\.venv\Lib\site-packages\dns/tsig.pyrr s<00><00>Br rc<00><00>eZdZdZy)<03> BadSignaturez#The TSIG signature fails to verify.Nrr
r r rr$s<00><00>-r rc<00><00>eZdZdZy)<03>BadKeyz2The TSIG record owner name does not match the key.Nrr
r r rr(s<00><00><r rc<00><00>eZdZdZy)<03> BadAlgorithmz*The TSIG algorithm does not match the key.Nrr
r r rr,<00><00><00>4r rc<00><00>eZdZdZy)<03> PeerErrorz;Base class for all TSIG errors generated by the remote peerNrr
r r rr0s<00><00>Er rc<00><00>eZdZdZy)<03>
PeerBadKeyz$The peer didn't know the key we usedNrr
r r rr4s<00><00>.r rc<00><00>eZdZdZy)<03>PeerBadSignaturez*The peer didn't like the signature we sentNrr
r r rr8rr rc<00><00>eZdZdZy)<03> PeerBadTimez%The peer didn't like the time we sentNrr
r r rr<s<00><00>/r rc<00><00>eZdZdZy)<03>PeerBadTruncationz=The peer didn't like amount of truncation in the TSIG we sentNrr
r r rr@s<00><00>Gr rzHMAC-MD5.SIG-ALG.REG.INTz hmac-sha1z hmac-sha224z hmac-sha256zhmac-sha256-128z hmac-sha384zhmac-sha384-192z hmac-sha512zhmac-sha512-256<35>gss-tsig<69><00><00> <00><00>0<00><00>@<00><>c<00>(<00>eZdZdZd<02>Zd<03>Zd<04>Zd<05>Zy)<07>GSSTSigaG
GSS-TSIG TSIG implementation. This uses the GSS-API context established
in the TKEY message handshake to sign messages using GSS-API message
integrity codes, per the RFC.
In order to avoid a direct GSSAPI dependency, the keyring holds a ref
to the GSSAPI object required, rather than the key itself.
c<00>.<00>||_d|_d|_y)Nr r)<03>gssapi_context<78>data<74>name)<02>selfr*s r <00>__init__zGSSTSig.__init__ks<00><00>,<2C><04><1B><17><04> <09><1E><04> r c<00>.<00>|xj|z c_y<00>N)r+<00>r-r+s r <00>updatezGSSTSig.updateps<00><00> <0C> <09> <09>T<EFBFBD><19> r c<00>L<00>|jj|j<00>Sr0)r*<00> get_signaturer+)r-s r <00>signz GSSTSig.signss<00><00><13>"<22>"<22>0<>0<><14><19><19>;<3B>;r c<00>v<00> |jj|j|<01>S#t$rt<00>wxYwr0)r*<00>verify_signaturer+<00> Exceptionr)r-<00>expecteds r <00>verifyzGSSTSig.verifyws9<00><00> <1F><17>&<26>&<26>7<>7<><04> <09> <09>8<EFBFBD>L<> L<><4C><18> <1F><1E> <1E> <1F>s<00>%(<00>8N)rrrr r.r2r5r:r
r r r(r(as<00><00><08><1F>
<1A><<3C>r r(c<00>(<00>eZdZd<01>Zd<02>Zed<03><00>Zy)<05>GSSTSigAdapterc<00><00>||_yr0)<01>keyring)r-r>s r r.zGSSTSigAdapter.__init__<5F>s <00><00><1E><04> r c<00><><00>||jvrM|j|}t|t<00>r,|jtk(r|rt
j |||<02>|Syr0)r><00>
isinstance<EFBFBD>Key<65> algorithm<68>GSS_TSIGr<<00>parse_tkey_and_step)r-<00>message<67>keyname<6D>keys r <00>__call__zGSSTSigAdapter.__call__<5F>sN<00><00> <12>d<EFBFBD>l<EFBFBD>l<EFBFBD> "<22><16>,<2C>,<2C>w<EFBFBD>'<27>C<EFBFBD><19>#<23>s<EFBFBD>#<23><03> <0A> <0A><18>(A<><1A>"<22>6<>6<>s<EFBFBD>G<EFBFBD>W<EFBFBD>M<><16>J<EFBFBD>r c<00><00> |j|j|tjjtj
j <00>}|r,|dj}|j}|j|<05>Sy#t$rYywxYw)Nr) <0B>
find_rrset<EFBFBD>answer<65>dns<6E>
rdataclass<EFBFBD>ANY<4E> rdatatype<70>TKEYrG<00>secret<65>step<65>KeyError)<07>clsrGrErF<00>rrset<65>tokenr*s r rDz"GSSTSigAdapter.parse_tkey_and_step<65>s}<00><00> <11><1B>&<26>&<26><17><0E><0E><07><13><1E><1E>);<3B>);<3B>S<EFBFBD>]<5D>]<5D>=O<>=O<><0E>E<EFBFBD><15><1D>a<EFBFBD><08> <0C> <0C><05>!$<24><1A><1A><0E>%<25>*<2A>*<2A>5<EFBFBD>1<>1<><15><><18> <11> <10> <11>s<00>A;A?<00>? B <03>
B N)rrrr.rH<00> classmethodrDr
r r r<r<<00>s <00><00><1F><18><11><11><11>r r<c<00><00>eZdZdZeej eeje eje ejdfe ejeejdfeej eej dfeej&i Zd<05>Zd<06>Zd<07>Zd<08>Zy )
<EFBFBD>HMACTSigzo
HMAC TSIG implementation. This uses the HMAC python module to handle the
sign/verify operations.
r&<00><><00>c<00><><00> |j|}t|t<00>r*t j ||d<00><04>|_|d|_n#t j ||<03><04>|_d|_|jj|_ |jr#|xjd|j<00><00>z c_ yy#t$rtd|<02>d<02><03><00>wxYw)NzTSIG algorithm z is not supportedr)<01> digestmod<6F><00>-)
<EFBFBD>_hashesrS<00>NotImplementedErrorr@<00>tuple<6C>hmac<61>new<65> hmac_context<78>sizer,)r-rGrB<00>hashinfos r r.zHMACTSig.__init__<5F>s<><00><00> V<01><1B>|<7C>|<7C>I<EFBFBD>.<2E>H<EFBFBD>
<16>h<EFBFBD><05> &<26> $<24><08><08><13><08><11> <0B> D<>D<EFBFBD> <1D> <20><11> <0B>D<EFBFBD>I<EFBFBD> $<24><08><08><13><08> A<>D<EFBFBD> <1D><1C>D<EFBFBD>I<EFBFBD><18>%<25>%<25>*<2A>*<2A><04> <09> <0F>9<EFBFBD>9<EFBFBD> <10>I<EFBFBD>I<EFBFBD>1<EFBFBD>T<EFBFBD>Y<EFBFBD>Y<EFBFBD>K<EFBFBD><1F> (<28>I<EFBFBD> <15><><18> V<01>%<25><0F> <09>{<7B>BS<42>&T<>U<> U<> V<01>s <00>B9<00>9Cc<00>8<00>|jj|<01>Sr0)rer2r1s r r2zHMACTSig.update<74>s<00><00><13> <20> <20>'<27>'<27><04>-<2D>-r c<00>v<00>|jj<00>}|jr|d|jdz}|S)N<>)re<00>digestrf)r-rks r r5z HMACTSig.sign<67>s7<00><00><15>"<22>"<22>)<29>)<29>+<2B><06> <0F>9<EFBFBD>9<EFBFBD><1B>.<2E>t<EFBFBD>y<EFBFBD>y<EFBFBD>A<EFBFBD>~<7E>/<2F>F<EFBFBD><15> r c<00>\<00>|j<00>}tj||<01>st<00>yr0)r5rc<00>compare_digestr)r-r9<00>macs r r:zHMACTSig.verify<66>s(<00><00><12>i<EFBFBD>i<EFBFBD>k<EFBFBD><03><13>"<22>"<22>3<EFBFBD><08>1<><1E> <1E>2r N)rrrr <00> HMAC_SHA1<41>hashlib<69>sha1<61> HMAC_SHA224<32>sha224<32> HMAC_SHA256<35>sha256<35>HMAC_SHA256_128<32> HMAC_SHA384<38>sha384<38>HMAC_SHA384_192<39> HMAC_SHA512<31>sha512<31>HMAC_SHA512_256<35>HMAC_MD5<44>md5r`r.r2r5r:r
r r rYrY<00>s<><00><00><08> <12>7<EFBFBD><<3C><<3C><13>W<EFBFBD>^<5E>^<5E><13>W<EFBFBD>^<5E>^<5E><17>'<27>.<2E>.<2E>#<23>.<2E><13>W<EFBFBD>^<5E>^<5E><17>'<27>.<2E>.<2E>#<23>.<2E><13>W<EFBFBD>^<5E>^<5E><17>'<27>.<2E>.<2E>#<23>.<2E><10>'<27>+<2B>+<2B>
<06>G<EFBFBD>)<29>".<2E><16>r rYc<00><00>|xr| }|rLt|<01>}|r?|jtjdt |<04><00><00>|j|<04>|<05>J<00>|jtjd|j
<00><00>|j|dd<00>|r<>|j|j j<00><00>|jtjdtjj<00><00>|jtjdd<05><00>|<03> |j}|dz dz}|dz} tjd || |j<00>}
t |j<00>} | dkDr td
<EFBFBD><00>|rk|j|jj<00>|
z<00>|jtjd |j | <0B>|jz<00>|S|j|
<EFBFBD>|S) z<>Return a context containing the TSIG rdata for the input parameters
@rtype: dns.tsig.HMACTSig or dns.tsig.GSSTSig object
@raises ValueError: I{other_data} is too long
@raises NotImplementedError: I{algorithm} is not supported
<20>!HN<48>z!Irr!i<><69>l<00><EFBFBD>z!HIHz TSIG Other Data is > 65535 bytesz!HH)<11> get_contextr2<00>struct<63>pack<63>len<65> original_idr,<00> to_digestablerLrMrN<00> time_signed<65>fudge<67>other<65>
ValueErrorrB<00>error) <0C>wirerG<00>rdata<74>time<6D> request_mac<61>ctx<74>multi<74>first<73>
upper_time<EFBFBD>
lower_time<EFBFBD> time_encoded<65> other_lens r <00>_digestr<74><00>s<><00><00><15><1D><15> <1F>E<EFBFBD> <0C><19>#<23><1E><03> <16> <0F>J<EFBFBD>J<EFBFBD>v<EFBFBD>{<7B>{<7B>4<EFBFBD><13>[<5B>)9<>:<3A> ;<3B> <0F>J<EFBFBD>J<EFBFBD>{<7B> #<23> <0E>?<3F><1A>?<3F><07>J<EFBFBD>J<EFBFBD>v<EFBFBD>{<7B>{<7B>4<EFBFBD><15>!2<>!2<>3<>4<><07>J<EFBFBD>J<EFBFBD>t<EFBFBD>A<EFBFBD>B<EFBFBD>x<EFBFBD><18> <0C> <0B>
<EFBFBD>
<EFBFBD>3<EFBFBD>8<EFBFBD>8<EFBFBD>)<29>)<29>+<2B>,<2C> <0B>
<EFBFBD>
<EFBFBD>6<EFBFBD>;<3B>;<3B>t<EFBFBD>S<EFBFBD>^<5E>^<5E>%7<>%7<>8<>9<> <0B>
<EFBFBD>
<EFBFBD>6<EFBFBD>;<3B>;<3B>t<EFBFBD>Q<EFBFBD>'<27>(<28> <0B>|<7C><14> <20> <20><04><16>"<22>*<2A><06>&<26>J<EFBFBD><15>
<EFBFBD>"<22>J<EFBFBD><19>;<3B>;<3B>v<EFBFBD>z<EFBFBD>:<3A>u<EFBFBD>{<7B>{<7B>K<>L<EFBFBD><13>E<EFBFBD>K<EFBFBD>K<EFBFBD> <20>I<EFBFBD><10>5<EFBFBD><18><18>;<3B><<3C><<3C> <0C> <0B>
<EFBFBD>
<EFBFBD>3<EFBFBD>=<3D>=<3D>.<2E>.<2E>0<><<3C>?<3F>@<40> <0B>
<EFBFBD>
<EFBFBD>6<EFBFBD>;<3B>;<3B>u<EFBFBD>e<EFBFBD>k<EFBFBD>k<EFBFBD>9<EFBFBD>=<3D><05> <0B> <0B>K<>L<> <0F>J<EFBFBD> <0C>
<EFBFBD>
<EFBFBD><<3C> <20> <0E>Jr c<00><><00>|rLt|<00>}|jtjdt |<01><00><00>|j|<01>|Sy)z<>If this is the first message in a multi-message sequence,
start a new context.
@rtype: dns.tsig.HMACTSig or dns.tsig.GSSTSig object
r<>N)r<>r2r<>r<>r<>)rGrnr<>r<>s r <00>_maybe_start_digestr<74><00>s?<00><00>
 <0A><19>#<23><1E><03> <0B>
<EFBFBD>
<EFBFBD>6<EFBFBD>;<3B>;<3B>t<EFBFBD>S<EFBFBD><13>X<EFBFBD>.<2E>/<2F> <0B>
<EFBFBD>
<EFBFBD>3<EFBFBD><0F><12>
<EFBFBD>r c <00><><00>t|||||||<06>}|j<00>}|j||<07><01>}|t|||<06>fS)a~Return a (tsig_rdata, mac, ctx) tuple containing the HMAC TSIG rdata
for the input parameters, the HMAC MAC calculated by applying the
TSIG signature algorithm, and the TSIG digest context.
@rtype: (string, dns.tsig.HMACTSig or dns.tsig.GSSTSig object)
@raises ValueError: I{other_data} is too long
@raises NotImplementedError: I{algorithm} is not supported
)r<>rn)r<>r5<00>replacer<65>) r<>rGr<>r<>r<>r<>r<>rn<00>tsigs r r5r5sL<00><00> <12>$<24><03>U<EFBFBD>D<EFBFBD>+<2B>s<EFBFBD>E<EFBFBD>
B<EFBFBD>C<EFBFBD>
<0A>(<28>(<28>*<2A>C<EFBFBD> <10>=<3D>=<3D>T<EFBFBD>s<EFBFBD>=<3D> 3<>D<EFBFBD> <10>%<25>c<EFBFBD>3<EFBFBD><05>6<> 7<>7r c <00><><00>tjd|dd<00>\} | dk(rtjj<00>| dz} |ddtj
d| <09>z|d|z}
|j dk7r<>|j tjjk(rt<00>|j tjjk(rt<00>|j tjjk(rt<00>|j tjjk(rt<00>t!d|j <00><00><02><00>t#|j$|z
<00>|j&kDrt(<00>|j*|k7rt,<00>|j.|j.k7rt0<00>t3|
||d|||<08>}|j5|j6<00>t9||j6|<08>S)aFValidate the specified TSIG rdata against the other input parameters.
@raises FormError: The TSIG is badly formed.
@raises BadTime: There is too much time skew between the client and the
server.
@raises BadSignature: The TSIG signature did not validate
@rtype: dns.tsig.HMACTSig or dns.tsig.GSSTSig objectr<74><00>
<00> rr^zunknown TSIG error code N)r<><00>unpackrL<00> exception<6F> FormErrorr<72>r<><00>rcode<64>BADSIGr<00>BADKEYr<00>BADTIMEr<00>BADTRUNCrr<00>absr<73>r<>rr,rrBrr<>r:rnr<>) r<>rG<00>ownerr<72><00>nowr<77><00>
tsig_startr<EFBFBD>r<><00>adcount<6E>new_wires r <00>validater<65>sw<00><00><18><1D><1D>t<EFBFBD>T<EFBFBD>"<22>R<EFBFBD>[<5B>1<>J<EFBFBD>W<EFBFBD><0E>!<21>|<7C><11>m<EFBFBD>m<EFBFBD>%<25>%<25>%<25> <0B>q<EFBFBD>L<EFBFBD>G<EFBFBD><13>A<EFBFBD>b<EFBFBD>z<EFBFBD>F<EFBFBD>K<EFBFBD>K<EFBFBD><04>g<EFBFBD>6<>6<><14>b<EFBFBD><1A>9L<39>L<>H<EFBFBD> <0C>{<7B>{<7B>a<EFBFBD><17> <10>;<3B>;<3B>#<23>)<29>)<29>*<2A>*<2A> *<2A>"<22> "<22> <12>[<5B>[<5B>C<EFBFBD>I<EFBFBD>I<EFBFBD>,<2C>,<2C> ,<2C><1C> <1C> <12>[<5B>[<5B>C<EFBFBD>I<EFBFBD>I<EFBFBD>-<2D>-<2D> -<2D><1D> <1D> <12>[<5B>[<5B>C<EFBFBD>I<EFBFBD>I<EFBFBD>.<2E>.<2E> .<2E>#<23> #<23><1B>6<>u<EFBFBD>{<7B>{<7B>m<EFBFBD>D<>E<> E<>
<EFBFBD>5<EFBFBD> <1C> <1C>s<EFBFBD> "<22>#<23>e<EFBFBD>k<EFBFBD>k<EFBFBD>1<><15> <0A>
<EFBFBD>x<EFBFBD>x<EFBFBD>5<EFBFBD><18><14> <0C>
<EFBFBD>}<7D>}<7D><05><0F><0F>'<27><1A><1A>
<11>(<28>C<EFBFBD><15><04>k<EFBFBD>3<EFBFBD><05>
F<EFBFBD>C<EFBFBD><07>J<EFBFBD>J<EFBFBD>u<EFBFBD>y<EFBFBD>y<EFBFBD><19> <1E>s<EFBFBD>E<EFBFBD>I<EFBFBD>I<EFBFBD>u<EFBFBD> 5<>5r c<00><><00>|jtk(rt|j<00>St |j|j<00>S)z<>Returns an HMAC context for the specified key.
@rtype: HMAC context
@raises NotImplementedError: I{algorithm} is not supported
)rBrCr(rQrY)rGs r r<>r<><s4<00><00> <0B>}<7D>}<7D><08> <20><16>s<EFBFBD>z<EFBFBD>z<EFBFBD>"<22>"<22><17><03>
<EFBFBD>
<EFBFBD>C<EFBFBD>M<EFBFBD>M<EFBFBD>2<>2r c<00><><00>eZdZefdej
j ezdeezdej
j ezfd<04>Z d<05>Z
d<06>Z y)rAr,rQrBc<00>P<00>t|t<00>rtjj |<01>}||_t|t<00>r#t j |j<00><00>}||_t|t<00>rtjj |<03>}||_ yr0)
r@<00>strrLr,<00> from_text<78>base64<36> decodebytes<65>encoderQrB)r-r,rQrBs r r.z Key.__init__Jsu<00><00> <16>d<EFBFBD>C<EFBFBD> <20><16>8<EFBFBD>8<EFBFBD>%<25>%<25>d<EFBFBD>+<2B>D<EFBFBD><18><04> <09> <15>f<EFBFBD>c<EFBFBD> "<22><1B>'<27>'<27><06> <0A> <0A><0F>8<>F<EFBFBD><1C><04> <0B> <15>i<EFBFBD><13> %<25><1B><08><08>*<2A>*<2A>9<EFBFBD>5<>I<EFBFBD>"<22><04>r c<00><><00>t|t<00>xrO|j|jk(xr4|j|jk(xr|j|jk(Sr0)r@rAr,rQrB)r-r<>s r <00>__eq__z
Key.__eq__ZsR<00><00> <16>u<EFBFBD>c<EFBFBD> "<22> 2<><14> <09> <09>U<EFBFBD>Z<EFBFBD>Z<EFBFBD>'<27> 2<><14> <0B> <0B>u<EFBFBD>|<7C>|<7C>+<2B> 2<><15><0E><0E>%<25>/<2F>/<2F>1<> 
r c<00><><00>d|j<00>d<02>d|j<00>d<04>z}|jtk7r4|dtj|j
<00>j <00><00>d<04>z }|dz }|S)Nz<DNS key name='z', z algorithm='<27>'z
, secret='<27>>)r,rBrCr<><00> b64encoderQ<00>decode)r-<00>rs r <00>__repr__z Key.__repr__bsm<00><00><1D>d<EFBFBD>i<EFBFBD>i<EFBFBD>[<5B><03> ,<2C><1B>T<EFBFBD>^<5E>^<5E><L<>A<EFBFBD>/N<> N<><01> <0F>><3E>><3E>X<EFBFBD> %<25> <0A>:<3A>f<EFBFBD>.<2E>.<2E>t<EFBFBD>{<7B>{<7B>;<3B>B<>B<>D<>E<>Q<EFBFBD>G<> G<>A<EFBFBD> <09>S<EFBFBD><08><01><10>r N) rrr<00>default_algorithmrLr,<00>Namer<65><00>bytesr.r<>r<>r
r r rArAIsP<00><00>
*;<3B> #<23><11>h<EFBFBD>h<EFBFBD>m<EFBFBD>m<EFBFBD>c<EFBFBD>!<21>#<23><16><03> <0B>#<23><17>8<EFBFBD>8<EFBFBD>=<3D>=<3D>3<EFBFBD>&<26> #<23> 
<EFBFBD>r rA)NNNN)NNNF)NF)-r r<>rprcr<><00> dns.exceptionrL<00>dns.name<6D> dns.rcode<64>dns.rdataclass<73> dns.rdatatyper<65><00> DNSExceptionrrrrrrrrrr,r<>r}rorrrtrvrwryrzr|rCr<><00> mac_sizesr(r<rYr<>r<>r5r<>r<>rAr
r r <00><module>r<>s$<00><01>$<18> <0A><0E> <0B> <0A><14><0F><10><15><14>C<01>c<EFBFBD>m<EFBFBD>m<EFBFBD>(<28>(<28>C<01>.<2E>3<EFBFBD>=<3D>=<3D>-<2D>-<2D>.<2E>=<3D>S<EFBFBD>]<5D>]<5D> '<27> '<27>=<3D>5<>3<EFBFBD>=<3D>=<3D>-<2D>-<2D>5<>F<01><03> <0A> <0A>*<2A>*<2A>F<01>/<2F><19>/<2F>5<>y<EFBFBD>5<>0<>)<29>0<>H<01> <09>H<01> <0F>8<EFBFBD>8<EFBFBD> <1D> <1D>8<> 9<><08> <0F>H<EFBFBD>H<EFBFBD> <1E> <1E>{<7B> +<2B> <09><11>h<EFBFBD>h<EFBFBD> <20> <20><1D>/<2F> <0B><11>h<EFBFBD>h<EFBFBD> <20> <20><1D>/<2F> <0B><15>(<28>(<28>$<24>$<24>%6<>7<><0F><11>h<EFBFBD>h<EFBFBD> <20> <20><1D>/<2F> <0B><15>(<28>(<28>$<24>$<24>%6<>7<><0F><11>h<EFBFBD>h<EFBFBD> <20> <20><1D>/<2F> <0B><15>(<28>(<28>$<24>$<24>%6<>7<><0F> <0E>8<EFBFBD>8<EFBFBD> <1D> <1D>j<EFBFBD> )<29><08><1F><11><0E>r<EFBFBD><0F><12><0F><12><13>R<EFBFBD><0F><12><13>R<EFBFBD><0F><12><13>R<EFBFBD> <0C>b<EFBFBD> <0C>c<EFBFBD> <02> <09><1F><1F>><11><11>@1<1F>1<1F>h!<0F>H <14> 8<>"LQ<01>#6<>L
3<><11>r