4Nnrepl/middleware/session__initjava/lang/Objectload()Vconst__0Lclojure/lang/Var;   clojure/lang/Var  getRawRoot()Ljava/lang/Object;  clojure/lang/IFnconst__1Lclojure/lang/AFn;  invoke&(Ljava/lang/Object;)Ljava/lang/Object;  clojure/lang/Symbolclojure/lang/Namespacefind/(Lclojure/lang/Symbol;)Lclojure/lang/Namespace;  !clojure/lang/AReference#const__4 % &clojure/lang/IPersistentMap( resetMeta<(Lclojure/lang/IPersistentMap;)Lclojure/lang/IPersistentMap; *+ $,5nrepl/middleware/session$loading__6721__auto____10002. 0 /1  3const__5 5 6equals(Ljava/lang/Object;)Z 89 :"nrepl/middleware/session$fn__10004< =1java/util/concurrent/Callable?clojure/lang/LockingTransactionArunInTransaction3(Ljava/util/concurrent/Callable;)Ljava/lang/Object; CD BEconst__6 G H const__13 J KsetMeta (Lclojure/lang/IPersistentMap;)V MN O const__14 Q Rclojure/lang/PersistentArrayMapTEMPTY!Lclojure/lang/PersistentArrayMap; VW UXbindRoot(Ljava/lang/Object;)V Z[ \ const__15 ^ _ setDynamic(Z)Lclojure/lang/Var; ab c const__18 e fjava/lang/BooleanhFALSELjava/lang/Boolean; jk il const__19 n o const__23 q r1nrepl/middleware/session$configure_thread_factoryt u1 const__24 w x const__27 z {+nrepl/middleware/session$configure_executor} ~1 const__28   const__30  clojure/lang/Delay"nrepl/middleware/session$fn__10014 1(Lclojure/lang/IFn;)V 0  const__31   const__34  %nrepl/middleware/session$default_exec 1 const__35   const__38  #nrepl/middleware/session$session_in 1 const__39   const__42  'nrepl/middleware/session$create_session 1 const__43   const__46  +nrepl/middleware/session$interrupted_QMARK_ 1 const__47   const__50  %nrepl/middleware/session$session_exec 1 const__51   const__54  )nrepl/middleware/session$register_session 1 const__55   const__58  *nrepl/middleware/session$interrupt_session 1 const__59   const__62  &nrepl/middleware/session$close_session 1 const__63   const__66   nrepl/middleware/session$session 1 const__67   const__68Lclojure/lang/Keyword; clojure/lang/PersistentHashSet Lclojure/lang/PersistentHashSet; V  const__69  const__70 "nrepl/middleware/session$fn__10090 1 const__71 cloneconst__2 JClones the current session, returning the ID of the newly-created session. const__72  const__73   const__74   const__75  clojure/lang/RT  mapUniqueKeys2([Ljava/lang/Object;)Lclojure/lang/IPersistentMap;     interrupt const__79  closeCloses the specified session. const__80   ls-sessions%Lists the IDs of all active sessions. const__81   !8(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; # $ const__82 & ' const__85 ) *"nrepl/middleware/session$add_stdin, -1set2([Ljava/lang/Object;)Lclojure/lang/IPersistentSet; /0  1 const__86 3 4stdin6EAdd content from the value of "stdin" to *in* in the current session.8 const__87 : ; const__88 = >java/lang/Throwable@__init0 clojure.coreCin-nsEvar8(Ljava/lang/String;Ljava/lang/String;)Lclojure/lang/Var; GH  Inrepl.middleware.sessionKintern;(Ljava/lang/String;Ljava/lang/String;)Lclojure/lang/Symbol; MN Oclojure/lang/IObjQdocSkeyword<(Ljava/lang/String;Ljava/lang/String;)Lclojure/lang/Keyword; UV  W7Support for persistent, cross-connection REPL sessions.Yauthor[ Chas Emerick]map _  `withMeta2(Lclojure/lang/IPersistentMap;)Lclojure/lang/IObj; bc Rdclojure/lang/AFnfclojure/lang/KeywordhsessionsjprivatelTRUE nk iolineqjava/lang/IntegersvalueOf(I)Ljava/lang/Integer; uv twcolumnyfile{nrepl/middleware/session.clj}atom*skipping-eol*dynamicconfigure-thread-factoryarglistsclojure/lang/Tuplecreate"()Lclojure/lang/IPersistentVector;  java/util/ArraysasList%([Ljava/lang/Object;)Ljava/util/List;  clojure/lang/PersistentList0(Ljava/util/List;)Lclojure/lang/IPersistentList;  Returns a new ThreadFactory for the given session. This implementation generates daemon threads, with names that include the session id.configure-executor&keys keep-alivequeuethread-factoryX(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lclojure/lang/IPersistentVector;  oru0java/lang/Long(J)Ljava/lang/Long; u SynchronousQueue.F(Ljava/lang/Object;Ljava/lang/Object;)Lclojure/lang/IPersistentVector;  Returns a ThreadPoolExecutor, configured (by default) to have 1 core thread, use an unbounded queue, create only daemon threads, and allow unused threads to expire after 30s.default-executor&Delay containing the default Executor. default-execidthunktagRunnableackSSubmits a task for execution using #'default-executor. The submitted task is made of: * an id (typically the message id), * thunk, a Runnable, the task itself, * ack, another Runnable, ran to notify of succesful execution of thunk. The thunk/ack split is meaningful for interruptible eval: only the thunk can be interrupted. session-in session-id transportReturns a LineNumberingPushbackReader suitable for binding to *in*. When something attempts to read from it, it will (if empty) send a {:status :need-input} message on the provided transport so the client/user can provide content to be read.create-sessionsession out-limitasmsg4(Ljava/lang/Object;)Lclojure/lang/IPersistentVector;  Returns a new atom containing a map of bindings as per `clojure.core/get-thread-bindings`. *in* is obtained using `session-in`, *ns* defaults to 'user, and other bindings as optionally provided in `session` are merged in. interrupted?e ThrowableJReturns true if the given throwable was ultimately caused by an interrupt. session-execTakes a session id and returns a maps of three functions meant for interruptible-eval: * :exec, takes an id (typically a msg-id), a thunk and an ack runnables (see #'default-exec for ampler context). Executions are serialized and occurs on a single thread. * :interrupt, takes an id and tries to interrupt the matching execution (submitted with :exec above). A nil id is meant to match the currently running execution. The return value can be either: :idle (no running execution), the interrupted id, or nil when the running id doesn't match the id argument. Upon succesful interruption the backing thread is replaced. * :close, terminates the backing thread.register-sessionfRegisters a new session containing the baseline bindings contained in the given message's :session.interrupt-session interrupt-id close-session4Drops the session associated with the given message.h Session middleware. Returns a handler which supports these :op-erations: * "clone", which will cause a new session to be retained. The ID of this new session will be returned in a response message in a :new-session slot. The new session's state (dynamic scope, etc) will be a copy of the state of the session identified in the :session slot of the request. * "interrupt", which will attempt to interrupt the current execution with id provided in the :interrupt-id slot. * "close", which drops the session indicated by the ID in the :session slot. The response message's :status will include :session-closed. * "ls-sessions", which results in a response message containing a list of the IDs of the currently-retained sessions in a :session slot. Messages indicating other operations are delegated to the given handler, with the session identified by the :session ID added to the message. If no :session ID is found, a new session is created (which will only persist for the duration of the handling of the given message). Requires the interruptible-eval middleware (specifically, its binding of *msg* to the currently-evaluated message so that session-specific *out* and *err* content can be associated with the originating message).nrepl.middlewareset-descriptor!requiresexpects describe-fnhandles optional The ID of the session to be cloned; if not provided, a new session with default bindings is created, and mapped to the returned session ID.returns new-sessionThe ID of the new session.vAttempts to interrupt some executing request. When interruption succeeds, the thread used for execution is killed, and a new thread spawned for the session. While the session middleware ensures that Clojure dynamic bindings are preserved, other ThreadLocals are not. Hence, when running code intimately tied to the current thread identity, it is best to avoid interruptions.BThe ID of the session used to start the request to be interrupted.>The opaque message ID sent with the request to be interrupted.statusY'interrupted' if a request was identified and interruption will be attempted 'session-idle' if the session is not currently executing any request 'interrupt-id-mismatch' if the session is currently executing a request sent using a different ID than specified by the "interrupt-id" value 'session-ephemeral' if the session is an ephemeral session#The ID of the session to be closed. $A list of all available session IDs." add-stdin$stdin middleware. Returns a handler that supports a "stdin" :op-eration, which adds content provided in a :stdin slot to the session's *in* Reader. Delegates to the given handler for other operations. Requires the session middleware.&eval(5([Ljava/lang/Object;)Lclojure/lang/PersistentHashSet; * +Content to add to *in*.-{A status of "need-input" will be sent if a session's *in* requires content in order to satisfy an attempted read operation./ B 2nrepl.middleware.session__init4 classForName%(Ljava/lang/String;)Ljava/lang/Class; 67  8java/lang/Class:getClassLoader()Ljava/lang/ClassLoader; <= ;>clojure/lang/Compiler@pushNSandLoader(Ljava/lang/ClassLoader;)V BC AD  FpopThreadBindings H ICode StackMapTableLineNumberTable!3%5GJQ^enqwz &)3:= K  "$')-/Y247;=Y>@FWIYL)PYSY]`dYg)PYm]pYs)PYuYv]yY|)PY~Y]Y)PYYY]Y)PYY]Y)PYY]Y)PYY]Y)PYY]Y)PYY]Y)PYYö]Y)PYY̶]Y)PYYն]Y)PYY޶]YSYSYSYSYSYYSYSYYSYYSYSYSYYSYSYSYSY SSYSYSYSYYSYSYSYSYSYYSYSYYSSYSYYSYSYSYYSYSYYSYSY"SSS%(Y+)PY-Y.](YSYYS2SYSY5SYSYY7SYYSY9SYSY #-05>SlrHH BK B 6DFJ LPRYTXSYZSY\XSY^Sa)egTXiYTXSYZSY\XSY^Sag'DPg7LkJ IYmXSYpSYrXSYxSYzXSYxSY|XSY~SagLDJ SLJ ` YXSYpSYmXSYpSYrXSYxSYzXSYxSY|XSY ~SaggLJ p YmXSYpSYXSYYSSYTXSYSYrXSYxSYzXSY xSY |XSY ~SagsLJ y YmXSYpSYXSYYPYXSYPPPSYXSYYPSYSYPSYYPSRYrXSY3xSYzXSYxSa)eSaSaSSYTXSYSYrXSY-xSYzXSY xSY |XSY ~Sag|LJ YrXSY:xSYzXSYxSY|XSY~SYTXSYSagLJ  YXSYY¸PĸPRYƸXSYȸPSa)eʸPRYƸXSYȸPSa)eSSYTXSYSYrXSY<xSYzXSYxSY|XSY ~SagLθJ  YmXSYpSYXSYYиPҸPSSYTXSYSYrXSYGxSYzXSY xSY |XSY ~SagLָJ  YmXSYpSYXSYYYXSYҸPظPڸPSYܸXSY޸PSaSSYTXSYSYrXSY|xSYzXSY xSY |XSY ~SagLJ  YXSYYPRYƸXSYPSa)eSSYTXSYSYrXSYxSYzXSYxSY|XSY ~SagLJ  YXSYY¸PSSYTXSYSYrXSYxSYzXSYxSY|XSY ~SagLJ  YmXSYpSYXSYYYXSYظPҸPSYܸXSY޸PSaSSYTXSYSYrXSYŸxSYzXSY xSY |XSY ~SagLJ  YmXSYpSYXSYYYXSYظPPҸPSYܸXSY޸PSaSSYrXSYϸxSYzXSYxSY|XSY ~SagLJ  YmXSYpSYXSYYYXSYظPҸPSYܸXSY޸PSaSSYTXSYSYrXSYxSYzXSY xSY |XSY ~SagLظJ  YXSYYPSSYTXSYSYrXSYxSYzXSYxSY|XSY ~SagJ XiXi Xi Xi XiYSYSagXiYSYSag YTXSYSYXSYYSYSaSY XSYYSYSaSYXSYYSYSaSagYSY!SagYkSY#Sag"L%J ( YXSYYPSSYTXSY'SYrXSY0xSYzXSYxSY|XSY ~Sag+Y)S,g5Y7SY.Sag<YSY0Sag? 1K>359?EGJJLXA