zmc
2023-12-22 9fdbf60165db0400c2e8e6be2dc6e88138ac719a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
U
£ý°d-sã@sèdZdZddlZddlmZdZe Zdd„Zdd    „Zd
d „Z    d d „Z
dd„Z dd„Z e
eƒZ ZZe
eƒZZe eejƒZZe dƒZZZe dƒZZZe dƒZdd„Zdd„Zdd„Zdd„Zdd„Z dd „Z!d!d"„Z"d#d$„Z#e"ƒZ$e#ƒZ%d%d&„Z&d'd(„Z'd)d*„Z(d+d,„Z)d-d.„Z*d/d0„Z+e(ej,e%eƒZ-Z.Z/e(ej,e$eƒZ0Z1e)ej,e$eejƒZ2Z3e*ej4d1ƒZ5e*ej6d2ƒZ7e*ej4d3ƒZ8e*ej6d4ƒZ9e+ej4d5ƒZ:e+ej6d6ƒZ;d7d8„Z<d9d:„Z=d;d<„Z>d=d>„Z?d?d@„Z@dAdB„ZAdCdD„ZBdS)Ea­Code for encoding protocol message primitives.
 
Contains the logic for encoding every logical protocol field type
into one of the 5 physical wire types.
 
This code is designed to push the Python interpreter's performance to the
limits.
 
The basic idea is that at startup time, for every field (i.e. every
FieldDescriptor) we construct two functions:  a "sizer" and an "encoder".  The
sizer takes a value of this field's type and computes its byte size.  The
encoder takes a writer function and a value.  It encodes the value into byte
strings and invokes the writer function to write those strings.  Typically the
writer function is the write() method of a BytesIO.
 
We try to do as much work as possible when constructing the writer and the
sizer rather than when calling them.  In particular:
* We copy any needed global functions to local variables, so that we do not need
  to do costly global table lookups at runtime.
* Similarly, we try to do any attribute lookups at startup time if possible.
* Every field's tag is encoded to bytes at startup, since it can't change at
  runtime.
* Whatever component of the field size we can compute at startup, we do.
* We *avoid* sharing code if doing so would make the code slower and not sharing
  does not burden us too much.  For example, encoders for repeated fields do
  not just call the encoders for singular fields in a loop because this would
  add an extra function call overhead for every loop iteration; instead, we
  manually inline the single-value encoder into the loop.
* If a Python function lacks a return statement, Python actually generates
  instructions to pop the result of the last statement off the stack, push
  None onto the stack, and then return that.  If we really don't care what
  value is returned, then we can save two instructions by returning the
  result of the last statement.  It looks funny but it helps.
* We assume that type and bounds checking has happened at a higher level.
z kenton@google.com (Kenton Varda)éN)Ú wire_formatgðcCsp|dkr dS|dkrdS|dkr$dS|dkr0dS|d    kr<d
S|d krHd S|d krTdS|dkr`dS|dkrldSdS)z#Compute the size of a varint value.éééÿ?ééÿÿééÿÿÿéìÿÿéìÿÿÿéìÿÿÿéìÿÿÿÿéìÿÿÿÿé    é
©©ÚvaluerrúWd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\google/protobuf/internal/encoder.pyÚ _VarintSizePs&rcCs||dkr dS|dkrdS|dkr$dS|dkr0dS|d    kr<d
S|d krHd S|d krTdS|dkr`dS|dkrldS|dkrxdSdS)z*Compute the size of a signed varint value.rrrrrrrrr    r
r r r rrrrrrrrrrrrÚ_SignedVarintSize^s*rcCstt |d¡ƒS)zQReturns the number of bytes required to serialize a tag with this field
  number.r)rrÚPackTag)Ú field_numberrrrÚ_TagSizemsrcs‡fdd„}|S)z…A sizer which uses the function compute_value_size to compute the size of
  each value.  Typically compute_value_size is _VarintSize.csPt|ƒ‰|r$t‰‡‡‡fdd„}|S|r:‡‡fdd„}|S‡‡fdd„}|SdS)Ncs*d}|D]}|ˆ|ƒ7}q|ˆ|ƒˆS©Nrr©rÚresultÚelement)Úcompute_value_sizeÚlocal_VarintSizeÚtag_sizerrÚPackedFieldSize„sz<_SimpleSizer.<locals>.SpecificSizer.<locals>.PackedFieldSizecs&ˆt|ƒ}|D]}|ˆ|ƒ7}q|S©N©Úlenr ©r#r%rrÚRepeatedFieldSize‹s z>_SimpleSizer.<locals>.SpecificSizer.<locals>.RepeatedFieldSizecs ˆˆ|ƒSr'rrr*rrÚ    FieldSize’sz6_SimpleSizer.<locals>.SpecificSizer.<locals>.FieldSize©rr©rÚ is_repeatedÚ    is_packedr&r+r,©r#©r$r%rÚ SpecificSizer€sz#_SimpleSizer.<locals>.SpecificSizerr)r#r3rr1rÚ _SimpleSizer|s r4cs‡‡fdd„}|S)z‘Like SimpleSizer, but modify_value is invoked on each value before it is
  passed to compute_value_size.  modify_value is typically ZigZagEncode.csVt|ƒ‰|r&t‰‡‡‡‡fdd„}|S|r>‡‡‡fdd„}|S‡‡‡fdd„}|SdS)Ncs.d}|D]}|ˆˆ|ƒƒ7}q|ˆ|ƒˆSrrr )r#r$Ú modify_valuer%rrr&¡sz>_ModifiedSizer.<locals>.SpecificSizer.<locals>.PackedFieldSizecs*ˆt|ƒ}|D]}|ˆˆ|ƒƒ7}q|Sr'r(r ©r#r5r%rrr+¨s z@_ModifiedSizer.<locals>.SpecificSizer.<locals>.RepeatedFieldSizecsˆˆˆ|ƒƒSr'rrr6rrr,¯sz8_ModifiedSizer.<locals>.SpecificSizer.<locals>.FieldSizer-r.©r#r5r2rr3sz%_ModifiedSizer.<locals>.SpecificSizerr)r#r5r3rr7rÚ_ModifiedSizer™sr8cs‡fdd„}|S)zWLike _SimpleSizer except for a fixed-size field.  The input is the size
  of one value.cs\t|ƒ‰|r$t‰‡‡‡fdd„}|S|r@ˆˆ‰‡fdd„}|Sˆˆ‰‡fdd„}|SdS)Ncst|ƒˆ}|ˆ|ƒˆSr'r()rr!)r$r%Ú
value_sizerrr&¾s z;_FixedSizer.<locals>.SpecificSizer.<locals>.PackedFieldSizecs t|ƒˆSr'r(r)Ú element_sizerrr+Äsz=_FixedSizer.<locals>.SpecificSizer.<locals>.RepeatedFieldSizecsˆSr'rr)Ú
field_sizerrr,Ész5_FixedSizer.<locals>.SpecificSizer.<locals>.FieldSizer-r.©r9)r:r;r$r%rr3ºs  z"_FixedSizer.<locals>.SpecificSizerr)r9r3rr<rÚ _FixedSizer¶s r=r
rrcsHt|ƒ‰t‰t‰|rt‚|r0‡‡‡fdd„}|S‡‡‡fdd„}|SdS)z#Returns a sizer for a string field.cs8ˆt|ƒ}|D]"}ˆ| d¡ƒ}|ˆ|ƒ|7}q|S©Nzutf-8)r)Úencode©rr!r"Úl©r$Ú    local_lenr%rrr+ìs
 z&StringSizer.<locals>.RepeatedFieldSizecsˆ| d¡ƒ}ˆˆ|ƒ|Sr>©r?©rrArBrrr,ôszStringSizer.<locals>.FieldSizeN©rrr)ÚAssertionError©rr/r0r+r,rrBrÚ StringSizeräsrIcsHt|ƒ‰t‰t‰|rt‚|r0‡‡‡fdd„}|S‡‡‡fdd„}|SdS)z"Returns a sizer for a bytes field.cs2ˆt|ƒ}|D]}ˆ|ƒ}|ˆ|ƒ|7}q|Sr'r(r@rBrrr+s
 z%BytesSizer.<locals>.RepeatedFieldSizecsˆ|ƒ}ˆˆ|ƒ|Sr'rrErBrrr,
szBytesSizer.<locals>.FieldSizeNrFrHrrBrÚ
BytesSizerúsrJcs<t|ƒd‰|rt‚|r(‡fdd„}|S‡fdd„}|SdS)z"Returns a sizer for a group field.rcs&ˆt|ƒ}|D]}|| ¡7}q|Sr'©r)ÚByteSizer ©r%rrr+s z%GroupSizer.<locals>.RepeatedFieldSizecs ˆ| ¡Sr'©rLrrMrrr,szGroupSizer.<locals>.FieldSizeN)rrGrHrrMrÚ
GroupSizers   rOcs@t|ƒ‰t‰|rt‚|r*‡‡fdd„}|S‡‡fdd„}|SdS)z$Returns a sizer for a message field.cs2ˆt|ƒ}|D]}| ¡}|ˆ|ƒ|7}q|Sr'rKr@r2rrr+)s
 z'MessageSizer.<locals>.RepeatedFieldSizecs| ¡}ˆˆ|ƒ|Sr'rNrEr2rrr,1szMessageSizer.<locals>.FieldSizeN)rrrGrHrr2rÚ MessageSizer"srPcs:tdƒdtdƒt|ƒtdƒ‰t‰‡‡fdd„}|S)zìReturns a sizer for extensions of MessageSet.
 
  The message set message looks like this:
    message MessageSet {
      repeated group Item = 1 {
        required int32 type_id = 2;
        required string message = 3;
      }
    }
  rrrcs| ¡}ˆˆ|ƒ|Sr'rNrE©r$Z static_sizerrr,Jsz&MessageSetItemSizer.<locals>.FieldSizer-)rr,rrQrÚMessageSetItemSizer;s ÿrRcs(|j‰t|jddƒ‰‡‡‡fdd„}|S)z Returns a sizer for a map field.Fcs@d}|D]2}||}ˆj||d}|ˆ|ƒ7}ˆr| ¡q|S)Nr©Úkeyr)Ú_concrete_classrL)Z    map_valueÚtotalrTrÚ    entry_msg©Úis_message_mapZ message_sizerÚ message_typerrr,]s 
zMapSizer.<locals>.FieldSize)rZrPÚnumber)Úfield_descriptorrYr,rrXrÚMapSizerUsr]cst d¡j‰d‡fdd„    }|S)zBReturn an encoder for a basic varint value (does not include tag).ú>BNcsB|d@}|dL}|r6|ˆd|Bƒƒ|d@}|dL}q|ˆ|ƒƒS)Nrré€r©ÚwriterÚunused_deterministicÚbits©Zlocal_int2byterrÚ EncodeVarintws
z$_VarintEncoder.<locals>.EncodeVarint)N©ÚstructÚStructÚpack)rerrdrÚ_VarintEncoderrs     rjcst d¡j‰d‡fdd„    }|S)zKReturn an encoder for a basic signed varint value (does not include
  tag).r^NcsR|dkr|d7}|d@}|dL}|rF|ˆd|Bƒƒ|d@}|dL}q |ˆ|ƒƒS)Nrlrrr_rr`rdrrÚEncodeSignedVarint‰s
z0_SignedVarintEncoder.<locals>.EncodeSignedVarint)Nrf)rkrrdrÚ_SignedVarintEncoderƒs  rlcCsg}t|j|dƒd |¡S)z€Encode the given integer as a varint and return the bytes.  This is only
  called at startup time so it doesn't need to be fast.Tó)Ú _EncodeVarintÚappendÚjoin)rÚpiecesrrrÚ _VarintBytes›srrcCsttt ||¡ƒƒS)zCEncode the given tag and return the bytes.  Only called at startup.)Úbytesrrrr)rÚ    wire_typerrrÚTagBytes¤srucs‡‡‡fdd„}|S)a_Return a constructor for an encoder for fields of a particular type.
 
  Args:
      wire_type:  The field's wire type, for encoding tags.
      encode_value:  A function which encodes an individual value, e.g.
        _EncodeVarint().
      compute_value_size:  A function which computes the size of an individual
        value, e.g. _VarintSize().
  csj|r*t|tjƒ‰t‰‡‡‡‡fdd„}|S|rJt|ˆƒ‰‡‡fdd„}|St|ˆƒ‰‡‡fdd„}|SdS)NcsH|ˆƒd}|D]}|ˆ|ƒ7}qˆ|||ƒ|D]}ˆ|||ƒq2dSrr©rarÚ deterministicÚsizer")r#Ú encode_valueÚlocal_EncodeVarintÚ    tag_bytesrrÚEncodePackedField½s zB_SimpleEncoder.<locals>.SpecificEncoder.<locals>.EncodePackedFieldcs"|D]}|ˆƒˆ|||ƒqdSr'r©rarrwr"©ryr{rrÚEncodeRepeatedFieldÈszD_SimpleEncoder.<locals>.SpecificEncoder.<locals>.EncodeRepeatedFieldcs|ˆƒˆ|||ƒSr'r©rarrwr~rrÚ EncodeFieldÏsz<_SimpleEncoder.<locals>.SpecificEncoder.<locals>.EncodeField©rurÚWIRETYPE_LENGTH_DELIMITEDrn©rr/r0r|rr©r#ryrt©rzr{rÚSpecificEncoder¹s 
 
z'_SimpleEncoder.<locals>.SpecificEncoderr)rtryr#r‡rr…rÚ_SimpleEncoder®s rˆcs‡‡‡‡fdd„}|S)z“Like SimpleEncoder but additionally invokes modify_value on every value
  before passing it to encode_value.  Usually modify_value is ZigZagEncode.csp|r,t|tjƒ‰t‰‡‡‡‡‡fdd„}|S|rNt|ˆƒ‰‡‡‡fdd„}|St|ˆƒ‰‡‡‡fdd„}|SdS)NcsP|ˆƒd}|D]}|ˆˆ|ƒƒ7}qˆ|||ƒ|D]}ˆ|ˆ|ƒ|ƒq6dSrrrv)r#ryrzr5r{rrr|ßs zD_ModifiedEncoder.<locals>.SpecificEncoder.<locals>.EncodePackedFieldcs&|D]}|ˆƒˆ|ˆ|ƒ|ƒqdSr'rr}©ryr5r{rrrêszF_ModifiedEncoder.<locals>.SpecificEncoder.<locals>.EncodeRepeatedFieldcs|ˆƒˆ|ˆ|ƒ|ƒSr'rr€r‰rrrñsz>_ModifiedEncoder.<locals>.SpecificEncoder.<locals>.EncodeFieldr‚r„©r#ryr5rtr†rr‡Ûs 
 
z)_ModifiedEncoder.<locals>.SpecificEncoderr)rtryr#r5r‡rrŠrÚ_ModifiedEncoder×sr‹cst ˆ¡‰‡‡‡fdd„}|S)z¿Return a constructor for an encoder for a fixed-width field.
 
  Args:
      wire_type:  The field's wire type, for encoding tags.
      format:  The format string to pass to struct.pack().
  csztj‰|r2t|tjƒ‰t‰‡‡‡‡‡fdd„}|S|rVt|ˆƒ‰d‡‡‡fdd„    }|St|ˆƒ‰d‡‡‡fdd„    }|SdS)    Ncs8|ˆƒˆ|t|ƒˆ|ƒ|D]}|ˆˆ|ƒƒq dSr'r(r})ÚformatrzÚlocal_struct_packr{r9rrr|szF_StructPackEncoder.<locals>.SpecificEncoder.<locals>.EncodePackedFieldcs$|D]}|ˆƒ|ˆˆ|ƒƒqdSr'r©rarrbr"©rŒrr{rrrszH_StructPackEncoder.<locals>.SpecificEncoder.<locals>.EncodeRepeatedFieldcs|ˆƒ|ˆˆ|ƒƒSr'r©rarrbrrrrsz@_StructPackEncoder.<locals>.SpecificEncoder.<locals>.EncodeField)N)N©rgrirurrƒrnr„©rŒr9rt©rzrr{rr‡s 
 
z+_StructPackEncoder.<locals>.SpecificEncoder)rgÚcalcsize©rtrŒr‡rr’rÚ_StructPackEncoderùs
r–csPt ˆ¡‰ˆdkrdd„‰nˆdkr.dd„‰n tdˆƒ‚‡‡‡‡fdd„}|S)    aqReturn a constructor for an encoder for float fields.
 
  This is like StructPackEncoder, but catches errors that may be due to
  passing non-finite floating-point values to struct.pack, and makes a
  second attempt to encode those values.
 
  Args:
      wire_type:  The field's wire type, for encoding tags.
      format:  The format string to pass to struct.pack().
  r
cSs<|tkr|dƒn&|tkr$|dƒn||kr6|dƒn‚dS)Ns€s€ÿsÀ©Ú_POS_INFÚ_NEG_INF©rarrrrÚEncodeNonFiniteOrRaise-s
 
 
z5_FloatingPointEncoder.<locals>.EncodeNonFiniteOrRaisercSs<|tkr|dƒn&|tkr$|dƒn||kr6|dƒn‚dS)Nsðsðÿsør—ršrrrr›8s
 
 
zGCan't encode floating-point values that are %d bytes long (only 4 or 8)cs€tj‰|r4t|tjƒ‰t‰‡‡‡‡‡‡fdd„}|S|rZt|ˆƒ‰d‡‡‡‡fdd„    }|St|ˆƒ‰d‡‡‡‡fdd„    }|SdS)    Nc    s\|ˆƒˆ|t|ƒˆ|ƒ|D]6}z|ˆˆ|ƒƒWq tk
rTˆ||ƒYq Xq dSr')r)Ú SystemErrorr})r›rŒrzrr{r9rrr|JszI_FloatingPointEncoder.<locals>.SpecificEncoder.<locals>.EncodePackedFieldc    sH|D]>}|ˆƒz|ˆˆ|ƒƒWqtk
r@ˆ||ƒYqXqdSr'©rœrŽ©r›rŒrr{rrrWs zK_FloatingPointEncoder.<locals>.SpecificEncoder.<locals>.EncodeRepeatedFieldcs>|ˆƒz|ˆˆ|ƒƒWntk
r8ˆ||ƒYnXdSr'rrržrrras
zC_FloatingPointEncoder.<locals>.SpecificEncoder.<locals>.EncodeField)N)Nr‘r„©r›rŒr9rtr“rr‡Es 
 
 
z._FloatingPointEncoder.<locals>.SpecificEncoder)rgr”Ú
ValueErrorr•rrŸrÚ_FloatingPointEncoders
 
 
 
 
ÿ$r¡z<Iz<Qz<iz<qz<fz<dcs~d‰d‰|r2t|tjƒ‰t‰‡‡‡‡fdd„}|S|rXt|tjƒ‰d
‡‡‡fdd„    }|St|tjƒ‰d ‡‡‡fdd    „    }|SdS) z'Returns an encoder for a boolean field.óócs<|ˆƒˆ|t|ƒ|ƒ|D]}|r.|ˆƒq|ˆƒqdSr'r(r}©Ú
false_byterzr{Ú    true_byterrr|s 
z&BoolEncoder.<locals>.EncodePackedFieldNcs,|D]"}|ˆƒ|r|ˆƒq|ˆƒqdSr'rrŽ©r¥r{r¦rrršs
 
z(BoolEncoder.<locals>.EncodeRepeatedFieldcs|ˆƒ|r|ˆƒS|ˆƒSr'rrr§rrr¤sz BoolEncoder.<locals>.EncodeField)N)N)rurrƒrnÚWIRETYPE_VARINTr„rr¤rÚ BoolEncoder‡s   r©csLt|tjƒ‰t‰t‰|rt‚|r4‡‡‡fdd„}|S‡‡‡fdd„}|SdS)z&Returns an encoder for a string field.cs8|D].}| d¡}|ˆƒˆ|ˆ|ƒ|ƒ||ƒqdSr>rD)rarrwr"Úencoded©rzrCÚtagrrr´s
 
z*StringEncoder.<locals>.EncodeRepeatedFieldcs*| d¡}|ˆƒˆ|ˆ|ƒ|ƒ||ƒSr>rD)rarrwrªr«rrr¼s
z"StringEncoder.<locals>.EncodeFieldN©rurrƒrnr)rG©rr/r0rrrr«rÚ StringEncoder¬s r¯csLt|tjƒ‰t‰t‰|rt‚|r4‡‡‡fdd„}|S‡‡‡fdd„}|SdS)z%Returns an encoder for a bytes field.cs.|D]$}|ˆƒˆ|ˆ|ƒ|ƒ||ƒqdSr'rr}r«rrrÌsz)BytesEncoder.<locals>.EncodeRepeatedFieldcs |ˆƒˆ|ˆ|ƒ|ƒ||ƒSr'rr€r«rrrÓsz!BytesEncoder.<locals>.EncodeFieldNr­r®rr«rÚ BytesEncoderÄs r°csLt|tjƒ‰t|tjƒ‰|r t‚|r6‡‡fdd„}|S‡‡fdd„}|SdS)z%Returns an encoder for a group field.cs*|D] }|ˆƒ| ||¡|ˆƒqdSr'©Ú_InternalSerializer}©Zend_tagZ    start_tagrrrás z)GroupEncoder.<locals>.EncodeRepeatedFieldcs|ˆƒ| ||¡|ˆƒSr'r±r€r³rrrès z!GroupEncoder.<locals>.EncodeFieldN)rurÚWIRETYPE_START_GROUPÚWIRETYPE_END_GROUPrGr®rr³rÚ GroupEncoderÚs  r¶csDt|tjƒ‰t‰|rt‚|r.‡‡fdd„}|S‡‡fdd„}|SdS)z'Returns an encoder for a message field.cs2|D](}|ˆƒˆ|| ¡|ƒ| ||¡qdSr'©rLr²r}©rzr¬rrrösz+MessageEncoder.<locals>.EncodeRepeatedFieldcs$|ˆƒˆ|| ¡|ƒ| ||¡Sr'r·r€r¸rrrýsz#MessageEncoder.<locals>.EncodeFieldN)rurrƒrnrGr®rr¸rÚMessageEncoderïs r¹csRd tdtjƒtdtjƒt|ƒtdtjƒg¡‰tdtjƒ‰t‰‡‡‡fdd„}|S)zäEncoder for extensions of MessageSet.
 
  The message set message looks like this:
    message MessageSet {
      repeated group Item = 1 {
        required int32 type_id = 2;
        required string message = 3;
      }
    }
  rmrrrcs,|ˆƒˆ|| ¡|ƒ| ||¡|ˆƒSr'r·r€©Z    end_bytesrzZ start_bytesrrrs z*MessageSetItemEncoder.<locals>.EncodeField)    rprurr´r¨rrrƒrµrn)rrrrºrÚMessageSetItemEncoders 
 
 
ü r»cs&|j‰t|jddƒ‰‡‡fdd„}|S)zÅEncoder for extensions of MessageSet.
 
  Maps always have a wire format like this:
    message MapEntry {
      key_type key = 1;
      value_type value = 2;
    }
    repeated MapEntry map = N;
  Fcs@|rt| ¡ƒn|}|D]"}ˆj|||d}ˆ|||ƒqdS)NrS)ÚsortedÚkeysrU)rarrwZ
value_keysrTrW©Zencode_messagerZrrr7szMapEncoder.<locals>.EncodeField)rZr¹r[)r\rrr¾rÚ
MapEncoder(s r¿)CÚ__doc__Ú
__author__rgZgoogle.protobuf.internalrr˜r™rrrr4r8r=Z
Int32SizerZ
Int64SizerZ    EnumSizerZ UInt32SizerZ UInt64SizerZ ZigZagEncodeZ SInt32SizerZ SInt64SizerZ Fixed32SizerZ SFixed32SizerZ
FloatSizerZ Fixed64SizerZ SFixed64SizerZ DoubleSizerZ    BoolSizerrIrJrOrPrRr]rjrlrnZ_EncodeSignedVarintrrrurˆr‹r–r¡r¨Z Int32EncoderZ Int64EncoderZ EnumEncoderZ UInt32EncoderZ UInt64EncoderZ SInt32EncoderZ SInt64EncoderZWIRETYPE_FIXED32ZFixed32EncoderZWIRETYPE_FIXED64ZFixed64EncoderZSFixed32EncoderZSFixed64EncoderZ FloatEncoderZ DoubleEncoderr©r¯r°r¶r¹r»r¿rrrrÚ<module>s‚$ ! ÿ    
)"&Rÿ ÿþ      %