summaryrefslogtreecommitdiff
path: root/.localrepo/aio-20200610.1904.tar
blob: 3d7880c86741b0dbb95e5e4f84a2bcabde0e483f (plain)
ofshex dumpascii
0000 61 69 6f 2d 32 30 32 30 30 36 31 30 2e 31 39 30 34 2f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 aio-20200610.1904/..............
0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0060 00 00 00 00 30 30 30 30 37 35 35 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000755.0000000.0000000.0000
0080 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 31 35 35 31 00 20 35 00 00 00 0000000.00000000000.011551..5...
00a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
00c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
00e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0100 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
0120 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
0140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
01e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0200 61 69 6f 2d 32 30 32 30 30 36 31 30 2e 31 39 30 34 2f 52 45 41 44 4d 45 2e 6d 64 00 00 00 00 00 aio-20200610.1904/README.md.....
0220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0260 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000644.0000000.0000000.0000
0280 30 30 31 32 36 36 37 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 33 30 34 34 00 20 30 00 00 00 0012667.00000000000.013044..0...
02a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
02c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
02e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0300 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
0320 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
0340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
03a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
03c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
03e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0400 23 20 61 69 6f 3a 20 61 73 79 6e 63 2f 61 77 61 69 74 20 66 6f 72 20 45 6d 61 63 73 20 4c 69 73 #.aio:.async/await.for.Emacs.Lis
0420 70 0a 0a 60 61 69 6f 60 20 69 73 20 74 6f 20 45 6d 61 63 73 20 4c 69 73 70 20 61 73 20 5b 60 61 p..`aio`.is.to.Emacs.Lisp.as.[`a
0440 73 79 6e 63 69 6f 60 5d 5b 61 73 79 6e 63 69 6f 5d 20 69 73 20 74 6f 20 50 79 74 68 6f 6e 2e 20 syncio`][asyncio].is.to.Python..
0460 54 68 69 73 0a 70 61 63 6b 61 67 65 20 62 75 69 6c 64 73 20 75 70 6f 6e 20 45 6d 61 63 73 20 32 This.package.builds.upon.Emacs.2
0480 35 20 67 65 6e 65 72 61 74 6f 72 73 20 74 6f 20 70 72 6f 76 69 64 65 20 66 75 6e 63 74 69 6f 6e 5.generators.to.provide.function
04a0 73 20 74 68 61 74 0a 70 61 75 73 65 20 77 68 69 6c 65 20 74 68 65 79 20 77 61 69 74 20 6f 6e 20 s.that.pause.while.they.wait.on.
04c0 61 73 79 6e 63 68 72 6f 6e 6f 75 73 20 65 76 65 6e 74 73 2e 20 54 68 65 79 20 64 6f 20 6e 6f 74 asynchronous.events..They.do.not
04e0 20 62 6c 6f 63 6b 20 61 6e 79 0a 74 68 72 65 61 64 20 77 68 69 6c 65 20 70 61 75 73 65 64 2e 0a .block.any.thread.while.paused..
0500 0a 49 6e 74 72 6f 64 75 63 74 69 6f 6e 3a 20 5b 41 6e 20 41 73 79 6e 63 20 2f 20 41 77 61 69 74 .Introduction:.[An.Async./.Await
0520 20 4c 69 62 72 61 72 79 20 66 6f 72 20 45 6d 61 63 73 20 4c 69 73 70 5d 5b 70 6f 73 74 5d 0a 0a .Library.for.Emacs.Lisp][post]..
0540 49 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 69 73 20 5b 61 76 61 69 6c 61 62 6c 65 20 74 68 72 6f 75 Installation.is.[available.throu
0560 67 68 20 4d 45 4c 50 41 5d 5b 6d 65 6c 70 61 5d 2e 20 53 69 6e 63 65 20 69 74 20 75 73 65 73 20 gh.MELPA][melpa]..Since.it.uses.
0580 74 68 65 0a 60 72 65 63 6f 72 64 60 20 62 75 69 6c 74 2d 69 6e 2c 20 69 74 20 72 65 71 75 69 72 the.`record`.built-in,.it.requir
05a0 65 73 20 45 6d 61 63 73 20 32 36 20 6f 72 20 6c 61 74 65 72 2e 0a 0a 23 23 20 55 73 61 67 65 0a es.Emacs.26.or.later...##.Usage.
05c0 0a 41 6e 20 61 73 79 6e 63 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 75 73 .An.async.function.is.defined.us
05e0 69 6e 67 20 60 61 69 6f 2d 64 65 66 75 6e 60 20 6f 72 20 60 61 69 6f 2d 6c 61 6d 62 64 61 60 2e ing.`aio-defun`.or.`aio-lambda`.
0600 20 54 68 65 0a 62 6f 64 79 20 6f 66 20 73 75 63 68 20 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e 20 .The.body.of.such.functions.can.
0620 75 73 65 20 60 61 69 6f 2d 61 77 61 69 74 60 20 74 6f 20 70 61 75 73 65 20 74 68 65 20 66 75 6e use.`aio-await`.to.pause.the.fun
0640 63 74 69 6f 6e 20 61 6e 64 0a 77 61 69 74 20 6f 6e 20 61 20 67 69 76 65 6e 20 70 72 6f 6d 69 73 ction.and.wait.on.a.given.promis
0660 65 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 63 6f 6e 74 69 6e 75 65 73 20 77 69 74 68 20 74 e..The.function.continues.with.t
0680 68 65 20 70 72 6f 6d 69 73 65 27 73 0a 72 65 73 6f 6c 76 65 64 20 76 61 6c 75 65 20 77 68 65 6e he.promise's.resolved.value.when
06a0 20 69 74 27 73 20 72 65 61 64 79 2e 20 54 68 65 20 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 .it's.ready..The.package.provide
06c0 73 20 61 20 6e 75 6d 62 65 72 20 6f 66 0a 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 72 65 74 s.a.number.of.functions.that.ret
06e0 75 72 6e 20 70 72 6f 6d 69 73 65 73 2c 20 61 6e 64 20 65 76 65 72 79 20 61 73 79 6e 63 20 66 75 urn.promises,.and.every.async.fu
0700 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 61 0a 70 72 6f 6d 69 73 65 20 72 65 70 72 65 73 65 nction.returns.a.promise.represe
0720 6e 74 69 6e 67 20 69 74 73 20 66 75 74 75 72 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 0a 0a nting.its.future.return.value...
0740 46 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 0a 60 60 60 65 6c 0a 28 61 69 6f 2d 64 65 66 75 6e 20 66 For.example:..```el.(aio-defun.f
0760 6f 6f 20 28 75 72 6c 29 0a 20 20 28 61 69 6f 2d 61 77 61 69 74 20 28 61 69 6f 2d 73 6c 65 65 70 oo.(url)...(aio-await.(aio-sleep
0780 20 33 29 29 0a 20 20 28 6d 65 73 73 61 67 65 20 22 44 6f 6e 65 20 73 6c 65 65 70 69 6e 67 2e 20 .3))...(message."Done.sleeping..
07a0 4e 6f 77 20 66 65 74 63 68 69 6e 67 20 25 73 22 20 75 72 6c 29 0a 20 20 28 6c 65 74 2a 20 28 28 Now.fetching.%s".url)...(let*.((
07c0 72 65 73 75 6c 74 20 28 61 69 6f 2d 61 77 61 69 74 20 28 61 69 6f 2d 75 72 6c 2d 72 65 74 72 69 result.(aio-await.(aio-url-retri
07e0 65 76 65 20 75 72 6c 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 63 6f 6e 74 65 6e 74 73 20 28 77 eve.url)))..........(contents.(w
0800 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28 63 64 72 20 72 65 73 75 6c 74 29 0a ith-current-buffer.(cdr.result).
0820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 67 31 20 28 62 75 66 .....................(prog1.(buf
0840 66 65 72 2d 73 74 72 69 6e 67 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 fer-string).....................
0860 20 20 20 28 6b 69 6c 6c 2d 62 75 66 66 65 72 29 29 29 29 29 0a 20 20 20 20 28 6d 65 73 73 61 67 ...(kill-buffer))))).....(messag
0880 65 20 22 52 65 73 75 6c 74 3a 20 25 73 22 20 63 6f 6e 74 65 6e 74 73 29 29 29 0a 60 60 60 0a 0a e."Result:.%s".contents))).```..
08a0 49 66 20 61 6e 20 75 6e 63 61 75 67 68 74 20 73 69 67 6e 61 6c 20 74 65 72 6d 69 6e 61 74 65 73 If.an.uncaught.signal.terminates
08c0 20 61 6e 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73 20 66 75 6e 63 74 69 6f 6e 2c 20 74 68 61 74 20 .an.asynchronous.function,.that.
08e0 73 69 67 6e 61 6c 0a 69 73 20 63 61 70 74 75 72 65 64 20 62 79 20 69 74 73 20 72 65 74 75 72 6e signal.is.captured.by.its.return
0900 20 76 61 6c 75 65 20 70 72 6f 6d 69 73 65 20 61 6e 64 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e .value.promise.and.propagated.in
0920 74 6f 20 61 6e 79 0a 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 61 77 61 69 74 73 20 6f 6e 20 74 to.any.function.that.awaits.on.t
0940 68 61 74 20 66 75 6e 63 74 69 6f 6e 2e 0a 0a 60 60 60 65 6c 0a 28 61 69 6f 2d 64 65 66 75 6e 20 hat.function...```el.(aio-defun.
0960 64 69 76 69 64 65 20 28 61 20 62 29 0a 20 20 28 61 69 6f 2d 61 77 61 69 74 20 28 61 69 6f 2d 73 divide.(a.b)...(aio-await.(aio-s
0980 6c 65 65 70 20 31 29 29 0a 20 20 28 2f 20 61 20 62 29 29 0a 0a 28 61 69 6f 2d 64 65 66 75 6e 20 leep.1))...(/.a.b))..(aio-defun.
09a0 64 69 76 69 64 65 2d 73 61 66 65 20 28 61 20 62 29 0a 20 20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63 divide-safe.(a.b)...(condition-c
09c0 61 73 65 20 65 72 72 6f 72 0a 20 20 20 20 20 20 28 61 69 6f 2d 61 77 61 69 74 20 28 64 69 76 69 ase.error.......(aio-await.(divi
09e0 64 65 20 61 20 62 29 29 0a 20 20 20 20 28 61 72 69 74 68 2d 65 72 72 6f 72 20 3a 61 72 69 74 68 de.a.b)).....(arith-error.:arith
0a00 2d 65 72 72 6f 72 29 29 29 0a 0a 28 61 69 6f 2d 77 61 69 74 2d 66 6f 72 20 28 64 69 76 69 64 65 -error)))..(aio-wait-for.(divide
0a20 2d 73 61 66 65 20 31 2e 30 20 32 2e 30 29 29 0a 3b 3b 20 3d 3e 20 30 2e 35 0a 0a 28 61 69 6f 2d -safe.1.0.2.0)).;;.=>.0.5..(aio-
0a40 77 61 69 74 2d 66 6f 72 20 28 64 69 76 69 64 65 2d 73 61 66 65 20 30 20 30 29 29 0a 3b 3b 20 3d wait-for.(divide-safe.0.0)).;;.=
0a60 3e 20 3a 61 72 69 74 68 2d 65 72 72 6f 72 0a 60 60 60 0a 0a 54 6f 20 63 6f 6e 76 65 72 74 20 61 >.:arith-error.```..To.convert.a
0a80 20 63 61 6c 6c 62 61 63 6b 2d 62 61 73 65 64 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 61 6e .callback-based.function.into.an
0aa0 20 61 77 61 69 74 61 62 6c 65 2c 20 61 73 79 6e 63 2d 66 72 69 65 6e 64 6c 79 0a 66 75 6e 63 74 .awaitable,.async-friendly.funct
0ac0 69 6f 6e 2c 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 70 72 6f 6d 69 73 65 20 6f 62 6a 65 63 74 ion,.create.a.new.promise.object
0ae0 20 77 69 74 68 20 60 61 69 6f 2d 70 72 6f 6d 69 73 65 60 2c 20 74 68 65 6e 0a 60 61 69 6f 2d 72 .with.`aio-promise`,.then.`aio-r
0b00 65 73 6f 6c 76 65 60 20 74 68 61 74 20 70 72 6f 6d 69 73 65 20 69 6e 20 74 68 65 20 63 61 6c 6c esolve`.that.promise.in.the.call
0b20 62 61 63 6b 2e 20 54 68 65 20 68 65 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e 2c 0a 60 61 69 6f 2d back..The.helper.function,.`aio-
0b40 6d 61 6b 65 2d 63 61 6c 6c 62 61 63 6b 60 2c 20 6d 61 6b 65 73 20 74 68 69 73 20 65 61 73 79 2e make-callback`,.makes.this.easy.
0b60 0a 0a 23 23 20 55 74 69 6c 69 74 79 20 6d 61 63 72 6f 73 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e ..##.Utility.macros.and.function
0b80 73 0a 0a 60 60 60 65 6c 0a 28 61 69 6f 2d 77 61 69 74 2d 66 6f 72 20 70 72 6f 6d 69 73 65 29 0a s..```el.(aio-wait-for.promise).
0ba0 3b 3b 20 53 79 6e 63 68 72 6f 6e 6f 75 73 6c 79 20 77 61 69 74 20 66 6f 72 20 50 52 4f 4d 49 53 ;;.Synchronously.wait.for.PROMIS
0bc0 45 2c 20 62 6c 6f 63 6b 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 68 72 65 61 64 2e 0a E,.blocking.the.current.thread..
0be0 0a 28 61 69 6f 2d 63 61 6e 63 65 6c 20 70 72 6f 6d 69 73 65 29 0a 3b 3b 20 41 74 74 65 6d 70 74 .(aio-cancel.promise).;;.Attempt
0c00 20 74 6f 20 63 61 6e 63 65 6c 20 50 52 4f 4d 49 53 45 2c 20 72 65 74 75 72 6e 69 6e 67 20 6e 6f .to.cancel.PROMISE,.returning.no
0c20 6e 2d 6e 69 6c 20 69 66 20 73 75 63 63 65 73 73 66 75 6c 2e 0a 0a 28 61 69 6f 2d 77 69 74 68 2d n-nil.if.successful...(aio-with-
0c40 70 72 6f 6d 69 73 65 20 70 72 6f 6d 69 73 65 20 26 72 65 73 74 20 62 6f 64 79 29 20 5b 6d 61 63 promise.promise.&rest.body).[mac
0c60 72 6f 5d 0a 3b 3b 20 45 76 61 6c 75 61 74 65 20 42 4f 44 59 20 61 6e 64 20 72 65 73 6f 6c 76 65 ro].;;.Evaluate.BODY.and.resolve
0c80 20 50 52 4f 4d 49 53 45 20 77 69 74 68 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 0a 28 61 69 6f 2d .PROMISE.with.the.result...(aio-
0ca0 77 69 74 68 2d 61 73 79 6e 63 20 26 72 65 73 74 20 62 6f 64 79 29 20 5b 6d 61 63 72 6f 5d 0a 3b with-async.&rest.body).[macro].;
0cc0 3b 20 45 76 61 6c 75 61 74 65 20 42 4f 44 59 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73 6c 79 20 61 ;.Evaluate.BODY.asynchronously.a
0ce0 73 20 69 66 20 69 74 20 77 61 73 20 69 6e 73 69 64 65 20 60 61 69 6f 2d 6c 61 6d 62 64 61 27 2e s.if.it.was.inside.`aio-lambda'.
0d00 0a 0a 28 61 69 6f 2d 6d 61 6b 65 2d 63 61 6c 6c 62 61 63 6b 20 26 6b 65 79 20 74 61 67 20 6f 6e ..(aio-make-callback.&key.tag.on
0d20 63 65 29 0a 3b 3b 20 52 65 74 75 72 6e 20 61 20 6e 65 77 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e ce).;;.Return.a.new.callback.fun
0d40 63 74 69 6f 6e 20 61 6e 64 20 69 74 73 20 66 69 72 73 74 20 70 72 6f 6d 69 73 65 2e 0a 0a 28 61 ction.and.its.first.promise...(a
0d60 69 6f 2d 63 68 61 69 6e 20 65 78 70 72 29 20 5b 6d 61 63 72 6f 5d 0a 3b 3b 20 60 61 69 6f 2d 61 io-chain.expr).[macro].;;.`aio-a
0d80 77 61 69 74 27 20 6f 6e 20 45 58 50 52 20 61 6e 64 20 72 65 70 6c 61 63 65 20 70 6c 61 63 65 20 wait'.on.EXPR.and.replace.place.
0da0 45 58 50 52 20 77 69 74 68 20 74 68 65 20 6e 65 78 74 20 70 72 6f 6d 69 73 65 2e 0a 60 60 60 0a EXPR.with.the.next.promise..```.
0dc0 0a 54 68 65 20 60 61 69 6f 2d 6d 61 6b 65 2d 63 61 6c 6c 62 61 63 6b 60 20 66 75 6e 63 74 69 6f .The.`aio-make-callback`.functio
0de0 6e 20 69 73 20 65 73 70 65 63 69 61 6c 6c 79 20 75 73 65 66 75 6c 20 66 6f 72 20 63 61 6c 6c 62 n.is.especially.useful.for.callb
0e00 61 63 6b 73 0a 74 68 61 74 20 61 72 65 20 69 6e 76 6f 6b 65 64 20 72 65 70 65 61 74 65 64 6c 79 acks.that.are.invoked.repeatedly
0e20 2c 20 73 75 63 68 20 61 73 20 70 72 6f 63 65 73 73 20 66 69 6c 74 65 72 73 20 61 6e 64 20 73 65 ,.such.as.process.filters.and.se
0e40 6e 74 69 6e 65 6c 73 2e 0a 54 68 65 20 60 61 69 6f 2d 63 68 61 69 6e 60 20 6d 61 63 72 6f 20 77 ntinels..The.`aio-chain`.macro.w
0e60 6f 72 6b 73 20 69 6e 20 63 6f 6e 6a 75 6e 63 74 69 6f 6e 2e 0a 0a 23 23 20 41 77 61 69 74 61 62 orks.in.conjunction...##.Awaitab
0e80 6c 65 20 66 75 6e 63 74 69 6f 6e 73 0a 0a 48 65 72 65 20 61 72 65 20 73 6f 6d 65 20 75 73 65 66 le.functions..Here.are.some.usef
0ea0 75 6c 20 70 72 6f 6d 69 73 65 2d 72 65 74 75 72 6e 69 6e 67 20 e2 80 94 20 69 2e 65 2e 20 61 77 ul.promise-returning.....i.e..aw
0ec0 61 69 74 61 62 6c 65 20 e2 80 94 20 66 75 6e 63 74 69 6f 6e 73 0a 64 65 66 69 6e 65 64 20 62 79 aitable.....functions.defined.by
0ee0 20 74 68 69 73 20 70 61 63 6b 61 67 65 2e 0a 0a 60 60 60 65 6c 0a 28 61 69 6f 2d 73 6c 65 65 70 .this.package...```el.(aio-sleep
0f00 20 73 65 63 6f 6e 64 73 20 26 6f 70 74 69 6f 6e 61 6c 20 72 65 73 75 6c 74 29 0a 3b 3b 20 52 65 .seconds.&optional.result).;;.Re
0f20 74 75 72 6e 20 61 20 70 72 6f 6d 69 73 65 20 74 68 61 74 20 69 73 20 72 65 73 6f 6c 76 65 64 20 turn.a.promise.that.is.resolved.
0f40 61 66 74 65 72 20 53 45 43 4f 4e 44 53 20 77 69 74 68 20 52 45 53 55 4c 54 2e 0a 0a 28 61 69 6f after.SECONDS.with.RESULT...(aio
0f60 2d 69 64 6c 65 20 73 65 63 6f 6e 64 73 20 26 6f 70 74 69 6f 6e 61 6c 20 72 65 73 75 6c 74 29 0a -idle.seconds.&optional.result).
0f80 3b 3b 20 52 65 74 75 72 6e 20 61 20 70 72 6f 6d 69 73 65 20 74 68 61 74 20 69 73 20 72 65 73 6f ;;.Return.a.promise.that.is.reso
0fa0 6c 76 65 64 20 61 66 74 65 72 20 69 64 6c 65 20 53 45 43 4f 4e 44 53 20 77 69 74 68 20 52 45 53 lved.after.idle.SECONDS.with.RES
0fc0 55 4c 54 2e 0a 0a 28 61 69 6f 2d 75 72 6c 2d 72 65 74 72 69 65 76 65 20 75 72 6c 20 26 6f 70 74 ULT...(aio-url-retrieve.url.&opt
0fe0 69 6f 6e 61 6c 20 73 69 6c 65 6e 74 20 69 6e 68 69 62 69 74 2d 63 6f 6f 6b 69 65 73 29 0a 3b 3b ional.silent.inhibit-cookies).;;
1000 20 57 72 61 70 73 20 60 75 72 6c 2d 72 65 74 72 69 65 76 65 27 20 69 6e 20 61 20 70 72 6f 6d 69 .Wraps.`url-retrieve'.in.a.promi
1020 73 65 2e 0a 0a 28 61 69 6f 2d 61 6c 6c 20 70 72 6f 6d 69 73 65 73 29 0a 3b 3b 20 52 65 74 75 72 se...(aio-all.promises).;;.Retur
1040 6e 20 61 20 70 72 6f 6d 69 73 65 20 74 68 61 74 20 72 65 73 6f 6c 76 65 73 20 77 68 65 6e 20 61 n.a.promise.that.resolves.when.a
1060 6c 6c 20 50 52 4f 4d 49 53 45 53 20 61 72 65 20 72 65 73 6f 6c 76 65 64 2e 22 0a 60 60 60 0a 0a ll.PROMISES.are.resolved.".```..
1080 23 23 20 53 65 6c 65 63 74 20 41 50 49 0a 0a 54 68 69 73 20 70 61 63 6b 61 67 65 20 69 6e 63 6c ##.Select.API..This.package.incl
10a0 75 64 65 73 20 61 20 73 65 6c 65 63 74 28 29 2d 6c 69 6b 65 2c 20 6c 65 76 65 6c 2d 74 72 69 67 udes.a.select()-like,.level-trig
10c0 67 65 72 65 64 20 41 50 49 20 66 6f 72 20 77 61 69 74 69 6e 67 0a 6f 6e 20 6d 75 6c 74 69 70 6c gered.API.for.waiting.on.multipl
10e0 65 20 70 72 6f 6d 69 73 65 73 20 61 74 20 6f 6e 63 65 2e 20 43 72 65 61 74 65 20 61 20 22 73 65 e.promises.at.once..Create.a."se
1100 6c 65 63 74 22 20 6f 62 6a 65 63 74 2c 20 61 64 64 20 70 72 6f 6d 69 73 65 73 0a 74 6f 20 69 74 lect".object,.add.promises.to.it
1120 2c 20 61 6e 64 20 61 77 61 69 74 20 6f 6e 20 69 74 2e 20 52 65 73 6f 6c 76 65 64 20 61 6e 64 20 ,.and.await.on.it..Resolved.and.
1140 72 65 74 75 72 6e 65 64 20 70 72 6f 6d 69 73 65 73 20 61 72 65 0a 61 75 74 6f 6d 61 74 69 63 61 returned.promises.are.automatica
1160 6c 6c 79 20 72 65 6d 6f 76 65 64 2c 20 61 6e 64 20 74 68 65 20 22 73 65 6c 65 63 74 22 20 6f 62 lly.removed,.and.the."select".ob
1180 6a 65 63 74 20 63 61 6e 20 62 65 20 72 65 75 73 65 64 2e 0a 0a 60 60 60 65 6c 0a 28 61 69 6f 2d ject.can.be.reused...```el.(aio-
11a0 6d 61 6b 65 2d 73 65 6c 65 63 74 20 26 6f 70 74 69 6f 6e 61 6c 20 70 72 6f 6d 69 73 65 73 29 0a make-select.&optional.promises).
11c0 3b 3b 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 60 61 69 6f 2d 73 65 6c 65 63 74 27 20 6f 62 6a ;;.Create.a.new.`aio-select'.obj
11e0 65 63 74 20 66 6f 72 20 77 61 69 74 69 6e 67 20 6f 6e 20 6d 75 6c 74 69 70 6c 65 20 70 72 6f 6d ect.for.waiting.on.multiple.prom
1200 69 73 65 73 2e 0a 0a 28 61 69 6f 2d 73 65 6c 65 63 74 2d 61 64 64 20 73 65 6c 65 63 74 20 70 72 ises...(aio-select-add.select.pr
1220 6f 6d 69 73 65 29 0a 3b 3b 20 41 64 64 20 50 52 4f 4d 49 53 45 20 74 6f 20 74 68 65 20 73 65 74 omise).;;.Add.PROMISE.to.the.set
1240 20 6f 66 20 70 72 6f 6d 69 73 65 73 20 69 6e 20 53 45 4c 45 43 54 2e 0a 0a 28 61 69 6f 2d 73 65 .of.promises.in.SELECT...(aio-se
1260 6c 65 63 74 2d 72 65 6d 6f 76 65 20 73 65 6c 65 63 74 20 70 72 6f 6d 69 73 65 29 0a 3b 3b 20 52 lect-remove.select.promise).;;.R
1280 65 6d 6f 76 65 20 50 52 4f 4d 49 53 45 20 66 6f 72 6d 20 74 68 65 20 73 65 74 20 6f 66 20 70 72 emove.PROMISE.form.the.set.of.pr
12a0 6f 6d 69 73 65 73 20 69 6e 20 53 45 4c 45 43 54 2e 0a 0a 28 61 69 6f 2d 73 65 6c 65 63 74 2d 70 omises.in.SELECT...(aio-select-p
12c0 72 6f 6d 69 73 65 73 20 73 65 6c 65 63 74 29 0a 3b 3b 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74 romises.select).;;.Return.a.list
12e0 20 6f 66 20 70 72 6f 6d 69 73 65 73 20 69 6e 20 53 45 4c 45 43 54 2e 0a 0a 28 61 69 6f 2d 73 65 .of.promises.in.SELECT...(aio-se
1300 6c 65 63 74 20 73 65 6c 65 63 74 29 0a 3b 3b 20 52 65 74 75 72 6e 20 61 20 70 72 6f 6d 69 73 65 lect.select).;;.Return.a.promise
1320 20 74 68 61 74 20 72 65 73 6f 6c 76 65 73 20 77 68 65 6e 20 61 6e 79 20 70 72 6f 6d 69 73 65 20 .that.resolves.when.any.promise.
1340 69 6e 20 53 45 4c 45 43 54 20 72 65 73 6f 6c 76 65 73 2e 0a 60 60 60 0a 0a 46 6f 72 20 65 78 61 in.SELECT.resolves..```..For.exa
1360 6d 70 6c 65 2c 20 68 65 72 65 27 73 20 61 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f mple,.here's.an.implementation.o
1380 66 20 73 6c 65 65 70 20 73 6f 72 74 3a 0a 0a 60 60 60 65 6c 0a 28 61 69 6f 2d 64 65 66 75 6e 20 f.sleep.sort:..```el.(aio-defun.
13a0 73 6c 65 65 70 2d 73 6f 72 74 20 28 76 61 6c 75 65 73 29 0a 20 20 28 6c 65 74 2a 20 28 28 70 72 sleep-sort.(values)...(let*.((pr
13c0 6f 6d 69 73 65 73 20 28 6d 61 70 63 61 72 20 28 6c 61 6d 62 64 61 20 28 76 29 20 28 61 69 6f 2d omises.(mapcar.(lambda.(v).(aio-
13e0 73 6c 65 65 70 20 76 20 76 29 29 20 76 61 6c 75 65 73 29 29 0a 20 20 20 20 20 20 20 20 20 28 73 sleep.v.v)).values))..........(s
1400 65 6c 65 63 74 20 28 61 69 6f 2d 6d 61 6b 65 2d 73 65 6c 65 63 74 20 70 72 6f 6d 69 73 65 73 29 elect.(aio-make-select.promises)
1420 29 29 0a 20 20 20 20 28 63 6c 2d 6c 6f 6f 70 20 72 65 70 65 61 74 20 28 6c 65 6e 67 74 68 20 70 )).....(cl-loop.repeat.(length.p
1440 72 6f 6d 69 73 65 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 6e 65 78 74 20 3d romises)..............for.next.=
1460 20 28 61 69 6f 2d 61 77 61 69 74 20 28 61 69 6f 2d 73 65 6c 65 63 74 20 73 65 6c 65 63 74 29 29 .(aio-await.(aio-select.select))
1480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 20 28 61 69 6f 2d 61 77 61 69 74 ..............collect.(aio-await
14a0 20 6e 65 78 74 29 29 29 29 0a 60 60 60 0a 0a 23 23 20 53 65 6d 61 70 68 6f 72 65 20 41 50 49 0a .next)))).```..##.Semaphore.API.
14c0 0a 53 65 6d 61 70 68 6f 72 65 73 20 77 6f 72 6b 20 6a 75 73 74 20 61 73 20 74 68 65 79 20 77 6f .Semaphores.work.just.as.they.wo
14e0 75 6c 64 20 61 73 20 61 20 74 68 72 65 61 64 20 73 79 6e 63 68 72 6f 6e 69 7a 61 74 69 6f 6e 0a uld.as.a.thread.synchronization.
1500 70 72 69 6d 69 74 69 76 65 2e 20 54 68 65 72 65 27 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 20 63 primitive..There's.an.internal.c
1520 6f 75 6e 74 65 72 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 64 72 6f 70 20 62 65 6c 6f 77 20 7a 65 ounter.that.cannot.drop.below.ze
1540 72 6f 2c 0a 61 6e 64 20 60 61 69 6f 2d 73 65 6d 2d 77 61 69 74 60 20 69 73 20 61 6e 20 61 77 61 ro,.and.`aio-sem-wait`.is.an.awa
1560 69 74 61 62 6c 65 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 6d 61 79 20 62 6c 6f 63 6b 20 74 itable.function.that.may.block.t
1580 68 65 0a 61 73 79 6e 63 68 72 6f 6e 6f 75 73 20 66 75 6e 63 74 69 6f 6e 20 75 6e 74 69 6c 20 61 he.asynchronous.function.until.a
15a0 6e 6f 74 68 65 72 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73 20 66 75 6e 63 74 69 6f 6e 20 63 61 6c nother.asynchronous.function.cal
15c0 6c 73 0a 60 61 69 6f 2d 73 65 6d 2d 70 6f 73 74 60 2e 20 42 6c 6f 63 6b 65 64 20 66 75 6e 63 74 ls.`aio-sem-post`..Blocked.funct
15e0 69 6f 6e 73 20 77 61 69 74 20 69 6e 20 61 20 46 49 46 4f 20 71 75 65 75 65 20 61 6e 64 20 61 72 ions.wait.in.a.FIFO.queue.and.ar
1600 65 20 61 77 6f 6b 65 6e 0a 69 6e 20 74 68 65 20 73 61 6d 65 20 6f 72 64 65 72 20 74 68 61 74 20 e.awoken.in.the.same.order.that.
1620 74 68 65 79 20 61 77 61 69 74 65 64 2e 0a 0a 60 60 60 65 6c 0a 28 61 69 6f 2d 73 65 6d 20 69 6e they.awaited...```el.(aio-sem.in
1640 69 74 29 0a 3b 3b 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 73 65 6d 61 70 68 6f 72 65 20 77 69 it).;;.Create.a.new.semaphore.wi
1660 74 68 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 49 4e 49 54 2e 0a 0a 28 61 69 6f 2d 73 65 6d th.initial.value.INIT...(aio-sem
1680 2d 70 6f 73 74 20 73 65 6d 29 0a 3b 3b 20 49 6e 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 -post.sem).;;.Increment.the.valu
16a0 65 20 6f 66 20 53 45 4d 2e 0a 0a 28 61 69 6f 2d 73 65 6d 2d 77 61 69 74 20 73 65 6d 29 0a 3b 3b e.of.SEM...(aio-sem-wait.sem).;;
16c0 20 44 65 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 53 45 4d 2e 0a 60 60 60 .Decrement.the.value.of.SEM..```
16e0 0a 0a 54 68 69 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 77 ..This.can.be.used.to.create.a.w
1700 6f 72 6b 20 71 75 65 75 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 68 65 72 65 27 73 20 61 ork.queue..For.example,.here's.a
1720 0a 63 6f 6e 66 69 67 75 72 61 62 6c 65 20 64 6f 77 6e 6c 6f 61 64 20 71 75 65 75 65 20 66 6f 72 .configurable.download.queue.for
1740 20 60 75 72 6c 2d 72 65 74 72 69 65 76 65 60 3a 0a 0a 60 60 60 65 6c 0a 28 64 65 66 75 6e 20 66 .`url-retrieve`:..```el.(defun.f
1760 65 74 63 68 20 28 75 72 6c 2d 6c 69 73 74 20 6d 61 78 2d 70 61 72 61 6c 6c 65 6c 20 63 61 6c 6c etch.(url-list.max-parallel.call
1780 62 61 63 6b 29 0a 20 20 28 6c 65 74 20 28 28 73 65 6d 20 28 61 69 6f 2d 73 65 6d 20 6d 61 78 2d back)...(let.((sem.(aio-sem.max-
17a0 70 61 72 61 6c 6c 65 6c 29 29 29 0a 20 20 20 20 28 64 6f 6c 69 73 74 20 28 75 72 6c 20 75 72 6c parallel))).....(dolist.(url.url
17c0 2d 6c 69 73 74 29 0a 20 20 20 20 20 20 28 61 69 6f 2d 77 69 74 68 2d 61 73 79 6e 63 0a 20 20 20 -list).......(aio-with-async....
17e0 20 20 20 20 20 28 61 69 6f 2d 61 77 61 69 74 20 28 61 69 6f 2d 73 65 6d 2d 77 61 69 74 20 73 65 .....(aio-await.(aio-sem-wait.se
1800 6d 29 29 0a 20 20 20 20 20 20 20 20 28 63 6c 2d 64 65 73 74 72 75 63 74 75 72 69 6e 67 2d 62 69 m)).........(cl-destructuring-bi
1820 6e 64 20 28 73 74 61 74 75 73 20 2e 20 62 75 66 66 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 nd.(status...buffer)............
1840 20 28 61 69 6f 2d 61 77 61 69 74 20 28 61 69 6f 2d 75 72 6c 2d 72 65 74 72 69 65 76 65 20 75 72 .(aio-await.(aio-url-retrieve.ur
1860 6c 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 61 69 6f 2d 73 65 6d 2d 70 6f 73 74 20 73 65 6d 29 l))...........(aio-sem-post.sem)
1880 0a 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 63 61 6c 6c 62 61 63 6b 0a 20 20 20 ...........(funcall.callback....
18a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 ................(with-current-bu
18c0 66 66 65 72 20 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ffer.buffer.....................
18e0 20 28 70 72 6f 67 31 20 28 62 75 66 66 65 72 2d 73 74 72 69 6e 67 29 0a 20 20 20 20 20 20 20 20 .(prog1.(buffer-string).........
1900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6b 69 6c 6c 2d 62 75 66 66 65 72 29 29 29 29 29 ...............(kill-buffer)))))
1920 29 29 29 29 0a 60 60 60 0a 0a 0a 5b 61 73 79 6e 63 69 6f 5d 3a 20 68 74 74 70 73 3a 2f 2f 64 6f )))).```...[asyncio]:.https://do
1940 63 73 2e 70 79 74 68 6f 6e 2e 6f 72 67 2f 33 2f 6c 69 62 72 61 72 79 2f 61 73 79 6e 63 69 6f 2e cs.python.org/3/library/asyncio.
1960 68 74 6d 6c 0a 5b 6d 65 6c 70 61 5d 3a 20 68 74 74 70 73 3a 2f 2f 6d 65 6c 70 61 2e 6f 72 67 2f html.[melpa]:.https://melpa.org/
1980 23 2f 61 69 6f 0a 5b 70 6f 73 74 5d 3a 20 68 74 74 70 73 3a 2f 2f 6e 75 6c 6c 70 72 6f 67 72 61 #/aio.[post]:.https://nullprogra
19a0 6d 2e 63 6f 6d 2f 62 6c 6f 67 2f 32 30 31 39 2f 30 33 2f 31 30 2f 0a 00 00 00 00 00 00 00 00 00 m.com/blog/2019/03/10/..........
19c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
19e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a00 61 69 6f 2d 32 30 32 30 30 36 31 30 2e 31 39 30 34 2f 55 4e 4c 49 43 45 4e 53 45 00 00 00 00 00 aio-20200610.1904/UNLICENSE.....
1a20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a60 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000644.0000000.0000000.0000
1a80 30 30 30 32 32 37 33 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 33 30 32 35 00 20 30 00 00 00 0002273.00000000000.013025..0...
1aa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ac0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ae0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b00 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
1b20 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
1b40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ba0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1bc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1be0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1c00 54 68 69 73 20 69 73 20 66 72 65 65 20 61 6e 64 20 75 6e 65 6e 63 75 6d 62 65 72 65 64 20 73 6f This.is.free.and.unencumbered.so
1c20 66 74 77 61 72 65 20 72 65 6c 65 61 73 65 64 20 69 6e 74 6f 20 74 68 65 20 70 75 62 6c 69 63 20 ftware.released.into.the.public.
1c40 64 6f 6d 61 69 6e 2e 0a 0a 41 6e 79 6f 6e 65 20 69 73 20 66 72 65 65 20 74 6f 20 63 6f 70 79 2c domain...Anyone.is.free.to.copy,
1c60 20 6d 6f 64 69 66 79 2c 20 70 75 62 6c 69 73 68 2c 20 75 73 65 2c 20 63 6f 6d 70 69 6c 65 2c 20 .modify,.publish,.use,.compile,.
1c80 73 65 6c 6c 2c 20 6f 72 0a 64 69 73 74 72 69 62 75 74 65 20 74 68 69 73 20 73 6f 66 74 77 61 72 sell,.or.distribute.this.softwar
1ca0 65 2c 20 65 69 74 68 65 72 20 69 6e 20 73 6f 75 72 63 65 20 63 6f 64 65 20 66 6f 72 6d 20 6f 72 e,.either.in.source.code.form.or
1cc0 20 61 73 20 61 20 63 6f 6d 70 69 6c 65 64 0a 62 69 6e 61 72 79 2c 20 66 6f 72 20 61 6e 79 20 70 .as.a.compiled.binary,.for.any.p
1ce0 75 72 70 6f 73 65 2c 20 63 6f 6d 6d 65 72 63 69 61 6c 20 6f 72 20 6e 6f 6e 2d 63 6f 6d 6d 65 72 urpose,.commercial.or.non-commer
1d00 63 69 61 6c 2c 20 61 6e 64 20 62 79 20 61 6e 79 0a 6d 65 61 6e 73 2e 0a 0a 49 6e 20 6a 75 72 69 cial,.and.by.any.means...In.juri
1d20 73 64 69 63 74 69 6f 6e 73 20 74 68 61 74 20 72 65 63 6f 67 6e 69 7a 65 20 63 6f 70 79 72 69 67 sdictions.that.recognize.copyrig
1d40 68 74 20 6c 61 77 73 2c 20 74 68 65 20 61 75 74 68 6f 72 20 6f 72 20 61 75 74 68 6f 72 73 0a 6f ht.laws,.the.author.or.authors.o
1d60 66 20 74 68 69 73 20 73 6f 66 74 77 61 72 65 20 64 65 64 69 63 61 74 65 20 61 6e 79 20 61 6e 64 f.this.software.dedicate.any.and
1d80 20 61 6c 6c 20 63 6f 70 79 72 69 67 68 74 20 69 6e 74 65 72 65 73 74 20 69 6e 20 74 68 65 0a 73 .all.copyright.interest.in.the.s
1da0 6f 66 74 77 61 72 65 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2e 20 57 65 oftware.to.the.public.domain..We
1dc0 20 6d 61 6b 65 20 74 68 69 73 20 64 65 64 69 63 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 62 65 .make.this.dedication.for.the.be
1de0 6e 65 66 69 74 0a 6f 66 20 74 68 65 20 70 75 62 6c 69 63 20 61 74 20 6c 61 72 67 65 20 61 6e 64 nefit.of.the.public.at.large.and
1e00 20 74 6f 20 74 68 65 20 64 65 74 72 69 6d 65 6e 74 20 6f 66 20 6f 75 72 20 68 65 69 72 73 20 61 .to.the.detriment.of.our.heirs.a
1e20 6e 64 0a 73 75 63 63 65 73 73 6f 72 73 2e 20 57 65 20 69 6e 74 65 6e 64 20 74 68 69 73 20 64 65 nd.successors..We.intend.this.de
1e40 64 69 63 61 74 69 6f 6e 20 74 6f 20 62 65 20 61 6e 20 6f 76 65 72 74 20 61 63 74 20 6f 66 0a 72 dication.to.be.an.overt.act.of.r
1e60 65 6c 69 6e 71 75 69 73 68 6d 65 6e 74 20 69 6e 20 70 65 72 70 65 74 75 69 74 79 20 6f 66 20 61 elinquishment.in.perpetuity.of.a
1e80 6c 6c 20 70 72 65 73 65 6e 74 20 61 6e 64 20 66 75 74 75 72 65 20 72 69 67 68 74 73 20 74 6f 20 ll.present.and.future.rights.to.
1ea0 74 68 69 73 0a 73 6f 66 74 77 61 72 65 20 75 6e 64 65 72 20 63 6f 70 79 72 69 67 68 74 20 6c 61 this.software.under.copyright.la
1ec0 77 2e 0a 0a 54 48 45 20 53 4f 46 54 57 41 52 45 20 49 53 20 50 52 4f 56 49 44 45 44 20 22 41 53 w...THE.SOFTWARE.IS.PROVIDED."AS
1ee0 20 49 53 22 2c 20 57 49 54 48 4f 55 54 20 57 41 52 52 41 4e 54 59 20 4f 46 20 41 4e 59 20 4b 49 .IS",.WITHOUT.WARRANTY.OF.ANY.KI
1f00 4e 44 2c 0a 45 58 50 52 45 53 53 20 4f 52 20 49 4d 50 4c 49 45 44 2c 20 49 4e 43 4c 55 44 49 4e ND,.EXPRESS.OR.IMPLIED,.INCLUDIN
1f20 47 20 42 55 54 20 4e 4f 54 20 4c 49 4d 49 54 45 44 20 54 4f 20 54 48 45 20 57 41 52 52 41 4e 54 G.BUT.NOT.LIMITED.TO.THE.WARRANT
1f40 49 45 53 20 4f 46 0a 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59 2c 20 46 49 54 4e 45 53 53 20 IES.OF.MERCHANTABILITY,.FITNESS.
1f60 46 4f 52 20 41 20 50 41 52 54 49 43 55 4c 41 52 20 50 55 52 50 4f 53 45 20 41 4e 44 20 4e 4f 4e FOR.A.PARTICULAR.PURPOSE.AND.NON
1f80 49 4e 46 52 49 4e 47 45 4d 45 4e 54 2e 0a 49 4e 20 4e 4f 20 45 56 45 4e 54 20 53 48 41 4c 4c 20 INFRINGEMENT..IN.NO.EVENT.SHALL.
1fa0 54 48 45 20 41 55 54 48 4f 52 53 20 42 45 20 4c 49 41 42 4c 45 20 46 4f 52 20 41 4e 59 20 43 4c THE.AUTHORS.BE.LIABLE.FOR.ANY.CL
1fc0 41 49 4d 2c 20 44 41 4d 41 47 45 53 20 4f 52 0a 4f 54 48 45 52 20 4c 49 41 42 49 4c 49 54 59 2c AIM,.DAMAGES.OR.OTHER.LIABILITY,
1fe0 20 57 48 45 54 48 45 52 20 49 4e 20 41 4e 20 41 43 54 49 4f 4e 20 4f 46 20 43 4f 4e 54 52 41 43 .WHETHER.IN.AN.ACTION.OF.CONTRAC
2000 54 2c 20 54 4f 52 54 20 4f 52 20 4f 54 48 45 52 57 49 53 45 2c 0a 41 52 49 53 49 4e 47 20 46 52 T,.TORT.OR.OTHERWISE,.ARISING.FR
2020 4f 4d 2c 20 4f 55 54 20 4f 46 20 4f 52 20 49 4e 20 43 4f 4e 4e 45 43 54 49 4f 4e 20 57 49 54 48 OM,.OUT.OF.OR.IN.CONNECTION.WITH
2040 20 54 48 45 20 53 4f 46 54 57 41 52 45 20 4f 52 20 54 48 45 20 55 53 45 20 4f 52 0a 4f 54 48 45 .THE.SOFTWARE.OR.THE.USE.OR.OTHE
2060 52 20 44 45 41 4c 49 4e 47 53 20 49 4e 20 54 48 45 20 53 4f 46 54 57 41 52 45 2e 0a 0a 46 6f 72 R.DEALINGS.IN.THE.SOFTWARE...For
2080 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 70 6c 65 61 73 65 20 72 65 66 65 72 20 .more.information,.please.refer.
20a0 74 6f 20 3c 68 74 74 70 3a 2f 2f 75 6e 6c 69 63 65 6e 73 65 2e 6f 72 67 2f 3e 0a 00 00 00 00 00 to.<http://unlicense.org/>......
20c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
21a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
21c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
21e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2200 61 69 6f 2d 32 30 32 30 30 36 31 30 2e 31 39 30 34 2f 61 69 6f 2d 70 6b 67 2e 65 6c 00 00 00 00 aio-20200610.1904/aio-pkg.el....
2220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2260 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000644.0000000.0000000.0000
2280 30 30 30 30 36 32 33 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 33 34 32 33 00 20 30 00 00 00 0000623.00000000000.013423..0...
22a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
22c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
22e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2300 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
2320 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
2340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
23a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
23c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
23e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2400 3b 3b 20 2d 2a 2d 20 6e 6f 2d 62 79 74 65 2d 63 6f 6d 70 69 6c 65 3a 20 74 3b 20 6c 65 78 69 63 ;;.-*-.no-byte-compile:.t;.lexic
2420 61 6c 2d 62 69 6e 64 69 6e 67 3a 20 6e 69 6c 20 2d 2a 2d 0a 28 64 65 66 69 6e 65 2d 70 61 63 6b al-binding:.nil.-*-.(define-pack
2440 61 67 65 20 22 61 69 6f 22 20 22 32 30 32 30 30 36 31 30 2e 31 39 30 34 22 0a 20 20 22 41 73 79 age."aio"."20200610.1904"..."Asy
2460 6e 63 2f 61 77 61 69 74 20 66 6f 72 20 45 6d 61 63 73 20 4c 69 73 70 2e 22 0a 20 20 27 28 28 65 nc/await.for.Emacs.Lisp."...'((e
2480 6d 61 63 73 20 22 32 36 2e 31 22 29 29 0a 20 20 3a 75 72 6c 20 22 68 74 74 70 73 3a 2f 2f 67 69 macs."26.1"))...:url."https://gi
24a0 74 68 75 62 2e 63 6f 6d 2f 73 6b 65 65 74 6f 2f 65 6d 61 63 73 2d 61 69 6f 22 0a 20 20 3a 63 6f thub.com/skeeto/emacs-aio"...:co
24c0 6d 6d 69 74 20 22 64 61 39 33 35 32 33 65 32 33 35 35 32 39 66 61 39 37 64 36 66 32 35 31 33 31 mmit."da93523e235529fa97d6f25131
24e0 39 64 39 65 31 64 36 66 63 32 34 61 34 31 22 0a 20 20 3a 72 65 76 64 65 73 63 20 22 64 61 39 33 9d9e1d6fc24a41"...:revdesc."da93
2500 35 32 33 65 32 33 35 35 22 0a 20 20 3a 61 75 74 68 6f 72 73 20 27 28 28 22 43 68 72 69 73 74 6f 523e2355"...:authors.'(("Christo
2520 70 68 65 72 20 57 65 6c 6c 6f 6e 73 22 20 2e 20 22 77 65 6c 6c 6f 6e 73 40 6e 75 6c 6c 70 72 6f pher.Wellons"..."wellons@nullpro
2540 67 72 61 6d 2e 63 6f 6d 22 29 29 0a 20 20 3a 6d 61 69 6e 74 61 69 6e 65 72 73 20 27 28 28 22 43 gram.com"))...:maintainers.'(("C
2560 68 72 69 73 74 6f 70 68 65 72 20 57 65 6c 6c 6f 6e 73 22 20 2e 20 22 77 65 6c 6c 6f 6e 73 40 6e hristopher.Wellons"..."wellons@n
2580 75 6c 6c 70 72 6f 67 72 61 6d 2e 63 6f 6d 22 29 29 29 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 ullprogram.com")))..............
25a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
25c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
25e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2600 61 69 6f 2d 32 30 32 30 30 36 31 30 2e 31 39 30 34 2f 61 69 6f 2e 65 6c 00 00 00 00 00 00 00 00 aio-20200610.1904/aio.el........
2620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2640 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2660 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 ....0000644.0000000.0000000.0000
2680 30 30 34 31 34 30 30 00 30 30 30 30 30 30 30 30 30 30 30 00 30 31 32 36 34 32 00 20 30 00 00 00 0041400.00000000000.012642..0...
26a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
26c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
26e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2700 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar...root...................
2720 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........root...................
2740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
27a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
27c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
27e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
2800 3b 3b 3b 20 61 69 6f 2e 65 6c 20 2d 2d 2d 20 61 73 79 6e 63 2f 61 77 61 69 74 20 66 6f 72 20 45 ;;;.aio.el.---.async/await.for.E
2820 6d 61 63 73 20 4c 69 73 70 20 2d 2a 2d 20 6c 65 78 69 63 61 6c 2d 62 69 6e 64 69 6e 67 3a 20 74 macs.Lisp.-*-.lexical-binding:.t
2840 3b 20 2d 2a 2d 0a 0a 3b 3b 20 54 68 69 73 20 69 73 20 66 72 65 65 20 61 6e 64 20 75 6e 65 6e 63 ;.-*-..;;.This.is.free.and.unenc
2860 75 6d 62 65 72 65 64 20 73 6f 66 74 77 61 72 65 20 72 65 6c 65 61 73 65 64 20 69 6e 74 6f 20 74 umbered.software.released.into.t
2880 68 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2e 0a 0a 3b 3b 20 41 75 74 68 6f 72 3a 20 43 68 he.public.domain...;;.Author:.Ch
28a0 72 69 73 74 6f 70 68 65 72 20 57 65 6c 6c 6f 6e 73 20 3c 77 65 6c 6c 6f 6e 73 40 6e 75 6c 6c 70 ristopher.Wellons.<wellons@nullp
28c0 72 6f 67 72 61 6d 2e 63 6f 6d 3e 0a 3b 3b 20 55 52 4c 3a 20 68 74 74 70 73 3a 2f 2f 67 69 74 68 rogram.com>.;;.URL:.https://gith
28e0 75 62 2e 63 6f 6d 2f 73 6b 65 65 74 6f 2f 65 6d 61 63 73 2d 61 69 6f 0a 3b 3b 20 50 61 63 6b 61 ub.com/skeeto/emacs-aio.;;.Packa
2900 67 65 2d 56 65 72 73 69 6f 6e 3a 20 32 30 32 30 30 36 31 30 2e 31 39 30 34 0a 3b 3b 20 50 61 63 ge-Version:.20200610.1904.;;.Pac
2920 6b 61 67 65 2d 52 65 76 69 73 69 6f 6e 3a 20 64 61 39 33 35 32 33 65 32 33 35 35 0a 3b 3b 20 50 kage-Revision:.da93523e2355.;;.P
2940 61 63 6b 61 67 65 2d 52 65 71 75 69 72 65 73 3a 20 28 28 65 6d 61 63 73 20 22 32 36 2e 31 22 29 ackage-Requires:.((emacs."26.1")
2960 29 0a 0a 3b 3b 3b 20 43 6f 6d 6d 65 6e 74 61 72 79 3a 0a 0a 3b 3b 20 60 61 69 6f 60 20 69 73 20 )..;;;.Commentary:..;;.`aio`.is.
2980 74 6f 20 45 6d 61 63 73 20 4c 69 73 70 20 61 73 20 5b 60 61 73 79 6e 63 69 6f 60 5d 5b 61 73 79 to.Emacs.Lisp.as.[`asyncio`][asy
29a0 6e 63 69 6f 5d 20 69 73 20 74 6f 20 50 79 74 68 6f 6e 2e 20 54 68 69 73 0a 3b 3b 20 70 61 63 6b ncio].is.to.Python..This.;;.pack
29c0 61 67 65 20 62 75 69 6c 64 73 20 75 70 6f 6e 20 45 6d 61 63 73 20 32 35 20 67 65 6e 65 72 61 74 age.builds.upon.Emacs.25.generat
29e0 6f 72 73 20 74 6f 20 70 72 6f 76 69 64 65 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 0a 3b 3b ors.to.provide.functions.that.;;
2a00 20 70 61 75 73 65 20 77 68 69 6c 65 20 74 68 65 79 20 77 61 69 74 20 6f 6e 20 61 73 79 6e 63 68 .pause.while.they.wait.on.asynch
2a20 72 6f 6e 6f 75 73 20 65 76 65 6e 74 73 2e 20 54 68 65 79 20 64 6f 20 6e 6f 74 20 62 6c 6f 63 6b ronous.events..They.do.not.block
2a40 20 61 6e 79 0a 3b 3b 20 74 68 72 65 61 64 20 77 68 69 6c 65 20 70 61 75 73 65 64 2e 0a 0a 3b 3b .any.;;.thread.while.paused...;;
2a60 20 54 68 65 20 6d 61 69 6e 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6f 66 20 74 68 69 73 20 70 61 63 .The.main.components.of.this.pac
2a80 6b 61 67 65 20 61 72 65 20 60 61 69 6f 2d 64 65 66 75 6e 27 20 2f 20 60 61 69 6f 2d 6c 61 6d 62 kage.are.`aio-defun'./.`aio-lamb
2aa0 64 61 27 0a 3b 3b 20 74 6f 20 64 65 66 69 6e 65 20 61 73 79 6e 63 20 66 75 6e 63 74 69 6f 6e 2c da'.;;.to.define.async.function,
2ac0 20 61 6e 64 20 60 61 69 6f 2d 61 77 61 69 74 27 20 74 6f 20 70 61 75 73 65 20 74 68 65 73 65 20 .and.`aio-await'.to.pause.these.
2ae0 66 75 6e 63 74 69 6f 6e 73 0a 3b 3b 20 77 68 69 6c 65 20 74 68 65 79 20 77 61 69 74 20 6f 6e 20 functions.;;.while.they.wait.on.
2b00 61 73 79 6e 63 68 72 6f 6e 6f 75 73 20 65 76 65 6e 74 73 2e 20 57 68 65 6e 20 61 6e 20 61 73 79 asynchronous.events..When.an.asy
2b20 6e 63 68 72 6f 6e 6f 75 73 0a 3b 3b 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 70 61 75 73 65 64 2c nchronous.;;.function.is.paused,
2b40 20 74 68 65 20 6d 61 69 6e 20 74 68 72 65 61 64 20 69 73 20 6e 6f 74 20 62 6c 6f 63 6b 65 64 2e .the.main.thread.is.not.blocked.
2b60 20 49 74 20 69 73 20 6e 6f 20 6d 6f 72 65 0a 3b 3b 20 6f 72 20 6c 65 73 73 20 70 6f 77 65 72 66 .It.is.no.more.;;.or.less.powerf
2b80 75 6c 20 74 68 61 6e 20 63 61 6c 6c 62 61 63 6b 73 2c 20 62 75 74 20 69 73 20 6e 69 63 65 72 20 ul.than.callbacks,.but.is.nicer.
2ba0 74 6f 20 75 73 65 2e 0a 0a 3b 3b 20 54 68 69 73 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 to.use...;;.This.is.implementati
2bc0 6f 6e 20 69 73 20 62 61 73 65 64 20 6f 6e 20 45 6d 61 63 73 20 32 35 20 67 65 6e 65 72 61 74 6f on.is.based.on.Emacs.25.generato
2be0 72 73 2c 20 61 6e 64 0a 3b 3b 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73 20 66 75 6e 63 74 69 6f 6e rs,.and.;;.asynchronous.function
2c00 73 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 69 74 65 72 61 74 6f 72 73 20 69 6e 20 64 69 73 67 s.are.actually.iterators.in.disg
2c20 75 69 73 65 2c 20 6f 70 65 72 61 74 65 64 0a 3b 3b 20 61 73 20 73 74 61 63 6b 6c 65 73 73 2c 20 uise,.operated.;;.as.stackless,.
2c40 61 73 79 6d 6d 65 74 72 69 63 20 63 6f 72 6f 75 74 69 6e 65 73 2e 0a 0a 3b 3b 3b 20 43 6f 64 65 asymmetric.coroutines...;;;.Code
2c60 3a 0a 0a 28 72 65 71 75 69 72 65 20 27 63 6c 2d 6c 69 62 29 0a 28 72 65 71 75 69 72 65 20 27 66 :..(require.'cl-lib).(require.'f
2c80 6f 6e 74 2d 6c 6f 63 6b 29 0a 28 72 65 71 75 69 72 65 20 27 67 65 6e 65 72 61 74 6f 72 29 0a 28 ont-lock).(require.'generator).(
2ca0 72 65 71 75 69 72 65 20 27 72 78 29 0a 0a 3b 3b 20 52 65 67 69 73 74 65 72 20 6e 65 77 20 65 72 require.'rx)..;;.Register.new.er
2cc0 72 6f 72 20 74 79 70 65 73 0a 28 64 65 66 69 6e 65 2d 65 72 72 6f 72 20 27 61 69 6f 2d 63 61 6e ror.types.(define-error.'aio-can
2ce0 63 65 6c 20 22 50 72 6f 6d 69 73 65 20 77 61 73 20 63 61 6e 63 65 6c 65 64 22 29 0a 28 64 65 66 cel."Promise.was.canceled").(def
2d00 69 6e 65 2d 65 72 72 6f 72 20 27 61 69 6f 2d 74 69 6d 65 6f 75 74 20 22 54 69 6d 65 6f 75 74 20 ine-error.'aio-timeout."Timeout.
2d20 77 61 73 20 72 65 61 63 68 65 64 22 29 0a 0a 28 64 65 66 75 6e 20 61 69 6f 2d 70 72 6f 6d 69 73 was.reached")..(defun.aio-promis
2d40 65 20 28 29 0a 20 20 22 43 72 65 61 74 65 20 61 20 6e 65 77 20 70 72 6f 6d 69 73 65 20 6f 62 6a e.()..."Create.a.new.promise.obj
2d60 65 63 74 2e 22 0a 20 20 28 72 65 63 6f 72 64 20 27 61 69 6f 2d 70 72 6f 6d 69 73 65 20 6e 69 6c ect."...(record.'aio-promise.nil
2d80 20 28 29 29 29 0a 0a 28 64 65 66 73 75 62 73 74 20 61 69 6f 2d 70 72 6f 6d 69 73 65 2d 70 20 28 .()))..(defsubst.aio-promise-p.(
2da0 6f 62 6a 65 63 74 29 0a 20 20 22 52 65 74 75 72 6e 20 6e 6f 6e 2d 6e 69 6c 20 69 66 20 4f 42 4a object)..."Return.non-nil.if.OBJ
2dc0 45 43 54 20 69 73 20 61 20 70 72 6f 6d 69 73 65 2e 22 0a 20 20 28 61 6e 64 20 28 65 71 20 27 61 ECT.is.a.promise."...(and.(eq.'a
2de0 69 6f 2d 70 72 6f 6d 69 73 65 20 28 74 79 70 65 2d 6f 66 20 6f 62 6a 65 63 74 29 29 0a 20 20 20 io-promise.(type-of.object))....
2e00 20 20 20 20 28 3d 20 33 20 28 6c 65 6e 67 74 68 20 6f 62 6a 65 63 74 29 29 29 29 0a 0a 28 64 65 ....(=.3.(length.object))))..(de
2e20 66 73 75 62 73 74 20 61 69 6f 2d 72 65 73 75 6c 74 20 28 70 72 6f 6d 69 73 65 29 0a 20 20 22 52 fsubst.aio-result.(promise)..."R
2e40 65 74 75 72 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 50 52 4f 4d 49 53 45 2c 20 6f 72 20 eturn.the.result.of.PROMISE,.or.
2e60 6e 69 6c 20 69 66 20 69 74 20 69 73 20 75 6e 72 65 73 6f 6c 76 65 64 2e 0a 0a 50 72 6f 6d 69 73 nil.if.it.is.unresolved...Promis
2e80 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 61 70 70 65 64 20 69 6e 20 61 20 66 75 6e 63 74 e.results.are.wrapped.in.a.funct
2ea0 69 6f 6e 2e 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 0a 63 61 6c 6c 65 64 20 28 ion..The.result.must.be.called.(
2ec0 65 2e 67 2e 20 60 66 75 6e 63 61 6c 6c 27 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 72 65 74 72 e.g..`funcall').in.order.to.retr
2ee0 69 65 76 65 20 74 68 65 20 76 61 6c 75 65 2e 22 0a 20 20 28 75 6e 6c 65 73 73 20 28 61 69 6f 2d ieve.the.value."...(unless.(aio-
2f00 70 72 6f 6d 69 73 65 2d 70 20 70 72 6f 6d 69 73 65 29 0a 20 20 20 20 28 73 69 67 6e 61 6c 20 27 promise-p.promise).....(signal.'
2f20 77 72 6f 6e 67 2d 74 79 70 65 2d 61 72 67 75 6d 65 6e 74 20 28 6c 69 73 74 20 27 61 69 6f 2d 70 wrong-type-argument.(list.'aio-p
2f40 72 6f 6d 69 73 65 2d 70 20 70 72 6f 6d 69 73 65 29 29 29 0a 20 20 28 61 72 65 66 20 70 72 6f 6d romise-p.promise)))...(aref.prom
2f60 69 73 65 20 31 29 29 0a 0a 28 64 65 66 75 6e 20 61 69 6f 2d 6c 69 73 74 65 6e 20 28 70 72 6f 6d ise.1))..(defun.aio-listen.(prom
2f80 69 73 65 20 63 61 6c 6c 62 61 63 6b 29 0a 20 20 22 41 64 64 20 43 41 4c 4c 42 41 43 4b 20 74 6f ise.callback)..."Add.CALLBACK.to
2fa0 20 50 52 4f 4d 49 53 45 2e 0a 0a 49 66 20 74 68 65 20 70 72 6f 6d 69 73 65 20 68 61 73 20 61 6c .PROMISE...If.the.promise.has.al
2fc0 72 65 61 64 79 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 2c 20 74 68 65 20 63 61 6c 6c 62 61 63 ready.been.resolved,.the.callbac
2fe0 6b 20 77 69 6c 6c 20 62 65 0a 73 63 68 65 64 75 6c 65 64 20 66 6f 72 20 74 68 65 20 6e 65 78 74 k.will.be.scheduled.for.the.next
3000 20 65 76 65 6e 74 20 6c 6f 6f 70 20 74 75 72 6e 2e 22 0a 20 20 28 6c 65 74 20 28 28 72 65 73 75 .event.loop.turn."...(let.((resu
3020 6c 74 20 28 61 69 6f 2d 72 65 73 75 6c 74 20 70 72 6f 6d 69 73 65 29 29 29 0a 20 20 20 20 28 69 lt.(aio-result.promise))).....(i
3040 66 20 72 65 73 75 6c 74 0a 20 20 20 20 20 20 20 20 28 72 75 6e 2d 61 74 2d 74 69 6d 65 20 30 20 f.result.........(run-at-time.0.
3060 6e 69 6c 20 63 61 6c 6c 62 61 63 6b 20 72 65 73 75 6c 74 29 0a 20 20 20 20 20 20 28 70 75 73 68 nil.callback.result).......(push
3080 20 63 61 6c 6c 62 61 63 6b 20 28 61 72 65 66 20 70 72 6f 6d 69 73 65 20 32 29 29 29 29 29 0a 0a .callback.(aref.promise.2)))))..
30a0 28 64 65 66 75 6e 20 61 69 6f 2d 72 65 73 6f 6c 76 65 20 28 70 72 6f 6d 69 73 65 20 76 61 6c 75 (defun.aio-resolve.(promise.valu
30c0 65 2d 66 75 6e 63 74 69 6f 6e 29 0a 20 20 22 52 65 73 6f 6c 76 65 20 74 68 69 73 20 50 52 4f 4d e-function)..."Resolve.this.PROM
30e0 49 53 45 20 77 69 74 68 20 56 41 4c 55 45 2d 46 55 4e 43 54 49 4f 4e 2e 0a 0a 41 20 70 72 6f 6d ISE.with.VALUE-FUNCTION...A.prom
3100 69 73 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 72 65 73 6f 6c 76 65 64 20 6f 6e 63 65 2c 20 61 ise.can.only.be.resolved.once,.a
3120 6e 64 20 61 6e 79 20 66 75 72 74 68 65 72 20 63 61 6c 6c 73 20 74 6f 0a 60 61 69 6f 2d 72 65 73 nd.any.further.calls.to.`aio-res
3140 6f 6c 76 65 27 20 61 72 65 20 73 69 6c 65 6e 74 6c 79 20 69 67 6e 6f 72 65 64 2e 20 54 68 65 20 olve'.are.silently.ignored..The.
3160 56 41 4c 55 45 2d 46 55 4e 43 54 49 4f 4e 20 6d 75 73 74 20 62 65 20 61 0a 66 75 6e 63 74 69 6f VALUE-FUNCTION.must.be.a.functio
3180 6e 20 74 68 61 74 20 74 61 6b 65 73 20 6e 6f 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 65 69 n.that.takes.no.arguments.and.ei
31a0 74 68 65 72 20 72 65 74 75 72 6e 73 20 74 68 65 20 72 65 73 75 6c 74 0a 76 61 6c 75 65 20 6f 72 ther.returns.the.result.value.or
31c0 20 72 65 74 68 72 6f 77 73 20 61 20 73 69 67 6e 61 6c 2e 22 0a 20 20 28 75 6e 6c 65 73 73 20 28 .rethrows.a.signal."...(unless.(
31e0 66 75 6e 63 74 69 6f 6e 70 20 76 61 6c 75 65 2d 66 75 6e 63 74 69 6f 6e 29 0a 20 20 20 20 28 73 functionp.value-function).....(s
3200 69 67 6e 61 6c 20 27 77 72 6f 6e 67 2d 74 79 70 65 2d 61 72 67 75 6d 65 6e 74 20 28 6c 69 73 74 ignal.'wrong-type-argument.(list
3220 20 27 66 75 6e 63 74 69 6f 6e 70 20 76 61 6c 75 65 2d 66 75 6e 63 74 69 6f 6e 29 29 29 0a 20 20 .'functionp.value-function)))...
3240 28 75 6e 6c 65 73 73 20 28 61 69 6f 2d 72 65 73 75 6c 74 20 70 72 6f 6d 69 73 65 29 0a 20 20 20 (unless.(aio-result.promise)....
3260 20 28 6c 65 74 20 28 28 63 61 6c 6c 62 61 63 6b 73 20 28 6e 72 65 76 65 72 73 65 20 28 61 72 65 .(let.((callbacks.(nreverse.(are
3280 66 20 70 72 6f 6d 69 73 65 20 32 29 29 29 29 0a 20 20 20 20 20 20 28 73 65 74 66 20 28 61 72 65 f.promise.2)))).......(setf.(are
32a0 66 20 70 72 6f 6d 69 73 65 20 31 29 20 76 61 6c 75 65 2d 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 f.promise.1).value-function.....
32c0 20 20 20 20 20 20 20 20 28 61 72 65 66 20 70 72 6f 6d 69 73 65 20 32 29 20 28 29 29 0a 20 20 20 ........(aref.promise.2).())....
32e0 20 20 20 28 64 6f 6c 69 73 74 20 28 63 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 73 29 0a ...(dolist.(callback.callbacks).
3300 20 20 20 20 20 20 20 20 28 72 75 6e 2d 61 74 2d 74 69 6d 65 20 30 20 6e 69 6c 20 63 61 6c 6c 62 ........(run-at-time.0.nil.callb
3320 61 63 6b 20 76 61 6c 75 65 2d 66 75 6e 63 74 69 6f 6e 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 ack.value-function)))))..(defun.
3340 61 69 6f 2d 2d 73 74 65 70 20 28 69 74 65 72 20 70 72 6f 6d 69 73 65 20 79 69 65 6c 64 2d 72 65 aio--step.(iter.promise.yield-re
3360 73 75 6c 74 29 0a 20 20 22 41 64 76 61 6e 63 65 20 49 54 45 52 20 74 6f 20 74 68 65 20 6e 65 78 sult)..."Advance.ITER.to.the.nex
3380 74 20 70 72 6f 6d 69 73 65 2e 0a 0a 50 52 4f 4d 49 53 45 20 69 73 20 74 68 65 20 72 65 74 75 72 t.promise...PROMISE.is.the.retur
33a0 6e 20 70 72 6f 6d 69 73 65 20 6f 66 20 74 68 65 20 69 74 65 72 61 74 6f 72 2c 20 77 68 69 63 68 n.promise.of.the.iterator,.which
33c0 20 77 61 73 20 72 65 74 75 72 6e 65 64 0a 62 79 20 74 68 65 20 6f 72 69 67 69 6e 61 74 69 6e 67 .was.returned.by.the.originating
33e0 20 61 73 79 6e 63 20 66 75 6e 63 74 69 6f 6e 2e 20 59 49 45 4c 44 2d 52 45 53 55 4c 54 20 69 73 .async.function..YIELD-RESULT.is
3400 20 74 68 65 20 76 61 6c 75 65 0a 66 75 6e 63 74 69 6f 6e 20 72 65 73 75 6c 74 20 64 69 72 65 63 .the.value.function.result.direc
3420 74 6c 79 20 66 72 6f 6d 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79 20 79 69 65 6c 64 65 64 20 tly.from.the.previously.yielded.
3440 70 72 6f 6d 69 73 65 2e 22 0a 20 20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63 61 73 65 20 5f 0a 20 20 promise."...(condition-case._...
3460 20 20 20 20 28 63 6c 2d 6c 6f 6f 70 20 66 6f 72 20 72 65 73 75 6c 74 20 3d 20 28 69 74 65 72 2d ....(cl-loop.for.result.=.(iter-
3480 6e 65 78 74 20 69 74 65 72 20 79 69 65 6c 64 2d 72 65 73 75 6c 74 29 0a 20 20 20 20 20 20 20 20 next.iter.yield-result).........
34a0 20 20 20 20 20 20 20 74 68 65 6e 20 28 69 74 65 72 2d 6e 65 78 74 20 69 74 65 72 20 28 6c 61 6d .......then.(iter-next.iter.(lam
34c0 62 64 61 20 28 29 20 72 65 73 75 6c 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 bda.().result))................u
34e0 6e 74 69 6c 20 28 61 69 6f 2d 70 72 6f 6d 69 73 65 2d 70 20 72 65 73 75 6c 74 29 0a 20 20 20 20 ntil.(aio-promise-p.result).....
3500 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 28 61 69 6f 2d 6c 69 73 74 65 6e 20 72 ...........finally.(aio-listen.r
3520 65 73 75 6c 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 esult...........................
3540 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 76 61 6c 75 65 29 0a 20 20 20 20 20 20 20 .........(lambda.(value)........
3560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 ..............................(a
3580 69 6f 2d 2d 73 74 65 70 20 69 74 65 72 20 70 72 6f 6d 69 73 65 20 76 61 6c 75 65 29 29 29 29 0a io--step.iter.promise.value)))).
35a0 20 20 20 20 28 69 74 65 72 2d 65 6e 64 2d 6f 66 2d 73 65 71 75 65 6e 63 65 29 29 29 0a 0a 28 64 ....(iter-end-of-sequence)))..(d
35c0 65 66 6d 61 63 72 6f 20 61 69 6f 2d 77 69 74 68 2d 70 72 6f 6d 69 73 65 20 28 70 72 6f 6d 69 73 efmacro.aio-with-promise.(promis
35e0 65 20 26 72 65 73 74 20 62 6f 64 79 29 0a 20 20 22 45 76 61 6c 75 61 74 65 20 42 4f 44 59 20 61 e.&rest.body)..."Evaluate.BODY.a
3600 6e 64 20 72 65 73 6f 6c 76 65 20 50 52 4f 4d 49 53 45 20 77 69 74 68 20 74 68 65 20 72 65 73 75 nd.resolve.PROMISE.with.the.resu
3620 6c 74 2e 0a 0a 49 66 20 74 68 65 20 62 6f 64 79 20 73 69 67 6e 61 6c 73 20 61 6e 20 65 72 72 6f lt...If.the.body.signals.an.erro
3640 72 2c 20 74 68 69 73 20 65 72 72 6f 72 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 r,.this.error.will.be.stored.in.
3660 74 68 65 0a 70 72 6f 6d 69 73 65 20 61 6e 64 20 72 65 74 68 72 6f 77 6e 20 69 6e 20 74 68 65 20 the.promise.and.rethrown.in.the.
3680 70 72 6f 6d 69 73 65 27 73 20 6c 69 73 74 65 6e 65 72 73 2e 22 0a 20 20 28 64 65 63 6c 61 72 65 promise's.listeners."...(declare
36a0 20 28 69 6e 64 65 6e 74 20 64 65 66 75 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 64 65 62 75 .(indent.defun)............(debu
36c0 67 20 28 66 6f 72 6d 20 62 6f 64 79 29 29 29 0a 20 20 28 63 6c 2d 61 73 73 65 72 74 20 28 65 71 g.(form.body)))...(cl-assert.(eq
36e0 20 6c 65 78 69 63 61 6c 2d 62 69 6e 64 69 6e 67 20 74 29 29 0a 20 20 60 28 61 69 6f 2d 72 65 73 .lexical-binding.t))...`(aio-res
3700 6f 6c 76 65 20 2c 70 72 6f 6d 69 73 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 olve.,promise.................(c
3720 6f 6e 64 69 74 69 6f 6e 2d 63 61 73 65 20 65 72 72 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 ondition-case.error.............
3740 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 72 65 73 75 6c 74 20 28 70 72 6f 67 6e 20 2c 40 62 ........(let.((result.(progn.,@b
3760 6f 64 79 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 ody))).......................(la
3780 6d 62 64 61 20 28 29 20 72 65 73 75 6c 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 mbda.().result))................
37a0 20 20 20 28 65 72 72 6f 72 20 28 6c 61 6d 62 64 61 20 28 29 0a 20 20 20 20 20 20 20 20 20 20 20 ...(error.(lambda.()............
37c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 69 67 6e 61 6c 20 28 63 61 72 20 65 72 72 ................(signal.(car.err
37e0 6f 72 29 20 28 63 64 72 20 65 72 72 6f 72 29 29 29 29 29 29 29 0a 0a 28 64 65 66 6d 61 63 72 6f or).(cdr.error)))))))..(defmacro
3800 20 61 69 6f 2d 61 77 61 69 74 20 28 65 78 70 72 29 0a 20 20 22 49 66 20 45 58 50 52 20 65 76 61 .aio-await.(expr)..."If.EXPR.eva
3820 6c 75 61 74 65 73 20 74 6f 20 61 20 70 72 6f 6d 69 73 65 2c 20 70 61 75 73 65 20 75 6e 74 69 6c luates.to.a.promise,.pause.until
3840 20 74 68 65 20 70 72 6f 6d 69 73 65 20 69 73 20 72 65 73 6f 6c 76 65 64 2e 0a 0a 50 61 75 73 69 .the.promise.is.resolved...Pausi
3860 6e 67 20 61 6e 20 61 73 79 6e 63 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 62 6c ng.an.async.function.does.not.bl
3880 6f 63 6b 20 45 6d 61 63 73 27 20 6d 61 69 6e 20 74 68 72 65 61 64 2e 20 49 66 0a 45 58 50 52 20 ock.Emacs'.main.thread..If.EXPR.
38a0 64 6f 65 73 6e 27 74 20 65 76 61 6c 75 61 74 65 20 74 6f 20 61 20 70 72 6f 6d 69 73 65 2c 20 74 doesn't.evaluate.to.a.promise,.t
38c0 68 65 20 76 61 6c 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 0a 69 6d 6d 65 64 69 61 74 65 6c 79 he.value.is.returned.immediately
38e0 20 61 6e 64 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 70 61 75 73 65 64 2e .and.the.function.is.not.paused.
3900 20 53 69 6e 63 65 20 61 73 79 6e 63 20 66 75 6e 63 74 69 6f 6e 73 0a 72 65 74 75 72 6e 20 70 72 .Since.async.functions.return.pr
3920 6f 6d 69 73 65 73 2c 20 61 73 79 6e 63 20 66 75 6e 63 74 69 6f 6e 73 20 63 61 6e 20 61 77 61 69 omises,.async.functions.can.awai
3940 74 20 64 69 72 65 63 74 6c 79 20 6f 6e 20 6f 74 68 65 72 0a 61 73 79 6e 63 20 66 75 6e 63 74 69 t.directly.on.other.async.functi
3960 6f 6e 73 20 75 73 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 2e 0a 0a 54 68 69 73 20 6d 61 63 72 ons.using.this.macro...This.macr
3980 6f 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 69 6e 73 69 64 65 20 61 6e 20 61 73 79 o.can.only.be.used.inside.an.asy
39a0 6e 63 20 66 75 6e 63 74 69 6f 6e 2c 20 65 69 74 68 65 72 0a 60 61 69 6f 2d 6c 61 6d 62 64 61 27 nc.function,.either.`aio-lambda'
39c0 20 6f 72 20 60 61 69 6f 2d 64 65 66 75 6e 27 2e 22 0a 20 20 60 28 66 75 6e 63 61 6c 6c 20 28 69 .or.`aio-defun'."...`(funcall.(i
39e0 74 65 72 2d 79 69 65 6c 64 20 2c 65 78 70 72 29 29 29 0a 0a 28 64 65 66 6d 61 63 72 6f 20 61 69 ter-yield.,expr)))..(defmacro.ai
3a00 6f 2d 6c 61 6d 62 64 61 20 28 61 72 67 6c 69 73 74 20 26 72 65 73 74 20 62 6f 64 79 29 0a 20 20 o-lambda.(arglist.&rest.body)...
3a20 22 4c 69 6b 65 20 60 6c 61 6d 62 64 61 27 2c 20 62 75 74 20 64 65 66 69 6e 65 73 20 61 6e 20 61 "Like.`lambda',.but.defines.an.a
3a40 73 79 6e 63 20 66 75 6e 63 74 69 6f 6e 2e 0a 0a 54 68 65 20 62 6f 64 79 20 6f 66 20 74 68 69 73 sync.function...The.body.of.this
3a60 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20 75 73 65 20 60 61 69 6f 2d 61 77 61 69 74 27 20 74 6f .function.may.use.`aio-await'.to
3a80 20 77 61 69 74 20 6f 6e 0a 70 72 6f 6d 69 73 65 73 2e 20 57 68 65 6e 20 61 6e 20 61 73 79 6e 63 .wait.on.promises..When.an.async
3aa0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 2c 20 69 74 20 69 6d 6d 65 64 69 61 74 .function.is.called,.it.immediat
3ac0 65 6c 79 0a 72 65 74 75 72 6e 73 20 61 20 70 72 6f 6d 69 73 65 20 74 68 61 74 20 77 69 6c 6c 20 ely.returns.a.promise.that.will.
3ae0 72 65 73 6f 6c 76 65 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 27 73 20 72 65 74 75 72 6e resolve.to.the.function's.return
3b00 0a 76 61 6c 75 65 2c 20 6f 72 20 61 6e 79 20 75 6e 63 61 75 67 68 74 20 65 72 72 6f 72 20 73 69 .value,.or.any.uncaught.error.si
3b20 67 6e 61 6c 2e 22 0a 20 20 28 64 65 63 6c 61 72 65 20 28 69 6e 64 65 6e 74 20 64 65 66 75 6e 29 gnal."...(declare.(indent.defun)
3b40 0a 20 20 20 20 20 20 20 20 20 20 20 28 64 6f 63 2d 73 74 72 69 6e 67 20 33 29 0a 20 20 20 20 20 ............(doc-string.3)......
3b60 20 20 20 20 20 20 28 64 65 62 75 67 20 28 26 64 65 66 69 6e 65 20 6c 61 6d 62 64 61 2d 6c 69 73 ......(debug.(&define.lambda-lis
3b80 74 20 6c 61 6d 62 64 61 2d 64 6f 63 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 t.lambda-doc....................
3ba0 20 20 20 20 20 20 20 20 5b 26 6f 70 74 69 6f 6e 61 6c 20 28 22 69 6e 74 65 72 61 63 74 69 76 65 ........[&optional.("interactive
3bc0 22 20 69 6e 74 65 72 61 63 74 69 76 65 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ".interactive)].................
3be0 20 20 20 20 20 20 20 20 20 20 20 26 72 65 73 74 20 73 65 78 70 29 29 29 0a 20 20 28 6c 65 74 20 ...........&rest.sexp)))...(let.
3c00 28 28 61 72 67 73 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 61 72 67 73 22 29 29 0a 20 20 20 ((args.(make-symbol."args"))....
3c20 20 20 20 20 20 28 70 72 6f 6d 69 73 65 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 70 72 6f 6d .....(promise.(make-symbol."prom
3c40 69 73 65 22 29 29 0a 20 20 20 20 20 20 20 20 28 73 70 6c 69 74 2d 62 6f 64 79 20 28 6d 61 63 72 ise")).........(split-body.(macr
3c60 6f 65 78 70 2d 70 61 72 73 65 2d 62 6f 64 79 20 62 6f 64 79 29 29 29 0a 20 20 20 20 60 28 6c 61 oexp-parse-body.body))).....`(la
3c80 6d 62 64 61 20 28 26 72 65 73 74 20 2c 61 72 67 73 29 0a 20 20 20 20 20 20 20 2c 40 28 63 61 72 mbda.(&rest.,args)........,@(car
3ca0 20 73 70 6c 69 74 2d 62 6f 64 79 29 0a 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 2c 70 72 6f .split-body)........(let*.((,pro
3cc0 6d 69 73 65 20 28 61 69 6f 2d 70 72 6f 6d 69 73 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 mise.(aio-promise)).............
3ce0 20 20 28 69 74 65 72 20 28 61 70 70 6c 79 20 28 69 74 65 72 2d 6c 61 6d 62 64 61 20 2c 61 72 67 ..(iter.(apply.(iter-lambda.,arg
3d00 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 list............................
3d20 20 20 28 61 69 6f 2d 77 69 74 68 2d 70 72 6f 6d 69 73 65 20 2c 70 72 6f 6d 69 73 65 0a 20 20 20 ..(aio-with-promise.,promise....
3d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c 40 28 63 ............................,@(c
3d60 64 72 20 73 70 6c 69 74 2d 62 6f 64 79 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 dr.split-body)))................
3d80 20 20 20 20 20 20 20 20 20 20 20 20 2c 61 72 67 73 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 70 ............,args)))..........(p
3da0 72 6f 67 31 20 2c 70 72 6f 6d 69 73 65 0a 20 20 20 20 20 20 20 20 20 20 20 28 61 69 6f 2d 2d 73 rog1.,promise............(aio--s
3dc0 74 65 70 20 69 74 65 72 20 2c 70 72 6f 6d 69 73 65 20 6e 69 6c 29 29 29 29 29 29 0a 0a 28 64 65 tep.iter.,promise.nil))))))..(de
3de0 66 6d 61 63 72 6f 20 61 69 6f 2d 64 65 66 75 6e 20 28 6e 61 6d 65 20 61 72 67 6c 69 73 74 20 26 fmacro.aio-defun.(name.arglist.&
3e00 72 65 73 74 20 62 6f 64 79 29 0a 20 20 22 4c 69 6b 65 20 60 61 69 6f 2d 6c 61 6d 62 64 61 27 20 rest.body)..."Like.`aio-lambda'.
3e20 62 75 74 20 67 69 76 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 61 20 6e 61 6d 65 20 6c 69 but.gives.the.function.a.name.li
3e40 6b 65 20 60 64 65 66 75 6e 27 2e 22 0a 20 20 28 64 65 63 6c 61 72 65 20 28 69 6e 64 65 6e 74 20 ke.`defun'."...(declare.(indent.
3e60 64 65 66 75 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 64 6f 63 2d 73 74 72 69 6e 67 20 33 29 defun)............(doc-string.3)
3e80 0a 20 20 20 20 20 20 20 20 20 20 20 28 64 65 62 75 67 20 28 26 64 65 66 69 6e 65 20 6e 61 6d 65 ............(debug.(&define.name
3ea0 20 6c 61 6d 62 64 61 2d 6c 69 73 74 20 26 72 65 73 74 20 73 65 78 70 29 29 29 0a 20 20 60 28 70 .lambda-list.&rest.sexp)))...`(p
3ec0 72 6f 67 6e 0a 20 20 20 20 20 28 64 65 66 61 6c 69 61 73 20 27 2c 6e 61 6d 65 20 28 61 69 6f 2d rogn......(defalias.',name.(aio-
3ee0 6c 61 6d 62 64 61 20 2c 61 72 67 6c 69 73 74 20 2c 40 62 6f 64 79 29 29 0a 20 20 20 20 20 28 66 lambda.,arglist.,@body))......(f
3f00 75 6e 63 74 69 6f 6e 2d 70 75 74 20 27 2c 6e 61 6d 65 20 27 61 69 6f 2d 64 65 66 75 6e 2d 70 20 unction-put.',name.'aio-defun-p.
3f20 74 29 29 29 0a 0a 28 64 65 66 75 6e 20 61 69 6f 2d 77 61 69 74 2d 66 6f 72 20 28 70 72 6f 6d 69 t)))..(defun.aio-wait-for.(promi
3f40 73 65 29 0a 20 20 22 53 79 6e 63 68 72 6f 6e 6f 75 73 6c 79 20 77 61 69 74 20 66 6f 72 20 50 52 se)..."Synchronously.wait.for.PR
3f60 4f 4d 49 53 45 2c 20 62 6c 6f 63 6b 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 68 72 65 OMISE,.blocking.the.current.thre
3f80 61 64 2e 22 0a 20 20 28 77 68 69 6c 65 20 28 6e 75 6c 6c 20 28 61 69 6f 2d 72 65 73 75 6c 74 20 ad."...(while.(null.(aio-result.
3fa0 70 72 6f 6d 69 73 65 29 29 0a 20 20 20 20 28 61 63 63 65 70 74 2d 70 72 6f 63 65 73 73 2d 6f 75 promise)).....(accept-process-ou
3fc0 74 70 75 74 29 29 0a 20 20 28 66 75 6e 63 61 6c 6c 20 28 61 69 6f 2d 72 65 73 75 6c 74 20 70 72 tput))...(funcall.(aio-result.pr
3fe0 6f 6d 69 73 65 29 29 29 0a 0a 28 64 65 66 75 6e 20 61 69 6f 2d 63 61 6e 63 65 6c 20 28 70 72 6f omise)))..(defun.aio-cancel.(pro
4000 6d 69 73 65 20 26 6f 70 74 69 6f 6e 61 6c 20 72 65 61 73 6f 6e 29 0a 20 20 22 41 74 74 65 6d 70 mise.&optional.reason)..."Attemp
4020 74 20 74 6f 20 63 61 6e 63 65 6c 20 50 52 4f 4d 49 53 45 2c 20 72 65 74 75 72 6e 69 6e 67 20 6e t.to.cancel.PROMISE,.returning.n
4040 6f 6e 2d 6e 69 6c 20 69 66 20 73 75 63 63 65 73 73 66 75 6c 2e 0a 0a 41 6c 6c 20 61 77 61 69 74 on-nil.if.successful...All.await
4060 65 72 73 20 77 69 6c 6c 20 72 65 63 65 69 76 65 20 61 6e 20 61 69 6f 2d 63 61 6e 63 65 6c 20 73 ers.will.receive.an.aio-cancel.s
4080 69 67 6e 61 6c 2e 20 54 68 65 20 61 63 74 75 61 6c 0a 75 6e 64 65 72 6c 79 69 6e 67 20 61 73 79 ignal..The.actual.underlying.asy
40a0 6e 63 68 72 6f 6e 6f 75 73 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 63 74 nchronous.operation.will.not.act
40c0 75 61 6c 6c 79 20 62 65 20 63 61 6e 63 65 6c 65 64 2e 22 0a 20 20 28 75 6e 6c 65 73 73 20 28 61 ually.be.canceled."...(unless.(a
40e0 69 6f 2d 72 65 73 75 6c 74 20 70 72 6f 6d 69 73 65 29 0a 20 20 20 20 28 61 69 6f 2d 72 65 73 6f io-result.promise).....(aio-reso
4100 6c 76 65 20 70 72 6f 6d 69 73 65 20 28 6c 61 6d 62 64 61 20 28 29 20 28 73 69 67 6e 61 6c 20 27 lve.promise.(lambda.().(signal.'
4120 61 69 6f 2d 63 61 6e 63 65 6c 20 72 65 61 73 6f 6e 29 29 29 29 29 0a 0a 28 64 65 66 6d 61 63 72 aio-cancel.reason)))))..(defmacr
4140 6f 20 61 69 6f 2d 77 69 74 68 2d 61 73 79 6e 63 20 28 26 72 65 73 74 20 62 6f 64 79 29 0a 20 20 o.aio-with-async.(&rest.body)...
4160 22 45 76 61 6c 75 61 74 65 20 42 4f 44 59 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73 6c 79 20 61 73 "Evaluate.BODY.asynchronously.as
4180 20 69 66 20 69 74 20 77 61 73 20 69 6e 73 69 64 65 20 60 61 69 6f 2d 6c 61 6d 62 64 61 27 2e 0a .if.it.was.inside.`aio-lambda'..
41a0 0a 53 69 6e 63 65 20 42 4f 44 59 20 69 73 20 65 76 61 6c 75 65 64 20 69 6e 73 69 64 65 20 61 6e .Since.BODY.is.evalued.inside.an
41c0 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6c 61 6d 62 64 61 2c 20 60 61 69 6f 2d 61 77 61 69 74 .asynchronous.lambda,.`aio-await
41e0 27 0a 69 73 20 61 76 61 69 6c 61 62 6c 65 20 68 65 72 65 2e 20 54 68 69 73 20 6d 61 63 72 6f 20 '.is.available.here..This.macro.
4200 65 76 61 6c 75 61 74 65 73 20 74 6f 20 61 20 70 72 6f 6d 69 73 65 20 66 6f 72 20 42 4f 44 59 27 evaluates.to.a.promise.for.BODY'
4220 73 0a 65 76 65 6e 74 75 61 6c 20 72 65 73 75 6c 74 2e 0a 0a 42 65 77 61 72 65 3a 20 44 79 6e 61 s.eventual.result...Beware:.Dyna
4240 6d 69 63 20 62 69 6e 64 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 6c 65 78 69 63 61 6c 6c 79 20 mic.bindings.that.are.lexically.
4260 6f 75 74 73 69 64 65 0a e2 80 98 61 69 6f 2d 77 69 74 68 2d 61 73 79 6e 63 e2 80 99 20 62 6c 6f outside....aio-with-async....blo
4280 63 6b 73 20 68 61 76 65 20 6e 6f 20 65 66 66 65 63 74 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 cks.have.no.effect...For.example
42a0 2c 0a 0a 20 20 28 64 65 66 76 61 72 20 64 79 6e 61 6d 69 63 2d 76 61 72 20 6e 69 6c 29 0a 20 20 ,....(defvar.dynamic-var.nil)...
42c0 28 64 65 66 75 6e 20 6d 79 2d 66 75 6e 63 20 28 29 0a 20 20 20 20 28 6c 65 74 20 28 28 64 79 6e (defun.my-func.().....(let.((dyn
42e0 61 6d 69 63 2d 76 61 72 20 31 32 33 29 29 0a 20 20 20 20 20 20 28 61 69 6f 2d 77 69 74 68 2d 61 amic-var.123)).......(aio-with-a
4300 73 79 6e 63 20 64 79 6e 61 6d 69 63 2d 76 61 72 29 29 29 0a 20 20 28 6c 65 74 20 28 28 64 79 6e sync.dynamic-var)))...(let.((dyn
4320 61 6d 69 63 2d 76 61 72 20 34 35 36 29 29 0a 20 20 20 20 28 61 69 6f 2d 77 61 69 74 2d 66 6f 72 amic-var.456)).....(aio-wait-for
4340 20 28 6d 79 2d 66 75 6e 63 29 29 29 0a 20 20 e2 87 92 20 34 35 36 0a 0a 4f 74 68 65 72 20 67 6c .(my-func))).......456..Other.gl
4360 6f 62 61 6c 20 73 74 61 74 65 20 73 75 63 68 20 61 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 obal.state.such.as.the.current.b
4380 75 66 66 65 72 20 62 65 68 61 76 65 73 20 6c 69 6b 65 77 69 73 65 2e 22 0a 20 20 28 64 65 63 6c uffer.behaves.likewise."...(decl
43a0 61 72 65 20 28 69 6e 64 65 6e 74 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 64 65 62 75 67 are.(indent.0)............(debug
43c0 20 28 26 72 65 73 74 20 73 65 78 70 29 29 29 0a 20 20 60 28 6c 65 74 20 28 28 70 72 6f 6d 69 73 .(&rest.sexp)))...`(let.((promis
43e0 65 20 28 66 75 6e 63 61 6c 6c 20 28 61 69 6f 2d 6c 61 6d 62 64 61 20 28 29 0a 20 20 20 20 20 20 e.(funcall.(aio-lambda.().......
4400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 69 6f 2d 61 77 61 69 .......................(aio-awai
4420 74 20 28 61 69 6f 2d 73 6c 65 65 70 20 30 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 t.(aio-sleep.0))................
4440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c 40 62 6f 64 79 29 29 29 29 0a 20 20 20 20 20 28 70 ..............,@body))))......(p
4460 72 6f 67 31 20 70 72 6f 6d 69 73 65 0a 20 20 20 20 20 20 20 3b 3b 20 54 68 65 20 69 73 20 74 68 rog1.promise........;;.The.is.th
4480 65 20 6d 61 69 6e 20 66 65 61 74 75 72 65 3a 20 46 6f 72 63 65 20 74 68 65 20 66 69 6e 61 6c 20 e.main.feature:.Force.the.final.
44a0 72 65 73 75 6c 74 20 74 6f 20 62 65 0a 20 20 20 20 20 20 20 3b 3b 20 72 65 61 6c 69 7a 65 64 20 result.to.be........;;.realized.
44c0 73 6f 20 74 68 61 74 20 65 72 72 6f 72 73 20 61 72 65 20 72 65 70 6f 72 74 65 64 2e 0a 20 20 20 so.that.errors.are.reported.....
44e0 20 20 20 20 28 61 69 6f 2d 6c 69 73 74 65 6e 20 70 72 6f 6d 69 73 65 20 23 27 66 75 6e 63 61 6c ....(aio-listen.promise.#'funcal
4500 6c 29 29 29 29 0a 0a 28 64 65 66 6d 61 63 72 6f 20 61 69 6f 2d 63 68 61 69 6e 20 28 65 78 70 72 l))))..(defmacro.aio-chain.(expr
4520 29 0a 20 20 22 60 61 69 6f 2d 61 77 61 69 74 27 20 6f 6e 20 45 58 50 52 20 61 6e 64 20 72 65 70 )..."`aio-await'.on.EXPR.and.rep
4540 6c 61 63 65 20 70 6c 61 63 65 20 45 58 50 52 20 77 69 74 68 20 74 68 65 20 6e 65 78 74 20 70 72 lace.place.EXPR.with.the.next.pr
4560 6f 6d 69 73 65 2e 0a 0a 45 58 50 52 20 6d 75 73 74 20 62 65 20 73 65 74 66 2d 61 62 6c 65 2e 20 omise...EXPR.must.be.setf-able..
4580 52 65 74 75 72 6e 73 20 28 63 64 72 20 72 65 73 75 6c 74 29 2e 20 54 68 69 73 20 6d 61 63 72 6f Returns.(cdr.result)..This.macro
45a0 20 69 73 0a 69 6e 74 65 6e 64 65 64 20 74 6f 20 62 65 20 75 73 65 64 20 77 69 74 68 20 60 61 69 .is.intended.to.be.used.with.`ai
45c0 6f 2d 6d 61 6b 65 2d 63 61 6c 6c 62 61 63 6b 27 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 66 6f 6c o-make-callback'.in.order.to.fol
45e0 6c 6f 77 0a 61 20 63 68 61 69 6e 20 6f 66 20 70 72 6f 6d 69 73 65 2d 79 69 65 6c 64 69 6e 67 20 low.a.chain.of.promise-yielding.
4600 70 72 6f 6d 69 73 65 73 2e 22 0a 20 20 28 6c 65 74 20 28 28 72 65 73 75 6c 74 20 28 6d 61 6b 65 promises."...(let.((result.(make
4620 2d 73 79 6d 62 6f 6c 20 22 72 65 73 75 6c 74 22 29 29 29 0a 20 20 20 20 60 28 6c 65 74 20 28 28 -symbol."result"))).....`(let.((
4640 2c 72 65 73 75 6c 74 20 28 61 69 6f 2d 61 77 61 69 74 20 2c 65 78 70 72 29 29 29 0a 20 20 20 20 ,result.(aio-await.,expr))).....
4660 20 20 20 28 73 65 74 66 20 2c 65 78 70 72 20 28 63 61 72 20 2c 72 65 73 75 6c 74 29 29 0a 20 20 ...(setf.,expr.(car.,result))...
4680 20 20 20 20 20 28 63 64 72 20 2c 72 65 73 75 6c 74 29 29 29 29 0a 0a 3b 3b 20 55 73 65 66 75 6c .....(cdr.,result))))..;;.Useful
46a0 20 70 72 6f 6d 69 73 65 2d 72 65 74 75 72 6e 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 3a 0a 0a 28 .promise-returning.functions:..(
46c0 72 65 71 75 69 72 65 20 27 75 72 6c 29 0a 0a 28 61 69 6f 2d 64 65 66 75 6e 20 61 69 6f 2d 61 6c require.'url)..(aio-defun.aio-al
46e0 6c 20 28 70 72 6f 6d 69 73 65 73 29 0a 20 20 22 52 65 74 75 72 6e 20 61 20 70 72 6f 6d 69 73 65 l.(promises)..."Return.a.promise
4700 20 74 68 61 74 20 72 65 73 6f 6c 76 65 73 20 77 68 65 6e 20 61 6c 6c 20 50 52 4f 4d 49 53 45 53 .that.resolves.when.all.PROMISES
4720 20 61 72 65 20 72 65 73 6f 6c 76 65 64 2e 22 0a 20 20 28 64 6f 6c 69 73 74 20 28 70 72 6f 6d 69 .are.resolved."...(dolist.(promi
4740 73 65 20 70 72 6f 6d 69 73 65 73 29 0a 20 20 20 20 28 61 69 6f 2d 61 77 61 69 74 20 70 72 6f 6d se.promises).....(aio-await.prom
4760 69 73 65 29 29 29 0a 0a 28 64 65 66 75 6e 20 61 69 6f 2d 63 61 74 63 68 20 28 70 72 6f 6d 69 73 ise)))..(defun.aio-catch.(promis
4780 65 29 0a 20 20 22 52 65 74 75 72 6e 20 61 20 6e 65 77 20 70 72 6f 6d 69 73 65 20 74 68 61 74 20 e)..."Return.a.new.promise.that.
47a0 77 72 61 70 73 20 50 52 4f 4d 49 53 45 20 62 75 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 73 69 67 wraps.PROMISE.but.will.never.sig
47c0 6e 61 6c 2e 0a 0a 54 68 65 20 70 72 6f 6d 69 73 65 20 76 61 6c 75 65 20 69 73 20 61 20 63 6f 6e nal...The.promise.value.is.a.con
47e0 73 20 77 68 65 72 65 20 74 68 65 20 63 61 72 20 69 73 20 65 69 74 68 65 72 20 3a 73 75 63 63 65 s.where.the.car.is.either.:succe
4800 73 73 20 6f 72 0a 3a 65 72 72 6f 72 2e 20 46 6f 72 20 3a 73 75 63 63 65 73 73 2c 20 74 68 65 20 ss.or.:error..For.:success,.the.
4820 63 64 72 20 77 69 6c 6c 20 62 65 20 74 68 65 20 72 65 73 75 6c 74 20 76 61 6c 75 65 2e 20 46 6f cdr.will.be.the.result.value..Fo
4840 72 0a 3a 65 72 72 6f 72 2c 20 74 68 65 20 63 64 72 20 77 69 6c 6c 20 62 65 20 74 68 65 20 65 72 r.:error,.the.cdr.will.be.the.er
4860 72 6f 72 20 64 61 74 61 2e 22 0a 20 20 28 6c 65 74 20 28 28 72 65 73 75 6c 74 20 28 61 69 6f 2d ror.data."...(let.((result.(aio-
4880 70 72 6f 6d 69 73 65 29 29 29 0a 20 20 20 20 28 63 6c 2d 66 6c 65 74 20 28 28 63 61 6c 6c 62 61 promise))).....(cl-flet.((callba
48a0 63 6b 20 28 76 61 6c 75 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 69 6f 2d ck.(value).................(aio-
48c0 72 65 73 6f 6c 76 65 20 72 65 73 75 6c 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 resolve.result..................
48e0 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 29 0a 20 20 20 20 20 20 20 20 20 ............(lambda.()..........
4900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 64 69 74 69 6f 6e ......................(condition
4920 2d 63 61 73 65 20 65 72 72 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -case.error.....................
4940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 3a 73 75 63 63 65 73 73 20 28 66 ...............(cons.:success.(f
4960 75 6e 63 61 6c 6c 20 76 61 6c 75 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 uncall.value))..................
4980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 72 72 6f 72 20 28 63 6f 6e 73 20 3a 65 72 ................(error.(cons.:er
49a0 72 6f 72 20 65 72 72 6f 72 29 29 29 29 29 29 29 0a 20 20 20 20 20 20 28 70 72 6f 67 31 20 72 65 ror.error))))))).......(prog1.re
49c0 73 75 6c 74 0a 20 20 20 20 20 20 20 20 28 61 69 6f 2d 6c 69 73 74 65 6e 20 70 72 6f 6d 69 73 65 sult.........(aio-listen.promise
49e0 20 23 27 63 61 6c 6c 62 61 63 6b 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 61 69 6f 2d 73 6c 65 .#'callback)))))..(defun.aio-sle
4a00 65 70 20 28 73 65 63 6f 6e 64 73 20 26 6f 70 74 69 6f 6e 61 6c 20 72 65 73 75 6c 74 29 0a 20 20 ep.(seconds.&optional.result)...
4a20 22 43 72 65 61 74 65 20 61 20 70 72 6f 6d 69 73 65 20 74 68 61 74 20 69 73 20 72 65 73 6f 6c 76 "Create.a.promise.that.is.resolv
4a40 65 64 20 61 66 74 65 72 20 53 45 43 4f 4e 44 53 20 77 69 74 68 20 52 45 53 55 4c 54 2e 0a 0a 54 ed.after.SECONDS.with.RESULT...T
4a60 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 76 61 6c 75 65 2c 20 6e 6f 74 20 61 20 76 61 6c 75 he.result.is.a.value,.not.a.valu
4a80 65 20 66 75 6e 63 74 69 6f 6e 2c 20 61 6e 64 20 69 74 20 77 69 6c 6c 20 62 65 0a 61 75 74 6f 6d e.function,.and.it.will.be.autom
4aa0 61 74 69 63 61 6c 6c 79 20 77 72 61 70 70 65 64 20 77 69 74 68 20 61 20 76 61 6c 75 65 20 66 75 atically.wrapped.with.a.value.fu
4ac0 6e 63 74 69 6f 6e 20 28 73 65 65 20 60 61 69 6f 2d 72 65 73 6f 6c 76 65 27 29 2e 22 0a 20 20 28 nction.(see.`aio-resolve')."...(
4ae0 6c 65 74 20 28 28 70 72 6f 6d 69 73 65 20 28 61 69 6f 2d 70 72 6f 6d 69 73 65 29 29 29 0a 20 20 let.((promise.(aio-promise)))...
4b00 20 20 28 70 72 6f 67 31 20 70 72 6f 6d 69 73 65 0a 20 20 20 20 20 20 28 72 75 6e 2d 61 74 2d 74 ..(prog1.promise.......(run-at-t
4b20 69 6d 65 20 73 65 63 6f 6e 64 73 20 6e 69 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ime.seconds.nil.................
4b40 20 20 20 23 27 61 69 6f 2d 72 65 73 6f 6c 76 65 20 70 72 6f 6d 69 73 65 20 28 6c 61 6d 62 64 61 ...#'aio-resolve.promise.(lambda
4b60 20 28 29 20 72 65 73 75 6c 74 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 61 69 6f 2d 69 64 6c 65 .().result)))))..(defun.aio-idle
4b80 20 28 73 65 63 6f 6e 64 73 20 26 6f 70 74 69 6f 6e 61 6c 20 72 65 73 75 6c 74 29 0a 20 20 22 43 .(seconds.&optional.result)..."C
4ba0 72 65 61 74 65 20 61 20 70 72 6f 6d 69 73 65 20 74 68 61 74 20 69 73 20 72 65 73 6f 6c 76 65 64 reate.a.promise.that.is.resolved
4bc0 20 61 66 74 65 72 20 69 64 6c 65 20 53 45 43 4f 4e 44 53 20 77 69 74 68 20 52 45 53 55 4c 54 2e .after.idle.SECONDS.with.RESULT.
4be0 0a 0a 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 76 61 6c 75 65 2c 20 6e 6f 74 20 61 20 76 ..The.result.is.a.value,.not.a.v
4c00 61 6c 75 65 20 66 75 6e 63 74 69 6f 6e 2c 20 61 6e 64 20 69 74 20 77 69 6c 6c 20 62 65 0a 61 75 alue.function,.and.it.will.be.au
4c20 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 72 61 70 70 65 64 20 77 69 74 68 20 61 20 76 61 6c 75 65 tomatically.wrapped.with.a.value
4c40 20 66 75 6e 63 74 69 6f 6e 20 28 73 65 65 20 60 61 69 6f 2d 72 65 73 6f 6c 76 65 27 29 2e 22 0a .function.(see.`aio-resolve').".
4c60 20 20 28 6c 65 74 20 28 28 70 72 6f 6d 69 73 65 20 28 61 69 6f 2d 70 72 6f 6d 69 73 65 29 29 29 ..(let.((promise.(aio-promise)))
4c80 0a 20 20 20 20 28 70 72 6f 67 31 20 70 72 6f 6d 69 73 65 0a 20 20 20 20 20 20 28 72 75 6e 2d 77 .....(prog1.promise.......(run-w
4ca0 69 74 68 2d 69 64 6c 65 2d 74 69 6d 65 72 20 73 65 63 6f 6e 64 73 20 6e 69 6c 0a 20 20 20 20 20 ith-idle-timer.seconds.nil......
4cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 27 61 69 6f 2d 72 65 73 6f ......................#'aio-reso
4ce0 6c 76 65 20 70 72 6f 6d 69 73 65 20 28 6c 61 6d 62 64 61 20 28 29 20 72 65 73 75 6c 74 29 29 29 lve.promise.(lambda.().result)))
4d00 29 29 0a 0a 28 64 65 66 75 6e 20 61 69 6f 2d 74 69 6d 65 6f 75 74 20 28 73 65 63 6f 6e 64 73 29 ))..(defun.aio-timeout.(seconds)
4d20 0a 20 20 22 43 72 65 61 74 65 20 61 20 70 72 6f 6d 69 73 65 20 77 69 74 68 20 61 20 74 69 6d 65 ..."Create.a.promise.with.a.time
4d40 6f 75 74 20 65 72 72 6f 72 20 61 66 74 65 72 20 53 45 43 4f 4e 44 53 2e 22 0a 20 20 28 6c 65 74 out.error.after.SECONDS."...(let
4d60 20 28 28 74 69 6d 65 6f 75 74 20 28 61 69 6f 2d 70 72 6f 6d 69 73 65 29 29 29 0a 20 20 20 20 28 .((timeout.(aio-promise))).....(
4d80 70 72 6f 67 31 20 74 69 6d 65 6f 75 74 0a 20 20 20 20 20 20 28 72 75 6e 2d 61 74 2d 74 69 6d 65 prog1.timeout.......(run-at-time
4da0 20 73 65 63 6f 6e 64 73 20 6e 69 6c 23 27 61 69 6f 2d 72 65 73 6f 6c 76 65 20 74 69 6d 65 6f 75 .seconds.nil#'aio-resolve.timeou
4dc0 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 29 20 t....................(lambda.().
4de0 28 73 69 67 6e 61 6c 20 27 61 69 6f 2d 74 69 6d 65 6f 75 74 20 73 65 63 6f 6e 64 73 29 29 29 29 (signal.'aio-timeout.seconds))))
4e00 29 29 0a 0a 28 64 65 66 75 6e 20 61 69 6f 2d 75 72 6c 2d 72 65 74 72 69 65 76 65 20 28 75 72 6c ))..(defun.aio-url-retrieve.(url
4e20 20 26 6f 70 74 69 6f 6e 61 6c 20 73 69 6c 65 6e 74 20 69 6e 68 69 62 69 74 2d 63 6f 6f 6b 69 65 .&optional.silent.inhibit-cookie
4e40 73 29 0a 20 20 22 57 72 61 70 73 20 60 75 72 6c 2d 72 65 74 72 69 65 76 65 27 20 69 6e 20 61 20 s)..."Wraps.`url-retrieve'.in.a.
4e60 70 72 6f 6d 69 73 65 2e 0a 0a 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 6e 65 76 promise...This.function.will.nev
4e80 65 72 20 64 69 72 65 63 74 6c 79 20 73 69 67 6e 61 6c 20 61 6e 20 65 72 72 6f 72 2e 20 49 6e 73 er.directly.signal.an.error..Ins
4ea0 74 65 61 64 20 61 6e 79 0a 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 64 65 6c 69 76 65 72 65 tead.any.errors.will.be.delivere
4ec0 64 20 76 69 61 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 70 72 6f 6d 69 73 65 2e 20 54 68 65 20 d.via.the.returned.promise..The.
4ee0 70 72 6f 6d 69 73 65 0a 72 65 73 75 6c 74 20 69 73 20 61 20 63 6f 6e 73 20 6f 66 20 28 73 74 61 promise.result.is.a.cons.of.(sta
4f00 74 75 73 20 2e 20 62 75 66 66 65 72 29 2e 20 54 68 69 73 20 62 75 66 66 65 72 20 69 73 20 61 20 tus...buffer)..This.buffer.is.a.
4f20 63 6c 6f 6e 65 20 6f 66 0a 74 68 65 20 62 75 66 66 65 72 20 63 72 65 61 74 65 64 20 62 79 20 60 clone.of.the.buffer.created.by.`
4f40 75 72 6c 2d 72 65 74 72 69 65 76 65 27 20 61 6e 64 20 73 68 6f 75 6c 64 20 62 65 20 6b 69 6c 6c url-retrieve'.and.should.be.kill
4f60 65 64 20 62 79 20 74 68 65 0a 63 61 6c 6c 65 72 2e 22 0a 20 20 28 6c 65 74 20 28 28 70 72 6f 6d ed.by.the.caller."...(let.((prom
4f80 69 73 65 20 28 61 69 6f 2d 70 72 6f 6d 69 73 65 29 29 29 0a 20 20 20 20 28 70 72 6f 67 31 20 70 ise.(aio-promise))).....(prog1.p
4fa0 72 6f 6d 69 73 65 0a 20 20 20 20 20 20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63 61 73 65 20 65 72 72 romise.......(condition-case.err
4fc0 6f 72 0a 20 20 20 20 20 20 20 20 20 20 28 75 72 6c 2d 72 65 74 72 69 65 76 65 20 75 72 6c 20 28 or...........(url-retrieve.url.(
4fe0 6c 61 6d 62 64 61 20 28 73 74 61 74 75 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 lambda.(status).................
5000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 76 61 6c 75 65 20 28 63 6f 6e 73 ..............(let.((value.(cons
5020 20 73 74 61 74 75 73 20 28 63 6c 6f 6e 65 2d 62 75 66 66 65 72 29 29 29 29 0a 20 20 20 20 20 20 .status.(clone-buffer)))).......
5040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 69 6f 2d 72 ..........................(aio-r
5060 65 73 6f 6c 76 65 20 70 72 6f 6d 69 73 65 20 28 6c 61 6d 62 64 61 20 28 29 20 76 61 6c 75 65 29 esolve.promise.(lambda.().value)
5080 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 69 6c 65 ))).........................sile
50a0 6e 74 20 69 6e 68 69 62 69 74 2d 63 6f 6f 6b 69 65 73 29 0a 20 20 20 20 20 20 20 20 28 65 72 72 nt.inhibit-cookies).........(err
50c0 6f 72 20 28 61 69 6f 2d 72 65 73 6f 6c 76 65 20 70 72 6f 6d 69 73 65 0a 20 20 20 20 20 20 20 20 or.(aio-resolve.promise.........
50e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 29 0a 20 ....................(lambda.()..
5100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 69 .............................(si
5120 67 6e 61 6c 20 28 63 61 72 20 65 72 72 6f 72 29 20 28 63 64 72 20 65 72 72 6f 72 29 29 29 29 29 gnal.(car.error).(cdr.error)))))
5140 29 29 29 29 0a 0a 28 63 6c 2d 64 65 66 75 6e 20 61 69 6f 2d 6d 61 6b 65 2d 63 61 6c 6c 62 61 63 ))))..(cl-defun.aio-make-callbac
5160 6b 20 28 26 6b 65 79 20 74 61 67 20 6f 6e 63 65 29 0a 20 20 22 52 65 74 75 72 6e 20 61 20 6e 65 k.(&key.tag.once)..."Return.a.ne
5180 77 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 69 74 73 20 66 69 72 73 w.callback.function.and.its.firs
51a0 74 20 70 72 6f 6d 69 73 65 2e 0a 0a 52 65 74 75 72 6e 73 20 61 20 63 6f 6e 73 20 28 63 61 6c 6c t.promise...Returns.a.cons.(call
51c0 62 61 63 6b 20 2e 20 70 72 6f 6d 69 73 65 29 20 77 68 65 72 65 20 63 61 6c 6c 62 61 63 6b 20 69 back...promise).where.callback.i
51e0 73 20 66 75 6e 63 74 69 6f 6e 0a 73 75 69 74 61 62 6c 65 20 66 6f 72 20 72 65 70 65 61 74 65 64 s.function.suitable.for.repeated
5200 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68 69 73 20 6d 61 6b 65 73 20 69 74 20 75 73 65 66 75 .invocation..This.makes.it.usefu
5220 6c 20 66 6f 72 0a 70 72 6f 63 65 73 73 20 66 69 6c 74 65 72 73 20 61 6e 64 20 73 65 6e 74 69 6e l.for.process.filters.and.sentin
5240 65 6c 73 2e 20 54 68 65 20 70 72 6f 6d 69 73 65 20 69 73 20 74 68 65 20 66 69 72 73 74 20 70 72 els..The.promise.is.the.first.pr
5260 6f 6d 69 73 65 0a 74 6f 20 62 65 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 65 20 63 61 6c 6c omise.to.be.resolved.by.the.call
5280 62 61 63 6b 2e 0a 0a 54 68 65 20 70 72 6f 6d 69 73 65 20 72 65 73 6f 6c 76 65 73 20 74 6f 3a 0a back...The.promise.resolves.to:.
52a0 20 20 28 6e 65 78 74 2d 70 72 6f 6d 69 73 65 20 2e 20 63 61 6c 6c 62 61 63 6b 2d 61 72 67 73 29 ..(next-promise...callback-args)
52c0 0a 4f 72 20 77 68 65 6e 20 54 41 47 20 69 73 20 73 75 70 70 6c 69 65 64 3a 0a 20 20 28 6e 65 78 .Or.when.TAG.is.supplied:...(nex
52e0 74 2d 70 72 6f 6d 69 73 65 20 54 41 47 20 2e 20 63 61 6c 6c 62 61 63 6b 2d 61 72 67 73 29 0a 4f t-promise.TAG...callback-args).O
5300 72 20 69 66 20 4f 4e 43 45 20 69 73 20 6e 6f 6e 2d 6e 69 6c 3a 0a 20 20 63 61 6c 6c 62 61 63 6b r.if.ONCE.is.non-nil:...callback
5320 2d 61 72 67 73 0a 0a 54 68 65 20 63 61 6c 6c 62 61 63 6b 20 72 65 73 6f 6c 76 65 73 20 6e 65 78 -args..The.callback.resolves.nex
5340 74 2d 70 72 6f 6d 69 73 65 20 6f 6e 20 74 68 65 20 6e 65 78 74 20 69 6e 76 6f 63 61 74 69 6f 6e t-promise.on.the.next.invocation
5360 2e 20 54 68 69 73 0a 63 72 65 61 74 65 73 20 61 20 63 68 61 69 6e 20 6f 66 20 70 72 6f 6d 69 73 ..This.creates.a.chain.of.promis
5380 65 73 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20 es.representing.the.sequence.of.
53a0 63 61 6c 6c 73 2e 0a 4e 6f 74 65 3a 20 54 6f 20 61 76 6f 69 64 20 6b 65 65 70 69 6e 67 20 6c 6f calls..Note:.To.avoid.keeping.lo
53c0 74 73 20 6f 66 20 67 61 72 62 61 67 65 20 69 6e 20 6d 65 6d 6f 72 79 2c 20 61 76 6f 69 64 20 68 ts.of.garbage.in.memory,.avoid.h
53e0 6f 6c 64 69 6e 67 0a 6f 6e 74 6f 20 74 68 65 20 66 69 72 73 74 20 70 72 6f 6d 69 73 65 20 28 69 olding.onto.the.first.promise.(i
5400 2e 65 2e 20 63 61 70 74 75 72 69 6e 67 20 69 74 20 69 6e 20 61 20 63 6c 6f 73 75 72 65 29 2e 0a .e..capturing.it.in.a.closure)..
5420 0a 54 68 65 20 60 61 69 6f 2d 63 68 61 69 6e 27 20 6d 61 63 72 6f 20 6d 61 6b 65 73 20 69 74 20 .The.`aio-chain'.macro.makes.it.
5440 65 61 73 69 65 72 20 74 6f 20 75 73 65 20 74 68 65 73 65 20 70 72 6f 6d 69 73 65 73 2e 22 0a 20 easier.to.use.these.promises."..
5460 20 28 6c 65 74 2a 20 28 28 70 72 6f 6d 69 73 65 20 28 61 69 6f 2d 70 72 6f 6d 69 73 65 29 29 0a .(let*.((promise.(aio-promise)).
5480 20 20 20 20 20 20 20 20 20 28 63 61 6c 6c 62 61 63 6b 0a 20 20 20 20 20 20 20 20 20 20 28 69 66 .........(callback...........(if
54a0 20 6f 6e 63 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 26 72 65 .once...............(lambda.(&re
54c0 73 74 20 61 72 67 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 st.args).................(let.((
54e0 72 65 73 75 6c 74 20 28 69 66 20 74 61 67 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 result.(if.tag..................
5500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 74 61 67 20 61 72 67 73 29 .................(cons.tag.args)
5520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ................................
5540 20 61 72 67 73 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 69 6f 2d .args)))...................(aio-
5560 72 65 73 6f 6c 76 65 20 70 72 6f 6d 69 73 65 20 28 6c 61 6d 62 64 61 20 28 29 20 72 65 73 75 6c resolve.promise.(lambda.().resul
5580 74 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 26 72 65 73 74 t)))).............(lambda.(&rest
55a0 20 61 72 67 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 6e 65 78 .args)...............(let*.((nex
55c0 74 2d 70 72 6f 6d 69 73 65 20 28 61 69 6f 2d 70 72 6f 6d 69 73 65 29 29 0a 20 20 20 20 20 20 20 t-promise.(aio-promise))........
55e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 72 65 73 75 6c 74 20 28 69 66 20 74 61 67 0a 20 20 ..............(result.(if.tag...
5600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 ...............................(
5620 63 6f 6e 73 20 6e 65 78 74 2d 70 72 6f 6d 69 73 65 20 28 63 6f 6e 73 20 74 61 67 20 61 72 67 73 cons.next-promise.(cons.tag.args
5640 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ))..............................
5660 20 20 28 63 6f 6e 73 20 6e 65 78 74 2d 70 72 6f 6d 69 73 65 20 61 72 67 73 29 29 29 29 0a 20 20 ..(cons.next-promise.args))))...
5680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 69 6f 2d 72 65 73 6f 6c 76 65 20 70 72 6f 6d 69 ..............(aio-resolve.promi
56a0 73 65 20 28 6c 61 6d 62 64 61 20 28 29 20 72 65 73 75 6c 74 29 29 0a 20 20 20 20 20 20 20 20 20 se.(lambda.().result))..........
56c0 20 20 20 20 20 20 20 28 73 65 74 66 20 70 72 6f 6d 69 73 65 20 6e 65 78 74 2d 70 72 6f 6d 69 73 .......(setf.promise.next-promis
56e0 65 29 29 29 29 29 29 0a 20 20 20 20 28 63 6f 6e 73 20 63 61 6c 6c 62 61 63 6b 20 70 72 6f 6d 69 e)))))).....(cons.callback.promi
5700 73 65 29 29 29 0a 0a 3b 3b 20 41 20 73 69 6d 70 6c 65 20 6c 69 74 74 6c 65 20 71 75 65 75 65 0a se)))..;;.A.simple.little.queue.
5720 0a 28 64 65 66 73 75 62 73 74 20 61 69 6f 2d 2d 71 75 65 75 65 2d 65 6d 70 74 79 2d 70 20 28 71 .(defsubst.aio--queue-empty-p.(q
5740 75 65 75 65 29 0a 20 20 22 52 65 74 75 72 6e 20 6e 6f 6e 2d 6e 69 6c 20 69 66 20 51 55 45 55 45 ueue)..."Return.non-nil.if.QUEUE
5760 20 69 73 20 65 6d 70 74 79 2e 0a 41 6e 20 65 6d 70 74 79 20 71 75 65 75 65 20 69 73 20 28 6e 69 .is.empty..An.empty.queue.is.(ni
5780 6c 20 2e 20 6e 69 6c 29 2e 22 0a 20 20 28 6e 75 6c 6c 20 28 63 61 61 72 20 71 75 65 75 65 29 29 l...nil)."...(null.(caar.queue))
57a0 29 0a 0a 28 64 65 66 73 75 62 73 74 20 61 69 6f 2d 2d 71 75 65 75 65 2d 67 65 74 20 28 71 75 65 )..(defsubst.aio--queue-get.(que
57c0 75 65 29 0a 20 20 22 47 65 74 20 74 68 65 20 6e 65 78 74 20 69 74 65 6d 20 66 72 6f 6d 20 51 55 ue)..."Get.the.next.item.from.QU
57e0 45 55 45 2c 20 6f 72 20 6e 69 6c 20 66 6f 72 20 65 6d 70 74 79 2e 22 0a 20 20 28 6c 65 74 20 28 EUE,.or.nil.for.empty."...(let.(
5800 28 68 65 61 64 20 28 63 61 72 20 71 75 65 75 65 29 29 29 0a 20 20 20 20 28 63 6f 6e 64 20 28 28 (head.(car.queue))).....(cond.((
5820 6e 75 6c 6c 20 68 65 61 64 29 0a 20 20 20 20 20 20 20 20 20 20 20 6e 69 6c 29 0a 20 20 20 20 20 null.head)............nil)......
5840 20 20 20 20 20 28 28 65 71 20 68 65 61 64 20 28 63 64 72 20 71 75 65 75 65 29 29 0a 20 20 20 20 .....((eq.head.(cdr.queue)).....
5860 20 20 20 20 20 20 20 28 70 72 6f 67 31 20 28 63 61 72 20 68 65 61 64 29 0a 20 20 20 20 20 20 20 .......(prog1.(car.head)........
5880 20 20 20 20 20 20 28 73 65 74 66 20 28 63 61 72 20 71 75 65 75 65 29 20 6e 69 6c 0a 20 20 20 20 ......(setf.(car.queue).nil.....
58a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 64 72 20 71 75 65 75 65 29 20 6e 69 6c 29 29 ...............(cdr.queue).nil))
58c0 29 0a 20 20 20 20 20 20 20 20 20 20 28 28 70 72 6f 67 31 20 28 63 61 72 20 68 65 61 64 29 0a 20 )...........((prog1.(car.head)..
58e0 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65 74 66 20 28 63 61 72 20 71 75 65 75 65 29 20 28 63 ............(setf.(car.queue).(c
5900 64 72 20 68 65 61 64 29 29 29 29 29 29 29 0a 0a 28 64 65 66 73 75 62 73 74 20 61 69 6f 2d 2d 71 dr.head)))))))..(defsubst.aio--q
5920 75 65 75 65 2d 70 75 74 20 28 71 75 65 75 65 20 65 6c 65 6d 65 6e 74 29 0a 20 20 22 41 70 70 65 ueue-put.(queue.element)..."Appe
5940 6e 64 20 45 4c 45 4d 45 4e 54 20 74 6f 20 51 55 45 55 45 2c 20 72 65 74 75 72 6e 69 6e 67 20 45 nd.ELEMENT.to.QUEUE,.returning.E
5960 4c 45 4d 45 4e 54 2e 22 0a 20 20 28 6c 65 74 20 28 28 6e 65 77 20 28 6c 69 73 74 20 65 6c 65 6d LEMENT."...(let.((new.(list.elem
5980 65 6e 74 29 29 29 0a 20 20 20 20 28 70 72 6f 67 31 20 65 6c 65 6d 65 6e 74 0a 20 20 20 20 20 20 ent))).....(prog1.element.......
59a0 28 69 66 20 28 6e 75 6c 6c 20 28 63 61 72 20 71 75 65 75 65 29 29 0a 20 20 20 20 20 20 20 20 20 (if.(null.(car.queue))..........
59c0 20 28 73 65 74 66 20 28 63 61 72 20 71 75 65 75 65 29 20 6e 65 77 0a 20 20 20 20 20 20 20 20 20 .(setf.(car.queue).new..........
59e0 20 20 20 20 20 20 20 28 63 64 72 20 71 75 65 75 65 29 20 6e 65 77 29 0a 20 20 20 20 20 20 20 20 .......(cdr.queue).new).........
5a00 28 73 65 74 66 20 28 63 64 72 20 28 63 64 72 20 71 75 65 75 65 29 29 20 6e 65 77 0a 20 20 20 20 (setf.(cdr.(cdr.queue)).new.....
5a20 20 20 20 20 20 20 20 20 20 20 28 63 64 72 20 71 75 65 75 65 29 20 6e 65 77 29 29 29 29 29 0a 0a ..........(cdr.queue).new)))))..
5a40 3b 3b 20 41 6e 20 65 66 66 69 63 69 65 6e 74 20 73 65 6c 65 63 74 28 29 2d 6c 69 6b 65 20 69 6e ;;.An.efficient.select()-like.in
5a60 74 65 72 66 61 63 65 20 66 6f 72 20 70 72 6f 6d 69 73 65 73 0a 0a 28 64 65 66 75 6e 20 61 69 6f terface.for.promises..(defun.aio
5a80 2d 6d 61 6b 65 2d 73 65 6c 65 63 74 20 28 26 6f 70 74 69 6f 6e 61 6c 20 70 72 6f 6d 69 73 65 73 -make-select.(&optional.promises
5aa0 29 0a 20 20 22 43 72 65 61 74 65 20 61 20 6e 65 77 20 60 61 69 6f 2d 73 65 6c 65 63 74 27 20 6f )..."Create.a.new.`aio-select'.o
5ac0 62 6a 65 63 74 20 66 6f 72 20 77 61 69 74 69 6e 67 20 6f 6e 20 6d 75 6c 74 69 70 6c 65 20 70 72 bject.for.waiting.on.multiple.pr
5ae0 6f 6d 69 73 65 73 2e 22 0a 20 20 28 6c 65 74 20 28 28 73 65 6c 65 63 74 20 28 72 65 63 6f 72 64 omises."...(let.((select.(record
5b00 20 27 61 69 6f 2d 73 65 6c 65 63 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .'aio-select....................
5b20 20 20 20 20 20 3b 3b 20 4d 65 6d 62 65 72 73 68 69 70 20 74 61 62 6c 65 0a 20 20 20 20 20 20 20 .....;;.Membership.table........
5b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 6b 65 2d 68 61 73 68 2d 74 61 62 6c .................(make-hash-tabl
5b60 65 20 3a 74 65 73 74 20 27 65 71 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e.:test.'eq)....................
5b80 20 20 20 20 20 3b 3b 20 22 53 65 65 6e 22 20 74 61 62 6c 65 20 28 61 76 6f 69 64 20 61 64 64 69 .....;;."Seen".table.(avoid.addi
5ba0 6e 67 20 6d 75 6c 74 69 70 6c 65 20 63 61 6c 6c 62 61 63 6b 29 0a 20 20 20 20 20 20 20 20 20 20 ng.multiple.callback)...........
5bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 6b 65 2d 68 61 73 68 2d 74 61 62 6c 65 20 3a ..............(make-hash-table.:
5be0 74 65 73 74 20 27 65 71 20 3a 77 65 61 6b 6e 65 73 73 20 27 6b 65 79 29 0a 20 20 20 20 20 20 20 test.'eq.:weakness.'key)........
5c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 51 75 65 75 65 20 6f 66 20 70 65 6e .................;;.Queue.of.pen
5c20 64 69 6e 67 20 72 65 73 6f 6c 76 65 64 20 70 72 6f 6d 69 73 65 73 0a 20 20 20 20 20 20 20 20 20 ding.resolved.promises..........
5c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 6e 69 6c 20 6e 69 6c 29 0a 20 20 ...............(cons.nil.nil)...
5c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 43 61 6c 6c 62 61 63 ......................;;.Callbac
5c80 6b 20 74 6f 20 72 65 73 6f 6c 76 65 20 73 65 6c 65 63 74 27 73 20 6f 77 6e 20 70 72 6f 6d 69 73 k.to.resolve.select's.own.promis
5ca0 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 69 6c 29 29 29 e.........................nil)))
5cc0 0a 20 20 20 20 28 70 72 6f 67 31 20 73 65 6c 65 63 74 0a 20 20 20 20 20 20 28 64 6f 6c 69 73 74 .....(prog1.select.......(dolist
5ce0 20 28 70 72 6f 6d 69 73 65 20 70 72 6f 6d 69 73 65 73 29 0a 20 20 20 20 20 20 20 20 28 61 69 6f .(promise.promises).........(aio
5d00 2d 73 65 6c 65 63 74 2d 61 64 64 20 73 65 6c 65 63 74 20 70 72 6f 6d 69 73 65 29 29 29 29 29 0a -select-add.select.promise))))).
5d20 0a 28 64 65 66 75 6e 20 61 69 6f 2d 73 65 6c 65 63 74 2d 61 64 64 20 28 73 65 6c 65 63 74 20 70 .(defun.aio-select-add.(select.p
5d40 72 6f 6d 69 73 65 29 0a 20 20 22 41 64 64 20 50 52 4f 4d 49 53 45 20 74 6f 20 74 68 65 20 73 65 romise)..."Add.PROMISE.to.the.se
5d60 74 20 6f 66 20 70 72 6f 6d 69 73 65 73 20 69 6e 20 53 45 4c 45 43 54 2e 0a 0a 53 45 4c 45 43 54 t.of.promises.in.SELECT...SELECT
5d80 20 69 73 20 63 72 65 61 74 65 64 20 77 69 74 68 20 60 61 69 6f 2d 6d 61 6b 65 2d 73 65 6c 65 63 .is.created.with.`aio-make-selec
5da0 74 27 2e 20 49 74 20 69 73 20 76 61 6c 69 64 20 74 6f 20 61 64 64 20 61 0a 70 72 6f 6d 69 73 65 t'..It.is.valid.to.add.a.promise
5dc0 20 74 68 61 74 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 6d 6f 76 65 64 2e 22 0a 20 .that.was.previously.removed."..
5de0 20 28 6c 65 74 20 28 28 6d 65 6d 62 65 72 73 20 28 61 72 65 66 20 73 65 6c 65 63 74 20 31 29 29 .(let.((members.(aref.select.1))
5e00 0a 20 20 20 20 20 20 20 20 28 73 65 65 6e 20 28 61 72 65 66 20 73 65 6c 65 63 74 20 32 29 29 29 .........(seen.(aref.select.2)))
5e20 0a 20 20 20 20 28 70 72 6f 67 31 20 70 72 6f 6d 69 73 65 0a 20 20 20 20 20 20 28 75 6e 6c 65 73 .....(prog1.promise.......(unles
5e40 73 20 28 67 65 74 68 61 73 68 20 70 72 6f 6d 69 73 65 20 73 65 65 6e 29 0a 20 20 20 20 20 20 20 s.(gethash.promise.seen)........
5e60 20 28 73 65 74 66 20 28 67 65 74 68 61 73 68 20 70 72 6f 6d 69 73 65 20 73 65 65 6e 29 20 74 0a .(setf.(gethash.promise.seen).t.
5e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67 65 74 68 61 73 68 20 70 72 6f 6d 69 73 65 20 6d ..............(gethash.promise.m
5ea0 65 6d 62 65 72 73 29 20 74 29 0a 20 20 20 20 20 20 20 20 28 61 69 6f 2d 6c 69 73 74 65 6e 20 70 embers).t).........(aio-listen.p
5ec0 72 6f 6d 69 73 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 romise.....................(lamb
5ee0 64 61 20 28 5f 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 68 da.(_).......................(wh
5f00 65 6e 20 28 67 65 74 68 61 73 68 20 70 72 6f 6d 69 73 65 20 6d 65 6d 62 65 72 73 29 0a 20 20 20 en.(gethash.promise.members)....
5f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 69 6f 2d 2d 71 75 65 75 65 .....................(aio--queue
5f40 2d 70 75 74 20 28 61 72 65 66 20 73 65 6c 65 63 74 20 33 29 20 70 72 6f 6d 69 73 65 29 0a 20 20 -put.(aref.select.3).promise)...
5f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 72 65 6d 68 61 73 68 20 70 ......................(remhash.p
5f80 72 6f 6d 69 73 65 20 6d 65 6d 62 65 72 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 romise.members).................
5fa0 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 63 61 6c 6c 62 61 63 6b 20 28 61 72 65 66 20 73 65 ........(let.((callback.(aref.se
5fc0 6c 65 63 74 20 34 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 lect.4))).......................
5fe0 20 20 20 20 28 77 68 65 6e 20 63 61 6c 6c 62 61 63 6b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ....(when.callback..............
6000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65 74 66 20 28 61 72 65 66 20 73 65 6c 65 63 ...............(setf.(aref.selec
6020 74 20 34 29 20 6e 69 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 t.4).nil).......................
6040 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 63 61 6c 6c 62 61 63 6b 29 29 29 29 29 29 29 29 29 ......(funcall.callback)))))))))
6060 29 0a 0a 28 64 65 66 75 6e 20 61 69 6f 2d 73 65 6c 65 63 74 2d 72 65 6d 6f 76 65 20 28 73 65 6c )..(defun.aio-select-remove.(sel
6080 65 63 74 20 70 72 6f 6d 69 73 65 29 0a 20 20 22 52 65 6d 6f 76 65 20 50 52 4f 4d 49 53 45 20 66 ect.promise)..."Remove.PROMISE.f
60a0 6f 72 6d 20 74 68 65 20 73 65 74 20 6f 66 20 70 72 6f 6d 69 73 65 73 20 69 6e 20 53 45 4c 45 43 orm.the.set.of.promises.in.SELEC
60c0 54 2e 0a 0a 53 45 4c 45 43 54 20 69 73 20 63 72 65 61 74 65 64 20 77 69 74 68 20 60 61 69 6f 2d T...SELECT.is.created.with.`aio-
60e0 6d 61 6b 65 2d 73 65 6c 65 63 74 27 2e 22 0a 20 20 28 72 65 6d 68 61 73 68 20 70 72 6f 6d 69 73 make-select'."...(remhash.promis
6100 65 20 28 61 72 65 66 20 73 65 6c 65 63 74 20 31 29 29 29 0a 0a 28 64 65 66 75 6e 20 61 69 6f 2d e.(aref.select.1)))..(defun.aio-
6120 73 65 6c 65 63 74 2d 70 72 6f 6d 69 73 65 73 20 28 73 65 6c 65 63 74 29 0a 20 20 22 52 65 74 75 select-promises.(select)..."Retu
6140 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 70 72 6f 6d 69 73 65 73 20 69 6e 20 53 45 4c 45 43 54 2e rn.a.list.of.promises.in.SELECT.
6160 0a 0a 53 45 4c 45 43 54 20 69 73 20 63 72 65 61 74 65 64 20 77 69 74 68 20 60 61 69 6f 2d 6d 61 ..SELECT.is.created.with.`aio-ma
6180 6b 65 2d 73 65 6c 65 63 74 27 2e 22 0a 20 20 28 63 6c 2d 6c 6f 6f 70 20 66 6f 72 20 6b 65 79 20 ke-select'."...(cl-loop.for.key.
61a0 62 65 69 6e 67 20 74 68 65 20 68 61 73 68 2d 6b 65 79 73 20 6f 66 20 28 61 72 65 66 20 73 65 6c being.the.hash-keys.of.(aref.sel
61c0 65 63 74 20 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 20 6b 65 79 29 29 0a ect.1)............collect.key)).
61e0 0a 28 64 65 66 75 6e 20 61 69 6f 2d 73 65 6c 65 63 74 20 28 73 65 6c 65 63 74 29 0a 20 20 22 52 .(defun.aio-select.(select)..."R
6200 65 74 75 72 6e 20 61 20 70 72 6f 6d 69 73 65 20 74 68 61 74 20 72 65 73 6f 6c 76 65 73 20 77 68 eturn.a.promise.that.resolves.wh
6220 65 6e 20 61 6e 79 20 70 72 6f 6d 69 73 65 20 69 6e 20 53 45 4c 45 43 54 20 72 65 73 6f 6c 76 65 en.any.promise.in.SELECT.resolve
6240 73 2e 0a 0a 53 45 4c 45 43 54 20 69 73 20 63 72 65 61 74 65 64 20 77 69 74 68 20 60 61 69 6f 2d s...SELECT.is.created.with.`aio-
6260 6d 61 6b 65 2d 73 65 6c 65 63 74 27 2e 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 0a 6c make-select'..This.function.is.l
6280 65 76 65 6c 2d 74 72 69 67 67 65 72 65 64 3a 20 69 66 20 61 20 70 72 6f 6d 69 73 65 20 69 6e 20 evel-triggered:.if.a.promise.in.
62a0 53 45 4c 45 43 54 20 69 73 20 61 6c 72 65 61 64 79 20 72 65 73 6f 6c 76 65 64 2c 20 69 74 0a 72 SELECT.is.already.resolved,.it.r
62c0 65 74 75 72 6e 73 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 77 69 74 68 20 74 68 61 74 20 70 72 6f eturns.immediately.with.that.pro
62e0 6d 69 73 65 2e 20 50 72 6f 6d 69 73 65 73 20 72 65 74 75 72 6e 65 64 20 62 79 0a 60 61 69 6f 2d mise..Promises.returned.by.`aio-
6300 73 65 6c 65 63 74 27 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 72 65 6d 6f 76 65 select'.are.automatically.remove
6320 64 20 66 72 6f 6d 20 53 45 4c 45 43 54 2e 20 55 73 65 20 74 68 69 73 0a 66 75 6e 63 74 69 6f 6e d.from.SELECT..Use.this.function
6340 20 74 6f 20 72 65 70 65 61 74 65 64 6c 79 20 77 61 69 74 20 6f 6e 20 61 20 73 65 74 20 6f 66 20 .to.repeatedly.wait.on.a.set.of.
6360 70 72 6f 6d 69 73 65 73 2e 0a 0a 4e 6f 74 65 3a 20 54 68 65 20 70 72 6f 6d 69 73 65 20 72 65 74 promises...Note:.The.promise.ret
6380 75 72 6e 65 64 20 62 79 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 73 6f 6c 76 65 73 20 urned.by.this.function.resolves.
63a0 74 6f 20 61 6e 6f 74 68 65 72 0a 70 72 6f 6d 69 73 65 2c 20 6e 6f 74 20 74 68 61 74 20 70 72 6f to.another.promise,.not.that.pro
63c0 6d 69 73 65 27 73 20 72 65 73 75 6c 74 2e 20 59 6f 75 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 mise's.result..You.will.need.to.
63e0 60 61 69 6f 2d 61 77 61 69 74 27 0a 6f 6e 20 69 74 2c 20 6f 72 20 75 73 65 20 60 61 69 6f 2d 72 `aio-await'.on.it,.or.use.`aio-r
6400 65 73 75 6c 74 27 2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 72 65 73 75 6c 74 20 28 61 69 6f 2d 70 esult'."...(let*.((result.(aio-p
6420 72 6f 6d 69 73 65 29 29 0a 20 20 20 20 20 20 20 20 20 28 63 61 6c 6c 62 61 63 6b 20 28 6c 61 6d romise))..........(callback.(lam
6440 62 64 61 20 28 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 bda.()......................(let
6460 20 28 28 70 72 6f 6d 69 73 65 20 28 61 69 6f 2d 2d 71 75 65 75 65 2d 67 65 74 20 28 61 72 65 66 .((promise.(aio--queue-get.(aref
6480 20 73 65 6c 65 63 74 20 33 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .select.3))))...................
64a0 20 20 20 20 20 28 61 69 6f 2d 72 65 73 6f 6c 76 65 20 72 65 73 75 6c 74 20 28 6c 61 6d 62 64 61 .....(aio-resolve.result.(lambda
64c0 20 28 29 20 70 72 6f 6d 69 73 65 29 29 29 29 29 29 0a 20 20 20 20 28 70 72 6f 67 31 20 72 65 73 .().promise)))))).....(prog1.res
64e0 75 6c 74 0a 20 20 20 20 20 20 28 69 66 20 28 61 69 6f 2d 2d 71 75 65 75 65 2d 65 6d 70 74 79 2d ult.......(if.(aio--queue-empty-
6500 70 20 28 61 72 65 66 20 73 65 6c 65 63 74 20 33 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 73 65 p.(aref.select.3))...........(se
6520 74 66 20 28 61 72 65 66 20 73 65 6c 65 63 74 20 34 29 20 63 61 6c 6c 62 61 63 6b 29 0a 20 20 20 tf.(aref.select.4).callback)....
6540 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 63 61 6c 6c 62 61 63 6b 29 29 29 29 29 0a 0a 3b 3b 20 .....(funcall.callback)))))..;;.
6560 53 65 6d 61 70 68 6f 72 65 73 0a 0a 28 64 65 66 75 6e 20 61 69 6f 2d 73 65 6d 20 28 69 6e 69 74 Semaphores..(defun.aio-sem.(init
6580 29 0a 20 20 22 43 72 65 61 74 65 20 61 20 6e 65 77 20 73 65 6d 61 70 68 6f 72 65 20 77 69 74 68 )..."Create.a.new.semaphore.with
65a0 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 49 4e 49 54 2e 22 0a 20 20 28 72 65 63 6f 72 64 20 .initial.value.INIT."...(record.
65c0 27 61 69 6f 2d 73 65 6d 0a 20 20 20 20 20 20 20 20 20 20 3b 3b 20 53 65 6d 61 70 68 6f 72 65 20 'aio-sem...........;;.Semaphore.
65e0 76 61 6c 75 65 0a 20 20 20 20 20 20 20 20 20 20 69 6e 69 74 0a 20 20 20 20 20 20 20 20 20 20 3b value...........init...........;
6600 3b 20 51 75 65 75 65 20 6f 66 20 77 61 69 74 69 6e 67 20 61 73 79 6e 63 20 66 75 6e 63 74 69 6f ;.Queue.of.waiting.async.functio
6620 6e 73 0a 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 6e 69 6c 20 6e 69 6c 29 29 29 0a 0a 28 ns...........(cons.nil.nil)))..(
6640 64 65 66 75 6e 20 61 69 6f 2d 73 65 6d 2d 70 6f 73 74 20 28 73 65 6d 29 0a 20 20 22 49 6e 63 72 defun.aio-sem-post.(sem)..."Incr
6660 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 53 45 4d 2e 0a 0a 49 66 20 61 73 79 6e ement.the.value.of.SEM...If.asyn
6680 63 68 72 6f 6e 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 77 61 69 74 69 6e 67 20 chronous.functions.are.awaiting.
66a0 6f 6e 20 53 45 4d 2c 20 74 68 65 6e 20 6f 6e 65 20 77 69 6c 6c 20 62 65 0a 77 6f 6b 65 6e 20 75 on.SEM,.then.one.will.be.woken.u
66c0 70 2e 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 77 61 69 74 61 62 6c p..This.function.is.not.awaitabl
66e0 65 2e 22 0a 20 20 28 77 68 65 6e 20 28 3c 3d 20 28 63 6c 2d 69 6e 63 66 20 28 61 72 65 66 20 73 e."...(when.(<=.(cl-incf.(aref.s
6700 65 6d 20 31 29 29 20 30 29 0a 20 20 20 20 28 6c 65 74 20 28 28 77 61 69 74 69 6e 67 20 28 61 69 em.1)).0).....(let.((waiting.(ai
6720 6f 2d 2d 71 75 65 75 65 2d 67 65 74 20 28 61 72 65 66 20 73 65 6d 20 32 29 29 29 29 0a 20 20 20 o--queue-get.(aref.sem.2))))....
6740 20 20 20 28 77 68 65 6e 20 77 61 69 74 69 6e 67 0a 20 20 20 20 20 20 20 20 28 61 69 6f 2d 72 65 ...(when.waiting.........(aio-re
6760 73 6f 6c 76 65 20 77 61 69 74 69 6e 67 20 28 6c 61 6d 62 64 61 20 28 29 20 6e 69 6c 29 29 29 29 solve.waiting.(lambda.().nil))))
6780 29 29 0a 0a 28 64 65 66 75 6e 20 61 69 6f 2d 73 65 6d 2d 77 61 69 74 20 28 73 65 6d 29 0a 20 20 ))..(defun.aio-sem-wait.(sem)...
67a0 22 44 65 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 53 45 4d 2e 0a 0a 49 66 "Decrement.the.value.of.SEM...If
67c0 20 53 45 4d 20 69 73 20 61 74 20 7a 65 72 6f 2c 20 72 65 74 75 72 6e 73 20 61 20 70 72 6f 6d 69 .SEM.is.at.zero,.returns.a.promi
67e0 73 65 20 74 68 61 74 20 77 69 6c 6c 20 72 65 73 6f 6c 76 65 20 77 68 65 6e 0a 61 6e 6f 74 68 65 se.that.will.resolve.when.anothe
6800 72 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 73 20 60 61 69 r.asynchronous.function.uses.`ai
6820 6f 2d 73 65 6d 2d 70 6f 73 74 27 2e 22 0a 20 20 28 77 68 65 6e 20 28 3c 20 28 63 6c 2d 64 65 63 o-sem-post'."...(when.(<.(cl-dec
6840 66 20 28 61 72 65 66 20 73 65 6d 20 31 29 29 20 30 29 0a 20 20 20 20 28 61 69 6f 2d 2d 71 75 65 f.(aref.sem.1)).0).....(aio--que
6860 75 65 2d 70 75 74 20 28 61 72 65 66 20 73 65 6d 20 32 29 20 28 61 69 6f 2d 70 72 6f 6d 69 73 65 ue-put.(aref.sem.2).(aio-promise
6880 29 29 29 29 0a 0a 3b 3b 20 60 65 6d 61 63 73 2d 6c 69 73 70 2d 6d 6f 64 65 27 20 66 6f 6e 74 20 ))))..;;.`emacs-lisp-mode'.font.
68a0 6c 6f 63 6b 0a 0a 28 66 6f 6e 74 2d 6c 6f 63 6b 2d 61 64 64 2d 6b 65 79 77 6f 72 64 73 0a 20 27 lock..(font-lock-add-keywords..'
68c0 65 6d 61 63 73 2d 6c 69 73 70 2d 6d 6f 64 65 0a 20 60 28 28 2c 28 72 78 20 22 28 61 69 6f 2d 64 emacs-lisp-mode..`((,(rx."(aio-d
68e0 65 66 75 6e 22 20 28 2b 20 62 6c 61 6e 6b 29 0a 20 20 20 20 20 20 20 20 20 28 67 72 6f 75 70 20 efun".(+.blank)..........(group.
6900 28 2b 20 28 6f 72 20 28 73 79 6e 74 61 78 20 77 6f 72 64 29 20 28 73 79 6e 74 61 78 20 73 79 6d (+.(or.(syntax.word).(syntax.sym
6920 62 6f 6c 29 29 29 29 29 0a 20 20 20 20 31 20 27 66 6f 6e 74 2d 6c 6f 63 6b 2d 66 75 6e 63 74 69 bol))))).....1.'font-lock-functi
6940 6f 6e 2d 6e 61 6d 65 2d 66 61 63 65 29 29 29 0a 0a 28 61 64 64 2d 68 6f 6f 6b 20 27 68 65 6c 70 on-name-face)))..(add-hook.'help
6960 2d 66 6e 73 2d 64 65 73 63 72 69 62 65 2d 66 75 6e 63 74 69 6f 6e 2d 66 75 6e 63 74 69 6f 6e 73 -fns-describe-function-functions
6980 20 23 27 61 69 6f 2d 64 65 73 63 72 69 62 65 2d 66 75 6e 63 74 69 6f 6e 29 0a 0a 28 64 65 66 75 .#'aio-describe-function)..(defu
69a0 6e 20 61 69 6f 2d 64 65 73 63 72 69 62 65 2d 66 75 6e 63 74 69 6f 6e 20 28 66 75 6e 63 74 69 6f n.aio-describe-function.(functio
69c0 6e 29 0a 20 20 22 49 6e 73 65 72 74 20 77 68 65 74 68 65 72 20 46 55 4e 43 54 49 4f 4e 20 69 73 n)..."Insert.whether.FUNCTION.is
69e0 20 61 6e 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73 20 66 75 6e 63 74 69 6f 6e 2e 0a 54 68 69 73 20 .an.asynchronous.function..This.
6a00 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 64 64 65 64 20 74 6f 20 e2 80 98 68 65 6c 70 2d 66 6e 73 function.is.added.to....help-fns
6a20 2d 64 65 73 63 72 69 62 65 2d 66 75 6e 63 74 69 6f 6e 2d 66 75 6e 63 74 69 6f 6e 73 e2 80 99 2e -describe-function-functions....
6a40 22 0a 20 20 28 77 68 65 6e 20 28 66 75 6e 63 74 69 6f 6e 2d 67 65 74 20 66 75 6e 63 74 69 6f 6e "...(when.(function-get.function
6a60 20 27 61 69 6f 2d 64 65 66 75 6e 2d 70 29 0a 20 20 20 20 28 69 6e 73 65 72 74 20 22 20 20 54 68 .'aio-defun-p).....(insert."..Th
6a80 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 20 69 74 20 is.function.is.asynchronous;.it.
6aa0 72 65 74 75 72 6e 73 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 61 6e 20 e2 80 98 61 69 6f returns."............."an....aio
6ac0 2d 70 72 6f 6d 69 73 65 e2 80 99 20 6f 62 6a 65 63 74 2e 5c 6e 22 29 29 29 0a 0a 28 70 72 6f 76 -promise....object.\n")))..(prov
6ae0 69 64 65 20 27 61 69 6f 29 0a 0a 3b 3b 3b 20 61 69 6f 2e 65 6c 20 65 6e 64 73 20 68 65 72 65 0a ide.'aio)..;;;.aio.el.ends.here.
6b00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6b20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6b40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6b60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6b80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6ba0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6bc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6be0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6c00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6c20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6c40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6c60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6c80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6ca0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6cc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6ce0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6d00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6d20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6d40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6d60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6d80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6da0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6dc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6de0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6e00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6e20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6e40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6e60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6e80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6ea0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6ec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6ee0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6f00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6f20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6f40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6f60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6f80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6fa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6fc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
6fe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
70a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
70c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
70e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
71a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
71c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
71e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
72a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
72c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
72e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
73a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
73c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
73e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
74a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
74c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
74e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
75a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
75c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
75e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7640 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7680 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
76a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
76c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
76e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
7780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
77a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
77c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
77e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................