+
    üÐj
J  ã                  óÌ  € R t ^ RIHt ^ RIt ^ RIHt ^ RIH	t	H
t
 ^ RIHtHt ^ RIHtHt ^ RIHt ^ RIHtHt ^ R	IHtHt ^ R
IHt  ! R R4      t]
! ]P8                  4       ! R R4      4       t]
! ]P<                  ]P>                  ]P@                  4       ! R R4      4       t!R t"R t# ! R R4      t$RR lt%]"]#RRR3R lt&R t' ! R R4      t(RR lt)R#   ] d     LÎi ; i)z0
Utilities and helpers for simulating a network
)ÚannotationsN)ÚError)ÚdirectlyProvidesÚimplementer)ÚerrorÚ
interfaces)ÚTCP4ClientEndpointÚTCP4ServerEndpoint)ÚConnectionRefusedError)ÚFactoryÚProtocol)ÚMemoryReactorÚMemoryReactorClock)ÚFailurec                  ó.   € ] tR t^tR tR R ltR tRtR# )ÚTLSNegotiationc                	ó8   € Wn         W n        R V n        W n        R# )FN)ÚobjÚconnectStateÚsentÚreadyToSend)Úselfr   r   s   &&&Ú4/usr/lib/python3/dist-packages/twisted/test/iosim.pyÚ__init__ÚTLSNegotiation.__init__   s   € ØŒØ(ÔØˆŒ	Ø'Öó    c               ó   € V ^8„  d   QhRR/# ©é   ÚreturnÚstr© )Úformats   "r   Ú__annotate__ÚTLSNegotiation.__annotate__"   s   € ÷ /ñ /˜#ñ /r   c                	ó$   € R V P                   : R2# )zTLSNegotiation(Ú))r   ©r   s   &r   Ú__repr__ÚTLSNegotiation.__repr__"   s   € Ø  §¡¡¨AÐ.Ð.r   c                	óž   € V P                   P                  VP                   4      '       g"   \        4       Vn        VP	                  4        R # R # ©N)r   ÚiosimVerifyÚNativeOpenSSLErrorÚdisconnectReasonÚloseConnection)r   ÚotherÚtpts   &&&r   ÚpretendToVerifyÚTLSNegotiation.pretendToVerify%   s9   € ð �x‰x×#Ñ# E§I¡I×.Ò.Ü#5Ó#7ˆCÔ Ø×ÑÖ ñ /r   )r   r   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r(   r2   Ú__static_attributes__r!   r   r   r   r      s   † ò(õ/ö!r   r   c                  ó   € ] tR t^.tRtRtR# )ÚFakeAddresszQ
The default address type for the host and peer of L{FakeTransport}
connections.
r!   N)r4   r5   r6   r7   Ú__doc__r8   r!   r   r   r:   r:   .   s   † õr   r:   c                  ó0  € ] tR t^6tRt]! ]P                  ! 4       3R l4      t^ t	^ t
^ t]P                  ! R4      tRt^ tRtR R ltR R ltR tR	 tR
 tR tR tR tR tR tR tR tR tR tR t R t!R t"R!R lt#R t$R t%R t&R t'R t(R t)R t*Rt+R# )"ÚFakeTransportzÈ
A wrapper around a file-like object to make it behave as a Transport.

This doesn't actually stream the file to the attached protocol,
and is thus useful mainly as a utility for debugging protocols.
c                	ó*   € \        \        V 4      4      # r+   )ÚintÚnext)Úcounters   &r   Ú<lambda>ÚFakeTransport.<lambda>?   s   € ÄÄTÈ'Ã]ÔASr   zConnection doneNc                ó¦   € Wn         W n        . V n        V P                  4       V n        Vf   \        4       pW0n        Vf   \        4       pW@n        R# )at  
@param protocol: This transport will deliver bytes to this protocol.
@type protocol: L{IProtocol} provider

@param isServer: C{True} if this is the accepting side of the
    connection, C{False} if it is the connecting side.
@type isServer: L{bool}

@param hostAddress: The value to return from C{getHost}.  L{None}
    results in a new L{FakeAddress} being created to use as the value.
@type hostAddress: L{IAddress} provider or L{None}

@param peerAddress: The value to return from C{getPeer}.  L{None}
    results in a new L{FakeAddress} being created to use as the value.
@type peerAddress: L{IAddress} provider or L{None}
N)ÚprotocolÚisServerÚstreamÚ_nextserialÚserialr:   ÚhostAddressÚpeerAddress)r   rE   rF   rJ   rK   s   &&&&&r   r   ÚFakeTransport.__init__H   sK   € ð" !ŒØ ŒØˆŒØ×&Ñ&Ó(ˆŒØÒÜ%›-ˆKØ&ÔØÒÜ%›-ˆKØ&Ör   c               ó   € V ^8„  d   QhRR/# r   r!   )r"   s   "r   r#   ÚFakeTransport.__annotate__d   s   € ÷ 
ñ 
˜#ñ 
r   c                	ó´   € R P                  V P                  ;'       d    R;'       g    RV P                  V P                  P                  P
                  4      # )zFakeTransport<{},{},{}>ÚSÚC)r"   rF   rI   rE   Ú	__class__r4   r'   s   &r   r(   ÚFakeTransport.__repr__d   sF   € Ø(×/Ñ/Ø�M‰M×!Ð!˜c×(Ð( SØ�K‰KØ�M‰M×#Ñ#×,Ñ,ó
ð 	
r   c                	óº   € V P                   '       d   R # V P                  e   V P                  P                  V4       R # V P                  P                  V4       R # r+   )ÚdisconnectingÚtlsÚtlsbufÚappendrG   )r   Údatas   &&r   ÚwriteÚFakeTransport.writek   s?   € à××ÐÙà�8‰8ÒØ�K‰K×Ñ˜tÖ$à�K‰K×Ñ˜tÖ$r   c                	óŠ   € V P                   '       d1   V P                  '       g   V P                   P                  4        R # R # R # r+   ©ÚproducerÚstreamingProducerÚresumeProducingr'   s   &r   Ú_checkProducerÚFakeTransport._checkProduceru   s/   € ð �=�=ˆ= ×!7×!7Ð!7Ø�M‰M×)Ñ)Ö+ñ "8‰=r   c                óR   € Wn         W n        V'       g   VP                  4        R# R# )z
From abstract.FileDescriptor
Nr]   )r   r^   Ú	streamings   &&&r   ÚregisterProducerÚFakeTransport.registerProducer{   s#   € ð !ŒØ!*ÔßØ×$Ñ$Ö&ñ r   c                	ó   € R V n         R # r+   )r^   r'   s   &r   ÚunregisterProducerÚ FakeTransport.unregisterProducer„   s	   € ØˆŽr   c                	óF   € V P                  4        V P                  4        R # r+   )rh   r/   r'   s   &r   ÚstopConsumingÚFakeTransport.stopConsuming‡   s   € Ø×ÑÔ!Ø×ÑÖr   c                	óF   € V P                  R P                  V4      4       R# )r   N)rZ   Újoin)r   Úiovecs   &&r   ÚwriteSequenceÚFakeTransport.writeSequence‹   s   € Ø�
‰
�3—8‘8˜E“?Ö#r   c                	ó   € R V n         R# )TN©rU   r'   s   &r   r/   ÚFakeTransport.loseConnectionŽ   s
   € Ø!ˆÖr   c                ó   € RV n         R# )zX
For the time being, this is the same as loseConnection; no buffered
data will be lost.
TNrs   r'   s   &r   ÚabortConnectionÚFakeTransport.abortConnection‘   s   € ð
 "ˆÖr   c                	ó˜   € V P                   e   \        4       pMV P                  pV P                  P	                  \        V4      4       R # r+   )rV   r-   r.   rE   ÚconnectionLostr   )r   Úerrs   & r   ÚreportDisconnectÚFakeTransport.reportDisconnect˜   s7   € Ø�8‰8Òô %Ó&‰Cà×'Ñ'ˆCØ�‰×$Ñ$¤W¨S£\Ö2r   c                ó   € R# )z=
Identify this transport/event source to the logging system.
Úiosimr!   r'   s   &r   Ú	logPrefixÚFakeTransport.logPrefix¡   s   € ñ r   c                	ó   € V P                   # r+   )rK   r'   s   &r   ÚgetPeerÚFakeTransport.getPeer§   ó   € Ø×ÑÐr   c                	ó   € V P                   # r+   )rJ   r'   s   &r   ÚgetHostÚFakeTransport.getHostª   r„   r   c                	ó   € R # r+   r!   r'   s   &r   r`   ÚFakeTransport.resumeProducing­   ó   € ár   c                	ó   € R # r+   r!   r'   s   &r   ÚpauseProducingÚFakeTransport.pauseProducing±   rŠ   r   c                	ó&   € V P                  4        R # r+   )r/   r'   s   &r   ÚstopProducingÚFakeTransport.stopProducingµ   s   € Ø×ÑÖr   c                	óZ   € V P                   V,          p\        W4      V n        . V n        R # r+   )rF   r   rV   rW   )r   ÚcontextFactoryÚbeNormalr   s   &&& r   ÚstartTLSÚFakeTransport.startTLS¸   s%   € ð —}‘} xÕ/ˆÜ! .Ó?ˆŒØˆŽr   c                óð   € V P                   pV'       d   . V n         RP                  V4      # V P                  e<   V P                  P                  '       d   RV P                  n        V P                  # R# R# )z™
Get the pending writes from this transport, clearing them from the
pending buffer.

@return: the bytes written with C{transport.write}
@rtype: L{bytes}
r   NT)rG   rn   rV   r   r   )r   rP   s   & r   ÚgetOutBufferÚFakeTransport.getOutBufferÀ   sY   € ð �K‰KˆßØˆDŒKØ—8‘8˜A“;ÐØ�X‰XÒ!Ø�x‰x×#×#Ð#à $�—‘”Ø—x‘x�áár   c                	óª  € \        V\        4      '       d¢   V P                  f   Q hV P                  P                  '       dc   V P                  P	                  W4       R V n        V P
                  R uq n        V P                  V4       \        V \        P                  4       R # RV P                  n
        R # V P                  P                  V4       R # )NT)Ú
isinstancer   rV   r   r2   rW   rp   r   r   ÚISSLTransportr   rE   ÚdataReceived)r   ÚbufÚbs   && r   ÚbufferReceivedÚFakeTransport.bufferReceivedÖ   s–   € Ü�cœ>×*Ò*Ø—8‘8Ò'Ð'Ð'ð �x‰x�}�}ˆ}Ø—‘×(Ñ(¨Ô3Ø�”ð "&§¡¨d��”;Ø×"Ñ" 1Ô%Ü  ¤z×'?Ñ'?Ö@ð (,�—‘Ö$à�M‰M×&Ñ& sÖ+r   c                	ó   € R # r+   r!   r'   s   &r   ÚgetTcpKeepAliveÚFakeTransport.getTcpKeepAliveé   rŠ   r   c                	ó   € R # r+   r!   r'   s   &r   ÚgetTcpNoDelayÚFakeTransport.getTcpNoDelayí   rŠ   r   c                	ó   € R # r+   r!   r'   s   &r   ÚloseWriteConnectionÚ!FakeTransport.loseWriteConnectionñ   rŠ   r   c                	ó   € R # r+   r!   ©r   Úenableds   &&r   ÚsetTcpKeepAliveÚFakeTransport.setTcpKeepAliveõ   rŠ   r   c                	ó   € R # r+   r!   r«   s   &&r   ÚsetTcpNoDelayÚFakeTransport.setTcpNoDelayù   rŠ   r   )rU   rJ   rF   rK   r^   rE   rI   rG   r_   rV   rW   )NN)T),r4   r5   r6   r7   r;   ÚstaticmethodÚ	itertoolsÚcountrH   ÚclosedrU   Údisconnectedr   ÚConnectionDoner.   r^   r_   rV   r   r(   rZ   ra   re   rh   rk   rp   r/   rv   r{   r   r‚   r†   r`   rŒ   r�   r”   r—   rŸ   r¢   r¥   r¨   r­   r°   r8   r!   r   r   r=   r=   6   sË   † ññ ¨i¯oªoÓ.?ÓSÓT€KØ€FØ€MØ€LØ×+Ò+Ð,=Ó>ÐØ€HØÐØ
€Cô'õ8
ò%ò,ò'òòò$ò"ò"ò3òò ò òòòôòò,,ò&òòòör   r=   c                ó   € \        V RR7      # )zà
Create and return a new in-memory transport hooked up to the given protocol.

@param clientProtocol: The client protocol to use.
@type clientProtocol: L{IProtocol} provider

@return: The transport.
@rtype: L{FakeTransport}
F©rF   ©r=   )ÚclientProtocols   &r   ÚmakeFakeClientr¼   þ   s   € ô ˜°%Ô8Ð8r   c                ó   € \        V RR7      # )zà
Create and return a new in-memory transport hooked up to the given protocol.

@param serverProtocol: The server protocol to use.
@type serverProtocol: L{IProtocol} provider

@return: The transport.
@rtype: L{FakeTransport}
Tr¹   rº   )ÚserverProtocols   &r   ÚmakeFakeServerr¿     s   € ô ˜°$Ô7Ð7r   c                  ó8   € ] tR tRtRtRR ltR	R ltR	R ltRtR# )
ÚIOPumpi  zƒ
Utility to pump data between clients and servers for protocol testing.

Perhaps this is a utility worthy of being in protocol.py?
Nc                	ój   € Wn         W n        W0n        W@n        WPn        Vf   \        4       pW`n        R # r+   )ÚclientÚserverÚclientIOÚserverIOÚdebugr   Úclock)r   rÃ   rÄ   rÅ   rÆ   rÇ   rÈ   s   &&&&&&&r   r   ÚIOPump.__init__  s-   € ØŒØŒØ ŒØ ŒØŒ
ØŠ=Ü&Ó(ˆEØŽ
r   c                óp   € Rp\        R4       F  pV P                  W4      '       d   RpK   V# 	  Q R4       h)zS
Pump until there is no more input or output.

Returns whether any data was moved.
Fiè  TzToo long)ÚrangeÚpump)r   rÇ   ÚadvanceClockÚresultÚ_s   &&&  r   ÚflushÚIOPump.flush)  sA   € ð ˆÜ�t–ˆAØ�y‰y˜×-Ò-Ø’àð ˆñ ð !�jÓ �1r   c                óX  € V'       d   V P                   P                  ^ 4       V P                  '       g	   V'       d   \        R4       V P                  P                  4       pV P                  P                  4       pV P                  P                  4        V P                  P                  4        V P                  '       g	   V'       dR   \        R4       V'       d   \        R\        V4      ,           4       V'       d   \        R\        V4      ,           4       V'       d   V P                  P                  V4       V'       d   V P                  P                  V4       V'       g	   V'       d   R# V P                  P                  '       d€   V P                  P                  '       gd   V P                  '       g	   V'       d   \        R4       RV P                  n        RV P                  n
        V P                  P                  4        R# V P                  P                  '       d€   V P                  P                  '       gd   V P                  '       g	   V'       d   \        R4       RV P                  n        RV P                  n
        V P                  P                  4        R# R# )	z—
Move data back and forth, while also triggering any currently pending
scheduled calls (i.e. C{callLater(0, f)}).

Returns whether any data was moved.
z
-- GLUG --Ú.zC: zS: Tz* Cz* SF)rÈ   ÚadvancerÇ   ÚprintrÆ   r—   rÅ   ra   ÚreprrŸ   rU   r¶   r{   )r   rÇ   rÍ   ÚsDataÚcDatas   &&&  r   rÌ   ÚIOPump.pump9  s—  € ÷ Ø�J‰J×Ñ˜qÔ!Ø�:�:ˆ:ŸÜ�,ÔØ—‘×*Ñ*Ó,ˆØ—‘×*Ñ*Ó,ˆØ�‰×$Ñ$Ô&Ø�‰×$Ñ$Ô&Ø�:�:ˆ:ŸÜ�#ŒJçÜ�eœd 5›kÕ)Ô*ßÜ�eœd 5›kÕ)Ô*ßØ�M‰M×(Ñ(¨Ô/ßØ�M‰M×(Ñ(¨Ô/ß—EÙØ�=‰=×&×&Ð&¨t¯}©}×/I×/IÐ/IØ�z�zˆzŸUÜ�e”Ø)-ˆD�M‰MÔ&Ø*.ˆD�M‰MÔ'Ø�M‰M×*Ñ*Ô,ÙØ�=‰=×&×&Ð&¨t¯}©}×/I×/IÐ/IØ�z�zˆzŸUÜ�e”Ø)-ˆD�M‰MÔ&Ø*.ˆD�M‰MÔ'Ø�M‰M×*Ñ*Ô,ÙÙr   )rÃ   rÅ   rÈ   rÇ   rÄ   rÆ   r+   ©FT)	r4   r5   r6   r7   r;   r   rÐ   rÌ   r8   r!   r   r   rÁ   rÁ     s   † ñôô÷ *ð *r   rÁ   FTc           	     óœ   € V P                  V4       VP                  V4       \        VV VVVVR7      pV'       d   VP                  4        V# )as  
Create a new L{IOPump} connecting two protocols.

@param serverProtocol: The protocol to use on the accepting side of the
    connection.
@type serverProtocol: L{IProtocol} provider

@param serverTransport: The transport to associate with C{serverProtocol}.
@type serverTransport: L{FakeTransport}

@param clientProtocol: The protocol to use on the initiating side of the
    connection.
@type clientProtocol: L{IProtocol} provider

@param clientTransport: The transport to associate with C{clientProtocol}.
@type clientTransport: L{FakeTransport}

@param debug: A flag indicating whether to log information about what the
    L{IOPump} is doing.
@type debug: L{bool}

@param greet: Should the L{IOPump} be L{flushed <IOPump.flush>} once before
    returning to put the protocols into their post-handshake or
    post-server-greeting state?
@type greet: L{bool}

@param clock: An optional L{Clock}. Pumping the resulting L{IOPump} will
    also increase clock time by a small increment.

@return: An L{IOPump} which connects C{serverProtocol} and
    C{clientProtocol} and delivers bytes between them when it is pumped.
@rtype: L{IOPump}
©rÈ   )ÚmakeConnectionrÁ   rÐ   )r¾   ÚserverTransportr»   ÚclientTransportrÇ   ÚgreetrÈ   rÌ   s   &&&&&&& r   Úconnectrá   f  sP   € ðT ×!Ñ! /Ô2Ø×!Ñ! /Ô2ÜØØØØØØô€D÷ à�
‰
ŒØ€Kr   c                ó`   € V! 4       pV ! 4       pV! V4      p	V! V4      p
Wx\        WŠWyWEVR7      3# )a  
Connect a given server and client class to each other.

@param ServerClass: a callable that produces the server-side protocol.
@type ServerClass: 0-argument callable returning L{IProtocol} provider.

@param ClientClass: like C{ServerClass} but for the other side of the
    connection.
@type ClientClass: 0-argument callable returning L{IProtocol} provider.

@param clientTransportFactory: a callable that produces the transport which
    will be attached to the protocol returned from C{ClientClass}.
@type clientTransportFactory: callable taking (L{IProtocol}) and returning
    L{FakeTransport}

@param serverTransportFactory: a callable that produces the transport which
    will be attached to the protocol returned from C{ServerClass}.
@type serverTransportFactory: callable taking (L{IProtocol}) and returning
    L{FakeTransport}

@param debug: Should this dump an escaped version of all traffic on this
    connection to stdout for inspection?
@type debug: L{bool}

@param greet: Should the L{IOPump} be L{flushed <IOPump.flush>} once before
    returning to put the protocols into their post-handshake or
    post-server-greeting state?
@type greet: L{bool}

@param clock: An optional L{Clock}. Pumping the resulting L{IOPump} will
    also increase clock time by a small increment.

@return: the client protocol, the server protocol, and an L{IOPump} which,
    when its C{pump} and C{flush} methods are called, will move data
    between the created client and server protocol instances.
@rtype: 3-L{tuple} of L{IProtocol}, L{IProtocol}, L{IOPump}
rÜ   )rá   )ÚServerClassÚClientClassÚclientTransportFactoryÚserverTransportFactoryrÇ   rà   rÈ   ÚcÚsÚcioÚsios   &&&&&&&    r   ÚconnectedServerAndClientrë      s=   € ñ\ 	‹€AÙ‹€AÙ
  Ó
#€CÙ
  Ó
#€CØ”˜ ¨¸UÔCÐCÐCr   c                ó2   € V w  pppppVw  rxršWs8X  d   WH3# R# )a÷  
Should the client and server described by the arguments be connected to
each other, i.e. do their port numbers match?

@param clientInfo: the args for connectTCP
@type clientInfo: L{tuple}

@param serverInfo: the args for listenTCP
@type serverInfo: L{tuple}

@return: If they do match, return factories for the client and server that
    should connect; otherwise return L{None}, indicating they shouldn't be
    connected.
@rtype: L{None} or 2-L{tuple} of (L{ClientFactory},
    L{IProtocolFactory})
Nr!   )Ú
clientInfoÚ
serverInfoÚ
clientHostÚ
clientPortÚclientFactoryÚclientTimeoutÚclientBindAddressÚ
serverPortÚserverFactoryÚserverBacklogÚserverInterfaces   &&         r   Ú_factoriesShouldConnectrø   Õ  s7   € ð. 	ñØØØØØàBLÑ?€Z ØÔØÐ+Ð+ár   c                  ó^   € ] tR tRtRtR R ltRR R llt]! ]! 4       4      3R R llt	R	t
R
# )ÚConnectionCompleteriô  zœ
A L{ConnectionCompleter} can cause synthetic TCP connections established by
L{MemoryReactor.connectTCP} and L{MemoryReactor.listenTCP} to succeed or
fail.
c               ó    € V ^8„  d   QhRRRR/# )r   ÚmemoryReactorr   r   ÚNoner!   )r"   s   "r   r#   Ú ConnectionCompleter.__annotate__û  s   € ÷ &ñ & mð &¸ñ &r   c                ó   € Wn         R# )zk
Create a L{ConnectionCompleter} from a L{MemoryReactor}.

@param memoryReactor: The reactor to attach to.
N©Ú_reactor)r   rü   s   &&r   r   ÚConnectionCompleter.__init__û  s	   € ð &Žr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rÇ   Úboolrà   r   zIOPump | Noner!   )r"   s   "r   r#   rþ     s!   € ÷  ñ   ð  °dð  Àmñ  r   c                ó¸  € V P                   p\        VP                  4       F´  w  rEVP                   FŸ  p\	        WV4      pV'       g   K  VP                  P                  V4       VP                  P                  V4       Vw  r‰VP                  R4      p
V	P                  R4      p\        V4      p\        V
4      p\        VVV
VVVR7      pVu u # 	  K¶  	  R# )a  
Complete a single TCP connection established on this
L{ConnectionCompleter}'s L{MemoryReactor}.

@param debug: A flag; whether to dump output from the established
    connection to stdout.

@return: a pump for the connection, or L{None} if no connection could
    be established.
N)rà   )r  Ú	enumerateÚ
tcpClientsÚ
tcpServersrø   ÚremoveÚ
connectorsÚpopÚbuildProtocolr¿   r¼   rá   )r   rÇ   rà   rü   Ú	clientIdxrí   rî   Ú	factoriesrñ   rõ   r»   r¾   rÞ   rß   rÎ   s   &&&            r   ÚsucceedOnceÚConnectionCompleter.succeedOnce  sÑ   € ð Ÿ™ˆÜ%.¨}×/GÑ/GÖ%HÑ!ˆIØ+×6Ô6�
Ü3°JÓK�	ß‘9Ø!×,Ñ,×3Ñ3°JÔ?Ø!×,Ñ,×0Ñ0°Ô;Ø3<Ñ0�MØ%2×%@Ñ%@ÀÓ%F�NØ%2×%@Ñ%@ÀÓ%F�NÜ&4°^Ó&D�OÜ&4°^Ó&D�OÜ%,Ø&Ø'Ø&Ø'ØØ#ô&�Fð "”Mó% 7ñ &Iñ( r   c               ó    € V ^8„  d   QhRRRR/# )r   Úreasonr   r   rý   r!   )r"   s   "r   r#   rþ   %  s   € ÷ 	
ñ 	
˜wð 	
Ètñ 	
r   c                óÄ   € V P                   P                  P                  ^ 4      ^,          P                  V P                   P                  P                  ^ 4      V4       R# )zŸ
Fail a single TCP connection established on this
L{ConnectionCompleter}'s L{MemoryReactor}.

@param reason: the reason to provide that the connection failed.
N)r  r  r  ÚclientConnectionFailedr
  )r   r  s   &&r   ÚfailOnceÚConnectionCompleter.failOnce%  sF   € ð 	�‰× Ñ ×$Ñ$ QÓ'¨Õ*×AÑAØ�M‰M×$Ñ$×(Ñ(¨Ó+¨Vö	
r   r   NrÚ   )r4   r5   r6   r7   r;   r   r  r   r
   r  r8   r!   r   r   rú   rú   ô  s*   † ñõ&÷ ñD *1Ñ1GÓ1IÓ)J÷ 	
ó 	
r   rú   c                ó´   € \        4       p\        VRR4      p\        VR4      pVP                  \        P
                  ! \        4      4       V\        V4      3# )ae  
Create an endpoint that can be fired on demand.

@param debug: A flag; whether to dump output from the established
    connection to stdout.
@type debug: L{bool}

@return: A client endpoint, and an object that will cause one of the
    L{Deferred}s returned by that client endpoint.
@rtype: 2-L{tuple} of (L{IStreamClientEndpoint}, L{ConnectionCompleter})
z0.0.0.0iá  )r   r   r	   Úlistenr   ÚforProtocolr   rú   )rÇ   ÚreactorÚclientEndpointÚserverEndpoints   &   r   ÚconnectableEndpointr  1  sP   € ô !Ó"€GÜ'¨°¸DÓA€NÜ'¨°Ó6€NØ×Ñœ'×-Ò-¬hÓ7Ô8ØÔ.¨wÓ7Ð7Ð7r   )FTN)F)*r;   Ú
__future__r   r³   ÚOpenSSL.SSLr   r-   ÚImportErrorÚzope.interfacer   r   Útwisted.internetr   r   Útwisted.internet.endpointsr   r	   Útwisted.internet.errorr
   Útwisted.internet.protocolr   r   Útwisted.internet.testingr   r   Útwisted.python.failurer   r   ÚIAddressr:   Ú
ITransportÚITLSTransportÚ	IConsumerr=   r¼   r¿   rÁ   rá   rë   rø   rú   r  r!   r   r   Ú<module>r,     s÷   ðñ
õ #ã ð	Ý7÷ 9ç .ß MÝ 9ß 7ß FÝ *÷!ñ !ñ& ˆZ× Ñ Ó!÷ð ó "ðñ ˆZ×"Ñ" J×$<Ñ$<¸j×>RÑ>RÓS÷Dð Dó TðDòN
9ò
8÷Kñ Kô\7ðz *Ø)Ø
Ø
Ø
ô2Dòj÷>:
ñ :
öz8øðG ô 	Ùð	ús   ŽC ÃC#Ã"C#