PNG  IHDRX cHRMz&u0`:pQ<bKGD pHYsodtIME MeqIDATxw]Wug^Qd˶ 6`!N:!@xI~)%7%@Bh&`lnjVF29gΨ4E$|>cɚ{gk= %,a KX%,a KX%,a KX%,a KX%,a KX%,a KX%, b` ǟzeאfp]<!SJmɤY޲ڿ,%c ~ع9VH.!Ͳz&QynֺTkRR.BLHi٪:l;@(!MԴ=žI,:o&N'Kù\vRmJ雵֫AWic H@" !: Cé||]k-Ha oݜ:y F())u]aG7*JV@J415p=sZH!=!DRʯvɱh~V\}v/GKY$n]"X"}t@ xS76^[bw4dsce)2dU0 CkMa-U5tvLƀ~mlMwfGE/-]7XAƟ`׮g ewxwC4\[~7@O-Q( a*XGƒ{ ՟}$_y3tĐƤatgvێi|K=uVyrŲlLӪuܿzwk$m87k( `múcE)"@rK( z4$D; 2kW=Xb$V[Ru819קR~qloѱDyįݎ*mxw]y5e4K@ЃI0A D@"BDk_)N\8͜9dz"fK0zɿvM /.:2O{ Nb=M=7>??Zuo32 DLD@D| &+֎C #B8ַ`bOb $D#ͮҪtx]%`ES`Ru[=¾!@Od37LJ0!OIR4m]GZRJu$‡c=%~s@6SKy?CeIh:[vR@Lh | (BhAMy=݃  G"'wzn޺~8ԽSh ~T*A:xR[ܹ?X[uKL_=fDȊ؂p0}7=D$Ekq!/t.*2ʼnDbŞ}DijYaȲ(""6HA;:LzxQ‘(SQQ}*PL*fc\s `/d'QXW, e`#kPGZuŞuO{{wm[&NBTiiI0bukcA9<4@SӊH*؎4U/'2U5.(9JuDfrޱtycU%j(:RUbArLֺN)udA':uGQN"-"Is.*+k@ `Ojs@yU/ H:l;@yyTn}_yw!VkRJ4P)~y#)r,D =ě"Q]ci'%HI4ZL0"MJy 8A{ aN<8D"1#IJi >XjX֔#@>-{vN!8tRݻ^)N_╗FJEk]CT՟ YP:_|H1@ CBk]yKYp|og?*dGvzنzӴzjֺNkC~AbZƷ`.H)=!QͷVTT(| u78y֮}|[8-Vjp%2JPk[}ԉaH8Wpqhwr:vWª<}l77_~{s۴V+RCģ%WRZ\AqHifɤL36: #F:p]Bq/z{0CU6ݳEv_^k7'>sq*+kH%a`0ԣisqにtү04gVgW΂iJiS'3w.w}l6MC2uԯ|>JF5`fV5m`Y**Db1FKNttu]4ccsQNnex/87+}xaUW9y>ͯ骵G{䩓Գ3+vU}~jJ.NFRD7<aJDB1#ҳgSb,+CS?/ VG J?|?,2#M9}B)MiE+G`-wo߫V`fio(}S^4e~V4bHOYb"b#E)dda:'?}׮4繏`{7Z"uny-?ǹ;0MKx{:_pÚmFמ:F " .LFQLG)Q8qN q¯¯3wOvxDb\. BKD9_NN &L:4D{mm o^tֽ:q!ƥ}K+<"m78N< ywsard5+вz~mnG)=}lYݧNj'QJS{S :UYS-952?&O-:W}(!6Mk4+>A>j+i|<<|;ر^߉=HE|V#F)Emm#}/"y GII웻Jі94+v뾧xu~5C95~ūH>c@덉pʃ1/4-A2G%7>m;–Y,cyyaln" ?ƻ!ʪ<{~h~i y.zZB̃/,雋SiC/JFMmBH&&FAbϓO^tubbb_hZ{_QZ-sύodFgO(6]TJA˯#`۶ɟ( %$&+V'~hiYy>922 Wp74Zkq+Ovn錄c>8~GqܲcWꂎz@"1A.}T)uiW4="jJ2W7mU/N0gcqܗOO}?9/wìXžΏ0 >֩(V^Rh32!Hj5`;O28؇2#ݕf3 ?sJd8NJ@7O0 b־?lldщ̡&|9C.8RTWwxWy46ah嘦mh٤&l zCy!PY?: CJyв]dm4ǜҐR޻RլhX{FƯanшQI@x' ao(kUUuxW_Ñ줮[w8 FRJ(8˼)_mQ _!RJhm=!cVmm ?sFOnll6Qk}alY}; "baӌ~M0w,Ggw2W:G/k2%R,_=u`WU R.9T"v,<\Ik޽/2110Ӿxc0gyC&Ny޽JҢrV6N ``یeA16"J³+Rj*;BϜkZPJaÍ<Jyw:NP8/D$ 011z֊Ⱳ3ι֘k1V_"h!JPIΣ'ɜ* aEAd:ݺ>y<}Lp&PlRfTb1]o .2EW\ͮ]38؋rTJsǏP@芎sF\> P^+dYJLbJ C-xϐn> ι$nj,;Ǖa FU *择|h ~izť3ᤓ`K'-f tL7JK+vf2)V'-sFuB4i+m+@My=O҈0"|Yxoj,3]:cо3 $#uŘ%Y"y죯LebqtҢVzq¼X)~>4L׶m~[1_k?kxֺQ`\ |ٛY4Ѯr!)N9{56(iNq}O()Em]=F&u?$HypWUeB\k]JɩSع9 Zqg4ZĊo oMcjZBU]B\TUd34ݝ~:7ڶSUsB0Z3srx 7`:5xcx !qZA!;%͚7&P H<WL!džOb5kF)xor^aujƍ7 Ǡ8/p^(L>ὴ-B,{ۇWzֺ^k]3\EE@7>lYBȝR.oHnXO/}sB|.i@ɥDB4tcm,@ӣgdtJ!lH$_vN166L__'Z)y&kH;:,Y7=J 9cG) V\hjiE;gya~%ks_nC~Er er)muuMg2;֫R)Md) ,¶ 2-wr#F7<-BBn~_(o=KO㭇[Xv eN_SMgSҐ BS헃D%g_N:/pe -wkG*9yYSZS.9cREL !k}<4_Xs#FmҶ:7R$i,fi!~' # !6/S6y@kZkZcX)%5V4P]VGYq%H1!;e1MV<!ϐHO021Dp= HMs~~a)ަu7G^];git!Frl]H/L$=AeUvZE4P\.,xi {-~p?2b#amXAHq)MWǾI_r`S Hz&|{ +ʖ_= (YS(_g0a03M`I&'9vl?MM+m~}*xT۲(fY*V4x@29s{DaY"toGNTO+xCAO~4Ϳ;p`Ѫ:>Ҵ7K 3}+0 387x\)a"/E>qpWB=1 ¨"MP(\xp߫́A3+J] n[ʼnӼaTbZUWb={~2ooKױӰp(CS\S筐R*JغV&&"FA}J>G֐p1ٸbk7 ŘH$JoN <8s^yk_[;gy-;߉DV{c B yce% aJhDȶ 2IdйIB/^n0tNtџdcKj4϶v~- CBcgqx9= PJ) dMsjpYB] GD4RDWX +h{y`,3ꊕ$`zj*N^TP4L:Iz9~6s) Ga:?y*J~?OrMwP\](21sZUD ?ܟQ5Q%ggW6QdO+\@ ̪X'GxN @'4=ˋ+*VwN ne_|(/BDfj5(Dq<*tNt1х!MV.C0 32b#?n0pzj#!38}޴o1KovCJ`8ŗ_"]] rDUy޲@ Ȗ-;xџ'^Y`zEd?0„ DAL18IS]VGq\4o !swV7ˣι%4FѮ~}6)OgS[~Q vcYbL!wG3 7띸*E Pql8=jT\꘿I(z<[6OrR8ºC~ډ]=rNl[g|v TMTղb-o}OrP^Q]<98S¤!k)G(Vkwyqyr޽Nv`N/e p/~NAOk \I:G6]4+K;j$R:Mi #*[AȚT,ʰ,;N{HZTGMoּy) ]%dHء9Պ䠬|<45,\=[bƟ8QXeB3- &dҩ^{>/86bXmZ]]yޚN[(WAHL$YAgDKp=5GHjU&99v簪C0vygln*P)9^͞}lMuiH!̍#DoRBn9l@ xA/_v=ȺT{7Yt2N"4!YN`ae >Q<XMydEB`VU}u]嫇.%e^ánE87Mu\t`cP=AD/G)sI"@MP;)]%fH9'FNsj1pVhY&9=0pfuJ&gޤx+k:!r˭wkl03׼Ku C &ѓYt{.O.zҏ z}/tf_wEp2gvX)GN#I ݭ߽v/ .& и(ZF{e"=V!{zW`, ]+LGz"(UJp|j( #V4, 8B 0 9OkRrlɱl94)'VH9=9W|>PS['G(*I1==C<5"Pg+x'K5EMd؞Af8lG ?D FtoB[je?{k3zQ vZ;%Ɠ,]E>KZ+T/ EJxOZ1i #T<@ I}q9/t'zi(EMqw`mYkU6;[t4DPeckeM;H}_g pMww}k6#H㶏+b8雡Sxp)&C $@'b,fPߑt$RbJ'vznuS ~8='72_`{q纶|Q)Xk}cPz9p7O:'|G~8wx(a 0QCko|0ASD>Ip=4Q, d|F8RcU"/KM opKle M3#i0c%<7׿p&pZq[TR"BpqauIp$ 8~Ĩ!8Սx\ւdT>>Z40ks7 z2IQ}ItԀ<-%S⍤};zIb$I 5K}Q͙D8UguWE$Jh )cu4N tZl+[]M4k8֦Zeq֮M7uIqG 1==tLtR,ƜSrHYt&QP윯Lg' I,3@P'}'R˪e/%-Auv·ñ\> vDJzlӾNv5:|K/Jb6KI9)Zh*ZAi`?S {aiVDԲuy5W7pWeQJk֤#5&V<̺@/GH?^τZL|IJNvI:'P=Ϛt"¨=cud S Q.Ki0 !cJy;LJR;G{BJy޺[^8fK6)=yʊ+(k|&xQ2`L?Ȓ2@Mf 0C`6-%pKpm')c$׻K5[J*U[/#hH!6acB JA _|uMvDyk y)6OPYjœ50VT K}cǻP[ $:]4MEA.y)|B)cf-A?(e|lɉ#P9V)[9t.EiQPDѠ3ϴ;E:+Օ t ȥ~|_N2,ZJLt4! %ա]u {+=p.GhNcŞQI?Nd'yeh n7zi1DB)1S | S#ًZs2|Ɛy$F SxeX{7Vl.Src3E℃Q>b6G ўYCmtկ~=K0f(=LrAS GN'ɹ9<\!a`)֕y[uՍ[09` 9 +57ts6}b4{oqd+J5fa/,97J#6yν99mRWxJyѡyu_TJc`~W>l^q#Ts#2"nD1%fS)FU w{ܯ R{ ˎ󅃏џDsZSQS;LV;7 Od1&1n$ N /.q3~eNɪ]E#oM~}v֯FڦwyZ=<<>Xo稯lfMFV6p02|*=tV!c~]fa5Y^Q_WN|Vs 0ҘދU97OI'N2'8N֭fgg-}V%y]U4 峧p*91#9U kCac_AFңĪy뚇Y_AiuYyTTYЗ-(!JFLt›17uTozc. S;7A&&<ԋ5y;Ro+:' *eYJkWR[@F %SHWP 72k4 qLd'J "zB6{AC0ƁA6U.'F3:Ȅ(9ΜL;D]m8ڥ9}dU "v!;*13Rg^fJyShyy5auA?ɩGHRjo^]׽S)Fm\toy 4WQS@mE#%5ʈfFYDX ~D5Ϡ9tE9So_aU4?Ѽm%&c{n>.KW1Tlb}:j uGi(JgcYj0qn+>) %\!4{LaJso d||u//P_y7iRJ߬nHOy) l+@$($VFIQ9%EeKʈU. ia&FY̒mZ=)+qqoQn >L!qCiDB;Y<%} OgBxB!ØuG)WG9y(Ą{_yesuZmZZey'Wg#C~1Cev@0D $a@˲(.._GimA:uyw֬%;@!JkQVM_Ow:P.s\)ot- ˹"`B,e CRtaEUP<0'}r3[>?G8xU~Nqu;Wm8\RIkբ^5@k+5(By'L&'gBJ3ݶ!/㮻w҅ yqPWUg<e"Qy*167΃sJ\oz]T*UQ<\FԎ`HaNmڜ6DysCask8wP8y9``GJ9lF\G g's Nn͵MLN֪u$| /|7=]O)6s !ĴAKh]q_ap $HH'\1jB^s\|- W1:=6lJBqjY^LsPk""`]w)󭃈,(HC ?䔨Y$Sʣ{4Z+0NvQkhol6C.婧/u]FwiVjZka&%6\F*Ny#8O,22+|Db~d ~Çwc N:FuuCe&oZ(l;@ee-+Wn`44AMK➝2BRՈt7g*1gph9N) *"TF*R(#'88pm=}X]u[i7bEc|\~EMn}P瘊J)K.0i1M6=7'_\kaZ(Th{K*GJyytw"IO-PWJk)..axӝ47"89Cc7ĐBiZx 7m!fy|ϿF9CbȩV 9V-՛^pV̌ɄS#Bv4-@]Vxt-Z, &ֺ*diؠ2^VXbs֔Ìl.jQ]Y[47gj=幽ex)A0ip׳ W2[ᎇhuE^~q흙L} #-b۸oFJ_QP3r6jr+"nfzRJTUqoaۍ /$d8Mx'ݓ= OՃ| )$2mcM*cЙj}f };n YG w0Ia!1Q.oYfr]DyISaP}"dIӗթO67jqR ҊƐƈaɤGG|h;t]䗖oSv|iZqX)oalv;۩meEJ\!8=$4QU4Xo&VEĊ YS^E#d,yX_> ۘ-e\ "Wa6uLĜZi`aD9.% w~mB(02G[6y.773a7 /=o7D)$Z 66 $bY^\CuP. (x'"J60׿Y:Oi;F{w佩b+\Yi`TDWa~|VH)8q/=9!g߆2Y)?ND)%?Ǐ`k/sn:;O299yB=a[Ng 3˲N}vLNy;*?x?~L&=xyӴ~}q{qE*IQ^^ͧvü{Huu=R|>JyUlZV, B~/YF!Y\u_ݼF{_C)LD]m {H 0ihhadd nUkf3oٺCvE\)QJi+֥@tDJkB$1!Đr0XQ|q?d2) Ӣ_}qv-< FŊ߫%roppVBwü~JidY4:}L6M7f٬F "?71<2#?Jyy4뷢<_a7_=Q E=S1И/9{+93֮E{ǂw{))?maÆm(uLE#lïZ  ~d];+]h j?!|$F}*"4(v'8s<ŏUkm7^7no1w2ؗ}TrͿEk>p'8OB7d7R(A 9.*Mi^ͳ; eeUwS+C)uO@ =Sy]` }l8^ZzRXj[^iUɺ$tj))<sbDJfg=Pk_{xaKo1:-uyG0M ԃ\0Lvuy'ȱc2Ji AdyVgVh!{]/&}}ċJ#%d !+87<;qN޼Nفl|1N:8ya  8}k¾+-$4FiZYÔXk*I&'@iI99)HSh4+2G:tGhS^繿 Kتm0 вDk}֚+QT4;sC}rՅE,8CX-e~>G&'9xpW,%Fh,Ry56Y–hW-(v_,? ; qrBk4-V7HQ;ˇ^Gv1JVV%,ik;D_W!))+BoS4QsTM;gt+ndS-~:11Sgv!0qRVh!"Ȋ(̦Yl.]PQWgٳE'`%W1{ndΗBk|Ž7ʒR~,lnoa&:ü$ 3<a[CBݮwt"o\ePJ=Hz"_c^Z.#ˆ*x z̝grY]tdkP*:97YľXyBkD4N.C_[;F9`8& !AMO c `@BA& Ost\-\NX+Xp < !bj3C&QL+*&kAQ=04}cC!9~820G'PC9xa!w&bo_1 Sw"ܱ V )Yl3+ס2KoXOx]"`^WOy :3GO0g;%Yv㐫(R/r (s } u B &FeYZh0y> =2<Ϟc/ -u= c&׭,.0"g"7 6T!vl#sc>{u/Oh Bᾈ)۴74]x7 gMӒ"d]U)}" v4co[ ɡs 5Gg=XR14?5A}D "b{0$L .\4y{_fe:kVS\\O]c^W52LSBDM! C3Dhr̦RtArx4&agaN3Cf<Ԉp4~ B'"1@.b_/xQ} _߃҉/gٓ2Qkqp0շpZ2fԫYz< 4L.Cyυι1t@鎫Fe sYfsF}^ V}N<_`p)alٶ "(XEAVZ<)2},:Ir*#m_YӼ R%a||EƼIJ,,+f"96r/}0jE/)s)cjW#w'Sʯ5<66lj$a~3Kʛy 2:cZ:Yh))+a߭K::N,Q F'qB]={.]h85C9cr=}*rk?vwV렵ٸW Rs%}rNAkDv|uFLBkWY YkX מ|)1!$#3%y?pF<@<Rr0}: }\J [5FRxY<9"SQdE(Q*Qʻ)q1E0B_O24[U'],lOb ]~WjHޏTQ5Syu wq)xnw8~)c 쫬gٲߠ H% k5dƝk> kEj,0% b"vi2Wس_CuK)K{n|>t{P1򨾜j>'kEkƗBg*H%'_aY6Bn!TL&ɌOb{c`'d^{t\i^[uɐ[}q0lM˕G:‚4kb祔c^:?bpg… +37stH:0}en6x˟%/<]BL&* 5&fK9Mq)/iyqtA%kUe[ڛKN]Ě^,"`/ s[EQQm?|XJ߅92m]G.E΃ח U*Cn.j_)Tѧj̿30ڇ!A0=͜ar I3$C^-9#|pk!)?7.x9 @OO;WƝZBFU keZ75F6Tc6"ZȚs2y/1 ʵ:u4xa`C>6Rb/Yм)^=+~uRd`/|_8xbB0?Ft||Z\##|K 0>>zxv8۴吅q 8ĥ)"6>~\8:qM}#͚'ĉ#p\׶ l#bA?)|g g9|8jP(cr,BwV (WliVxxᡁ@0Okn;ɥh$_ckCgriv}>=wGzβ KkBɛ[˪ !J)h&k2%07δt}!d<9;I&0wV/ v 0<H}L&8ob%Hi|޶o&h1L|u֦y~󛱢8fٲUsւ)0oiFx2}X[zVYr_;N(w]_4B@OanC?gĦx>мgx>ΛToZoOMp>40>V Oy V9iq!4 LN,ˢu{jsz]|"R޻&'ƚ{53ўFu(<٪9:΋]B;)B>1::8;~)Yt|0(pw2N%&X,URBK)3\zz&}ax4;ǟ(tLNg{N|Ǽ\G#C9g$^\}p?556]/RP.90 k,U8/u776s ʪ_01چ|\N 0VV*3H鴃J7iI!wG_^ypl}r*jɤSR 5QN@ iZ#1ٰy;_\3\BQQ x:WJv츟ٯ$"@6 S#qe딇(/P( Dy~TOϻ<4:-+F`0||;Xl-"uw$Цi󼕝mKʩorz"mϺ$F:~E'ҐvD\y?Rr8_He@ e~O,T.(ފR*cY^m|cVR[8 JҡSm!ΆԨb)RHG{?MpqrmN>߶Y)\p,d#xۆWY*,l6]v0h15M˙MS8+EdI='LBJIH7_9{Caз*Lq,dt >+~ّeʏ?xԕ4bBAŚjﵫ!'\Ը$WNvKO}ӽmSşذqsOy?\[,d@'73'j%kOe`1.g2"e =YIzS2|zŐƄa\U,dP;jhhhaxǶ?КZ՚.q SE+XrbOu%\GتX(H,N^~]JyEZQKceTQ]VGYqnah;y$cQahT&QPZ*iZ8UQQM.qo/T\7X"u?Mttl2Xq(IoW{R^ ux*SYJ! 4S.Jy~ BROS[V|žKNɛP(L6V^|cR7i7nZW1Fd@ Ara{詑|(T*dN]Ko?s=@ |_EvF]׍kR)eBJc" MUUbY6`~V޴dJKß&~'d3i WWWWWW
Current Directory: /usr/lib64/python2.7/site-packages/dns
Viewing File: /usr/lib64/python2.7/site-packages/dns/message.pyo
� ;�>Sc @sGdZddlZddlZddlZddlZddlZddlZddlZddl Zddl Zddl Zddl Zddl ZddlZddlZddlZddlZddlZddlZddlZdejjfd��YZdejjfd��YZdejjfd��YZd ejjfd ��YZd ejjfd ��YZd ejjfd��YZdefd��YZdefd��YZ e!de"e!e!e"e#e"e"e"d� Z$defd��YZ%d�Z&d�Z'ej(j)e!e"dde!e!d�Z*e"ddd�Z+dS(s DNS Messagesi����Nt ShortHeadercBseZdZRS(s<Raised if the DNS packet passed to from_wire() is too short.(t__name__t __module__t__doc__(((s1/usr/lib64/python2.7/site-packages/dns/message.pyR'st TrailingJunkcBseZdZRS(sSRaised if the DNS packet passed to from_wire() has extra junk at the end of it.(RRR(((s1/usr/lib64/python2.7/site-packages/dns/message.pyR+stUnknownHeaderFieldcBseZdZRS(s]Raised if a header field name is not recognized when converting from text into a message.(RRR(((s1/usr/lib64/python2.7/site-packages/dns/message.pyR0stBadEDNScBseZdZRS(saRaised if an OPT record occurs somewhere other than the start of the additional data section.(RRR(((s1/usr/lib64/python2.7/site-packages/dns/message.pyR5stBadTSIGcBseZdZRS(s_Raised if a TSIG record occurs somewhere other than the end of the additional data section.(RRR(((s1/usr/lib64/python2.7/site-packages/dns/message.pyR:stUnknownTSIGKeycBseZdZRS(s/Raised if we got a TSIG but don't know the key.(RRR(((s1/usr/lib64/python2.7/site-packages/dns/message.pyR?stMessagecBs eZdZdd�Zd�Zd�Zded�Zd�Z d�Z d�Z d�Z e jjdeed �Ze jjdeed �Zdd d �Zdd dd de jjd�Zd d dddd�Zed�Zd�Zd�Zd�Zd�ZRS(s, A DNS message. @ivar id: The query id; the default is a randomly chosen id. @type id: int @ivar flags: The DNS flags of the message. @see: RFC 1035 for an explanation of these flags. @type flags: int @ivar question: The question section. @type question: list of dns.rrset.RRset objects @ivar answer: The answer section. @type answer: list of dns.rrset.RRset objects @ivar authority: The authority section. @type authority: list of dns.rrset.RRset objects @ivar additional: The additional data section. @type additional: list of dns.rrset.RRset objects @ivar edns: The EDNS level to use. The default is -1, no Edns. @type edns: int @ivar ednsflags: The EDNS flags @type ednsflags: long @ivar payload: The EDNS payload size. The default is 0. @type payload: int @ivar options: The EDNS options @type options: list of dns.edns.Option objects @ivar request_payload: The associated request's EDNS payload size. @type request_payload: int @ivar keyring: The TSIG keyring to use. The default is None. @type keyring: dict @ivar keyname: The TSIG keyname to use. The default is None. @type keyname: dns.name.Name object @ivar keyalgorithm: The TSIG algorithm to use; defaults to dns.tsig.default_algorithm. Constants for TSIG algorithms are defined in dns.tsig, and the currently implemented algorithms are HMAC_MD5, HMAC_SHA1, HMAC_SHA224, HMAC_SHA256, HMAC_SHA384, and HMAC_SHA512. @type keyalgorithm: string @ivar request_mac: The TSIG MAC of the request message associated with this message; used when validating TSIG signatures. @see: RFC 2845 for more information on TSIG fields. @type request_mac: string @ivar fudge: TSIG time fudge; default is 300 seconds. @type fudge: int @ivar original_id: TSIG original id; defaults to the message's id @type original_id: int @ivar tsig_error: TSIG error code; default is 0. @type tsig_error: int @ivar other_data: TSIG other data. @type other_data: string @ivar mac: The TSIG MAC for this message. @type mac: string @ivar xfr: Is the message being used to contain the results of a DNS zone transfer? The default is False. @type xfr: bool @ivar origin: The origin of the zone in messages which are used for zone transfers or for DNS dynamic updates. The default is None. @type origin: dns.name.Name object @ivar tsig_ctx: The TSIG signature context associated with this message. The default is None. @type tsig_ctx: hmac.HMAC object @ivar had_tsig: Did the message decoded from wire format have a TSIG signature? @type had_tsig: bool @ivar multi: Is this message part of a multi-message sequence? The default is false. This variable is used when validating TSIG signatures on messages which are part of a zone transfer. @type multi: bool @ivar first: Is this message standalone, or the first of a multi message sequence? This variable is used when validating TSIG signatures on messages which are part of a zone transfer. @type first: bool @ivar index: An index of rrsets in the message. The index key is (section, name, rdclass, rdtype, covers, deleting). Indexing can be disabled by setting the index to None. @type index: dict cCs!|dkr!tjj�|_n ||_d|_g|_g|_g|_g|_ d|_ d|_ d|_ g|_ d|_d|_d|_tjj|_d|_d|_d|_d|_|j|_d|_t|_d|_d|_t|_t|_t |_!i|_"dS(Nii����ti,(#tNonetdnstentropyt random_16tidtflagstquestiontanswert authorityt additionaltednst ednsflagstpayloadtoptionstrequest_payloadtkeyringtkeynamettsigtdefault_algorithmt keyalgorithmt request_mact other_datat tsig_errortfudget original_idtmactFalsetxfrtoriginttsig_ctxthad_tsigtmultitTruetfirsttindex(tselfR((s1/usr/lib64/python2.7/site-packages/dns/message.pyt__init__�s:                          cCsd|j dS(Ns<DNS message, ID t>(R(R.((s1/usr/lib64/python2.7/site-packages/dns/message.pyt__repr__�scCs |j�S(N(tto_text(R.((s1/usr/lib64/python2.7/site-packages/dns/message.pyt__str__�scKs5tj�}|d|jIJ|dtjjtjj|j��IJtjj|j|j �}|dtjj|�IJ|dtjj|j�IJ|j dkr�|d|j IJ|j dkr�|dtjj |j �IJn|dI|j IJntjj |j�}|r%|d IJn |d IJx*|jD]}||j|||�IJq9W|ro|d IJn |d IJx*|jD]}||j|||�IJq�W|r�|d IJn |dIJx*|jD]}||j|||�IJq�W|dIJx*|jD]}||j|||�IJqW|j�d S(s�Convert the message to text. The I{origin}, I{relativize}, and any other keyword arguments are passed to the rrset to_wire() method. @rtype: string sid %ds opcode %ssrcode %ssflags %sisedns %ss eflags %sRs;ZONEs ;QUESTIONs;PREREQs;ANSWERs;UPDATEs ;AUTHORITYs ;ADDITIONALi����(t cStringIOtStringIORR topcodeR2t from_flagsRtrcodeRRt edns_to_textRt is_updateRRRRtgetvalue(R.R't relativizetkwtstrcR:trrset((s1/usr/lib64/python2.7/site-packages/dns/message.pyR2�sB "       cCs-t|t�stS|j|jkr)tS|j|jkr?tSx$|jD]}||jkrItSqIWx$|jD]}||jkrptSqpWx$|jD]}||jkr�tSq�Wx$|jD]}||jkr�tSq�Wx$|jD]}||jkr�tSq�Wx$|jD]}||jkr tSq WtS(s�Two messages are equal if they have the same content in the header, question, answer, and authority sections. @rtype: bool( t isinstanceR R%RRRRRR+(R.tothertn((s1/usr/lib64/python2.7/site-packages/dns/message.pyt__eq__�s2cCs|j|� S(s0Are two messages not equal? @rtype: bool(RD(R.RB((s1/usr/lib64/python2.7/site-packages/dns/message.pyt__ne__scCs�|jtjj@dksU|j|jksUtjj|j�tjj|j�krYtStjj|j|j�tjj kr�t Stjj |j�r�t Sx$|j D]}||j kr�tSq�Wx$|j D]}||j kr�tSq�Wt S(s1Is other a response to self? @rtype: booli( RR tQRRR6R7R%R8RtNOERRORR+R:R(R.RBRC((s1/usr/lib64/python2.7/site-packages/dns/message.pyt is_response s"cCs\||jkrdS||jkr&dS||jkr9dS||jkrLdStd��dS(Niiiisunknown section(RRRRt ValueError(R.tsection((s1/usr/lib64/python2.7/site-packages/dns/message.pytsection_number sc Cs�|j|�|||||f} |s�|jdk r[|jj| �} | dk r�| Sq�x0|D]%} | j|||||�rb| SqbWn|s�t�ntjj|||||�} |j | �|jdk r�| |j| <n| S(sFind the RRset with the given attributes in the specified section. @param section: the section of the message to look in, e.g. self.answer. @type section: list of dns.rrset.RRset objects @param name: the name of the RRset @type name: dns.name.Name object @param rdclass: the class of the RRset @type rdclass: int @param rdtype: the type of the RRset @type rdtype: int @param covers: the covers value of the RRset @type covers: int @param deleting: the deleting value of the RRset @type deleting: int @param create: If True, create the RRset if it is not found. The created RRset is appended to I{section}. @type create: bool @param force_unique: If True and create is also True, create a new RRset regardless of whether a matching RRset exists already. @type force_unique: bool @raises KeyError: the RRset was not found and create was False @rtype: dns.rrset.RRset objectN( RKR-R tgettmatchtKeyErrorR R@tRRsettappend( R.RJtnametrdclasstrdtypetcoverstdeletingtcreatet force_uniquetkeyR@((s1/usr/lib64/python2.7/site-packages/dns/message.pyt find_rrset,s"      c CsFy(|j||||||||�} Wntk rAd} nX| S(sGet the RRset with the given attributes in the specified section. If the RRset is not found, None is returned. @param section: the section of the message to look in, e.g. self.answer. @type section: list of dns.rrset.RRset objects @param name: the name of the RRset @type name: dns.name.Name object @param rdclass: the class of the RRset @type rdclass: int @param rdtype: the type of the RRset @type rdtype: int @param covers: the covers value of the RRset @type covers: int @param deleting: the deleting value of the RRset @type deleting: int @param create: If True, create the RRset if it is not found. The created RRset is appended to I{section}. @type create: bool @param force_unique: If True and create is also True, create a new RRset regardless of whether a matching RRset exists already. @type force_unique: bool @rtype: dns.rrset.RRset object or NoneN(RYRNR ( R.RJRQRRRSRTRURVRWR@((s1/usr/lib64/python2.7/site-packages/dns/message.pyt get_rrsetZs   ic Ks�|dkr0|jdkr'|j}q0d}n|dkrEd}n|dkrZd}ntjj|j|j||�}x-|jD]"}|j|j|j |j �q�Wx*|j D]}|j tjj ||�q�Wx*|jD]}|j tjj||�q�W|jdkr9|j|j|j|j|j�nx*|jD]}|j tjj||�qCW|j�|jdk r�|j|j|j|j|j|j|j|j|j |j!�|j"|_"n|j#�S(s7Return a string containing the message in DNS compressed wire format. Additional keyword arguments are passed to the rrset to_wire() method. @param origin: The origin to be appended to any relative names. @type origin: dns.name.Name object @param max_size: The maximum size of the wire format output; default is 0, which means 'the message's request payload, if nonzero, or 65536'. @type max_size: int @raises dns.exception.TooBig: max_size was exceeded @rtype: string ii��iN($RR trenderertRendererRRRt add_questionRQRSRRRt add_rrsettANSWERRt AUTHORITYRtadd_ednsRRRRt ADDITIONALt write_headerRR tadd_tsigRR"R#R!R RRR$tget_wire(R.R'tmax_sizeR=trR@((s1/usr/lib64/python2.7/site-packages/dns/message.pytto_wire}s6       ! %   i,R cCs�||_|dkr.|jj�d|_n3t|ttf�rXtjj |�}n||_||_ ||_ |dkr�|j |_ n ||_ ||_||_dS(swWhen sending, a TSIG signature using the specified keyring and keyname should be added. @param keyring: The TSIG keyring to use; defaults to None. @type keyring: dict @param keyname: The name of the TSIG key to use; defaults to None. The key must be defined in the keyring. If a keyring is specified but a keyname is not, then the key used will be the first key in the keyring. Note that the order of keys in a dictionary is not defined, so applications should supply a keyname when a keyring is used, unless they know the keyring contains only one key. @type keyname: dns.name.Name or string @param fudge: TSIG time fudge; default is 300 seconds. @type fudge: int @param original_id: TSIG original id; defaults to the message's id @type original_id: int @param tsig_error: TSIG error code; default is 0. @type tsig_error: int @param other_data: TSIG other data. @type other_data: string @param algorithm: The TSIG algorithm to use; defaults to dns.tsig.default_algorithm iN(RR tkeysRRAtstrtunicodeR RQt from_textRR"RR#R!R (R.RRR"R#R!R t algorithm((s1/usr/lib64/python2.7/site-packages/dns/message.pytuse_tsig�s        icCs�|dks|tkr!d}n|tkr6d}n|dkrK|}n|dkrrd}d}d}g}n-|dM}||d>O}|dkr�g}n||_||_||_||_||_dS(s_Configure EDNS behavior. @param edns: The EDNS level to use. Specifying None, False, or -1 means 'do not use EDNS', and in this case the other parameters are ignored. Specifying True is equivalent to specifying 0, i.e. 'use EDNS0'. @type edns: int or bool or None @param ednsflags: EDNS flag values. @type ednsflags: int @param payload: The EDNS sender's payload field, which is the maximum size of UDP datagram the sender can handle. @type payload: int @param request_payload: The EDNS payload size to use when sending this message. If not specified, defaults to the value of payload. @type request_payload: int or None @param options: The EDNS options @type options: None or list of dns.edns.Option objects @see: RFC 2671 i����il�~iN(R R%R+RRRRR(R.RRRRR((s1/usr/lib64/python2.7/site-packages/dns/message.pytuse_edns�s(              cCsf|r:|jdkr"|j�n|jtjjO_n(|jdkrb|jtjjM_ndS(s Enable or disable 'DNSSEC desired' flag in requests. @param wanted: Is DNSSEC desired? If True, EDNS is enabled if required, and then the DO bit is set. If False, the DO bit is cleared if EDNS is enabled. @type wanted: bool iN(RRoRR RtDO(R.twanted((s1/usr/lib64/python2.7/site-packages/dns/message.pyt want_dnssecs  cCstjj|j|j�S(s.Return the rcode. @rtype: int (R R8R7RR(R.((s1/usr/lib64/python2.7/site-packages/dns/message.pyR8scCs�tjj|�\}}|jdM_|j|O_|jdM_|j|O_|jdkr~|jdkr~d|_ndS(sPSet the rcode. @param rcode: the rcode @type rcode: int i�l��iN(R R8tto_flagsRRR(R.R8tvaluetevalue((s1/usr/lib64/python2.7/site-packages/dns/message.pyt set_rcodescCstjj|j�S(s/Return the opcode. @rtype: int (R R6R7R(R.((s1/usr/lib64/python2.7/site-packages/dns/message.pyR6!scCs.|jdM_|jtjj|�O_dS(sTSet the opcode. @param opcode: the opcode @type opcode: int i��N(RR R6Rs(R.R6((s1/usr/lib64/python2.7/site-packages/dns/message.pyt set_opcode'sN(RRRR R/R1R3R+R2RDRERHRKR t rdatatypetNONER%RYRZRhRRRnRoRrR8RvR6Rw(((s1/usr/lib64/python2.7/site-packages/dns/message.pyR Cs.J  3     - !. )*   t _WireReadercBs;eZdZeeed�Zd�Zd�Zd�ZRS(s�Wire format reader. @ivar wire: the wire-format message. @type wire: string @ivar message: The message object being built @type message: dns.message.Message object @ivar current: When building a message object from wire format, this variable contains the offset from the beginning of wire of the next octet to be read. @type current: int @ivar updating: Is the message a dynamic update? @type updating: bool @ivar one_rr_per_rrset: Put each RR into its own RRset? @type one_rr_per_rrset: bool @ivar ignore_trailing: Ignore trailing junk at end of request? @type ignore_trailing: bool @ivar zone_rdclass: The class of the zone in messages which are DNS dynamic updates. @type zone_rdclass: int cCs^tjj|�|_||_d|_t|_tjj |_ ||_ ||_ ||_ dS(Ni(R twiredatat maybe_wraptwiretmessagetcurrentR%tupdatingt rdataclasstINt zone_rdclasst question_onlytone_rr_per_rrsettignore_trailing(R.R}R~R�R�R�((s1/usr/lib64/python2.7/site-packages/dns/message.pyR/Es     c Cs|jr$|dkr$tjj�nx�td|�D]�}tjj|j|j�\}}|j j dk r�|j |j j �}n|j||_t jd|j|j|jd!�\}}|jd|_|j j|j j|||dtdt�|jr4||_q4q4WdS(s�Read the next I{qcount} records from the wire data and add them to the question section. @param qcount: the number of questions in the message @type qcount: intiis!HHiRVRWN(R�R t exceptiont FormErrortxrangeRQt from_wireR}RR~R'R R<tstructtunpackRYRR+R�(R.tqcounttitqnametusedRSRR((s1/usr/lib64/python2.7/site-packages/dns/message.pyt _get_questionPs! # cCs�|js|jrt}nt}t}xjtd|�D]Y}|j}tjj|j |j�\}}|} |j j d k r�|j |j j �}n|j||_tjd|j |j|jd!�\} } } } |jd|_| tjjkr�||j jk s|rt�n| |j _| |j _| d@d?|j _g|j _|j}| }x�|dkr�tjd|j ||d!�\}}|d}tjj||j ||�}|j jj|�||}|d|}qfWt}n�| tjjkr5||j jko)||dks5t�n|j jd krVtd ��n|j jj| �}|d kr�td |��n| |j _tj j!|j |j| �\|j _"|j _#tj j$|j | |t%t&j&��|j j'||j| |j j(|j j)|j j*� |j _(t|j _+nK| dkrJd} n|jr�| tj,j-ksw| tj,j.kr�| }|j/} nd }|tj,j-ks�|tj,j.kr�||j j0kr�tjj.}d }n9tj1j| | |j |j| |j j �}|j2�}|j j3r:| tjj4kr:t}n|j j5||| | ||t|�}|d k r�|j6|| �n|j| |_q7Wd S( s/Read the next I{count} records from the wire data and add them to the specified section. @param section: the section of the message to which to add records @type section: list of dns.rrset.RRset objects @param count: the number of records to read @type count: intis!HHIHi i�is!HHiis"got signed message without keyringskey '%s' unknownN(7R�R�R+R%R�RR RQR�R}R~R'R R<R�R�RxtOPTRRRRRRtoption_from_wireRPtTSIGRRRRLRRtget_algorithm_and_macRR$tvalidatetintttimeRR(R*R,R)R�tANYRyR�RtrdataRTR&tSOARYtadd(R.RJtcountRWtseen_optR�trr_startRQR�t absolute_nameRSRRtttltrdlenRtoptslentotypetolentopttsecretRURTtrdR@((s1/usr/lib64/python2.7/site-packages/dns/message.pyt _get_sectionhs�  ! )                          cCsHt|j�}|dkr$t�ntjd|jd �\|j_|j_}}}}d|_t j j |jj�r�t |_ n|j|�|jr�dS|j|jj|�|j|jj|�|j|jj|�|j r|j|krt�n|jjrD|jjrD|jj rD|jjj|j�ndS(sNRead a wire format DNS message and build a dns.message.Message object.i s!HHHHHHN(tlenR}RR�R�R~RRRR R6R:R+R�R�R�R�RRRR�RR*R(R)tupdate(R.tlR�tancounttaucounttadcount((s1/usr/lib64/python2.7/site-packages/dns/message.pytread�s$  7      (RRRR%R/R�R�R�(((s1/usr/lib64/python2.7/site-packages/dns/message.pyRz/s   bR c Csttdd�} || _|| _|| _|| _|| _|| _|| _t|| || | �} | j �| S(s)Convert a DNS wire format message into a message object. @param keyring: The keyring to use if the message is signed. @type keyring: dict @param request_mac: If the message is a response to a TSIG-signed request, I{request_mac} should be set to the MAC of that request. @type request_mac: string @param xfr: Is this message part of a zone transfer? @type xfr: bool @param origin: If the message is part of a zone transfer, I{origin} should be the origin name of the zone. @type origin: dns.name.Name object @param tsig_ctx: The ongoing TSIG context, used when validating zone transfers. @type tsig_ctx: hmac.HMAC object @param multi: Is this message part of a multiple message sequence? @type multi: bool @param first: Is this message standalone, or the first of a multi message sequence? @type first: bool @param question_only: Read only up to the end of the question section? @type question_only: bool @param one_rr_per_rrset: Put each RR into its own RRset @type one_rr_per_rrset: bool @param ignore_trailing: Ignore trailing junk at end of request? @type ignore_trailing: bool @raises ShortHeader: The message is less than 12 octets long. @raises TrailingJunk: There were octets in the message past the end of the proper DNS message. @raises BadEDNS: An OPT record was in the wrong section, or occurred more than once. @raises BadTSIG: A TSIG record was not the last record of the additional data section. @rtype: dns.message.Message objectRi( R RRR&R'R(R*R,RzR�( R}RRR&R'R(R*R,R�R�R�tmtreader((s1/usr/lib64/python2.7/site-packages/dns/message.pyR��s(         t _TextReadercBs;eZdZd�Zd�Zd�Zd�Zd�ZRS(sText format reader. @ivar tok: the tokenizer @type tok: dns.tokenizer.Tokenizer object @ivar message: The message object being built @type message: dns.message.Message object @ivar updating: Is the message a dynamic update? @type updating: bool @ivar zone_rdclass: The class of the zone in messages which are DNS dynamic updates. @type zone_rdclass: int @ivar last_name: The most recently read name when building a message object from text format. @type last_name: dns.name.Name object cCsC||_tjj|�|_d|_tjj|_ t |_ dS(N( R~R t tokenizert TokenizerttokR t last_nameR�R�R�R%R�(R.ttextR~((s1/usr/lib64/python2.7/site-packages/dns/message.pyR/,s   cCs�|jj�}|j}|dkr<|jj�|j_n:|dkr�x^tr�|jj�}|j�s�|jj|�Pn|jj t j j |j�B|j_ qKWt j j |jj �rvt|_qvn�|dkr|jj�|j_|jj|jjd>B|j_nb|dkr�|jjdkrAd|j_nx2tr�|jj�}|j�sy|jj|�Pn|jjt j j|j�B|j_qDWn�|dkr�|jj�|j_|jjdkrvd|j_qvn�|dkr6|jj�}|jj t j jt j j |��B|j_ n@|d krp|jj�}|jjt jj |��nt�|jj�d S( s5Process one line from the text format header section.RRRiteflagsiRR6R8N(R�RLRttget_intR~RR+t is_identifiertungetRR RlR6R:R�RRtedns_from_textRt get_stringRsRvR8Rtget_eol(R.RJttokentwhatR�((s1/usr/lib64/python2.7/site-packages/dns/message.pyt _header_line3sR             #   ( c CsS|jjdt�}|j�s?tjj|jd�|_ n|j }|jj�}|j �srtj j �nyCtj j|j�}|jj�}|j �s�tj j �nWn5tj j k r�tj j �ntj j}nXtjj|j�}|jj|jj|||dtdt�|jrB||_n|jj�dS(s7Process one line from the text format question section.t want_leadingRVRWN(R�RLR+t is_whitespaceR RQRlRtR R�R�R�t SyntaxErrorR�R�RxR~RYRR�R�R�(R.RJR�RQRRRS((s1/usr/lib64/python2.7/site-packages/dns/message.pyt_question_lineas.      c Csgd}|jjdt�}|j�sEtjj|jd�|_ n|j }|jj�}|j �sxtj j �ny@t |jd�}|jj�}|j �s�tj j �nWn/tj j k r�tj j �n d}nXyytjj|j�}|jj�}|j �s,tj j �n|tjjksP|tjjkrb|}|j}nWn5tj j k r�tj j �ntjj}nXtjj|j�}|jj�}|j�s|jj|�tjj|||jd�}|j�} nd}tjj} |jj||||| |t|j�} |dk rc| j||�ndS(sfProcess one line from the text format answer, authority, or additional data sections. R�iN(R R�RLR+R�R RQRlRtR�R�R�R�R�R�R�RyR�R�Rxt is_eol_or_eofR�R�RTR~RYR�R�( R.RJRUR�RQR�RRRSR�RTR@((s1/usr/lib64/python2.7/site-packages/dns/message.pyt_rr_line~sT      $    cCsR|j}d }x<|jjtt�}|j�r7Pn|j�r1|jj�}|dkrj|j}n�|dks�|dkr�|j }|j j }n�|dks�|dkr�|j }|j j }nT|dks�|dkr�|j }|j j}n$|dkr|j }|j j}n|jj�qn|jj|�||�qd S( sNRead a text format DNS message and build a dns.message.Message object.tHEADERtQUESTIONtZONER_tPREREQR`tUPDATERbN(R�R R�RLR+R�t is_commentRttupperR�R~RR�RRRR�R�(R.t line_methodRJR�tu((s1/usr/lib64/python2.7/site-packages/dns/message.pyR��s4           (RRRR/R�R�R�R�(((s1/usr/lib64/python2.7/site-packages/dns/message.pyR�s   .  5cCs&t�}t||�}|j�|S(s�Convert the text format message into a message object. @param text: The text format message. @type text: string @raises UnknownHeaderField: @raises dns.exception.SyntaxError: @rtype: dns.message.Message object(R R�R�(R�R�R�((s1/usr/lib64/python2.7/site-packages/dns/message.pyRl�s  cCs�tjdkrt}d}n t}d}t||�rQt||�}t}nt}zt|�}Wd|r}|j �nX|S(sRead the next text format message from the specified file. @param f: file or string. If I{f} is a string, it is treated as the name of a file to open. @raises UnknownHeaderField: @raises dns.exception.SyntaxError: @rtype: dns.message.Message objectitrURgN( tsyst hexversiont basestringRjRAtfileR+R%Rltclose(tftstr_typetoptst want_closeR�((s1/usr/lib64/python2.7/site-packages/dns/message.pyt from_file�s   iic Cs�t|ttf�r*tjj|�}nt|ttf�rTtjj|�}nt|ttf�r~tjj|�}nt�} | j tj j O_ | j | j |||dt dt �| j|||||�| j|�| S(sWMake a query message. The query name, type, and class may all be specified either as objects of the appropriate type, or as strings. The query will have a randomly choosen query id, and its DNS flags will be set to dns.flags.RD. @param qname: The query name. @type qname: dns.name.Name object or string @param rdtype: The desired rdata type. @type rdtype: int @param rdclass: The desired rdata class; the default is class IN. @type rdclass: int @param use_edns: The EDNS level to use; the default is None (no EDNS). See the description of dns.message.Message.use_edns() for the possible values for use_edns and their meanings. @type use_edns: int or bool or None @param want_dnssec: Should the query indicate that DNSSEC is desired? @type want_dnssec: bool @param ednsflags: EDNS flag values. @type ednsflags: int @param payload: The EDNS sender's payload field, which is the maximum size of UDP datagram the sender can handle. @type payload: int @param request_payload: The EDNS payload size to use when sending this message. If not specified, defaults to the value of payload. @type request_payload: int or None @param options: The EDNS options @type options: None or list of dns.edns.Option objects @see: RFC 2671 @rtype: dns.message.Message objectRVRW(RARjRkR RQRlRxR�R RtRDRYRR+RoRr( R�RSRRRoRrRRRRR�((s1/usr/lib64/python2.7/site-packages/dns/message.pyt make_querys$  i i,cCs|jtjj@r(tjjd��ntjj|j�}tjj|jtjj@B|_|r{|jtjj O_n|j |j ��t |j �|_ |jdkr�|jdd||j�n|jr |j|j|j|ddd|j�|j|_n|S(s Make a message which is a response for the specified query. The message returned is really a response skeleton; it has all of the infrastructure required of a response, but none of the content. The response's question section is a shallow copy of the query's question section, so the query's question RRsets should not be changed. @param query: the query to respond to @type query: dns.message.Message object @param recursion_available: should RA be set in the response? @type recursion_available: bool @param our_payload: payload size to advertise in EDNS responses; default is 8192. @type our_payload: int @param fudge: TSIG time fudge; default is 300 seconds. @type fudge: int @rtype: dns.message.Message objects&specified query message is not a queryiR N(RR RFR�R�R~R RR�tRARwR6tlistRRRoRR)RnRRR RR$R(tquerytrecursion_availablet our_payloadR"tresponse((s1/usr/lib64/python2.7/site-packages/dns/message.pyt make_response6s   (,RR4trandomR�R�R�tdns.ednsR t dns.exceptiont dns.flagstdns.namet dns.opcodet dns.entropyt dns.rcodet dns.rdatatdns.rdataclasst dns.rdatatypet dns.rrsett dns.renderertdns.tsigt dns.wiredataR�R�RRt DNSExceptionRRRRtobjectR RzR R%R+R�R�RlR�R�R�R�R�(((s1/usr/lib64/python2.7/site-packages/dns/message.pyt<module>sP                   ���   5�    0