! / 0 0 0 0 8 ` // 64 ` futures-20192f6477b0c306.futures.36275f0365f7e49d-cgu.0.rcgu.o/ lib.rmeta/ 0 0 0 644 19992 ` ELF>˜L@@GNUÀrust TJ#rustc 1.98.1 (48a229cea 2026-09-01)ÁûÊÆÍRLñ.åSÛAúwjL-df1bddb45adbe94bÁ futures_coreÁ.úúõÀü.¢ Å£¼…Z-b2e86d4a91990c16Á«ª1Úë• ¢›ºXÝÓrŽ*-1ad4f876c768bda9Á±ò‰<å%Z‰>¸64‡ËV`-2d2ab9fb0fe1def5Á‰m6GÞ­n6ÇèÆ2-64f5f36fb0927694Á»ÄóG Øg{ë(3íi«F×-06449a08aaab5e30Árustc_std_workspace_coreÁ€û{ù`ä"Ei¥€ÞÏ%G-cb0d4d77988d81b5Áó"Æ)ΉÉðÛÕpEÍ—E-3ec41d3a5a80a4a4Á miniz_oxideÁÐ8°ø‚ðbž Lƨ°J-e44eaef1807e5fc0Áadler2Á9lí©yA6P/D$UBŸ-dca52f01a59c33e7Á hashbrownÁ™¸ÈXó®÷ …ùý{e-143c77bb957d9940Árustc_std_workspace_allocÁð…¨À �¶÷Üúò·_z%í-145a318e0772276cÁ std_detectÁK(ƒ0ì*ãÛ8²D?-f99feda5ce9e492aÁrustc_demangleÁµ%jŽeårVŠÕÓ•-cfd0ab54bb33760eÁcfg_ifÁÍ}λ—©ŒÕž§C•×o-360da4ba13154744Á addr2lineÁ‹c²ŽúY\ÈGÞö÷ö--09755979c57b7e64ÁgimliÁ¢±QÄÍ`ª§DÞåù¬y-9a1fede77fbbf2f0ÁobjectÁö‚F λâËvú.zËí-7ff85ea729a864ffÁmemchrÁž˜]²1<õ¶=U�ý�Où-0e3477fb2664a277Á  ÿŽ—jl‹®¾To–K™G-549498e8b2e4d924Á futures_utilÁ`ÜõË úäñoU1¯FÀ -9051d6448dad3304Á futures_macroÁæi†#ujМdê{Gî`-fd2c0a1c627d5f7cÁ futures_taskÁØþŇ“O_™‚í¼SK©-9dc53e607663f6e3Á futures_sinkÁ7�„„çú1G"º &h-578a9e470927087cÁpin_project_liteÁÛ/+Ì,DvÖß9š¡ñšO¥-e9b26d79a08f0191Áfutures_channelÁ‘v|òì—L“‹³ïÀr£è‰-4c07352f2b9ac2b6ÁslabÁ½;‡ž×÷–Þ~bÇÐౄ9-a4a8269ffb724f29Á futures_ioÁ”Úµ­ŠC‡–À{Ò¥‚*ѳ-0d5040d36e03bfa0Á¡Œ¯.oë;_µtb†Ý¤¦å-480240aaef38b342Áfutures_executorÁO&)áëw0ðÆÖ+½÷Â-3f949a2e8a2039f5Á. ThreadPoolÁT´<Ó thread-poolÁ¼À;.ThreadPoolBuilderÁŒÀ<Ó˜ ')compatÁ4¬=ÓÒ ”Ý<û      !"#$%&'()*+executorÁ.........Û 8888888888 8 8 8 8 88888888888888.8ûFutureÁ4µ ¿´ TryFutureÁL½ ! FutureExtÁLú © TryFutureExtÁd…!ÎStreamÁ4Æ!E TryStreamÁLÎ!b StreamExtÁL‹"ý TryStreamExtÁd–"ûSinkÁ$Î" SinkExtÁ<‚#¡) AsyncBufReadÁdË# AsyncReadÁLÙ# AsyncSeekÁLä# AsyncWriteÁTï#AsyncBufReadExtÁ|½$Ê1 AsyncReadExtÁdÎ$§1 AsyncSeekExtÁdÜ$Å1 AsyncWriteExtÁlê$¸1readyÁ,¤%„pin_mutÁ<Ú%Ü5selectÁ4±&è5joinÁ$ð&å5pendingÁ<ö&% À $ÿ& !À ! select_biasedÁl…'ç5"try_joinÁD”'æ5#futureÁ4é'h%” ,ñ'ÿ)&sinkÁ$ø'È%'streamÁ4þ'¶ (taskÁ$†(Ê)) stream_selectÁlÜ(9*channelÁ<°)+lockÁ$ø)á1,ioÁ¼*�*-üµKü.+ Abstractions for asynchronous programming.Á/�ü3NK This crate provides a number of core abstractions for writing asynchronousÁL‚ code:ÁŒ�ü�EB - [Futures](crate::future) are single eventual values produced byÁüÖMJ asynchronous computations. Some programming languages (e.g. JavaScript)Áü¤" call this concept "promise".ÁüÇ;8 - [Streams](crate::stream) represent a series of valuesÁôƒ produced asynchronously.Áü¢FC - [Sinks](crate::sink) provide support for asynchronous writing ofÁ\é data.ÁüõKH - [Executors](crate::executor) are responsible for running asynchronousÁdÁ tasks.ÁÎ�üÒNK The crate also contains abstractions for [asynchronous I/O](crate::io) andÁü¡/, [cross-task communication](crate::channel).ÁÑ�üÕOL Underlying all of this is the *task system*, which is a form of lightweightÁü¥JG threading. Large asynchronous computations are built up using futures,ÁüðLI streams and sinks, and then spawned as independent tasks that are run toÁü½;8 completion, but *do not block* the thread running them.Áù�üýQN The following example describes how the task system context is built and usedÁüÏ85 within macros and keywords such as async and await!.Áˆ �\Œ  ```rustÁü˜ ! # use futures::channel::mpsc;Áüº _\ # use futures::executor; ///standard executors to provide a context for futures and streamsÁüš (% # use futures::executor::ThreadPool;Áìà  # use futures::StreamExt;Á,á  #Á|ç fn main() {Á\÷  # {Áüƒ DA let pool = ThreadPool::new().expect("Failed to build pool");ÁüÈ 0- let (tx, rx) = mpsc::unbounded::();Áù �üý OL // Create a future by an async block, where async is responsible for anÁüÍ PM // implementation of Future. At this point no executor has been providedÁüž 52 // to this future, so it will not be running.ÁüÔ  let fut_values = async {Áüõ PM // Create another async block, again where the Future implementationÁüÆSP // is generated by async. Since this is inside of a parent async block,ÁüšXU // it will be provided with the executor of the parent block when the parentÁüó! // block is executed.Át• //Áü¤SP // This executor chaining is done by Future::poll whose second argumentÁüøTQ // is a std::task::Context. This represents our executor, and the FutureÁüÍSP // implemented by this async block can be polled using the parent asyncÁü¡  // block's executor.ÁüÂ,) let fut_tx_result = async move {Áüï'$ (0..100).for_each(|v| {Áü—B? tx.unbounded_send(v).expect("Failed to send");Á”Ú })Átí };Áü�ü€IF // Use the provided thread pool to spawn the generated futureÁüÊ+( // responsible for transmissionÁüö)& pool.spawn_ok(fut_tx_result);Á �ü¤ let fut_values = rxÁüÄ .map(|v| v * 2)ÁÜä .collect();Á€�ü„LI // Use the executor provided to this async block to wait for theÁüÑ" // future to complete.Áäô fut_values.awaitÁT‘ };Áœ�ü PM // Actually execute the above future, which will invoke Future::poll andÁüñTQ // subsequently chain appropriate Future::poll and methods needing executorsÁüÆTQ // to drive all futures. Eventually fut_values will be driven to completion.Áü›>; let values: Vec = executor::block_on(fut_values);ÁÚ�üÞ(% println!("Values={:?}", values);Á\‡ # }Áü“™– # std::thread::sleep(std::time::Duration::from_millis(500)); // wait for background threads closed: https://github.com/rust-lang/miri/issues/1371Á,­ }Á<³ ```Á»�ü¿QN The majority of examples and code snippets in this crate assume that they areÁü‘+( inside an async block as written above.ÁüÉ´üý6ü½6|Ú.8ûÕãë¿´û!”©®<ÎËSE álb ú…ý ”¢û±· ÅΡ)Ýëù ’ «7 ÅV Ê1ås §1‚� Å1Ÿ® ¸1½Ä „ÔÝ Ü5íõ è5… å5›$ % À 5 !À 5 !Òa ç5"ñ{ æ5#‹“ h%” £ ÿ)&²¸ È%'ÇÏ ¶ (Þä Ê))ó 9*‘ +¨. á1,½A �*-ÕÕÕ¤ž Œ„ LŠ ë#!ëEC¤ã ŒÉ LÏ #!<EC<¤¯!Œ•!L›!S#!SlECl¤ô!ŒÚ!Là!…#!…¢EC¢”À"Œ¦"L¬"·Üî"ŒÔ"LÚ"ÎT¾#Ó‰|’#¼Œ#Œ¤#Lª#ëÓ‰6420ë Ó‰geca  Ó‰˜–”’ 7 Ó‰ÉÇÅÃ7 d®$Ó‰|‚$¼ü#Œ”$Lš$V Ó‰6420V s Ó‰gecas � Ó‰˜–”’� ® Ó‰ÉÇÅî œ–%Ä ¬Ì%Ý ¤£&Ó‰|é%¼ã%Ó async-awaitÁ¼�&üû%õ dá&ÓêE¼¿&ü¹& ÓêE $ ÓêE,*$ 5 ÓêEA?5 a ÓêEVTa { ÓêEki{ dÚ'tÃ'“ “ £ =£ ¸ \¸ Ï {Ï ä šä ÜÎ(Ó‰|”(¼Ž(ÓêE¼¬(ü¦( |�)Ó«Œò(Ìì(t†) ”ê)Ó«Œ¿)̹)tÓ). „®*Ó‰|…*¼ÿ)t—*A „’+ü©+)& Built-in executors and related tools.Á×+�üß+DA All asynchronous computation occurs within an executor, which isÁü¨,FC capable of spawning futures as tasks. This module provides severalÁüó,?< built-in executors, as well as tools for building your own.Á·-�¿-�üÇ-EB This module is only available when the `executor` feature of thisÁÌ‘. library is activated.Á¯.�ü·./, # Using a thread pool (M:N task scheduling)Áë.�üó.MJ Most of the time tasks should be executed on a [thread pool](ThreadPool).ÁüÅ/NK A small set of worker threads can handle a very large set of spawned tasksÁü˜0MJ (which are much lighter weight than threads). Tasks spawned onto the poolÁüê0NK with the [`spawn_ok`](ThreadPool::spawn_ok) function will run ambiently onÁĽ1 the created threads.ÁÚ1�üâ1 # Spawning additional tasksÁ†2�üŽ2KH Tasks can be spawned onto a spawner by calling its [`spawn_obj`] methodÁüÞ2MJ directly. In the case of `!Send` futures, [`spawn_local_obj`] can be usedÁd°3 instead.ÁÁ3�üÉ3 # Single-threaded executionÁí3�üõ3KH In addition to thread pools, it's possible to run a task (and the tasksÁüÅ4NK it spawns) entirely within a single thread via the [`LocalPool`] executor.Áü˜5NK Aside from cutting down on synchronization costs, this executor also makesÁüë5GD it possible to spawn non-`Send` tasks, via [`spawn_local_obj`]. TheÁü·6OL [`LocalPool`] is best suited for running I/O-bound tasks that do relativelyÁü‹7'$ little work between I/O operations.Á·7�ü¿7JG There is also a convenience function [`block_on`] for simply running aÁüŽ8/, future to completion on the current thread.ÁÂ8�üÊ8_\ [`spawn_obj`]: https://docs.rs/futures/0.3/futures/task/trait.Spawn.html#tymethod.spawn_objÁü®9pm [`spawn_local_obj`]: https://docs.rs/futures/0.3/futures/task/trait.LocalSpawn.html#tymethod.spawn_local_objÁÓª¤Ç*äÁ*Dš+block_onÁDÈ: C0block_on_streamÁ|Ò: F1enterÁ,ã: o2BlockingStreamÁtê:Œ3EnterÁ,ú:f4 EnterErrorÁT�;h5 LocalPoolÁL�;z6 LocalSpawnerÁd ;7„¬:ÈÊ­¯œž‚„prZ\EG-/|àAüöA52 A "prelude" for crates using the `futures` crate.Á°B�ü¸BLI This prelude is similar to the standard library's prelude in that you'llÁü‰CDA almost always want to import its entire contents, but unlike theÁüÒC=: standard library's prelude you'll have to do so manually:Á”D�<œD±7ô¨D # #[allow(unused_imports)]ÁäËD use futures::prelude::*;Á<ìD±7øD�ü€EJG The prelude may grow over time as additional items see ubiquitous use.Á<èA‹$èEh:ã4îE¿´;ûLöE!<²$œFÈ%>±$¢F ?Ç$ÅF¶ AË4ËFEBáLÓFbCÝdºILùLÈIM’LÓIN«TÞIO ½G©E ÐGÎF ŽH¡)G îHýI �IûJ ðJÊ1Q ƒK§1R –KÅ1S ªK¸1TlØEU4ßELO@C\ŽF:$•F03lµF*4¼F #l GŒäFLêFL°G$"dÀGGE$¤öGŒØGLÞG;lÑHŒ•HL›HLáH$"rdñHGE…L®IÓ‰|�I¼ŠIÓ‰0#Ó‰+)5(Ó‰@>:-Ó‰US?LÈJÓ‰|öI¼ðIŒŒJL’J|ÝJÓ‰7531IdóJÓ‰igeckd†KÓ‰›™—•�l™KÓ‰ÍËÉǯ'SinksÁ crate::sinkÁ ExecutorsÁcrate::executorÁasynchronous I/OÁ crate::ioÁ�*cross-task communicationÁFuturesÁ crate::futureÁStreamsÁcrate::channelÁ crate::streamÁÐhÚhÈ%êhøhŒi¡i´iÑiÝihÿiói’jÐhÚhêhøh.Œi¡i´iÑiÿiÝiói’j¶ spawn_local_objÁ>https://docs.rs/futures/0.3/futures/task/trait.LocalSpawn.htmlÁí[‚ thread poolÁÓZ Cspawn_okÁThreadPool::spawn_okÁ spawn_objÁ9https://docs.rs/futures/0.3/futures/task/trait.Spawn.htmlÁ¿kÓkí[‚  l¹lÆlÓZßlíl¿kÓkí[z‚  l¹lÓZÆlßlíl¿´!©ÎEbýû ¡)Ê1§1Å1¸1ù ÿ …Ìí¦£¬©ö€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈÇ÷±¯²ù ÿ …Ìí¦£¬©ö€#…#ˆ#‹#Î!Ñ!Ö!ÔPŽQ—PŽPÄQýÆþÆÈÇ÷±¯²�ä÷e_'6»²X9€•tè»IBÅZßî!ÿThÉOâ#“.ks éGY¿o5û]|s/ÀíH:«È¸¹E§¤´�Ú&(ŽH]s4ñv½|ùŽEÄ¡�åïD-sbëH*„ˆäu�¥×©+n[¿z•se�Šï˜ÒJiM\üZ]­†âª ÷Ψ)ïéV–°ß¼Zó[J$ðޚɱ·p�C¤çÇR™‹­ÇŒ×œ\'²¬,;uäÏ]e§W�~�?“� }šS¸f†ãËFdÍ“vOÍ>òЈû�žÑQèÍèAc=—p9�ï¡4i�4ÿ+A½·1BÄovâ4ÄP Ÿƒ’˜áξö„ÔXèßÄn™ñ1Øu®ü´\©�Ç�QLHÙ-á¯�2ª.æt„´…¹Ë›@ §@ùᙇVÏ#{¾[#eYiŠŒÝîßÓ;Û¤¤!† 6i&o9ó@ˆÆ ‹4œC¿èûQÚI6¦ƒõß™ºO:Ô„:_pó]K¿¾Ç>H†ÿ?V§Ê÷ÿi0eøÀì=Åórÿ¬,G1¸ª†ºG:‘9tíÖ·Õ:l"�5ùn×ïÝq¾‹ö¼î§,–‘?äXY¸²[øC‰Æ£¾ë¢5]Xœæ4¡±ÍJ’8lL�á‹v•¤ªvÃÂ…:�_‘-Ñ�Äâ†Å$îö¡{ñ èxƒe¢h›eÓ‰ÿ—Í¢�Ï+N‘oÙ}ôqúüɾGmÊ®Àîm¤cSy]¨æ(v[suÿ­èÝÏÈÑRQÍy(ï2õ®7=�ÆÞ˜ bÖ/Òôâ_F€½t‹ž¾dܬˆò}Ñœ œäJ¸ÍÒ—p>Õ9¦ù>í~vN*§*¥%\QÚLæÈ’“¬ß”õª_…ž f‡z½Ê7…%R-V0TT Ûß$GjŒ¯Òô : \  ¦ Í !4!e!–!È!þ!/"`"‘"Ã"Ê"Ñ"##3#H#]#r#ˆ#¦#Å#ä#$"$B$m$¢$×$ (%%.'.+./.3.7.;.?.C.I .®1±1¸1¾1Å1È1Ï1Ö1Ù1à1æ1í1242W2~2¢2Å2è2þ23(3=3S3Š3¼3î3 4ƒR-V0‚Q-U0O ÒØÛÿ!Cg‰«Ïñ 7 Y { ¢ É !1!b!“!Ä!û!,"]"Ž"¿"Æ"Í"##0#E#Z#o#„#£#Â#á#$$>$i$ž$Ó$%!.%.).-.1.5.9.=.A.E.ª1®1µ1»1Á1Å1Ì1Ò1Ö1Ý1ã1é1 202S2z2ž2Á2ä2û23%3:3O3†3¸3ê34Õ@†¨î V x Ÿ Æ .!_!�!Á!)"Z"‹"¼"Ã"Ê"#-#B#W#l#�#¿#Þ#ý#$;$f$›$Ð$%M-'.+./.3.7.;.?.C.Q0±1¸1¾1È1Ï1Ù1à1æ1-2P2w2¾2á2 3"373L3µ3ç34K4€K-O0lovz~‚†ŠŽ’–šž¢¦ª®²¶º¾ÂÆÊÎÒÖÚÞâæêîòöúþ "&59=AEIMQUY`dhlptx|€„ˆŒ�”˜œ ¤¨¬°´¸¼ÀÄÈÌN4½5-7—7"%Ü �ä÷e_'6šøZÃ`*”VA AA1A!AFA° ODHT U€·Þ»²X9€•tèЈû�žÑQ:l"�5ùn7�ä÷e_'6.æt„´…&eÓ‰ÿ—ÍBo9ó@ˆÆ ‹,†âª ÷Ψ¤¤!† 6i&+dܬˆò}ÑMp9�ï¡se�Šï˜Ò«È¸¹E§¤]e§W�~�?èÍèAc=—î§,–‘?äX9)ïéV–°ß¼=�ÆÞ˜ bÖJ“� }šS¸­ÇŒ×œ\'Àì=Åór3t‹ž¾L4ÄP Ÿƒ’ ¹Ë›@ §@'ŽEÄ¡�åï œ œäJN*§*¥%\QQQÚI6¦ƒõß.´�Ú&(ŽH]¬ß”õª_…žS¢�Ï+N‘Cÿ¬,G14Øu®ü´\#¾GmÊ®ÀîE-á¯�2ª%Íy(ï2õ®7I£¾ë¢5]Xœ;ޚɱ·p�¸ª†ºG:‘5²¬,;uäϘáξö„Ô!4œC¿èû-]|s/ÀíH:pó]K¿¾Ç>0H†ÿ?V§Ê1©+n[¿z• ×ïÝq¾‹ö¼8•¤ªvÃÂ…:>C¤çÇR™‹èÝÏÈÑRQHf†ãËFdÍ“vOÍ>òæ4¡±ÍJ’8<©�Ç�QLHÙ$�_‘-Ñ�Äâ?ŒÝîßÓ;Û*™ºO:Ô„:_/ùᙇVÏ#{(9tíÖ·Õ6»IBÅZßî!Zó[J$ð/Òôâ_F€½KlL�á‹v=D-sbëH ¾[#eYiŠ) èxƒe¢h›AÚLæÈ’“RÿThÉO÷ÿi0eø2â#“.ks XèßÄn™ñ1"éGY¿o5û·1BÄovâoÙ}ôqúüÉD¸ÍÒ—p>Õ9Oæ(v[suÿ­G*„ˆäu�¥× s4ñv½|ù †Å$îö¡{ñ@Y¸²[øC‰Æ:m¤cSy]¨F f‡z½Ê7TJiM\üZ]­¦ù>í~vNP4i�4ÿ+A½t(7fÿÿEThÿÿÿPiRK,ÿ^ÿkÿ\ÿ9_ w ÿÿ oÿ.ÿOHÿ. ÿÿ ÿNÿÿÿHgÿÿj eJ^ÿE(ÿÿ2ÿÿÿlqm/ÿ= ÿÿxÿÿÿ^ÿ$ÿÿEMI'|ÿÿÿ qdVÿk|xcTÿVÿ?^t(7fÿÿEThÿÿÿPT/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/futures-0.3.34/src/lib.rsÁI/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/futures-0.3.34ÁT/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/futures-0.3.34/src/lib.rsÁ x4k߸_ Ðç>ß, ¶K¶Kþ/O FN#<G L O0PKM<R9 "`) E1PQ6!QTY"TUT!-(CJ,* M# QUU?) šR,  @?/';s3939%FT6  U; %$4.IKDJ4RSRS$PR$PSSLT,O4du X$;?2/H$aQ"9Q:QIB #! O6'6@'@IXÏtó.‡F{ øïÎ7CõHx86_64-unknown-linux-gnuÁx}ØÓ:‘RY$¼L~ÈÇfuturesÁ-20192f6477b0c306Á�ä÷e_'6Ÿ”Ë ícU¨9«U9ÿ«U9UUrUªª9rUª//^�Nærust-end-file.note.gnu.property.shstrtab.strtab.symtab.rmeta@ .€`ãK&HL`LaL5lib.rmeta-link/ 0 0 0 644 648 ` ELF>@@GNUÀ>futures-20192f6477b0c306.futures.36275f0365f7e49d-cgu.0.rcgu.oÁrust-end-file.note.gnu.property.rmeta-link.shstrtab.strtab.symtab@ €`N2°*È É:/0 0 0 0 644 624 ` ELF>ð@@rustc version 1.98.1 (48a229cea 2026-09-01)0ñÿ.text.comment.note.GNU-stack.strtab.symtabfutures.36275f0365f7e49d-cgu.0  O@0@-m(p0