summaryrefslogtreecommitdiff
path: root/labs/proxylab/proxylab-handout.tar
blob: 61d6093fe921253a97a6fbb1584ce420e889e824 (plain)
ofshex dumpascii
0000 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 proxylab-handout/...............
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 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000755.0006626.0000144.0000
0080 30 30 30 30 30 30 30 00 31 33 35 36 33 33 31 30 36 34 35 00 30 31 32 33 37 31 00 20 35 00 00 00 0000000.13563310645.012371..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 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
0120 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
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 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 4d 61 6b 65 66 69 6c 65 00 00 00 00 00 00 00 proxylab-handout/Makefile.......
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 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000644.0006626.0000144.0000
0280 30 30 30 31 34 37 33 00 31 32 36 35 34 37 34 32 30 34 31 00 30 31 34 30 33 35 00 20 30 00 00 00 0001473.12654742041.014035..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 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
0320 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
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 4d 61 6b 65 66 69 6c 65 20 66 6f 72 20 50 72 6f 78 79 20 4c 61 62 20 0a 23 0a 23 20 59 6f #.Makefile.for.Proxy.Lab..#.#.Yo
0420 75 20 6d 61 79 20 6d 6f 64 69 66 79 20 74 68 69 73 20 66 69 6c 65 20 61 6e 79 20 77 61 79 20 79 u.may.modify.this.file.any.way.y
0440 6f 75 20 6c 69 6b 65 20 28 65 78 63 65 70 74 20 66 6f 72 20 74 68 65 20 68 61 6e 64 69 6e 0a 23 ou.like.(except.for.the.handin.#
0460 20 72 75 6c 65 29 2e 20 59 6f 75 20 69 6e 73 74 72 75 63 74 6f 72 20 77 69 6c 6c 20 74 79 70 65 .rule)..You.instructor.will.type
0480 20 22 6d 61 6b 65 22 20 6f 6e 20 79 6f 75 72 20 73 70 65 63 69 66 69 63 20 4d 61 6b 65 66 69 6c ."make".on.your.specific.Makefil
04a0 65 20 74 6f 0a 23 20 62 75 69 6c 64 20 79 6f 75 72 20 70 72 6f 78 79 20 66 72 6f 6d 20 73 6f 75 e.to.#.build.your.proxy.from.sou
04c0 72 63 65 73 2e 0a 0a 43 43 20 3d 20 67 63 63 0a 43 46 4c 41 47 53 20 3d 20 2d 67 20 2d 57 61 6c rces...CC.=.gcc.CFLAGS.=.-g.-Wal
04e0 6c 0a 4c 44 46 4c 41 47 53 20 3d 20 2d 6c 70 74 68 72 65 61 64 0a 0a 61 6c 6c 3a 20 70 72 6f 78 l.LDFLAGS.=.-lpthread..all:.prox
0500 79 0a 0a 63 73 61 70 70 2e 6f 3a 20 63 73 61 70 70 2e 63 20 63 73 61 70 70 2e 68 0a 09 24 28 43 y..csapp.o:.csapp.c.csapp.h..$(C
0520 43 29 20 24 28 43 46 4c 41 47 53 29 20 2d 63 20 63 73 61 70 70 2e 63 0a 0a 70 72 6f 78 79 2e 6f C).$(CFLAGS).-c.csapp.c..proxy.o
0540 3a 20 70 72 6f 78 79 2e 63 20 63 73 61 70 70 2e 68 0a 09 24 28 43 43 29 20 24 28 43 46 4c 41 47 :.proxy.c.csapp.h..$(CC).$(CFLAG
0560 53 29 20 2d 63 20 70 72 6f 78 79 2e 63 0a 0a 70 72 6f 78 79 3a 20 70 72 6f 78 79 2e 6f 20 63 73 S).-c.proxy.c..proxy:.proxy.o.cs
0580 61 70 70 2e 6f 0a 09 24 28 43 43 29 20 24 28 43 46 4c 41 47 53 29 20 70 72 6f 78 79 2e 6f 20 63 app.o..$(CC).$(CFLAGS).proxy.o.c
05a0 73 61 70 70 2e 6f 20 2d 6f 20 70 72 6f 78 79 20 24 28 4c 44 46 4c 41 47 53 29 0a 0a 23 20 43 72 sapp.o.-o.proxy.$(LDFLAGS)..#.Cr
05c0 65 61 74 65 73 20 61 20 74 61 72 62 61 6c 6c 20 69 6e 20 2e 2e 2f 70 72 6f 78 79 6c 61 62 2d 68 eates.a.tarball.in.../proxylab-h
05e0 61 6e 64 69 6e 2e 74 61 72 20 74 68 61 74 20 79 6f 75 20 63 61 6e 20 74 68 65 6e 0a 23 20 68 61 andin.tar.that.you.can.then.#.ha
0600 6e 64 20 69 6e 2e 20 44 4f 20 4e 4f 54 20 4d 4f 44 49 46 59 20 54 48 49 53 21 0a 68 61 6e 64 69 nd.in..DO.NOT.MODIFY.THIS!.handi
0620 6e 3a 0a 09 28 6d 61 6b 65 20 63 6c 65 61 6e 3b 20 63 64 20 2e 2e 3b 20 74 61 72 20 63 76 66 20 n:..(make.clean;.cd...;.tar.cvf.
0640 24 28 55 53 45 52 29 2d 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 69 6e 2e 74 61 72 20 70 72 6f 78 $(USER)-proxylab-handin.tar.prox
0660 79 6c 61 62 2d 68 61 6e 64 6f 75 74 20 2d 2d 65 78 63 6c 75 64 65 20 74 69 6e 79 20 2d 2d 65 78 ylab-handout.--exclude.tiny.--ex
0680 63 6c 75 64 65 20 6e 6f 70 2d 73 65 72 76 65 72 2e 70 79 20 2d 2d 65 78 63 6c 75 64 65 20 70 72 clude.nop-server.py.--exclude.pr
06a0 6f 78 79 20 2d 2d 65 78 63 6c 75 64 65 20 64 72 69 76 65 72 2e 73 68 20 2d 2d 65 78 63 6c 75 64 oxy.--exclude.driver.sh.--exclud
06c0 65 20 70 6f 72 74 2d 66 6f 72 2d 75 73 65 72 2e 70 6c 20 2d 2d 65 78 63 6c 75 64 65 20 66 72 65 e.port-for-user.pl.--exclude.fre
06e0 65 2d 70 6f 72 74 2e 73 68 20 2d 2d 65 78 63 6c 75 64 65 20 22 2e 2a 22 29 0a 0a 63 6c 65 61 6e e-port.sh.--exclude.".*")..clean
0700 3a 0a 09 72 6d 20 2d 66 20 2a 7e 20 2a 2e 6f 20 70 72 6f 78 79 20 63 6f 72 65 20 2a 2e 74 61 72 :..rm.-f.*~.*.o.proxy.core.*.tar
0720 20 2a 2e 7a 69 70 20 2a 2e 67 7a 69 70 20 2a 2e 62 7a 69 70 20 2a 2e 67 7a 0a 0a 00 00 00 00 00 .*.zip.*.gzip.*.bzip.*.gz.......
0740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
07a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
07c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
07e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0800 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 52 45 41 44 4d 45 00 00 00 00 00 00 00 00 00 proxylab-handout/README.........
0820 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0860 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000644.0006626.0000144.0000
0880 30 30 30 32 35 37 36 00 31 32 36 35 34 37 33 37 34 35 34 00 30 31 33 32 37 36 00 20 30 00 00 00 0002576.12654737454.013276..0...
08a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
08c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
08e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0900 00 75 73 74 61 72 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
0920 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
0940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
09a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
09c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
09e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0a00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
0a20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
0a40 23 23 23 23 0a 23 20 43 53 3a 41 50 50 20 50 72 6f 78 79 20 4c 61 62 0a 23 0a 23 20 53 74 75 64 ####.#.CS:APP.Proxy.Lab.#.#.Stud
0a60 65 6e 74 20 53 6f 75 72 63 65 20 46 69 6c 65 73 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ent.Source.Files.###############
0a80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################################
0aa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 54 68 69 73 20 64 69 72 65 #####################..This.dire
0ac0 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 6c 65 73 20 79 6f 75 20 77 69 6c ctory.contains.the.files.you.wil
0ae0 6c 20 6e 65 65 64 20 66 6f 72 20 74 68 65 20 43 53 3a 41 50 50 20 50 72 6f 78 79 0a 4c 61 62 2e l.need.for.the.CS:APP.Proxy.Lab.
0b00 0a 0a 70 72 6f 78 79 2e 63 0a 63 73 61 70 70 2e 68 0a 63 73 61 70 70 2e 63 0a 20 20 20 20 54 68 ..proxy.c.csapp.h.csapp.c.....Th
0b20 65 73 65 20 61 72 65 20 73 74 61 72 74 65 72 20 66 69 6c 65 73 2e 20 20 63 73 61 70 70 2e 63 20 ese.are.starter.files...csapp.c.
0b40 61 6e 64 20 63 73 61 70 70 2e 68 20 61 72 65 20 64 65 73 63 72 69 62 65 64 20 69 6e 0a 20 20 20 and.csapp.h.are.described.in....
0b60 20 79 6f 75 72 20 74 65 78 74 62 6f 6f 6b 2e 20 0a 0a 20 20 20 20 59 6f 75 20 6d 61 79 20 6d 61 .your.textbook........You.may.ma
0b80 6b 65 20 61 6e 79 20 63 68 61 6e 67 65 73 20 79 6f 75 20 6c 69 6b 65 20 74 6f 20 74 68 65 73 65 ke.any.changes.you.like.to.these
0ba0 20 66 69 6c 65 73 2e 20 20 41 6e 64 20 79 6f 75 20 6d 61 79 0a 20 20 20 20 63 72 65 61 74 65 20 .files...And.you.may.....create.
0bc0 61 6e 64 20 68 61 6e 64 69 6e 20 61 6e 79 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 6c 65 73 20 and.handin.any.additional.files.
0be0 79 6f 75 20 6c 69 6b 65 2e 0a 0a 20 20 20 20 50 6c 65 61 73 65 20 75 73 65 20 60 70 6f 72 74 2d you.like.......Please.use.`port-
0c00 66 6f 72 2d 75 73 65 72 2e 70 6c 27 20 6f 72 20 27 66 72 65 65 2d 70 6f 72 74 2e 73 68 27 20 74 for-user.pl'.or.'free-port.sh'.t
0c20 6f 20 67 65 6e 65 72 61 74 65 0a 20 20 20 20 75 6e 69 71 75 65 20 70 6f 72 74 73 20 66 6f 72 20 o.generate.....unique.ports.for.
0c40 79 6f 75 72 20 70 72 6f 78 79 20 6f 72 20 74 69 6e 79 20 73 65 72 76 65 72 2e 20 0a 0a 4d 61 6b your.proxy.or.tiny.server....Mak
0c60 65 66 69 6c 65 0a 20 20 20 20 54 68 69 73 20 69 73 20 74 68 65 20 6d 61 6b 65 66 69 6c 65 20 74 efile.....This.is.the.makefile.t
0c80 68 61 74 20 62 75 69 6c 64 73 20 74 68 65 20 70 72 6f 78 79 20 70 72 6f 67 72 61 6d 2e 20 20 54 hat.builds.the.proxy.program...T
0ca0 79 70 65 20 22 6d 61 6b 65 22 0a 20 20 20 20 74 6f 20 62 75 69 6c 64 20 79 6f 75 72 20 73 6f 6c ype."make".....to.build.your.sol
0cc0 75 74 69 6f 6e 2c 20 6f 72 20 22 6d 61 6b 65 20 63 6c 65 61 6e 22 20 66 6f 6c 6c 6f 77 65 64 20 ution,.or."make.clean".followed.
0ce0 62 79 20 22 6d 61 6b 65 22 20 66 6f 72 20 61 0a 20 20 20 20 66 72 65 73 68 20 62 75 69 6c 64 2e by."make".for.a.....fresh.build.
0d00 20 0a 0a 20 20 20 20 54 79 70 65 20 22 6d 61 6b 65 20 68 61 6e 64 69 6e 22 20 74 6f 20 63 72 65 .......Type."make.handin".to.cre
0d20 61 74 65 20 74 68 65 20 74 61 72 66 69 6c 65 20 74 68 61 74 20 79 6f 75 20 77 69 6c 6c 20 62 65 ate.the.tarfile.that.you.will.be
0d40 20 68 61 6e 64 69 6e 67 0a 20 20 20 20 69 6e 2e 20 59 6f 75 20 63 61 6e 20 6d 6f 64 69 66 79 20 .handing.....in..You.can.modify.
0d60 69 74 20 61 6e 79 20 77 61 79 20 79 6f 75 20 6c 69 6b 65 2e 20 59 6f 75 72 20 69 6e 73 74 72 75 it.any.way.you.like..Your.instru
0d80 63 74 6f 72 20 77 69 6c 6c 20 75 73 65 20 79 6f 75 72 0a 20 20 20 20 4d 61 6b 65 66 69 6c 65 20 ctor.will.use.your.....Makefile.
0da0 74 6f 20 62 75 69 6c 64 20 79 6f 75 72 20 70 72 6f 78 79 20 66 72 6f 6d 20 73 6f 75 72 63 65 2e to.build.your.proxy.from.source.
0dc0 0a 0a 70 6f 72 74 2d 66 6f 72 2d 75 73 65 72 2e 70 6c 0a 20 20 20 20 47 65 6e 65 72 61 74 65 73 ..port-for-user.pl.....Generates
0de0 20 61 20 72 61 6e 64 6f 6d 20 70 6f 72 74 20 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 .a.random.port.for.a.particular.
0e00 75 73 65 72 0a 20 20 20 20 75 73 61 67 65 3a 20 2e 2f 70 6f 72 74 2d 66 6f 72 2d 75 73 65 72 2e user.....usage:../port-for-user.
0e20 70 6c 20 3c 75 73 65 72 49 44 3e 0a 0a 66 72 65 65 2d 70 6f 72 74 2e 73 68 0a 20 20 20 20 48 61 pl.<userID>..free-port.sh.....Ha
0e40 6e 64 79 20 73 63 72 69 70 74 20 74 68 61 74 20 69 64 65 6e 74 69 66 69 65 73 20 61 6e 20 75 6e ndy.script.that.identifies.an.un
0e60 75 73 65 64 20 54 43 50 20 70 6f 72 74 20 74 68 61 74 20 79 6f 75 20 63 61 6e 20 75 73 65 0a 20 used.TCP.port.that.you.can.use..
0e80 20 20 20 66 6f 72 20 79 6f 75 72 20 70 72 6f 78 79 20 6f 72 20 74 69 6e 79 2e 20 0a 20 20 20 20 ...for.your.proxy.or.tiny.......
0ea0 75 73 61 67 65 3a 20 2e 2f 66 72 65 65 2d 70 6f 72 74 2e 73 68 0a 0a 64 72 69 76 65 72 2e 73 68 usage:../free-port.sh..driver.sh
0ec0 0a 20 20 20 20 54 68 65 20 61 75 74 6f 67 72 61 64 65 72 20 66 6f 72 20 42 61 73 69 63 2c 20 43 .....The.autograder.for.Basic,.C
0ee0 6f 6e 63 75 72 72 65 6e 63 79 2c 20 61 6e 64 20 43 61 63 68 65 2e 20 20 20 20 20 20 20 20 0a 20 oncurrency,.and.Cache...........
0f00 20 20 20 75 73 61 67 65 3a 20 2e 2f 64 72 69 76 65 72 2e 73 68 0a 0a 6e 6f 70 2d 73 65 72 76 65 ...usage:../driver.sh..nop-serve
0f20 72 2e 70 79 0a 20 20 20 20 20 68 65 6c 70 65 72 20 66 6f 72 20 74 68 65 20 61 75 74 6f 67 72 61 r.py......helper.for.the.autogra
0f40 64 65 72 2e 20 20 20 20 20 20 20 20 20 0a 0a 74 69 6e 79 0a 20 20 20 20 54 69 6e 79 20 57 65 62 der............tiny.....Tiny.Web
0f60 20 73 65 72 76 65 72 20 66 72 6f 6d 20 74 68 65 20 43 53 3a 41 50 50 20 74 65 78 74 0a 0a 00 00 .server.from.the.CS:APP.text....
0f80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0fa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0fc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
0fe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1000 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 63 73 61 70 70 2e 63 00 00 00 00 00 00 00 00 proxylab-handout/csapp.c........
1020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1060 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000644.0006626.0000144.0000
1080 30 30 35 36 37 34 33 00 31 33 35 36 33 33 30 37 37 36 32 00 30 31 33 36 37 30 00 20 30 00 00 00 0056743.13563307762.013670..0...
10a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
10c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
10e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1100 00 75 73 74 61 72 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
1120 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
1140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
11a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
11c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
11e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1200 2f 2a 20 0a 20 2a 20 63 73 61 70 70 2e 63 20 2d 20 46 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20 74 /*...*.csapp.c.-.Functions.for.t
1220 68 65 20 43 53 3a 41 50 50 33 65 20 62 6f 6f 6b 0a 20 2a 0a 20 2a 20 55 70 64 61 74 65 64 20 31 he.CS:APP3e.book..*..*.Updated.1
1240 30 2f 32 30 31 36 20 72 65 62 3a 0a 20 2a 20 20 20 2d 20 46 69 78 65 64 20 62 75 67 20 69 6e 20 0/2016.reb:..*...-.Fixed.bug.in.
1260 73 69 6f 5f 6c 74 6f 61 20 74 68 61 74 20 64 69 64 6e 27 74 20 63 6f 76 65 72 20 6e 65 67 61 74 sio_ltoa.that.didn't.cover.negat
1280 69 76 65 20 6e 75 6d 62 65 72 73 0a 20 2a 0a 20 2a 20 55 70 64 61 74 65 64 20 32 2f 32 30 31 36 ive.numbers..*..*.Updated.2/2016
12a0 20 64 72 6f 68 3a 0a 20 2a 20 20 20 2d 20 55 70 64 61 74 65 64 20 6f 70 65 6e 5f 63 6c 69 65 6e .droh:..*...-.Updated.open_clien
12c0 74 66 64 20 61 6e 64 20 6f 70 65 6e 5f 6c 69 73 74 65 6e 66 64 20 74 6f 20 66 61 69 6c 20 6d 6f tfd.and.open_listenfd.to.fail.mo
12e0 72 65 20 67 72 61 63 65 66 75 6c 6c 79 0a 20 2a 0a 20 2a 20 55 70 64 61 74 65 64 20 38 2f 32 30 re.gracefully..*..*.Updated.8/20
1300 31 34 20 64 72 6f 68 3a 20 0a 20 2a 20 20 20 2d 20 4e 65 77 20 76 65 72 73 69 6f 6e 73 20 6f 66 14.droh:...*...-.New.versions.of
1320 20 6f 70 65 6e 5f 63 6c 69 65 6e 74 66 64 20 61 6e 64 20 6f 70 65 6e 5f 6c 69 73 74 65 6e 66 64 .open_clientfd.and.open_listenfd
1340 20 61 72 65 20 72 65 65 6e 74 72 61 6e 74 20 61 6e 64 0a 20 2a 20 20 20 20 20 70 72 6f 74 6f 63 .are.reentrant.and..*.....protoc
1360 6f 6c 20 69 6e 64 65 70 65 6e 64 65 6e 74 2e 0a 20 2a 0a 20 2a 20 20 20 2d 20 41 64 64 65 64 20 ol.independent...*..*...-.Added.
1380 70 72 6f 74 6f 63 6f 6c 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 69 6e 65 74 5f 6e 74 6f 70 20 61 protocol-independent.inet_ntop.a
13a0 6e 64 20 69 6e 65 74 5f 70 74 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 2e 20 54 68 65 0a 20 2a 20 20 nd.inet_pton.functions..The..*..
13c0 20 20 20 69 6e 65 74 5f 6e 74 6f 61 20 61 6e 64 20 69 6e 65 74 5f 61 74 6f 6e 20 66 75 6e 63 74 ...inet_ntoa.and.inet_aton.funct
13e0 69 6f 6e 73 20 61 72 65 20 6f 62 73 6f 6c 65 74 65 2e 0a 20 2a 0a 20 2a 20 55 70 64 61 74 65 64 ions.are.obsolete...*..*.Updated
1400 20 37 2f 32 30 31 34 20 64 72 6f 68 3a 0a 20 2a 20 20 20 2d 20 41 64 65 64 20 72 65 65 6e 74 72 .7/2014.droh:..*...-.Aded.reentr
1420 61 6e 74 20 73 69 6f 20 28 73 69 67 6e 61 6c 2d 73 61 66 65 20 49 2f 4f 29 20 72 6f 75 74 69 6e ant.sio.(signal-safe.I/O).routin
1440 65 73 0a 20 2a 20 0a 20 2a 20 55 70 64 61 74 65 64 20 34 2f 32 30 31 33 20 64 72 6f 68 3a 20 0a es..*...*.Updated.4/2013.droh:..
1460 20 2a 20 20 20 2d 20 72 69 6f 5f 72 65 61 64 6c 69 6e 65 62 3a 20 66 69 78 65 64 20 65 64 67 65 .*...-.rio_readlineb:.fixed.edge
1480 20 63 61 73 65 20 62 75 67 0a 20 2a 20 20 20 2d 20 72 69 6f 5f 72 65 61 64 6e 62 3a 20 72 65 6d .case.bug..*...-.rio_readnb:.rem
14a0 6f 76 65 64 20 72 65 64 75 6e 64 61 6e 74 20 45 49 4e 54 52 20 63 68 65 63 6b 0a 20 2a 2f 0a 2f oved.redundant.EINTR.check..*/./
14c0 2a 20 24 62 65 67 69 6e 20 63 73 61 70 70 2e 63 20 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 63 73 *.$begin.csapp.c.*/.#include."cs
14e0 61 70 70 2e 68 22 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a app.h"../***********************
1500 2a 2a 2a 20 0a 20 2a 20 45 72 72 6f 72 2d 68 61 6e 64 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 ***...*.Error-handling.functions
1520 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 2f 2a ..**************************/./*
1540 20 24 62 65 67 69 6e 20 65 72 72 6f 72 66 75 6e 73 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 75 .$begin.errorfuns.*/./*.$begin.u
1560 6e 69 78 65 72 72 6f 72 20 2a 2f 0a 76 6f 69 64 20 75 6e 69 78 5f 65 72 72 6f 72 28 63 68 61 72 nixerror.*/.void.unix_error(char
1580 20 2a 6d 73 67 29 20 2f 2a 20 55 6e 69 78 2d 73 74 79 6c 65 20 65 72 72 6f 72 20 2a 2f 0a 7b 0a .*msg)./*.Unix-style.error.*/.{.
15a0 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 3a 20 25 73 5c 6e 22 2c 20 ....fprintf(stderr,."%s:.%s\n",.
15c0 6d 73 67 2c 20 73 74 72 65 72 72 6f 72 28 65 72 72 6e 6f 29 29 3b 0a 20 20 20 20 65 78 69 74 28 msg,.strerror(errno));.....exit(
15e0 30 29 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 75 6e 69 78 65 72 72 6f 72 20 2a 2f 0a 0a 76 6f 69 64 0);.}./*.$end.unixerror.*/..void
1600 20 70 6f 73 69 78 5f 65 72 72 6f 72 28 69 6e 74 20 63 6f 64 65 2c 20 63 68 61 72 20 2a 6d 73 67 .posix_error(int.code,.char.*msg
1620 29 20 2f 2a 20 50 6f 73 69 78 2d 73 74 79 6c 65 20 65 72 72 6f 72 20 2a 2f 0a 7b 0a 20 20 20 20 )./*.Posix-style.error.*/.{.....
1640 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 3a 20 25 73 5c 6e 22 2c 20 6d 73 67 2c fprintf(stderr,."%s:.%s\n",.msg,
1660 20 73 74 72 65 72 72 6f 72 28 63 6f 64 65 29 29 3b 0a 20 20 20 20 65 78 69 74 28 30 29 3b 0a 7d .strerror(code));.....exit(0);.}
1680 0a 0a 76 6f 69 64 20 67 61 69 5f 65 72 72 6f 72 28 69 6e 74 20 63 6f 64 65 2c 20 63 68 61 72 20 ..void.gai_error(int.code,.char.
16a0 2a 6d 73 67 29 20 2f 2a 20 47 65 74 61 64 64 72 69 6e 66 6f 2d 73 74 79 6c 65 20 65 72 72 6f 72 *msg)./*.Getaddrinfo-style.error
16c0 20 2a 2f 0a 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 3a 20 25 .*/.{.....fprintf(stderr,."%s:.%
16e0 73 5c 6e 22 2c 20 6d 73 67 2c 20 67 61 69 5f 73 74 72 65 72 72 6f 72 28 63 6f 64 65 29 29 3b 0a s\n",.msg,.gai_strerror(code));.
1700 20 20 20 20 65 78 69 74 28 30 29 3b 0a 7d 0a 0a 76 6f 69 64 20 61 70 70 5f 65 72 72 6f 72 28 63 ....exit(0);.}..void.app_error(c
1720 68 61 72 20 2a 6d 73 67 29 20 2f 2a 20 41 70 70 6c 69 63 61 74 69 6f 6e 20 65 72 72 6f 72 20 2a har.*msg)./*.Application.error.*
1740 2f 0a 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 5c 6e 22 2c 20 /.{.....fprintf(stderr,."%s\n",.
1760 6d 73 67 29 3b 0a 20 20 20 20 65 78 69 74 28 30 29 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 65 72 72 msg);.....exit(0);.}./*.$end.err
1780 6f 72 66 75 6e 73 20 2a 2f 0a 0a 76 6f 69 64 20 64 6e 73 5f 65 72 72 6f 72 28 63 68 61 72 20 2a orfuns.*/..void.dns_error(char.*
17a0 6d 73 67 29 20 2f 2a 20 4f 62 73 6f 6c 65 74 65 20 67 65 74 68 6f 73 74 62 79 6e 61 6d 65 20 65 msg)./*.Obsolete.gethostbyname.e
17c0 72 72 6f 72 20 2a 2f 0a 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 rror.*/.{.....fprintf(stderr,."%
17e0 73 5c 6e 22 2c 20 6d 73 67 29 3b 0a 20 20 20 20 65 78 69 74 28 30 29 3b 0a 7d 0a 0a 0a 2f 2a 2a s\n",.msg);.....exit(0);.}.../**
1800 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ********************************
1820 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 57 72 61 70 70 65 72 73 20 66 6f 72 20 55 6e 69 78 ***********..*.Wrappers.for.Unix
1840 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 72 6f 6c 20 66 75 6e 63 74 69 6f 6e 73 0a 20 2a 2a 2a 2a .process.control.functions..****
1860 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ********************************
1880 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 24 62 65 67 69 6e 20 66 6f 72 6b 77 72 61 70 70 65 72 ********/../*.$begin.forkwrapper
18a0 20 2a 2f 0a 70 69 64 5f 74 20 46 6f 72 6b 28 76 6f 69 64 29 20 0a 7b 0a 20 20 20 20 70 69 64 5f .*/.pid_t.Fork(void)..{.....pid_
18c0 74 20 70 69 64 3b 0a 0a 20 20 20 20 69 66 20 28 28 70 69 64 20 3d 20 66 6f 72 6b 28 29 29 20 3c t.pid;......if.((pid.=.fork()).<
18e0 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 46 6f 72 6b 20 65 72 72 6f 72 22 29 3b 0a 20 .0)..unix_error("Fork.error");..
1900 20 20 20 72 65 74 75 72 6e 20 70 69 64 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 66 6f 72 6b 77 72 61 ...return.pid;.}./*.$end.forkwra
1920 70 70 65 72 20 2a 2f 0a 0a 76 6f 69 64 20 45 78 65 63 76 65 28 63 6f 6e 73 74 20 63 68 61 72 20 pper.*/..void.Execve(const.char.
1940 2a 66 69 6c 65 6e 61 6d 65 2c 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 61 72 67 76 5b 5d 2c 20 63 *filename,.char.*const.argv[],.c
1960 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e 76 70 5b 5d 29 20 0a 7b 0a 20 20 20 20 69 66 20 28 65 78 har.*const.envp[])..{.....if.(ex
1980 65 63 76 65 28 66 69 6c 65 6e 61 6d 65 2c 20 61 72 67 76 2c 20 65 6e 76 70 29 20 3c 20 30 29 0a ecve(filename,.argv,.envp).<.0).
19a0 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 45 78 65 63 76 65 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a .unix_error("Execve.error");.}..
19c0 2f 2a 20 24 62 65 67 69 6e 20 77 61 69 74 20 2a 2f 0a 70 69 64 5f 74 20 57 61 69 74 28 69 6e 74 /*.$begin.wait.*/.pid_t.Wait(int
19e0 20 2a 73 74 61 74 75 73 29 20 0a 7b 0a 20 20 20 20 70 69 64 5f 74 20 70 69 64 3b 0a 0a 20 20 20 .*status)..{.....pid_t.pid;.....
1a00 20 69 66 20 28 28 70 69 64 20 20 3d 20 77 61 69 74 28 73 74 61 74 75 73 29 29 20 3c 20 30 29 0a .if.((pid..=.wait(status)).<.0).
1a20 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 57 61 69 74 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 .unix_error("Wait.error");.....r
1a40 65 74 75 72 6e 20 70 69 64 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 77 61 69 74 20 2a 2f 0a 0a 70 69 eturn.pid;.}./*.$end.wait.*/..pi
1a60 64 5f 74 20 57 61 69 74 70 69 64 28 70 69 64 5f 74 20 70 69 64 2c 20 69 6e 74 20 2a 69 70 74 72 d_t.Waitpid(pid_t.pid,.int.*iptr
1a80 2c 20 69 6e 74 20 6f 70 74 69 6f 6e 73 29 20 0a 7b 0a 20 20 20 20 70 69 64 5f 74 20 72 65 74 70 ,.int.options)..{.....pid_t.retp
1aa0 69 64 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 65 74 70 69 64 20 20 3d 20 77 61 69 74 70 69 64 28 id;......if.((retpid..=.waitpid(
1ac0 70 69 64 2c 20 69 70 74 72 2c 20 6f 70 74 69 6f 6e 73 29 29 20 3c 20 30 29 20 0a 09 75 6e 69 78 pid,.iptr,.options)).<.0)...unix
1ae0 5f 65 72 72 6f 72 28 22 57 61 69 74 70 69 64 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 _error("Waitpid.error");.....ret
1b00 75 72 6e 28 72 65 74 70 69 64 29 3b 0a 7d 0a 0a 2f 2a 20 24 62 65 67 69 6e 20 6b 69 6c 6c 20 2a urn(retpid);.}../*.$begin.kill.*
1b20 2f 0a 76 6f 69 64 20 4b 69 6c 6c 28 70 69 64 5f 74 20 70 69 64 2c 20 69 6e 74 20 73 69 67 6e 75 /.void.Kill(pid_t.pid,.int.signu
1b40 6d 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d m)..{.....int.rc;......if.((rc.=
1b60 20 6b 69 6c 6c 28 70 69 64 2c 20 73 69 67 6e 75 6d 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 .kill(pid,.signum)).<.0)..unix_e
1b80 72 72 6f 72 28 22 4b 69 6c 6c 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 6b 69 rror("Kill.error");.}./*.$end.ki
1ba0 6c 6c 20 2a 2f 0a 0a 76 6f 69 64 20 50 61 75 73 65 28 29 20 0a 7b 0a 20 20 20 20 28 76 6f 69 64 ll.*/..void.Pause()..{.....(void
1bc0 29 70 61 75 73 65 28 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 7d 0a 0a 75 6e 73 69 67 6e 65 )pause();.....return;.}..unsigne
1be0 64 20 69 6e 74 20 53 6c 65 65 70 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 73 65 63 73 29 20 0a d.int.Sleep(unsigned.int.secs)..
1c00 7b 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 {.....unsigned.int.rc;......if.(
1c20 28 72 63 20 3d 20 73 6c 65 65 70 28 73 65 63 73 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 (rc.=.sleep(secs)).<.0)..unix_er
1c40 72 6f 72 28 22 53 6c 65 65 70 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 ror("Sleep.error");.....return.r
1c60 63 3b 0a 7d 0a 0a 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 41 6c 61 72 6d 28 75 6e 73 69 67 6e 65 c;.}..unsigned.int.Alarm(unsigne
1c80 64 20 69 6e 74 20 73 65 63 6f 6e 64 73 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 61 6c 61 72 d.int.seconds).{.....return.alar
1ca0 6d 28 73 65 63 6f 6e 64 73 29 3b 0a 7d 0a 20 0a 76 6f 69 64 20 53 65 74 70 67 69 64 28 70 69 64 m(seconds);.}...void.Setpgid(pid
1cc0 5f 74 20 70 69 64 2c 20 70 69 64 5f 74 20 70 67 69 64 29 20 7b 0a 20 20 20 20 69 6e 74 20 72 63 _t.pid,.pid_t.pgid).{.....int.rc
1ce0 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 73 65 74 70 67 69 64 28 70 69 64 2c 20 70 67 ;......if.((rc.=.setpgid(pid,.pg
1d00 69 64 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 53 65 74 70 67 69 64 20 65 id)).<.0)..unix_error("Setpgid.e
1d20 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 7d 0a 0a 70 69 64 5f 74 20 47 65 74 rror");.....return;.}..pid_t.Get
1d40 70 67 72 70 28 76 6f 69 64 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 67 65 74 70 67 72 70 28 pgrp(void).{.....return.getpgrp(
1d60 29 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a );.}../*************************
1d80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 57 72 61 70 70 65 72 73 20 66 6f 72 20 55 6e 69 78 ***********..*.Wrappers.for.Unix
1da0 20 73 69 67 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 73 20 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a .signal.functions...************
1dc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 24 62 65 ***********************/../*.$be
1de0 67 69 6e 20 73 69 67 61 63 74 69 6f 6e 20 2a 2f 0a 68 61 6e 64 6c 65 72 5f 74 20 2a 53 69 67 6e gin.sigaction.*/.handler_t.*Sign
1e00 61 6c 28 69 6e 74 20 73 69 67 6e 75 6d 2c 20 68 61 6e 64 6c 65 72 5f 74 20 2a 68 61 6e 64 6c 65 al(int.signum,.handler_t.*handle
1e20 72 29 20 0a 7b 0a 20 20 20 20 73 74 72 75 63 74 20 73 69 67 61 63 74 69 6f 6e 20 61 63 74 69 6f r)..{.....struct.sigaction.actio
1e40 6e 2c 20 6f 6c 64 5f 61 63 74 69 6f 6e 3b 0a 0a 20 20 20 20 61 63 74 69 6f 6e 2e 73 61 5f 68 61 n,.old_action;......action.sa_ha
1e60 6e 64 6c 65 72 20 3d 20 68 61 6e 64 6c 65 72 3b 20 20 0a 20 20 20 20 73 69 67 65 6d 70 74 79 73 ndler.=.handler;.......sigemptys
1e80 65 74 28 26 61 63 74 69 6f 6e 2e 73 61 5f 6d 61 73 6b 29 3b 20 2f 2a 20 42 6c 6f 63 6b 20 73 69 et(&action.sa_mask);./*.Block.si
1ea0 67 73 20 6f 66 20 74 79 70 65 20 62 65 69 6e 67 20 68 61 6e 64 6c 65 64 20 2a 2f 0a 20 20 20 20 gs.of.type.being.handled.*/.....
1ec0 61 63 74 69 6f 6e 2e 73 61 5f 66 6c 61 67 73 20 3d 20 53 41 5f 52 45 53 54 41 52 54 3b 20 2f 2a action.sa_flags.=.SA_RESTART;./*
1ee0 20 52 65 73 74 61 72 74 20 73 79 73 63 61 6c 6c 73 20 69 66 20 70 6f 73 73 69 62 6c 65 20 2a 2f .Restart.syscalls.if.possible.*/
1f00 0a 0a 20 20 20 20 69 66 20 28 73 69 67 61 63 74 69 6f 6e 28 73 69 67 6e 75 6d 2c 20 26 61 63 74 ......if.(sigaction(signum,.&act
1f20 69 6f 6e 2c 20 26 6f 6c 64 5f 61 63 74 69 6f 6e 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 ion,.&old_action).<.0)..unix_err
1f40 6f 72 28 22 53 69 67 6e 61 6c 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 28 or("Signal.error");.....return.(
1f60 6f 6c 64 5f 61 63 74 69 6f 6e 2e 73 61 5f 68 61 6e 64 6c 65 72 29 3b 0a 7d 0a 2f 2a 20 24 65 6e old_action.sa_handler);.}./*.$en
1f80 64 20 73 69 67 61 63 74 69 6f 6e 20 2a 2f 0a 0a 76 6f 69 64 20 53 69 67 70 72 6f 63 6d 61 73 6b d.sigaction.*/..void.Sigprocmask
1fa0 28 69 6e 74 20 68 6f 77 2c 20 63 6f 6e 73 74 20 73 69 67 73 65 74 5f 74 20 2a 73 65 74 2c 20 73 (int.how,.const.sigset_t.*set,.s
1fc0 69 67 73 65 74 5f 74 20 2a 6f 6c 64 73 65 74 29 0a 7b 0a 20 20 20 20 69 66 20 28 73 69 67 70 72 igset_t.*oldset).{.....if.(sigpr
1fe0 6f 63 6d 61 73 6b 28 68 6f 77 2c 20 73 65 74 2c 20 6f 6c 64 73 65 74 29 20 3c 20 30 29 0a 09 75 ocmask(how,.set,.oldset).<.0)..u
2000 6e 69 78 5f 65 72 72 6f 72 28 22 53 69 67 70 72 6f 63 6d 61 73 6b 20 65 72 72 6f 72 22 29 3b 0a nix_error("Sigprocmask.error");.
2020 20 20 20 20 72 65 74 75 72 6e 3b 0a 7d 0a 0a 76 6f 69 64 20 53 69 67 65 6d 70 74 79 73 65 74 28 ....return;.}..void.Sigemptyset(
2040 73 69 67 73 65 74 5f 74 20 2a 73 65 74 29 0a 7b 0a 20 20 20 20 69 66 20 28 73 69 67 65 6d 70 74 sigset_t.*set).{.....if.(sigempt
2060 79 73 65 74 28 73 65 74 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 53 69 67 65 yset(set).<.0)..unix_error("Sige
2080 6d 70 74 79 73 65 74 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 7d 0a 0a mptyset.error");.....return;.}..
20a0 76 6f 69 64 20 53 69 67 66 69 6c 6c 73 65 74 28 73 69 67 73 65 74 5f 74 20 2a 73 65 74 29 0a 7b void.Sigfillset(sigset_t.*set).{
20c0 20 0a 20 20 20 20 69 66 20 28 73 69 67 66 69 6c 6c 73 65 74 28 73 65 74 29 20 3c 20 30 29 0a 09 ......if.(sigfillset(set).<.0)..
20e0 75 6e 69 78 5f 65 72 72 6f 72 28 22 53 69 67 66 69 6c 6c 73 65 74 20 65 72 72 6f 72 22 29 3b 0a unix_error("Sigfillset.error");.
2100 20 20 20 20 72 65 74 75 72 6e 3b 0a 7d 0a 0a 76 6f 69 64 20 53 69 67 61 64 64 73 65 74 28 73 69 ....return;.}..void.Sigaddset(si
2120 67 73 65 74 5f 74 20 2a 73 65 74 2c 20 69 6e 74 20 73 69 67 6e 75 6d 29 0a 7b 0a 20 20 20 20 69 gset_t.*set,.int.signum).{.....i
2140 66 20 28 73 69 67 61 64 64 73 65 74 28 73 65 74 2c 20 73 69 67 6e 75 6d 29 20 3c 20 30 29 0a 09 f.(sigaddset(set,.signum).<.0)..
2160 75 6e 69 78 5f 65 72 72 6f 72 28 22 53 69 67 61 64 64 73 65 74 20 65 72 72 6f 72 22 29 3b 0a 20 unix_error("Sigaddset.error");..
2180 20 20 20 72 65 74 75 72 6e 3b 0a 7d 0a 0a 76 6f 69 64 20 53 69 67 64 65 6c 73 65 74 28 73 69 67 ...return;.}..void.Sigdelset(sig
21a0 73 65 74 5f 74 20 2a 73 65 74 2c 20 69 6e 74 20 73 69 67 6e 75 6d 29 0a 7b 0a 20 20 20 20 69 66 set_t.*set,.int.signum).{.....if
21c0 20 28 73 69 67 64 65 6c 73 65 74 28 73 65 74 2c 20 73 69 67 6e 75 6d 29 20 3c 20 30 29 0a 09 75 .(sigdelset(set,.signum).<.0)..u
21e0 6e 69 78 5f 65 72 72 6f 72 28 22 53 69 67 64 65 6c 73 65 74 20 65 72 72 6f 72 22 29 3b 0a 20 20 nix_error("Sigdelset.error");...
2200 20 20 72 65 74 75 72 6e 3b 0a 7d 0a 0a 69 6e 74 20 53 69 67 69 73 6d 65 6d 62 65 72 28 63 6f 6e ..return;.}..int.Sigismember(con
2220 73 74 20 73 69 67 73 65 74 5f 74 20 2a 73 65 74 2c 20 69 6e 74 20 73 69 67 6e 75 6d 29 0a 7b 0a st.sigset_t.*set,.int.signum).{.
2240 20 20 20 20 69 6e 74 20 72 63 3b 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 73 69 67 69 73 6d ....int.rc;.....if.((rc.=.sigism
2260 65 6d 62 65 72 28 73 65 74 2c 20 73 69 67 6e 75 6d 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 ember(set,.signum)).<.0)..unix_e
2280 72 72 6f 72 28 22 53 69 67 69 73 6d 65 6d 62 65 72 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 rror("Sigismember.error");.....r
22a0 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 69 6e 74 20 53 69 67 73 75 73 70 65 6e 64 28 63 6f 6e 73 eturn.rc;.}..int.Sigsuspend(cons
22c0 74 20 73 69 67 73 65 74 5f 74 20 2a 73 65 74 29 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 20 3d 20 t.sigset_t.*set).{.....int.rc.=.
22e0 73 69 67 73 75 73 70 65 6e 64 28 73 65 74 29 3b 20 2f 2a 20 61 6c 77 61 79 73 20 72 65 74 75 72 sigsuspend(set);./*.always.retur
2300 6e 73 20 2d 31 20 2a 2f 0a 20 20 20 20 69 66 20 28 65 72 72 6e 6f 20 21 3d 20 45 49 4e 54 52 29 ns.-1.*/.....if.(errno.!=.EINTR)
2320 0a 20 20 20 20 20 20 20 20 75 6e 69 78 5f 65 72 72 6f 72 28 22 53 69 67 73 75 73 70 65 6e 64 20 .........unix_error("Sigsuspend.
2340 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a error");.....return.rc;.}../****
2360 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ********************************
2380 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 54 68 65 *************************..*.The
23a0 20 53 69 6f 20 28 53 69 67 6e 61 6c 2d 73 61 66 65 20 49 2f 4f 29 20 70 61 63 6b 61 67 65 20 2d .Sio.(Signal-safe.I/O).package.-
23c0 20 73 69 6d 70 6c 65 20 72 65 65 6e 74 72 61 6e 74 20 6f 75 74 70 75 74 0a 20 2a 20 66 75 6e 63 .simple.reentrant.output..*.func
23e0 74 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20 73 61 66 65 20 66 6f 72 20 73 69 67 6e 61 6c 20 68 tions.that.are.safe.for.signal.h
2400 61 6e 64 6c 65 72 73 2e 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a andlers...**********************
2420 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ********************************
2440 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 50 72 69 76 61 74 65 20 73 69 6f 20 66 75 6e 63 74 69 6f *******/../*.Private.sio.functio
2460 6e 73 20 2a 2f 0a 0a 2f 2a 20 24 62 65 67 69 6e 20 73 69 6f 70 72 69 76 61 74 65 20 2a 2f 0a 2f ns.*/../*.$begin.sioprivate.*/./
2480 2a 20 73 69 6f 5f 72 65 76 65 72 73 65 20 2d 20 52 65 76 65 72 73 65 20 61 20 73 74 72 69 6e 67 *.sio_reverse.-.Reverse.a.string
24a0 20 28 66 72 6f 6d 20 4b 26 52 29 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 69 6f 5f 72 .(from.K&R).*/.static.void.sio_r
24c0 65 76 65 72 73 65 28 63 68 61 72 20 73 5b 5d 29 0a 7b 0a 20 20 20 20 69 6e 74 20 63 2c 20 69 2c everse(char.s[]).{.....int.c,.i,
24e0 20 6a 3b 0a 0a 20 20 20 20 66 6f 72 20 28 69 20 3d 20 30 2c 20 6a 20 3d 20 73 74 72 6c 65 6e 28 .j;......for.(i.=.0,.j.=.strlen(
2500 73 29 2d 31 3b 20 69 20 3c 20 6a 3b 20 69 2b 2b 2c 20 6a 2d 2d 29 20 7b 0a 20 20 20 20 20 20 20 s)-1;.i.<.j;.i++,.j--).{........
2520 20 63 20 3d 20 73 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 73 5b 69 5d 20 3d 20 73 5b 6a 5d 3b 0a .c.=.s[i];.........s[i].=.s[j];.
2540 20 20 20 20 20 20 20 20 73 5b 6a 5d 20 3d 20 63 3b 0a 20 20 20 20 7d 0a 7d 0a 0a 2f 2a 20 73 69 ........s[j].=.c;.....}.}../*.si
2560 6f 5f 6c 74 6f 61 20 2d 20 43 6f 6e 76 65 72 74 20 6c 6f 6e 67 20 74 6f 20 62 61 73 65 20 62 20 o_ltoa.-.Convert.long.to.base.b.
2580 73 74 72 69 6e 67 20 28 66 72 6f 6d 20 4b 26 52 29 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 string.(from.K&R).*/.static.void
25a0 20 73 69 6f 5f 6c 74 6f 61 28 6c 6f 6e 67 20 76 2c 20 63 68 61 72 20 73 5b 5d 2c 20 69 6e 74 20 .sio_ltoa(long.v,.char.s[],.int.
25c0 62 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 63 2c 20 69 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 b)..{.....int.c,.i.=.0;.....int.
25e0 6e 65 67 20 3d 20 76 20 3c 20 30 3b 0a 0a 20 20 20 20 69 66 20 28 6e 65 67 29 0a 09 76 20 3d 20 neg.=.v.<.0;......if.(neg)..v.=.
2600 2d 76 3b 0a 0a 20 20 20 20 64 6f 20 7b 20 20 0a 20 20 20 20 20 20 20 20 73 5b 69 2b 2b 5d 20 3d -v;......do.{...........s[i++].=
2620 20 28 28 63 20 3d 20 28 76 20 25 20 62 29 29 20 3c 20 31 30 29 20 20 3f 20 20 63 20 2b 20 27 30 .((c.=.(v.%.b)).<.10)..?..c.+.'0
2640 27 20 3a 20 63 20 2d 20 31 30 20 2b 20 27 61 27 3b 0a 20 20 20 20 7d 20 77 68 69 6c 65 20 28 28 '.:.c.-.10.+.'a';.....}.while.((
2660 76 20 2f 3d 20 62 29 20 3e 20 30 29 3b 0a 0a 20 20 20 20 69 66 20 28 6e 65 67 29 0a 09 73 5b 69 v./=.b).>.0);......if.(neg)..s[i
2680 2b 2b 5d 20 3d 20 27 2d 27 3b 0a 0a 20 20 20 20 73 5b 69 5d 20 3d 20 27 5c 30 27 3b 0a 20 20 20 ++].=.'-';......s[i].=.'\0';....
26a0 20 73 69 6f 5f 72 65 76 65 72 73 65 28 73 29 3b 0a 7d 0a 0a 2f 2a 20 73 69 6f 5f 73 74 72 6c 65 .sio_reverse(s);.}../*.sio_strle
26c0 6e 20 2d 20 52 65 74 75 72 6e 20 6c 65 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67 20 28 66 72 6f n.-.Return.length.of.string.(fro
26e0 6d 20 4b 26 52 29 20 2a 2f 0a 73 74 61 74 69 63 20 73 69 7a 65 5f 74 20 73 69 6f 5f 73 74 72 6c m.K&R).*/.static.size_t.sio_strl
2700 65 6e 28 63 68 61 72 20 73 5b 5d 29 0a 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 0a 20 en(char.s[]).{.....int.i.=.0;...
2720 20 20 20 77 68 69 6c 65 20 28 73 5b 69 5d 20 21 3d 20 27 5c 30 27 29 0a 20 20 20 20 20 20 20 20 ...while.(s[i].!=.'\0').........
2740 2b 2b 69 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 69 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 73 69 6f ++i;.....return.i;.}./*.$end.sio
2760 70 72 69 76 61 74 65 20 2a 2f 0a 0a 2f 2a 20 50 75 62 6c 69 63 20 53 69 6f 20 66 75 6e 63 74 69 private.*/../*.Public.Sio.functi
2780 6f 6e 73 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 73 69 6f 70 75 62 6c 69 63 20 2a 2f 0a 0a 73 ons.*/./*.$begin.siopublic.*/..s
27a0 73 69 7a 65 5f 74 20 73 69 6f 5f 70 75 74 73 28 63 68 61 72 20 73 5b 5d 29 20 2f 2a 20 50 75 74 size_t.sio_puts(char.s[])./*.Put
27c0 20 73 74 72 69 6e 67 20 2a 2f 0a 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 77 72 69 74 65 28 53 54 .string.*/.{.....return.write(ST
27e0 44 4f 55 54 5f 46 49 4c 45 4e 4f 2c 20 73 2c 20 73 69 6f 5f 73 74 72 6c 65 6e 28 73 29 29 3b 20 DOUT_FILENO,.s,.sio_strlen(s));.
2800 2f 2f 6c 69 6e 65 3a 63 73 61 70 70 3a 73 69 6f 73 74 72 6c 65 6e 0a 7d 0a 0a 73 73 69 7a 65 5f //line:csapp:siostrlen.}..ssize_
2820 74 20 73 69 6f 5f 70 75 74 6c 28 6c 6f 6e 67 20 76 29 20 2f 2a 20 50 75 74 20 6c 6f 6e 67 20 2a t.sio_putl(long.v)./*.Put.long.*
2840 2f 0a 7b 0a 20 20 20 20 63 68 61 72 20 73 5b 31 32 38 5d 3b 0a 20 20 20 20 0a 20 20 20 20 73 69 /.{.....char.s[128];..........si
2860 6f 5f 6c 74 6f 61 28 76 2c 20 73 2c 20 31 30 29 3b 20 2f 2a 20 42 61 73 65 64 20 6f 6e 20 4b 26 o_ltoa(v,.s,.10);./*.Based.on.K&
2880 52 20 69 74 6f 61 28 29 20 2a 2f 20 20 2f 2f 6c 69 6e 65 3a 63 73 61 70 70 3a 73 69 6f 6c 74 6f R.itoa().*/..//line:csapp:siolto
28a0 61 0a 20 20 20 20 72 65 74 75 72 6e 20 73 69 6f 5f 70 75 74 73 28 73 29 3b 0a 7d 0a 0a 76 6f 69 a.....return.sio_puts(s);.}..voi
28c0 64 20 73 69 6f 5f 65 72 72 6f 72 28 63 68 61 72 20 73 5b 5d 29 20 2f 2a 20 50 75 74 20 65 72 72 d.sio_error(char.s[])./*.Put.err
28e0 6f 72 20 6d 65 73 73 61 67 65 20 61 6e 64 20 65 78 69 74 20 2a 2f 0a 7b 0a 20 20 20 20 73 69 6f or.message.and.exit.*/.{.....sio
2900 5f 70 75 74 73 28 73 29 3b 0a 20 20 20 20 5f 65 78 69 74 28 31 29 3b 20 20 20 20 20 20 20 20 20 _puts(s);....._exit(1);.........
2920 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 2f 2f 6c .............................//l
2940 69 6e 65 3a 63 73 61 70 70 3a 73 69 6f 65 78 69 74 0a 7d 0a 2f 2a 20 24 65 6e 64 20 73 69 6f 70 ine:csapp:sioexit.}./*.$end.siop
2960 75 62 6c 69 63 20 2a 2f 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ublic.*/../*********************
2980 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 57 72 61 70 70 65 72 73 20 66 6f 72 20 74 68 65 20 53 **********..*.Wrappers.for.the.S
29a0 49 4f 20 72 6f 75 74 69 6e 65 73 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a IO.routines..*******************
29c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 73 73 69 7a 65 5f 74 20 53 69 6f 5f 70 75 74 6c 28 6c 6f ***********/.ssize_t.Sio_putl(lo
29e0 6e 67 20 76 29 0a 7b 0a 20 20 20 20 73 73 69 7a 65 5f 74 20 6e 3b 0a 20 20 0a 20 20 20 20 69 66 ng.v).{.....ssize_t.n;........if
2a00 20 28 28 6e 20 3d 20 73 69 6f 5f 70 75 74 6c 28 76 29 29 20 3c 20 30 29 0a 09 73 69 6f 5f 65 72 .((n.=.sio_putl(v)).<.0)..sio_er
2a20 72 6f 72 28 22 53 69 6f 5f 70 75 74 6c 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 ror("Sio_putl.error");.....retur
2a40 6e 20 6e 3b 0a 7d 0a 0a 73 73 69 7a 65 5f 74 20 53 69 6f 5f 70 75 74 73 28 63 68 61 72 20 73 5b n.n;.}..ssize_t.Sio_puts(char.s[
2a60 5d 29 0a 7b 0a 20 20 20 20 73 73 69 7a 65 5f 74 20 6e 3b 0a 20 20 0a 20 20 20 20 69 66 20 28 28 ]).{.....ssize_t.n;........if.((
2a80 6e 20 3d 20 73 69 6f 5f 70 75 74 73 28 73 29 29 20 3c 20 30 29 0a 09 73 69 6f 5f 65 72 72 6f 72 n.=.sio_puts(s)).<.0)..sio_error
2aa0 28 22 53 69 6f 5f 70 75 74 73 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 6e ("Sio_puts.error");.....return.n
2ac0 3b 0a 7d 0a 0a 76 6f 69 64 20 53 69 6f 5f 65 72 72 6f 72 28 63 68 61 72 20 73 5b 5d 29 0a 7b 0a ;.}..void.Sio_error(char.s[]).{.
2ae0 20 20 20 20 73 69 6f 5f 65 72 72 6f 72 28 73 29 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ....sio_error(s);.}../**********
2b00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 57 72 61 70 70 65 **********************..*.Wrappe
2b20 72 73 20 66 6f 72 20 55 6e 69 78 20 49 2f 4f 20 72 6f 75 74 69 6e 65 73 0a 20 2a 2a 2a 2a 2a 2a rs.for.Unix.I/O.routines..******
2b40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 69 6e 74 **************************/..int
2b60 20 4f 70 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 61 74 68 6e 61 6d 65 2c 20 69 6e 74 20 .Open(const.char.*pathname,.int.
2b80 66 6c 61 67 73 2c 20 6d 6f 64 65 5f 74 20 6d 6f 64 65 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 flags,.mode_t.mode)..{.....int.r
2ba0 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 6f 70 65 6e 28 70 61 74 68 6e 61 6d 65 2c c;......if.((rc.=.open(pathname,
2bc0 20 66 6c 61 67 73 2c 20 6d 6f 64 65 29 29 20 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 .flags,.mode))..<.0)..unix_error
2be0 28 22 4f 70 65 6e 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d ("Open.error");.....return.rc;.}
2c00 0a 0a 73 73 69 7a 65 5f 74 20 52 65 61 64 28 69 6e 74 20 66 64 2c 20 76 6f 69 64 20 2a 62 75 66 ..ssize_t.Read(int.fd,.void.*buf
2c20 2c 20 73 69 7a 65 5f 74 20 63 6f 75 6e 74 29 20 0a 7b 0a 20 20 20 20 73 73 69 7a 65 5f 74 20 72 ,.size_t.count)..{.....ssize_t.r
2c40 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 72 65 61 64 28 66 64 2c 20 62 75 66 2c 20 c;......if.((rc.=.read(fd,.buf,.
2c60 63 6f 75 6e 74 29 29 20 3c 20 30 29 20 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 52 65 61 64 20 count)).<.0)...unix_error("Read.
2c80 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 73 73 69 7a 65 error");.....return.rc;.}..ssize
2ca0 5f 74 20 57 72 69 74 65 28 69 6e 74 20 66 64 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 62 75 66 _t.Write(int.fd,.const.void.*buf
2cc0 2c 20 73 69 7a 65 5f 74 20 63 6f 75 6e 74 29 20 0a 7b 0a 20 20 20 20 73 73 69 7a 65 5f 74 20 72 ,.size_t.count)..{.....ssize_t.r
2ce0 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 77 72 69 74 65 28 66 64 2c 20 62 75 66 2c c;......if.((rc.=.write(fd,.buf,
2d00 20 63 6f 75 6e 74 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 57 72 69 74 65 .count)).<.0)..unix_error("Write
2d20 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 6f 66 66 5f .error");.....return.rc;.}..off_
2d40 74 20 4c 73 65 65 6b 28 69 6e 74 20 66 69 6c 64 65 73 2c 20 6f 66 66 5f 74 20 6f 66 66 73 65 74 t.Lseek(int.fildes,.off_t.offset
2d60 2c 20 69 6e 74 20 77 68 65 6e 63 65 29 20 0a 7b 0a 20 20 20 20 6f 66 66 5f 74 20 72 63 3b 0a 0a ,.int.whence)..{.....off_t.rc;..
2d80 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 6c 73 65 65 6b 28 66 69 6c 64 65 73 2c 20 6f 66 66 73 ....if.((rc.=.lseek(fildes,.offs
2da0 65 74 2c 20 77 68 65 6e 63 65 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 4c et,.whence)).<.0)..unix_error("L
2dc0 73 65 65 6b 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a seek.error");.....return.rc;.}..
2de0 76 6f 69 64 20 43 6c 6f 73 65 28 69 6e 74 20 66 64 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 void.Close(int.fd)..{.....int.rc
2e00 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 63 6c 6f 73 65 28 66 64 29 29 20 3c 20 30 29 ;......if.((rc.=.close(fd)).<.0)
2e20 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 43 6c 6f 73 65 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a ..unix_error("Close.error");.}..
2e40 69 6e 74 20 53 65 6c 65 63 74 28 69 6e 74 20 20 6e 2c 20 66 64 5f 73 65 74 20 2a 72 65 61 64 66 int.Select(int..n,.fd_set.*readf
2e60 64 73 2c 20 66 64 5f 73 65 74 20 2a 77 72 69 74 65 66 64 73 2c 0a 09 20 20 20 66 64 5f 73 65 74 ds,.fd_set.*writefds,.....fd_set
2e80 20 2a 65 78 63 65 70 74 66 64 73 2c 20 73 74 72 75 63 74 20 74 69 6d 65 76 61 6c 20 2a 74 69 6d .*exceptfds,.struct.timeval.*tim
2ea0 65 6f 75 74 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 eout)..{.....int.rc;......if.((r
2ec0 63 20 3d 20 73 65 6c 65 63 74 28 6e 2c 20 72 65 61 64 66 64 73 2c 20 77 72 69 74 65 66 64 73 2c c.=.select(n,.readfds,.writefds,
2ee0 20 65 78 63 65 70 74 66 64 73 2c 20 74 69 6d 65 6f 75 74 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 .exceptfds,.timeout)).<.0)..unix
2f00 5f 65 72 72 6f 72 28 22 53 65 6c 65 63 74 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 _error("Select.error");.....retu
2f20 72 6e 20 72 63 3b 0a 7d 0a 0a 69 6e 74 20 44 75 70 32 28 69 6e 74 20 66 64 31 2c 20 69 6e 74 20 rn.rc;.}..int.Dup2(int.fd1,.int.
2f40 66 64 32 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 fd2)..{.....int.rc;......if.((rc
2f60 20 3d 20 64 75 70 32 28 66 64 31 2c 20 66 64 32 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 .=.dup2(fd1,.fd2)).<.0)..unix_er
2f80 72 6f 72 28 22 44 75 70 32 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 ror("Dup2.error");.....return.rc
2fa0 3b 0a 7d 0a 0a 76 6f 69 64 20 53 74 61 74 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 69 6c 65 6e ;.}..void.Stat(const.char.*filen
2fc0 61 6d 65 2c 20 73 74 72 75 63 74 20 73 74 61 74 20 2a 62 75 66 29 20 0a 7b 0a 20 20 20 20 69 66 ame,.struct.stat.*buf)..{.....if
2fe0 20 28 73 74 61 74 28 66 69 6c 65 6e 61 6d 65 2c 20 62 75 66 29 20 3c 20 30 29 0a 09 75 6e 69 78 .(stat(filename,.buf).<.0)..unix
3000 5f 65 72 72 6f 72 28 22 53 74 61 74 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 76 6f 69 64 20 46 73 _error("Stat.error");.}..void.Fs
3020 74 61 74 28 69 6e 74 20 66 64 2c 20 73 74 72 75 63 74 20 73 74 61 74 20 2a 62 75 66 29 20 0a 7b tat(int.fd,.struct.stat.*buf)..{
3040 0a 20 20 20 20 69 66 20 28 66 73 74 61 74 28 66 64 2c 20 62 75 66 29 20 3c 20 30 29 0a 09 75 6e .....if.(fstat(fd,.buf).<.0)..un
3060 69 78 5f 65 72 72 6f 72 28 22 46 73 74 61 74 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 2f 2a 2a 2a ix_error("Fstat.error");.}../***
3080 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 ******************************..
30a0 2a 20 57 72 61 70 70 65 72 73 20 66 6f 72 20 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f *.Wrappers.for.directory.functio
30c0 6e 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a n..*****************************
30e0 2a 2a 2a 2a 2f 0a 0a 44 49 52 20 2a 4f 70 65 6e 64 69 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a ****/..DIR.*Opendir(const.char.*
3100 6e 61 6d 65 29 20 0a 7b 0a 20 20 20 20 44 49 52 20 2a 64 69 72 70 20 3d 20 6f 70 65 6e 64 69 72 name)..{.....DIR.*dirp.=.opendir
3120 28 6e 61 6d 65 29 3b 20 0a 0a 20 20 20 20 69 66 20 28 21 64 69 72 70 29 0a 20 20 20 20 20 20 20 (name);.......if.(!dirp)........
3140 20 75 6e 69 78 5f 65 72 72 6f 72 28 22 6f 70 65 6e 64 69 72 20 65 72 72 6f 72 22 29 3b 0a 20 20 .unix_error("opendir.error");...
3160 20 20 72 65 74 75 72 6e 20 64 69 72 70 3b 0a 7d 0a 0a 73 74 72 75 63 74 20 64 69 72 65 6e 74 20 ..return.dirp;.}..struct.dirent.
3180 2a 52 65 61 64 64 69 72 28 44 49 52 20 2a 64 69 72 70 29 0a 7b 0a 20 20 20 20 73 74 72 75 63 74 *Readdir(DIR.*dirp).{.....struct
31a0 20 64 69 72 65 6e 74 20 2a 64 65 70 3b 0a 20 20 20 20 0a 20 20 20 20 65 72 72 6e 6f 20 3d 20 30 .dirent.*dep;..........errno.=.0
31c0 3b 0a 20 20 20 20 64 65 70 20 3d 20 72 65 61 64 64 69 72 28 64 69 72 70 29 3b 0a 20 20 20 20 69 ;.....dep.=.readdir(dirp);.....i
31e0 66 20 28 28 64 65 70 20 3d 3d 20 4e 55 4c 4c 29 20 26 26 20 28 65 72 72 6e 6f 20 21 3d 20 30 29 f.((dep.==.NULL).&&.(errno.!=.0)
3200 29 0a 20 20 20 20 20 20 20 20 75 6e 69 78 5f 65 72 72 6f 72 28 22 72 65 61 64 64 69 72 20 65 72 ).........unix_error("readdir.er
3220 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 64 65 70 3b 0a 7d 0a 0a 69 6e 74 20 43 6c ror");.....return.dep;.}..int.Cl
3240 6f 73 65 64 69 72 28 44 49 52 20 2a 64 69 72 70 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b osedir(DIR.*dirp)..{.....int.rc;
3260 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 63 6c 6f 73 65 64 69 72 28 64 69 72 70 29 29 20 ......if.((rc.=.closedir(dirp)).
3280 3c 20 30 29 0a 20 20 20 20 20 20 20 20 75 6e 69 78 5f 65 72 72 6f 72 28 22 63 6c 6f 73 65 64 69 <.0).........unix_error("closedi
32a0 72 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 2a r.error");.....return.rc;.}../**
32c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ********************************
32e0 2a 2a 2a 2a 2a 0a 20 2a 20 57 72 61 70 70 65 72 73 20 66 6f 72 20 6d 65 6d 6f 72 79 20 6d 61 70 *****..*.Wrappers.for.memory.map
3300 70 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ping.functions..****************
3320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 76 6f 69 64 20 2a 4d ***********************/.void.*M
3340 6d 61 70 28 76 6f 69 64 20 2a 61 64 64 72 2c 20 73 69 7a 65 5f 74 20 6c 65 6e 2c 20 69 6e 74 20 map(void.*addr,.size_t.len,.int.
3360 70 72 6f 74 2c 20 69 6e 74 20 66 6c 61 67 73 2c 20 69 6e 74 20 66 64 2c 20 6f 66 66 5f 74 20 6f prot,.int.flags,.int.fd,.off_t.o
3380 66 66 73 65 74 29 20 0a 7b 0a 20 20 20 20 76 6f 69 64 20 2a 70 74 72 3b 0a 0a 20 20 20 20 69 66 ffset)..{.....void.*ptr;......if
33a0 20 28 28 70 74 72 20 3d 20 6d 6d 61 70 28 61 64 64 72 2c 20 6c 65 6e 2c 20 70 72 6f 74 2c 20 66 .((ptr.=.mmap(addr,.len,.prot,.f
33c0 6c 61 67 73 2c 20 66 64 2c 20 6f 66 66 73 65 74 29 29 20 3d 3d 20 28 28 76 6f 69 64 20 2a 29 20 lags,.fd,.offset)).==.((void.*).
33e0 2d 31 29 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 6d 6d 61 70 20 65 72 72 6f 72 22 29 3b 0a -1))..unix_error("mmap.error");.
3400 20 20 20 20 72 65 74 75 72 6e 28 70 74 72 29 3b 0a 7d 0a 0a 76 6f 69 64 20 4d 75 6e 6d 61 70 28 ....return(ptr);.}..void.Munmap(
3420 76 6f 69 64 20 2a 73 74 61 72 74 2c 20 73 69 7a 65 5f 74 20 6c 65 6e 67 74 68 29 20 0a 7b 0a 20 void.*start,.size_t.length)..{..
3440 20 20 20 69 66 20 28 6d 75 6e 6d 61 70 28 73 74 61 72 74 2c 20 6c 65 6e 67 74 68 29 20 3c 20 30 ...if.(munmap(start,.length).<.0
3460 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 6d 75 6e 6d 61 70 20 65 72 72 6f 72 22 29 3b 0a 7d )..unix_error("munmap.error");.}
3480 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ../*****************************
34a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 57 72 61 70 70 65 **********************..*.Wrappe
34c0 72 73 20 66 6f 72 20 64 79 6e 61 6d 69 63 20 73 74 6f 72 61 67 65 20 61 6c 6c 6f 63 61 74 69 6f rs.for.dynamic.storage.allocatio
34e0 6e 20 66 75 6e 63 74 69 6f 6e 73 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a n.functions..*******************
3500 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ********************************
3520 2f 0a 0a 76 6f 69 64 20 2a 4d 61 6c 6c 6f 63 28 73 69 7a 65 5f 74 20 73 69 7a 65 29 20 0a 7b 0a /..void.*Malloc(size_t.size)..{.
3540 20 20 20 20 76 6f 69 64 20 2a 70 3b 0a 0a 20 20 20 20 69 66 20 28 28 70 20 20 3d 20 6d 61 6c 6c ....void.*p;......if.((p..=.mall
3560 6f 63 28 73 69 7a 65 29 29 20 3d 3d 20 4e 55 4c 4c 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 oc(size)).==.NULL)..unix_error("
3580 4d 61 6c 6c 6f 63 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a Malloc.error");.....return.p;.}.
35a0 0a 76 6f 69 64 20 2a 52 65 61 6c 6c 6f 63 28 76 6f 69 64 20 2a 70 74 72 2c 20 73 69 7a 65 5f 74 .void.*Realloc(void.*ptr,.size_t
35c0 20 73 69 7a 65 29 20 0a 7b 0a 20 20 20 20 76 6f 69 64 20 2a 70 3b 0a 0a 20 20 20 20 69 66 20 28 .size)..{.....void.*p;......if.(
35e0 28 70 20 20 3d 20 72 65 61 6c 6c 6f 63 28 70 74 72 2c 20 73 69 7a 65 29 29 20 3d 3d 20 4e 55 4c (p..=.realloc(ptr,.size)).==.NUL
3600 4c 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 52 65 61 6c 6c 6f 63 20 65 72 72 6f 72 22 29 3b L)..unix_error("Realloc.error");
3620 0a 20 20 20 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a 76 6f 69 64 20 2a 43 61 6c 6c 6f 63 28 73 .....return.p;.}..void.*Calloc(s
3640 69 7a 65 5f 74 20 6e 6d 65 6d 62 2c 20 73 69 7a 65 5f 74 20 73 69 7a 65 29 20 0a 7b 0a 20 20 20 ize_t.nmemb,.size_t.size)..{....
3660 20 76 6f 69 64 20 2a 70 3b 0a 0a 20 20 20 20 69 66 20 28 28 70 20 3d 20 63 61 6c 6c 6f 63 28 6e .void.*p;......if.((p.=.calloc(n
3680 6d 65 6d 62 2c 20 73 69 7a 65 29 29 20 3d 3d 20 4e 55 4c 4c 29 0a 09 75 6e 69 78 5f 65 72 72 6f memb,.size)).==.NULL)..unix_erro
36a0 72 28 22 43 61 6c 6c 6f 63 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 3b r("Calloc.error");.....return.p;
36c0 0a 7d 0a 0a 76 6f 69 64 20 46 72 65 65 28 76 6f 69 64 20 2a 70 74 72 29 20 0a 7b 0a 20 20 20 20 .}..void.Free(void.*ptr)..{.....
36e0 66 72 65 65 28 70 74 72 29 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a free(ptr);.}../*****************
3700 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 57 72 61 *************************..*.Wra
3720 70 70 65 72 73 20 66 6f 72 20 74 68 65 20 53 74 61 6e 64 61 72 64 20 49 2f 4f 20 66 75 6e 63 74 ppers.for.the.Standard.I/O.funct
3740 69 6f 6e 73 2e 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ions...*************************
3760 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 76 6f 69 64 20 46 63 6c 6f 73 65 28 46 *****************/.void.Fclose(F
3780 49 4c 45 20 2a 66 70 29 20 0a 7b 0a 20 20 20 20 69 66 20 28 66 63 6c 6f 73 65 28 66 70 29 20 21 ILE.*fp)..{.....if.(fclose(fp).!
37a0 3d 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 46 63 6c 6f 73 65 20 65 72 72 6f 72 22 29 =.0)..unix_error("Fclose.error")
37c0 3b 0a 7d 0a 0a 46 49 4c 45 20 2a 46 64 6f 70 65 6e 28 69 6e 74 20 66 64 2c 20 63 6f 6e 73 74 20 ;.}..FILE.*Fdopen(int.fd,.const.
37e0 63 68 61 72 20 2a 74 79 70 65 29 20 0a 7b 0a 20 20 20 20 46 49 4c 45 20 2a 66 70 3b 0a 0a 20 20 char.*type)..{.....FILE.*fp;....
3800 20 20 69 66 20 28 28 66 70 20 3d 20 66 64 6f 70 65 6e 28 66 64 2c 20 74 79 70 65 29 29 20 3d 3d ..if.((fp.=.fdopen(fd,.type)).==
3820 20 4e 55 4c 4c 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 46 64 6f 70 65 6e 20 65 72 72 6f 72 .NULL)..unix_error("Fdopen.error
3840 22 29 3b 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 66 70 3b 0a 7d 0a 0a 63 68 61 72 20 2a 46 67 65 ");......return.fp;.}..char.*Fge
3860 74 73 28 63 68 61 72 20 2a 70 74 72 2c 20 69 6e 74 20 6e 2c 20 46 49 4c 45 20 2a 73 74 72 65 61 ts(char.*ptr,.int.n,.FILE.*strea
3880 6d 29 20 0a 7b 0a 20 20 20 20 63 68 61 72 20 2a 72 70 74 72 3b 0a 0a 20 20 20 20 69 66 20 28 28 m)..{.....char.*rptr;......if.((
38a0 28 72 70 74 72 20 3d 20 66 67 65 74 73 28 70 74 72 2c 20 6e 2c 20 73 74 72 65 61 6d 29 29 20 3d (rptr.=.fgets(ptr,.n,.stream)).=
38c0 3d 20 4e 55 4c 4c 29 20 26 26 20 66 65 72 72 6f 72 28 73 74 72 65 61 6d 29 29 0a 09 61 70 70 5f =.NULL).&&.ferror(stream))..app_
38e0 65 72 72 6f 72 28 22 46 67 65 74 73 20 65 72 72 6f 72 22 29 3b 0a 0a 20 20 20 20 72 65 74 75 72 error("Fgets.error");......retur
3900 6e 20 72 70 74 72 3b 0a 7d 0a 0a 46 49 4c 45 20 2a 46 6f 70 65 6e 28 63 6f 6e 73 74 20 63 68 61 n.rptr;.}..FILE.*Fopen(const.cha
3920 72 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6d 6f 64 65 29 20 0a r.*filename,.const.char.*mode)..
3940 7b 0a 20 20 20 20 46 49 4c 45 20 2a 66 70 3b 0a 0a 20 20 20 20 69 66 20 28 28 66 70 20 3d 20 66 {.....FILE.*fp;......if.((fp.=.f
3960 6f 70 65 6e 28 66 69 6c 65 6e 61 6d 65 2c 20 6d 6f 64 65 29 29 20 3d 3d 20 4e 55 4c 4c 29 0a 09 open(filename,.mode)).==.NULL)..
3980 75 6e 69 78 5f 65 72 72 6f 72 28 22 46 6f 70 65 6e 20 65 72 72 6f 72 22 29 3b 0a 0a 20 20 20 20 unix_error("Fopen.error");......
39a0 72 65 74 75 72 6e 20 66 70 3b 0a 7d 0a 0a 76 6f 69 64 20 46 70 75 74 73 28 63 6f 6e 73 74 20 63 return.fp;.}..void.Fputs(const.c
39c0 68 61 72 20 2a 70 74 72 2c 20 46 49 4c 45 20 2a 73 74 72 65 61 6d 29 20 0a 7b 0a 20 20 20 20 69 har.*ptr,.FILE.*stream)..{.....i
39e0 66 20 28 66 70 75 74 73 28 70 74 72 2c 20 73 74 72 65 61 6d 29 20 3d 3d 20 45 4f 46 29 0a 09 75 f.(fputs(ptr,.stream).==.EOF)..u
3a00 6e 69 78 5f 65 72 72 6f 72 28 22 46 70 75 74 73 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 73 69 7a nix_error("Fputs.error");.}..siz
3a20 65 5f 74 20 46 72 65 61 64 28 76 6f 69 64 20 2a 70 74 72 2c 20 73 69 7a 65 5f 74 20 73 69 7a 65 e_t.Fread(void.*ptr,.size_t.size
3a40 2c 20 73 69 7a 65 5f 74 20 6e 6d 65 6d 62 2c 20 46 49 4c 45 20 2a 73 74 72 65 61 6d 29 20 0a 7b ,.size_t.nmemb,.FILE.*stream)..{
3a60 0a 20 20 20 20 73 69 7a 65 5f 74 20 6e 3b 0a 0a 20 20 20 20 69 66 20 28 28 28 6e 20 3d 20 66 72 .....size_t.n;......if.(((n.=.fr
3a80 65 61 64 28 70 74 72 2c 20 73 69 7a 65 2c 20 6e 6d 65 6d 62 2c 20 73 74 72 65 61 6d 29 29 20 3c ead(ptr,.size,.nmemb,.stream)).<
3aa0 20 6e 6d 65 6d 62 29 20 26 26 20 66 65 72 72 6f 72 28 73 74 72 65 61 6d 29 29 20 0a 09 75 6e 69 .nmemb).&&.ferror(stream))...uni
3ac0 78 5f 65 72 72 6f 72 28 22 46 72 65 61 64 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 x_error("Fread.error");.....retu
3ae0 72 6e 20 6e 3b 0a 7d 0a 0a 76 6f 69 64 20 46 77 72 69 74 65 28 63 6f 6e 73 74 20 76 6f 69 64 20 rn.n;.}..void.Fwrite(const.void.
3b00 2a 70 74 72 2c 20 73 69 7a 65 5f 74 20 73 69 7a 65 2c 20 73 69 7a 65 5f 74 20 6e 6d 65 6d 62 2c *ptr,.size_t.size,.size_t.nmemb,
3b20 20 46 49 4c 45 20 2a 73 74 72 65 61 6d 29 20 0a 7b 0a 20 20 20 20 69 66 20 28 66 77 72 69 74 65 .FILE.*stream)..{.....if.(fwrite
3b40 28 70 74 72 2c 20 73 69 7a 65 2c 20 6e 6d 65 6d 62 2c 20 73 74 72 65 61 6d 29 20 3c 20 6e 6d 65 (ptr,.size,.nmemb,.stream).<.nme
3b60 6d 62 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 46 77 72 69 74 65 20 65 72 72 6f 72 22 29 3b mb)..unix_error("Fwrite.error");
3b80 0a 7d 0a 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a .}.../**************************
3ba0 2a 2a 20 0a 20 2a 20 53 6f 63 6b 65 74 73 20 69 6e 74 65 72 66 61 63 65 20 77 72 61 70 70 65 72 **...*.Sockets.interface.wrapper
3bc0 73 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f s..****************************/
3be0 0a 0a 69 6e 74 20 53 6f 63 6b 65 74 28 69 6e 74 20 64 6f 6d 61 69 6e 2c 20 69 6e 74 20 74 79 70 ..int.Socket(int.domain,.int.typ
3c00 65 2c 20 69 6e 74 20 70 72 6f 74 6f 63 6f 6c 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a e,.int.protocol)..{.....int.rc;.
3c20 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 73 6f 63 6b 65 74 28 64 6f 6d 61 69 6e 2c 20 74 79 .....if.((rc.=.socket(domain,.ty
3c40 70 65 2c 20 70 72 6f 74 6f 63 6f 6c 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 pe,.protocol)).<.0)..unix_error(
3c60 22 53 6f 63 6b 65 74 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a "Socket.error");.....return.rc;.
3c80 7d 0a 0a 76 6f 69 64 20 53 65 74 73 6f 63 6b 6f 70 74 28 69 6e 74 20 73 2c 20 69 6e 74 20 6c 65 }..void.Setsockopt(int.s,.int.le
3ca0 76 65 6c 2c 20 69 6e 74 20 6f 70 74 6e 61 6d 65 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 6f 70 vel,.int.optname,.const.void.*op
3cc0 74 76 61 6c 2c 20 69 6e 74 20 6f 70 74 6c 65 6e 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b tval,.int.optlen)..{.....int.rc;
3ce0 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 73 65 74 73 6f 63 6b 6f 70 74 28 73 2c 20 6c 65 ......if.((rc.=.setsockopt(s,.le
3d00 76 65 6c 2c 20 6f 70 74 6e 61 6d 65 2c 20 6f 70 74 76 61 6c 2c 20 6f 70 74 6c 65 6e 29 29 20 3c vel,.optname,.optval,.optlen)).<
3d20 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 53 65 74 73 6f 63 6b 6f 70 74 20 65 72 72 6f .0)..unix_error("Setsockopt.erro
3d40 72 22 29 3b 0a 7d 0a 0a 76 6f 69 64 20 42 69 6e 64 28 69 6e 74 20 73 6f 63 6b 66 64 2c 20 73 74 r");.}..void.Bind(int.sockfd,.st
3d60 72 75 63 74 20 73 6f 63 6b 61 64 64 72 20 2a 6d 79 5f 61 64 64 72 2c 20 69 6e 74 20 61 64 64 72 ruct.sockaddr.*my_addr,.int.addr
3d80 6c 65 6e 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 len)..{.....int.rc;......if.((rc
3da0 20 3d 20 62 69 6e 64 28 73 6f 63 6b 66 64 2c 20 6d 79 5f 61 64 64 72 2c 20 61 64 64 72 6c 65 6e .=.bind(sockfd,.my_addr,.addrlen
3dc0 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 42 69 6e 64 20 65 72 72 6f 72 22 )).<.0)..unix_error("Bind.error"
3de0 29 3b 0a 7d 0a 0a 76 6f 69 64 20 4c 69 73 74 65 6e 28 69 6e 74 20 73 2c 20 69 6e 74 20 62 61 63 );.}..void.Listen(int.s,.int.bac
3e00 6b 6c 6f 67 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 klog)..{.....int.rc;......if.((r
3e20 63 20 3d 20 6c 69 73 74 65 6e 28 73 2c 20 20 62 61 63 6b 6c 6f 67 29 29 20 3c 20 30 29 0a 09 75 c.=.listen(s,..backlog)).<.0)..u
3e40 6e 69 78 5f 65 72 72 6f 72 28 22 4c 69 73 74 65 6e 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 69 6e nix_error("Listen.error");.}..in
3e60 74 20 41 63 63 65 70 74 28 69 6e 74 20 73 2c 20 73 74 72 75 63 74 20 73 6f 63 6b 61 64 64 72 20 t.Accept(int.s,.struct.sockaddr.
3e80 2a 61 64 64 72 2c 20 73 6f 63 6b 6c 65 6e 5f 74 20 2a 61 64 64 72 6c 65 6e 29 20 0a 7b 0a 20 20 *addr,.socklen_t.*addrlen)..{...
3ea0 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 61 63 63 65 70 74 28 ..int.rc;......if.((rc.=.accept(
3ec0 73 2c 20 61 64 64 72 2c 20 61 64 64 72 6c 65 6e 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 s,.addr,.addrlen)).<.0)..unix_er
3ee0 72 6f 72 28 22 41 63 63 65 70 74 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 ror("Accept.error");.....return.
3f00 72 63 3b 0a 7d 0a 0a 76 6f 69 64 20 43 6f 6e 6e 65 63 74 28 69 6e 74 20 73 6f 63 6b 66 64 2c 20 rc;.}..void.Connect(int.sockfd,.
3f20 73 74 72 75 63 74 20 73 6f 63 6b 61 64 64 72 20 2a 73 65 72 76 5f 61 64 64 72 2c 20 69 6e 74 20 struct.sockaddr.*serv_addr,.int.
3f40 61 64 64 72 6c 65 6e 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 addrlen)..{.....int.rc;......if.
3f60 28 28 72 63 20 3d 20 63 6f 6e 6e 65 63 74 28 73 6f 63 6b 66 64 2c 20 73 65 72 76 5f 61 64 64 72 ((rc.=.connect(sockfd,.serv_addr
3f80 2c 20 61 64 64 72 6c 65 6e 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 43 6f ,.addrlen)).<.0)..unix_error("Co
3fa0 6e 6e 65 63 74 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a nnect.error");.}../*************
3fc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 50 72 6f 74 6f 63 6f 6c 2d 69 ******************..*.Protocol-i
3fe0 6e 64 65 70 65 6e 64 65 6e 74 20 77 72 61 70 70 65 72 73 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ndependent.wrappers..***********
4000 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 ********************/./*.$begin.
4020 67 65 74 61 64 64 72 69 6e 66 6f 20 2a 2f 0a 76 6f 69 64 20 47 65 74 61 64 64 72 69 6e 66 6f 28 getaddrinfo.*/.void.Getaddrinfo(
4040 63 6f 6e 73 74 20 63 68 61 72 20 2a 6e 6f 64 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 65 const.char.*node,.const.char.*se
4060 72 76 69 63 65 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 73 rvice,...................const.s
4080 74 72 75 63 74 20 61 64 64 72 69 6e 66 6f 20 2a 68 69 6e 74 73 2c 20 73 74 72 75 63 74 20 61 64 truct.addrinfo.*hints,.struct.ad
40a0 64 72 69 6e 66 6f 20 2a 2a 72 65 73 29 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 drinfo.**res).{.....int.rc;.....
40c0 20 69 66 20 28 28 72 63 20 3d 20 67 65 74 61 64 64 72 69 6e 66 6f 28 6e 6f 64 65 2c 20 73 65 72 .if.((rc.=.getaddrinfo(node,.ser
40e0 76 69 63 65 2c 20 68 69 6e 74 73 2c 20 72 65 73 29 29 20 21 3d 20 30 29 20 0a 20 20 20 20 20 20 vice,.hints,.res)).!=.0)........
4100 20 20 67 61 69 5f 65 72 72 6f 72 28 72 63 2c 20 22 47 65 74 61 64 64 72 69 6e 66 6f 20 65 72 72 ..gai_error(rc,."Getaddrinfo.err
4120 6f 72 22 29 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 67 65 74 61 64 64 72 69 6e 66 6f 20 2a 2f 0a 0a or");.}./*.$end.getaddrinfo.*/..
4140 76 6f 69 64 20 47 65 74 6e 61 6d 65 69 6e 66 6f 28 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73 6f void.Getnameinfo(const.struct.so
4160 63 6b 61 64 64 72 20 2a 73 61 2c 20 73 6f 63 6b 6c 65 6e 5f 74 20 73 61 6c 65 6e 2c 20 63 68 61 ckaddr.*sa,.socklen_t.salen,.cha
4180 72 20 2a 68 6f 73 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 5f r.*host,...................size_
41a0 74 20 68 6f 73 74 6c 65 6e 2c 20 63 68 61 72 20 2a 73 65 72 76 2c 20 73 69 7a 65 5f 74 20 73 65 t.hostlen,.char.*serv,.size_t.se
41c0 72 76 6c 65 6e 2c 20 69 6e 74 20 66 6c 61 67 73 29 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a rvlen,.int.flags).{.....int.rc;.
41e0 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 67 65 74 6e 61 6d 65 69 6e 66 6f 28 73 61 2c 20 73 .....if.((rc.=.getnameinfo(sa,.s
4200 61 6c 65 6e 2c 20 68 6f 73 74 2c 20 68 6f 73 74 6c 65 6e 2c 20 73 65 72 76 2c 20 0a 20 20 20 20 alen,.host,.hostlen,.serv,......
4220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 72 76 6c 65 6e 2c 20 66 ......................servlen,.f
4240 6c 61 67 73 29 29 20 21 3d 20 30 29 20 0a 20 20 20 20 20 20 20 20 67 61 69 5f 65 72 72 6f 72 28 lags)).!=.0)..........gai_error(
4260 72 63 2c 20 22 47 65 74 6e 61 6d 65 69 6e 66 6f 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 76 6f 69 rc,."Getnameinfo.error");.}..voi
4280 64 20 46 72 65 65 61 64 64 72 69 6e 66 6f 28 73 74 72 75 63 74 20 61 64 64 72 69 6e 66 6f 20 2a d.Freeaddrinfo(struct.addrinfo.*
42a0 72 65 73 29 0a 7b 0a 20 20 20 20 66 72 65 65 61 64 64 72 69 6e 66 6f 28 72 65 73 29 3b 0a 7d 0a res).{.....freeaddrinfo(res);.}.
42c0 0a 76 6f 69 64 20 49 6e 65 74 5f 6e 74 6f 70 28 69 6e 74 20 61 66 2c 20 63 6f 6e 73 74 20 76 6f .void.Inet_ntop(int.af,.const.vo
42e0 69 64 20 2a 73 72 63 2c 20 63 68 61 72 20 2a 64 73 74 2c 20 73 6f 63 6b 6c 65 6e 5f 74 20 73 69 id.*src,.char.*dst,.socklen_t.si
4300 7a 65 29 0a 7b 0a 20 20 20 20 69 66 20 28 21 69 6e 65 74 5f 6e 74 6f 70 28 61 66 2c 20 73 72 63 ze).{.....if.(!inet_ntop(af,.src
4320 2c 20 64 73 74 2c 20 73 69 7a 65 29 29 0a 20 20 20 20 20 20 20 20 75 6e 69 78 5f 65 72 72 6f 72 ,.dst,.size)).........unix_error
4340 28 22 49 6e 65 74 5f 6e 74 6f 70 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 76 6f 69 64 20 49 6e 65 ("Inet_ntop.error");.}..void.Ine
4360 74 5f 70 74 6f 6e 28 69 6e 74 20 61 66 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 72 63 2c 20 t_pton(int.af,.const.char.*src,.
4380 76 6f 69 64 20 2a 64 73 74 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 72 void.*dst)..{.....int.rc;......r
43a0 63 20 3d 20 69 6e 65 74 5f 70 74 6f 6e 28 61 66 2c 20 73 72 63 2c 20 64 73 74 29 3b 0a 20 20 20 c.=.inet_pton(af,.src,.dst);....
43c0 20 69 66 20 28 72 63 20 3d 3d 20 30 29 0a 09 61 70 70 5f 65 72 72 6f 72 28 22 69 6e 65 74 5f 70 .if.(rc.==.0)..app_error("inet_p
43e0 74 6f 6e 20 65 72 72 6f 72 3a 20 69 6e 76 61 6c 69 64 20 64 6f 74 74 65 64 2d 64 65 63 69 6d 61 ton.error:.invalid.dotted-decima
4400 6c 20 61 64 64 72 65 73 73 22 29 3b 0a 20 20 20 20 65 6c 73 65 20 69 66 20 28 72 63 20 3c 20 30 l.address");.....else.if.(rc.<.0
4420 29 0a 20 20 20 20 20 20 20 20 75 6e 69 78 5f 65 72 72 6f 72 28 22 49 6e 65 74 5f 70 74 6f 6e 20 ).........unix_error("Inet_pton.
4440 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a error");.}../*******************
4460 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 44 4e 53 20 ************************..*.DNS.
4480 69 6e 74 65 72 66 61 63 65 20 77 72 61 70 70 65 72 73 2e 20 0a 20 2a 0a 20 2a 20 4e 4f 54 45 3a interface.wrappers....*..*.NOTE:
44a0 20 54 68 65 73 65 20 61 72 65 20 6f 62 73 6f 6c 65 74 65 20 62 65 63 61 75 73 65 20 74 68 65 79 .These.are.obsolete.because.they
44c0 20 61 72 65 20 6e 6f 74 20 74 68 72 65 61 64 20 73 61 66 65 2e 20 55 73 65 0a 20 2a 20 67 65 74 .are.not.thread.safe..Use..*.get
44e0 61 64 64 72 69 6e 66 6f 20 61 6e 64 20 67 65 74 6e 61 6d 65 69 6e 66 6f 20 69 6e 73 74 65 61 64 addrinfo.and.getnameinfo.instead
4500 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ..******************************
4520 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 24 62 65 67 69 6e 20 67 65 74 68 6f 73 74 62 79 6e 61 6d 65 20 *****/../*.$begin.gethostbyname.
4540 2a 2f 0a 73 74 72 75 63 74 20 68 6f 73 74 65 6e 74 20 2a 47 65 74 68 6f 73 74 62 79 6e 61 6d 65 */.struct.hostent.*Gethostbyname
4560 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 6e 61 6d 65 29 20 0a 7b 0a 20 20 20 20 73 74 72 75 63 74 (const.char.*name)..{.....struct
4580 20 68 6f 73 74 65 6e 74 20 2a 70 3b 0a 0a 20 20 20 20 69 66 20 28 28 70 20 3d 20 67 65 74 68 6f .hostent.*p;......if.((p.=.getho
45a0 73 74 62 79 6e 61 6d 65 28 6e 61 6d 65 29 29 20 3d 3d 20 4e 55 4c 4c 29 0a 09 64 6e 73 5f 65 72 stbyname(name)).==.NULL)..dns_er
45c0 72 6f 72 28 22 47 65 74 68 6f 73 74 62 79 6e 61 6d 65 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 ror("Gethostbyname.error");.....
45e0 72 65 74 75 72 6e 20 70 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 67 65 74 68 6f 73 74 62 79 6e 61 6d return.p;.}./*.$end.gethostbynam
4600 65 20 2a 2f 0a 0a 73 74 72 75 63 74 20 68 6f 73 74 65 6e 74 20 2a 47 65 74 68 6f 73 74 62 79 61 e.*/..struct.hostent.*Gethostbya
4620 64 64 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 64 64 72 2c 20 69 6e 74 20 6c 65 6e 2c 20 69 ddr(const.char.*addr,.int.len,.i
4640 6e 74 20 74 79 70 65 29 20 0a 7b 0a 20 20 20 20 73 74 72 75 63 74 20 68 6f 73 74 65 6e 74 20 2a nt.type)..{.....struct.hostent.*
4660 70 3b 0a 0a 20 20 20 20 69 66 20 28 28 70 20 3d 20 67 65 74 68 6f 73 74 62 79 61 64 64 72 28 61 p;......if.((p.=.gethostbyaddr(a
4680 64 64 72 2c 20 6c 65 6e 2c 20 74 79 70 65 29 29 20 3d 3d 20 4e 55 4c 4c 29 0a 09 64 6e 73 5f 65 ddr,.len,.type)).==.NULL)..dns_e
46a0 72 72 6f 72 28 22 47 65 74 68 6f 73 74 62 79 61 64 64 72 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 rror("Gethostbyaddr.error");....
46c0 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a .return.p;.}../*****************
46e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a *******************************.
4700 20 2a 20 57 72 61 70 70 65 72 73 20 66 6f 72 20 50 74 68 72 65 61 64 73 20 74 68 72 65 61 64 20 .*.Wrappers.for.Pthreads.thread.
4720 63 6f 6e 74 72 6f 6c 20 66 75 6e 63 74 69 6f 6e 73 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a control.functions..*************
4740 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ********************************
4760 2a 2a 2a 2f 0a 0a 76 6f 69 64 20 50 74 68 72 65 61 64 5f 63 72 65 61 74 65 28 70 74 68 72 65 61 ***/..void.Pthread_create(pthrea
4780 64 5f 74 20 2a 74 69 64 70 2c 20 70 74 68 72 65 61 64 5f 61 74 74 72 5f 74 20 2a 61 74 74 72 70 d_t.*tidp,.pthread_attr_t.*attrp
47a0 2c 20 0a 09 09 20 20 20 20 76 6f 69 64 20 2a 20 28 2a 72 6f 75 74 69 6e 65 29 28 76 6f 69 64 20 ,........void.*.(*routine)(void.
47c0 2a 29 2c 20 76 6f 69 64 20 2a 61 72 67 70 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a *),.void.*argp)..{.....int.rc;..
47e0 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 70 74 68 72 65 61 64 5f 63 72 65 61 74 65 28 74 69 64 ....if.((rc.=.pthread_create(tid
4800 70 2c 20 61 74 74 72 70 2c 20 72 6f 75 74 69 6e 65 2c 20 61 72 67 70 29 29 20 21 3d 20 30 29 0a p,.attrp,.routine,.argp)).!=.0).
4820 09 70 6f 73 69 78 5f 65 72 72 6f 72 28 72 63 2c 20 22 50 74 68 72 65 61 64 5f 63 72 65 61 74 65 .posix_error(rc,."Pthread_create
4840 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 76 6f 69 64 20 50 74 68 72 65 61 64 5f 63 61 6e 63 65 6c .error");.}..void.Pthread_cancel
4860 28 70 74 68 72 65 61 64 5f 74 20 74 69 64 29 20 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 (pthread_t.tid).{.....int.rc;...
4880 20 20 20 69 66 20 28 28 72 63 20 3d 20 70 74 68 72 65 61 64 5f 63 61 6e 63 65 6c 28 74 69 64 29 ...if.((rc.=.pthread_cancel(tid)
48a0 29 20 21 3d 20 30 29 0a 09 70 6f 73 69 78 5f 65 72 72 6f 72 28 72 63 2c 20 22 50 74 68 72 65 61 ).!=.0)..posix_error(rc,."Pthrea
48c0 64 5f 63 61 6e 63 65 6c 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 76 6f 69 64 20 50 74 68 72 65 61 d_cancel.error");.}..void.Pthrea
48e0 64 5f 6a 6f 69 6e 28 70 74 68 72 65 61 64 5f 74 20 74 69 64 2c 20 76 6f 69 64 20 2a 2a 74 68 72 d_join(pthread_t.tid,.void.**thr
4900 65 61 64 5f 72 65 74 75 72 6e 29 20 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 ead_return).{.....int.rc;......i
4920 66 20 28 28 72 63 20 3d 20 70 74 68 72 65 61 64 5f 6a 6f 69 6e 28 74 69 64 2c 20 74 68 72 65 61 f.((rc.=.pthread_join(tid,.threa
4940 64 5f 72 65 74 75 72 6e 29 29 20 21 3d 20 30 29 0a 09 70 6f 73 69 78 5f 65 72 72 6f 72 28 72 63 d_return)).!=.0)..posix_error(rc
4960 2c 20 22 50 74 68 72 65 61 64 5f 6a 6f 69 6e 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 2f 2a 20 24 ,."Pthread_join.error");.}../*.$
4980 62 65 67 69 6e 20 64 65 74 61 63 68 20 2a 2f 0a 76 6f 69 64 20 50 74 68 72 65 61 64 5f 64 65 74 begin.detach.*/.void.Pthread_det
49a0 61 63 68 28 70 74 68 72 65 61 64 5f 74 20 74 69 64 29 20 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b ach(pthread_t.tid).{.....int.rc;
49c0 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 70 74 68 72 65 61 64 5f 64 65 74 61 63 68 28 74 ......if.((rc.=.pthread_detach(t
49e0 69 64 29 29 20 21 3d 20 30 29 0a 09 70 6f 73 69 78 5f 65 72 72 6f 72 28 72 63 2c 20 22 50 74 68 id)).!=.0)..posix_error(rc,."Pth
4a00 72 65 61 64 5f 64 65 74 61 63 68 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 64 read_detach.error");.}./*.$end.d
4a20 65 74 61 63 68 20 2a 2f 0a 0a 76 6f 69 64 20 50 74 68 72 65 61 64 5f 65 78 69 74 28 76 6f 69 64 etach.*/..void.Pthread_exit(void
4a40 20 2a 72 65 74 76 61 6c 29 20 7b 0a 20 20 20 20 70 74 68 72 65 61 64 5f 65 78 69 74 28 72 65 74 .*retval).{.....pthread_exit(ret
4a60 76 61 6c 29 3b 0a 7d 0a 0a 70 74 68 72 65 61 64 5f 74 20 50 74 68 72 65 61 64 5f 73 65 6c 66 28 val);.}..pthread_t.Pthread_self(
4a80 76 6f 69 64 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 74 68 72 65 61 64 5f 73 65 6c 66 28 void).{.....return.pthread_self(
4aa0 29 3b 0a 7d 0a 20 0a 76 6f 69 64 20 50 74 68 72 65 61 64 5f 6f 6e 63 65 28 70 74 68 72 65 61 64 );.}...void.Pthread_once(pthread
4ac0 5f 6f 6e 63 65 5f 74 20 2a 6f 6e 63 65 5f 63 6f 6e 74 72 6f 6c 2c 20 76 6f 69 64 20 28 2a 69 6e _once_t.*once_control,.void.(*in
4ae0 69 74 5f 66 75 6e 63 74 69 6f 6e 29 28 29 29 20 7b 0a 20 20 20 20 70 74 68 72 65 61 64 5f 6f 6e it_function)()).{.....pthread_on
4b00 63 65 28 6f 6e 63 65 5f 63 6f 6e 74 72 6f 6c 2c 20 69 6e 69 74 5f 66 75 6e 63 74 69 6f 6e 29 3b ce(once_control,.init_function);
4b20 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a .}../***************************
4b40 2a 2a 2a 2a 0a 20 2a 20 57 72 61 70 70 65 72 73 20 66 6f 72 20 50 6f 73 69 78 20 73 65 6d 61 70 ****..*.Wrappers.for.Posix.semap
4b60 68 6f 72 65 73 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a hores..*************************
4b80 2a 2a 2a 2a 2a 2a 2f 0a 0a 76 6f 69 64 20 53 65 6d 5f 69 6e 69 74 28 73 65 6d 5f 74 20 2a 73 65 ******/..void.Sem_init(sem_t.*se
4ba0 6d 2c 20 69 6e 74 20 70 73 68 61 72 65 64 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 76 61 6c m,.int.pshared,.unsigned.int.val
4bc0 75 65 29 20 0a 7b 0a 20 20 20 20 69 66 20 28 73 65 6d 5f 69 6e 69 74 28 73 65 6d 2c 20 70 73 68 ue)..{.....if.(sem_init(sem,.psh
4be0 61 72 65 64 2c 20 76 61 6c 75 65 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 53 ared,.value).<.0)..unix_error("S
4c00 65 6d 5f 69 6e 69 74 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 76 6f 69 64 20 50 28 73 65 6d 5f 74 em_init.error");.}..void.P(sem_t
4c20 20 2a 73 65 6d 29 20 0a 7b 0a 20 20 20 20 69 66 20 28 73 65 6d 5f 77 61 69 74 28 73 65 6d 29 20 .*sem)..{.....if.(sem_wait(sem).
4c40 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 50 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a <.0)..unix_error("P.error");.}..
4c60 76 6f 69 64 20 56 28 73 65 6d 5f 74 20 2a 73 65 6d 29 20 0a 7b 0a 20 20 20 20 69 66 20 28 73 65 void.V(sem_t.*sem)..{.....if.(se
4c80 6d 5f 70 6f 73 74 28 73 65 6d 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 56 20 m_post(sem).<.0)..unix_error("V.
4ca0 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a error");.}../*******************
4cc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 54 68 65 20 52 69 6f *********************..*.The.Rio
4ce0 20 70 61 63 6b 61 67 65 20 2d 20 52 6f 62 75 73 74 20 49 2f 4f 20 66 75 6e 63 74 69 6f 6e 73 0a .package.-.Robust.I/O.functions.
4d00 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a .*******************************
4d20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 0a 20 2a 20 72 69 6f 5f 72 65 61 64 6e 20 2d 20 52 6f *********/../*..*.rio_readn.-.Ro
4d40 62 75 73 74 6c 79 20 72 65 61 64 20 6e 20 62 79 74 65 73 20 28 75 6e 62 75 66 66 65 72 65 64 29 bustly.read.n.bytes.(unbuffered)
4d60 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 72 69 6f 5f 72 65 61 64 6e 20 2a 2f 0a 73 73 69 7a ..*/./*.$begin.rio_readn.*/.ssiz
4d80 65 5f 74 20 72 69 6f 5f 72 65 61 64 6e 28 69 6e 74 20 66 64 2c 20 76 6f 69 64 20 2a 75 73 72 62 e_t.rio_readn(int.fd,.void.*usrb
4da0 75 66 2c 20 73 69 7a 65 5f 74 20 6e 29 20 0a 7b 0a 20 20 20 20 73 69 7a 65 5f 74 20 6e 6c 65 66 uf,.size_t.n)..{.....size_t.nlef
4dc0 74 20 3d 20 6e 3b 0a 20 20 20 20 73 73 69 7a 65 5f 74 20 6e 72 65 61 64 3b 0a 20 20 20 20 63 68 t.=.n;.....ssize_t.nread;.....ch
4de0 61 72 20 2a 62 75 66 70 20 3d 20 75 73 72 62 75 66 3b 0a 0a 20 20 20 20 77 68 69 6c 65 20 28 6e ar.*bufp.=.usrbuf;......while.(n
4e00 6c 65 66 74 20 3e 20 30 29 20 7b 0a 09 69 66 20 28 28 6e 72 65 61 64 20 3d 20 72 65 61 64 28 66 left.>.0).{..if.((nread.=.read(f
4e20 64 2c 20 62 75 66 70 2c 20 6e 6c 65 66 74 29 29 20 3c 20 30 29 20 7b 0a 09 20 20 20 20 69 66 20 d,.bufp,.nleft)).<.0).{......if.
4e40 28 65 72 72 6e 6f 20 3d 3d 20 45 49 4e 54 52 29 20 2f 2a 20 49 6e 74 65 72 72 75 70 74 65 64 20 (errno.==.EINTR)./*.Interrupted.
4e60 62 79 20 73 69 67 20 68 61 6e 64 6c 65 72 20 72 65 74 75 72 6e 20 2a 2f 0a 09 09 6e 72 65 61 64 by.sig.handler.return.*/...nread
4e80 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 61 6e 64 20 63 61 6c 6c 20 72 65 61 64 28 29 20 61 67 .=.0;....../*.and.call.read().ag
4ea0 61 69 6e 20 2a 2f 0a 09 20 20 20 20 65 6c 73 65 0a 09 09 72 65 74 75 72 6e 20 2d 31 3b 20 20 20 ain.*/......else...return.-1;...
4ec0 20 20 20 2f 2a 20 65 72 72 6e 6f 20 73 65 74 20 62 79 20 72 65 61 64 28 29 20 2a 2f 20 0a 09 7d .../*.errno.set.by.read().*/...}
4ee0 20 0a 09 65 6c 73 65 20 69 66 20 28 6e 72 65 61 64 20 3d 3d 20 30 29 0a 09 20 20 20 20 62 72 65 ...else.if.(nread.==.0)......bre
4f00 61 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 4f 46 20 2a 2f 0a 09 6e 6c 65 66 ak;............../*.EOF.*/..nlef
4f20 74 20 2d 3d 20 6e 72 65 61 64 3b 0a 09 62 75 66 70 20 2b 3d 20 6e 72 65 61 64 3b 0a 20 20 20 20 t.-=.nread;..bufp.+=.nread;.....
4f40 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 28 6e 20 2d 20 6e 6c 65 66 74 29 3b 20 20 20 20 20 20 20 }.....return.(n.-.nleft);.......
4f60 20 20 2f 2a 20 52 65 74 75 72 6e 20 3e 3d 20 30 20 2a 2f 0a 7d 0a 2f 2a 20 24 65 6e 64 20 72 69 ../*.Return.>=.0.*/.}./*.$end.ri
4f80 6f 5f 72 65 61 64 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 72 69 6f 5f 77 72 69 74 65 6e 20 2d 20 52 o_readn.*/../*..*.rio_writen.-.R
4fa0 6f 62 75 73 74 6c 79 20 77 72 69 74 65 20 6e 20 62 79 74 65 73 20 28 75 6e 62 75 66 66 65 72 65 obustly.write.n.bytes.(unbuffere
4fc0 64 29 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 72 69 6f 5f 77 72 69 74 65 6e 20 2a 2f 0a 73 d)..*/./*.$begin.rio_writen.*/.s
4fe0 73 69 7a 65 5f 74 20 72 69 6f 5f 77 72 69 74 65 6e 28 69 6e 74 20 66 64 2c 20 76 6f 69 64 20 2a size_t.rio_writen(int.fd,.void.*
5000 75 73 72 62 75 66 2c 20 73 69 7a 65 5f 74 20 6e 29 20 0a 7b 0a 20 20 20 20 73 69 7a 65 5f 74 20 usrbuf,.size_t.n)..{.....size_t.
5020 6e 6c 65 66 74 20 3d 20 6e 3b 0a 20 20 20 20 73 73 69 7a 65 5f 74 20 6e 77 72 69 74 74 65 6e 3b nleft.=.n;.....ssize_t.nwritten;
5040 0a 20 20 20 20 63 68 61 72 20 2a 62 75 66 70 20 3d 20 75 73 72 62 75 66 3b 0a 0a 20 20 20 20 77 .....char.*bufp.=.usrbuf;......w
5060 68 69 6c 65 20 28 6e 6c 65 66 74 20 3e 20 30 29 20 7b 0a 09 69 66 20 28 28 6e 77 72 69 74 74 65 hile.(nleft.>.0).{..if.((nwritte
5080 6e 20 3d 20 77 72 69 74 65 28 66 64 2c 20 62 75 66 70 2c 20 6e 6c 65 66 74 29 29 20 3c 3d 20 30 n.=.write(fd,.bufp,.nleft)).<=.0
50a0 29 20 7b 0a 09 20 20 20 20 69 66 20 28 65 72 72 6e 6f 20 3d 3d 20 45 49 4e 54 52 29 20 20 2f 2a ).{......if.(errno.==.EINTR)../*
50c0 20 49 6e 74 65 72 72 75 70 74 65 64 20 62 79 20 73 69 67 20 68 61 6e 64 6c 65 72 20 72 65 74 75 .Interrupted.by.sig.handler.retu
50e0 72 6e 20 2a 2f 0a 09 09 6e 77 72 69 74 74 65 6e 20 3d 20 30 3b 20 20 20 20 2f 2a 20 61 6e 64 20 rn.*/...nwritten.=.0;..../*.and.
5100 63 61 6c 6c 20 77 72 69 74 65 28 29 20 61 67 61 69 6e 20 2a 2f 0a 09 20 20 20 20 65 6c 73 65 0a call.write().again.*/......else.
5120 09 09 72 65 74 75 72 6e 20 2d 31 3b 20 20 20 20 20 20 20 2f 2a 20 65 72 72 6e 6f 20 73 65 74 20 ..return.-1;......./*.errno.set.
5140 62 79 20 77 72 69 74 65 28 29 20 2a 2f 0a 09 7d 0a 09 6e 6c 65 66 74 20 2d 3d 20 6e 77 72 69 74 by.write().*/..}..nleft.-=.nwrit
5160 74 65 6e 3b 0a 09 62 75 66 70 20 2b 3d 20 6e 77 72 69 74 74 65 6e 3b 0a 20 20 20 20 7d 0a 20 20 ten;..bufp.+=.nwritten;.....}...
5180 20 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 72 69 6f 5f 77 72 69 74 65 6e ..return.n;.}./*.$end.rio_writen
51a0 20 2a 2f 0a 0a 0a 2f 2a 20 0a 20 2a 20 72 69 6f 5f 72 65 61 64 20 2d 20 54 68 69 73 20 69 73 20 .*/.../*...*.rio_read.-.This.is.
51c0 61 20 77 72 61 70 70 65 72 20 66 6f 72 20 74 68 65 20 55 6e 69 78 20 72 65 61 64 28 29 20 66 75 a.wrapper.for.the.Unix.read().fu
51e0 6e 63 74 69 6f 6e 20 74 68 61 74 0a 20 2a 20 20 20 20 74 72 61 6e 73 66 65 72 73 20 6d 69 6e 28 nction.that..*....transfers.min(
5200 6e 2c 20 72 69 6f 5f 63 6e 74 29 20 62 79 74 65 73 20 66 72 6f 6d 20 61 6e 20 69 6e 74 65 72 6e n,.rio_cnt).bytes.from.an.intern
5220 61 6c 20 62 75 66 66 65 72 20 74 6f 20 61 20 75 73 65 72 0a 20 2a 20 20 20 20 62 75 66 66 65 72 al.buffer.to.a.user..*....buffer
5240 2c 20 77 68 65 72 65 20 6e 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 ,.where.n.is.the.number.of.bytes
5260 20 72 65 71 75 65 73 74 65 64 20 62 79 20 74 68 65 20 75 73 65 72 20 61 6e 64 0a 20 2a 20 20 20 .requested.by.the.user.and..*...
5280 20 72 69 6f 5f 63 6e 74 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 75 6e 72 65 61 64 .rio_cnt.is.the.number.of.unread
52a0 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 62 75 66 66 65 72 2e 20 4f .bytes.in.the.internal.buffer..O
52c0 6e 0a 20 2a 20 20 20 20 65 6e 74 72 79 2c 20 72 69 6f 5f 72 65 61 64 28 29 20 72 65 66 69 6c 6c n..*....entry,.rio_read().refill
52e0 73 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 62 75 66 66 65 72 20 76 69 61 20 61 20 63 61 6c 6c s.the.internal.buffer.via.a.call
5300 20 74 6f 0a 20 2a 20 20 20 20 72 65 61 64 28 29 20 69 66 20 74 68 65 20 69 6e 74 65 72 6e 61 6c .to..*....read().if.the.internal
5320 20 62 75 66 66 65 72 20 69 73 20 65 6d 70 74 79 2e 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 .buffer.is.empty...*/./*.$begin.
5340 72 69 6f 5f 72 65 61 64 20 2a 2f 0a 73 74 61 74 69 63 20 73 73 69 7a 65 5f 74 20 72 69 6f 5f 72 rio_read.*/.static.ssize_t.rio_r
5360 65 61 64 28 72 69 6f 5f 74 20 2a 72 70 2c 20 63 68 61 72 20 2a 75 73 72 62 75 66 2c 20 73 69 7a ead(rio_t.*rp,.char.*usrbuf,.siz
5380 65 5f 74 20 6e 29 0a 7b 0a 20 20 20 20 69 6e 74 20 63 6e 74 3b 0a 0a 20 20 20 20 77 68 69 6c 65 e_t.n).{.....int.cnt;......while
53a0 20 28 72 70 2d 3e 72 69 6f 5f 63 6e 74 20 3c 3d 20 30 29 20 7b 20 20 2f 2a 20 52 65 66 69 6c 6c .(rp->rio_cnt.<=.0).{../*.Refill
53c0 20 69 66 20 62 75 66 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 09 72 70 2d 3e 72 69 6f 5f 63 6e 74 .if.buf.is.empty.*/..rp->rio_cnt
53e0 20 3d 20 72 65 61 64 28 72 70 2d 3e 72 69 6f 5f 66 64 2c 20 72 70 2d 3e 72 69 6f 5f 62 75 66 2c .=.read(rp->rio_fd,.rp->rio_buf,
5400 20 0a 09 09 09 20 20 20 73 69 7a 65 6f 66 28 72 70 2d 3e 72 69 6f 5f 62 75 66 29 29 3b 0a 09 69 ........sizeof(rp->rio_buf));..i
5420 66 20 28 72 70 2d 3e 72 69 6f 5f 63 6e 74 20 3c 20 30 29 20 7b 0a 09 20 20 20 20 69 66 20 28 65 f.(rp->rio_cnt.<.0).{......if.(e
5440 72 72 6e 6f 20 21 3d 20 45 49 4e 54 52 29 20 2f 2a 20 49 6e 74 65 72 72 75 70 74 65 64 20 62 79 rrno.!=.EINTR)./*.Interrupted.by
5460 20 73 69 67 20 68 61 6e 64 6c 65 72 20 72 65 74 75 72 6e 20 2a 2f 0a 09 09 72 65 74 75 72 6e 20 .sig.handler.return.*/...return.
5480 2d 31 3b 0a 09 7d 0a 09 65 6c 73 65 20 69 66 20 28 72 70 2d 3e 72 69 6f 5f 63 6e 74 20 3d 3d 20 -1;..}..else.if.(rp->rio_cnt.==.
54a0 30 29 20 20 2f 2a 20 45 4f 46 20 2a 2f 0a 09 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 09 65 6c 0)../*.EOF.*/......return.0;..el
54c0 73 65 20 0a 09 20 20 20 20 72 70 2d 3e 72 69 6f 5f 62 75 66 70 74 72 20 3d 20 72 70 2d 3e 72 69 se.......rp->rio_bufptr.=.rp->ri
54e0 6f 5f 62 75 66 3b 20 2f 2a 20 52 65 73 65 74 20 62 75 66 66 65 72 20 70 74 72 20 2a 2f 0a 20 20 o_buf;./*.Reset.buffer.ptr.*/...
5500 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 43 6f 70 79 20 6d 69 6e 28 6e 2c 20 72 70 2d 3e 72 69 6f 5f ..}....../*.Copy.min(n,.rp->rio_
5520 63 6e 74 29 20 62 79 74 65 73 20 66 72 6f 6d 20 69 6e 74 65 72 6e 61 6c 20 62 75 66 20 74 6f 20 cnt).bytes.from.internal.buf.to.
5540 75 73 65 72 20 62 75 66 20 2a 2f 0a 20 20 20 20 63 6e 74 20 3d 20 6e 3b 20 20 20 20 20 20 20 20 user.buf.*/.....cnt.=.n;........
5560 20 20 0a 20 20 20 20 69 66 20 28 72 70 2d 3e 72 69 6f 5f 63 6e 74 20 3c 20 6e 29 20 20 20 0a 09 .......if.(rp->rio_cnt.<.n).....
5580 63 6e 74 20 3d 20 72 70 2d 3e 72 69 6f 5f 63 6e 74 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 75 73 cnt.=.rp->rio_cnt;.....memcpy(us
55a0 72 62 75 66 2c 20 72 70 2d 3e 72 69 6f 5f 62 75 66 70 74 72 2c 20 63 6e 74 29 3b 0a 20 20 20 20 rbuf,.rp->rio_bufptr,.cnt);.....
55c0 72 70 2d 3e 72 69 6f 5f 62 75 66 70 74 72 20 2b 3d 20 63 6e 74 3b 0a 20 20 20 20 72 70 2d 3e 72 rp->rio_bufptr.+=.cnt;.....rp->r
55e0 69 6f 5f 63 6e 74 20 2d 3d 20 63 6e 74 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 63 6e 74 3b 0a 7d io_cnt.-=.cnt;.....return.cnt;.}
5600 0a 2f 2a 20 24 65 6e 64 20 72 69 6f 5f 72 65 61 64 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 72 69 6f 5f ./*.$end.rio_read.*/../*..*.rio_
5620 72 65 61 64 69 6e 69 74 62 20 2d 20 41 73 73 6f 63 69 61 74 65 20 61 20 64 65 73 63 72 69 70 74 readinitb.-.Associate.a.descript
5640 6f 72 20 77 69 74 68 20 61 20 72 65 61 64 20 62 75 66 66 65 72 20 61 6e 64 20 72 65 73 65 74 20 or.with.a.read.buffer.and.reset.
5660 62 75 66 66 65 72 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 72 69 6f 5f 72 65 61 64 69 6e 69 buffer..*/./*.$begin.rio_readini
5680 74 62 20 2a 2f 0a 76 6f 69 64 20 72 69 6f 5f 72 65 61 64 69 6e 69 74 62 28 72 69 6f 5f 74 20 2a tb.*/.void.rio_readinitb(rio_t.*
56a0 72 70 2c 20 69 6e 74 20 66 64 29 20 0a 7b 0a 20 20 20 20 72 70 2d 3e 72 69 6f 5f 66 64 20 3d 20 rp,.int.fd)..{.....rp->rio_fd.=.
56c0 66 64 3b 20 20 0a 20 20 20 20 72 70 2d 3e 72 69 6f 5f 63 6e 74 20 3d 20 30 3b 20 20 0a 20 20 20 fd;.......rp->rio_cnt.=.0;......
56e0 20 72 70 2d 3e 72 69 6f 5f 62 75 66 70 74 72 20 3d 20 72 70 2d 3e 72 69 6f 5f 62 75 66 3b 0a 7d .rp->rio_bufptr.=.rp->rio_buf;.}
5700 0a 2f 2a 20 24 65 6e 64 20 72 69 6f 5f 72 65 61 64 69 6e 69 74 62 20 2a 2f 0a 0a 2f 2a 0a 20 2a ./*.$end.rio_readinitb.*/../*..*
5720 20 72 69 6f 5f 72 65 61 64 6e 62 20 2d 20 52 6f 62 75 73 74 6c 79 20 72 65 61 64 20 6e 20 62 79 .rio_readnb.-.Robustly.read.n.by
5740 74 65 73 20 28 62 75 66 66 65 72 65 64 29 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 72 69 6f tes.(buffered)..*/./*.$begin.rio
5760 5f 72 65 61 64 6e 62 20 2a 2f 0a 73 73 69 7a 65 5f 74 20 72 69 6f 5f 72 65 61 64 6e 62 28 72 69 _readnb.*/.ssize_t.rio_readnb(ri
5780 6f 5f 74 20 2a 72 70 2c 20 76 6f 69 64 20 2a 75 73 72 62 75 66 2c 20 73 69 7a 65 5f 74 20 6e 29 o_t.*rp,.void.*usrbuf,.size_t.n)
57a0 20 0a 7b 0a 20 20 20 20 73 69 7a 65 5f 74 20 6e 6c 65 66 74 20 3d 20 6e 3b 0a 20 20 20 20 73 73 ..{.....size_t.nleft.=.n;.....ss
57c0 69 7a 65 5f 74 20 6e 72 65 61 64 3b 0a 20 20 20 20 63 68 61 72 20 2a 62 75 66 70 20 3d 20 75 73 ize_t.nread;.....char.*bufp.=.us
57e0 72 62 75 66 3b 0a 20 20 20 20 0a 20 20 20 20 77 68 69 6c 65 20 28 6e 6c 65 66 74 20 3e 20 30 29 rbuf;..........while.(nleft.>.0)
5800 20 7b 0a 09 69 66 20 28 28 6e 72 65 61 64 20 3d 20 72 69 6f 5f 72 65 61 64 28 72 70 2c 20 62 75 .{..if.((nread.=.rio_read(rp,.bu
5820 66 70 2c 20 6e 6c 65 66 74 29 29 20 3c 20 30 29 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 fp,.nleft)).<.0)..............re
5840 74 75 72 6e 20 2d 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 65 72 72 6e 6f 20 73 65 74 20 62 turn.-1;........../*.errno.set.b
5860 79 20 72 65 61 64 28 29 20 2a 2f 20 0a 09 65 6c 73 65 20 69 66 20 28 6e 72 65 61 64 20 3d 3d 20 y.read().*/...else.if.(nread.==.
5880 30 29 0a 09 20 20 20 20 62 72 65 61 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 0)......break;............../*.E
58a0 4f 46 20 2a 2f 0a 09 6e 6c 65 66 74 20 2d 3d 20 6e 72 65 61 64 3b 0a 09 62 75 66 70 20 2b 3d 20 OF.*/..nleft.-=.nread;..bufp.+=.
58c0 6e 72 65 61 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 28 6e 20 2d 20 6e 6c 65 nread;.....}.....return.(n.-.nle
58e0 66 74 29 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72 6e 20 3e 3d 20 30 20 2a 2f 0a 7d ft);........./*.return.>=.0.*/.}
5900 0a 2f 2a 20 24 65 6e 64 20 72 69 6f 5f 72 65 61 64 6e 62 20 2a 2f 0a 0a 2f 2a 20 0a 20 2a 20 72 ./*.$end.rio_readnb.*/../*...*.r
5920 69 6f 5f 72 65 61 64 6c 69 6e 65 62 20 2d 20 52 6f 62 75 73 74 6c 79 20 72 65 61 64 20 61 20 74 io_readlineb.-.Robustly.read.a.t
5940 65 78 74 20 6c 69 6e 65 20 28 62 75 66 66 65 72 65 64 29 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 ext.line.(buffered)..*/./*.$begi
5960 6e 20 72 69 6f 5f 72 65 61 64 6c 69 6e 65 62 20 2a 2f 0a 73 73 69 7a 65 5f 74 20 72 69 6f 5f 72 n.rio_readlineb.*/.ssize_t.rio_r
5980 65 61 64 6c 69 6e 65 62 28 72 69 6f 5f 74 20 2a 72 70 2c 20 76 6f 69 64 20 2a 75 73 72 62 75 66 eadlineb(rio_t.*rp,.void.*usrbuf
59a0 2c 20 73 69 7a 65 5f 74 20 6d 61 78 6c 65 6e 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 6e 2c 20 72 ,.size_t.maxlen)..{.....int.n,.r
59c0 63 3b 0a 20 20 20 20 63 68 61 72 20 63 2c 20 2a 62 75 66 70 20 3d 20 75 73 72 62 75 66 3b 0a 0a c;.....char.c,.*bufp.=.usrbuf;..
59e0 20 20 20 20 66 6f 72 20 28 6e 20 3d 20 31 3b 20 6e 20 3c 20 6d 61 78 6c 65 6e 3b 20 6e 2b 2b 29 ....for.(n.=.1;.n.<.maxlen;.n++)
5a00 20 7b 20 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 72 69 6f 5f 72 65 61 64 28 72 .{..........if.((rc.=.rio_read(r
5a20 70 2c 20 26 63 2c 20 31 29 29 20 3d 3d 20 31 29 20 7b 0a 09 20 20 20 20 2a 62 75 66 70 2b 2b 20 p,.&c,.1)).==.1).{......*bufp++.
5a40 3d 20 63 3b 0a 09 20 20 20 20 69 66 20 28 63 20 3d 3d 20 27 5c 6e 27 29 20 7b 0a 20 20 20 20 20 =.c;......if.(c.==.'\n').{......
5a60 20 20 20 20 20 20 20 20 20 20 20 6e 2b 2b 3b 0a 20 20 20 20 20 09 09 62 72 65 61 6b 3b 0a 20 20 ...........n++;........break;...
5a80 20 20 20 20 20 20 20 20 20 20 7d 0a 09 7d 20 65 6c 73 65 20 69 66 20 28 72 63 20 3d 3d 20 30 29 ..........}..}.else.if.(rc.==.0)
5aa0 20 7b 0a 09 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 31 29 0a 09 09 72 65 74 75 72 6e 20 30 3b 20 .{......if.(n.==.1)...return.0;.
5ac0 2f 2a 20 45 4f 46 2c 20 6e 6f 20 64 61 74 61 20 72 65 61 64 20 2a 2f 0a 09 20 20 20 20 65 6c 73 /*.EOF,.no.data.read.*/......els
5ae0 65 0a 09 09 62 72 65 61 6b 3b 20 20 20 20 2f 2a 20 45 4f 46 2c 20 73 6f 6d 65 20 64 61 74 61 20 e...break;..../*.EOF,.some.data.
5b00 77 61 73 20 72 65 61 64 20 2a 2f 0a 09 7d 20 65 6c 73 65 0a 09 20 20 20 20 72 65 74 75 72 6e 20 was.read.*/..}.else......return.
5b20 2d 31 3b 09 20 20 2f 2a 20 45 72 72 6f 72 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 2a 62 75 66 -1;.../*.Error.*/.....}.....*buf
5b40 70 20 3d 20 30 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 2d 31 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 p.=.0;.....return.n-1;.}./*.$end
5b60 20 72 69 6f 5f 72 65 61 64 6c 69 6e 65 62 20 2a 2f 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a .rio_readlineb.*/../************
5b80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 57 72 61 70 70 65 **********************..*.Wrappe
5ba0 72 73 20 66 6f 72 20 72 6f 62 75 73 74 20 49 2f 4f 20 72 6f 75 74 69 6e 65 73 0a 20 2a 2a 2a 2a rs.for.robust.I/O.routines..****
5bc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a ******************************/.
5be0 73 73 69 7a 65 5f 74 20 52 69 6f 5f 72 65 61 64 6e 28 69 6e 74 20 66 64 2c 20 76 6f 69 64 20 2a ssize_t.Rio_readn(int.fd,.void.*
5c00 70 74 72 2c 20 73 69 7a 65 5f 74 20 6e 62 79 74 65 73 29 20 0a 7b 0a 20 20 20 20 73 73 69 7a 65 ptr,.size_t.nbytes)..{.....ssize
5c20 5f 74 20 6e 3b 0a 20 20 0a 20 20 20 20 69 66 20 28 28 6e 20 3d 20 72 69 6f 5f 72 65 61 64 6e 28 _t.n;........if.((n.=.rio_readn(
5c40 66 64 2c 20 70 74 72 2c 20 6e 62 79 74 65 73 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 fd,.ptr,.nbytes)).<.0)..unix_err
5c60 6f 72 28 22 52 69 6f 5f 72 65 61 64 6e 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 or("Rio_readn.error");.....retur
5c80 6e 20 6e 3b 0a 7d 0a 0a 76 6f 69 64 20 52 69 6f 5f 77 72 69 74 65 6e 28 69 6e 74 20 66 64 2c 20 n.n;.}..void.Rio_writen(int.fd,.
5ca0 76 6f 69 64 20 2a 75 73 72 62 75 66 2c 20 73 69 7a 65 5f 74 20 6e 29 20 0a 7b 0a 20 20 20 20 69 void.*usrbuf,.size_t.n)..{.....i
5cc0 66 20 28 72 69 6f 5f 77 72 69 74 65 6e 28 66 64 2c 20 75 73 72 62 75 66 2c 20 6e 29 20 21 3d 20 f.(rio_writen(fd,.usrbuf,.n).!=.
5ce0 6e 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 52 69 6f 5f 77 72 69 74 65 6e 20 65 72 72 6f 72 n)..unix_error("Rio_writen.error
5d00 22 29 3b 0a 7d 0a 0a 76 6f 69 64 20 52 69 6f 5f 72 65 61 64 69 6e 69 74 62 28 72 69 6f 5f 74 20 ");.}..void.Rio_readinitb(rio_t.
5d20 2a 72 70 2c 20 69 6e 74 20 66 64 29 0a 7b 0a 20 20 20 20 72 69 6f 5f 72 65 61 64 69 6e 69 74 62 *rp,.int.fd).{.....rio_readinitb
5d40 28 72 70 2c 20 66 64 29 3b 0a 7d 20 0a 0a 73 73 69 7a 65 5f 74 20 52 69 6f 5f 72 65 61 64 6e 62 (rp,.fd);.}...ssize_t.Rio_readnb
5d60 28 72 69 6f 5f 74 20 2a 72 70 2c 20 76 6f 69 64 20 2a 75 73 72 62 75 66 2c 20 73 69 7a 65 5f 74 (rio_t.*rp,.void.*usrbuf,.size_t
5d80 20 6e 29 20 0a 7b 0a 20 20 20 20 73 73 69 7a 65 5f 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 .n)..{.....ssize_t.rc;......if.(
5da0 28 72 63 20 3d 20 72 69 6f 5f 72 65 61 64 6e 62 28 72 70 2c 20 75 73 72 62 75 66 2c 20 6e 29 29 (rc.=.rio_readnb(rp,.usrbuf,.n))
5dc0 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 52 69 6f 5f 72 65 61 64 6e 62 20 65 72 .<.0)..unix_error("Rio_readnb.er
5de0 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 73 73 69 7a 65 5f 74 ror");.....return.rc;.}..ssize_t
5e00 20 52 69 6f 5f 72 65 61 64 6c 69 6e 65 62 28 72 69 6f 5f 74 20 2a 72 70 2c 20 76 6f 69 64 20 2a .Rio_readlineb(rio_t.*rp,.void.*
5e20 75 73 72 62 75 66 2c 20 73 69 7a 65 5f 74 20 6d 61 78 6c 65 6e 29 20 0a 7b 0a 20 20 20 20 73 73 usrbuf,.size_t.maxlen)..{.....ss
5e40 69 7a 65 5f 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 72 69 6f 5f 72 65 61 ize_t.rc;......if.((rc.=.rio_rea
5e60 64 6c 69 6e 65 62 28 72 70 2c 20 75 73 72 62 75 66 2c 20 6d 61 78 6c 65 6e 29 29 20 3c 20 30 29 dlineb(rp,.usrbuf,.maxlen)).<.0)
5e80 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 52 69 6f 5f 72 65 61 64 6c 69 6e 65 62 20 65 72 72 6f ..unix_error("Rio_readlineb.erro
5ea0 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 20 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a r");.....return.rc;.}.../*******
5ec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 0a 20 2a 20 43 6c *************************...*.Cl
5ee0 69 65 6e 74 2f 73 65 72 76 65 72 20 68 65 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e 73 0a 20 2a 2a ient/server.helper.functions..**
5f00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a ******************************/.
5f20 2f 2a 0a 20 2a 20 6f 70 65 6e 5f 63 6c 69 65 6e 74 66 64 20 2d 20 4f 70 65 6e 20 63 6f 6e 6e 65 /*..*.open_clientfd.-.Open.conne
5f40 63 74 69 6f 6e 20 74 6f 20 73 65 72 76 65 72 20 61 74 20 3c 68 6f 73 74 6e 61 6d 65 2c 20 70 6f ction.to.server.at.<hostname,.po
5f60 72 74 3e 20 61 6e 64 0a 20 2a 20 20 20 20 20 72 65 74 75 72 6e 20 61 20 73 6f 63 6b 65 74 20 64 rt>.and..*.....return.a.socket.d
5f80 65 73 63 72 69 70 74 6f 72 20 72 65 61 64 79 20 66 6f 72 20 72 65 61 64 69 6e 67 20 61 6e 64 20 escriptor.ready.for.reading.and.
5fa0 77 72 69 74 69 6e 67 2e 20 54 68 69 73 0a 20 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 69 73 writing..This..*.....function.is
5fc0 20 72 65 65 6e 74 72 61 6e 74 20 61 6e 64 20 70 72 6f 74 6f 63 6f 6c 2d 69 6e 64 65 70 65 6e 64 .reentrant.and.protocol-independ
5fe0 65 6e 74 2e 0a 20 2a 0a 20 2a 20 20 20 20 20 4f 6e 20 65 72 72 6f 72 2c 20 72 65 74 75 72 6e 73 ent...*..*.....On.error,.returns
6000 3a 20 0a 20 2a 20 20 20 20 20 20 20 2d 32 20 66 6f 72 20 67 65 74 61 64 64 72 69 6e 66 6f 20 65 :...*.......-2.for.getaddrinfo.e
6020 72 72 6f 72 0a 20 2a 20 20 20 20 20 20 20 2d 31 20 77 69 74 68 20 65 72 72 6e 6f 20 73 65 74 20 rror..*.......-1.with.errno.set.
6040 66 6f 72 20 6f 74 68 65 72 20 65 72 72 6f 72 73 2e 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 for.other.errors...*/./*.$begin.
6060 6f 70 65 6e 5f 63 6c 69 65 6e 74 66 64 20 2a 2f 0a 69 6e 74 20 6f 70 65 6e 5f 63 6c 69 65 6e 74 open_clientfd.*/.int.open_client
6080 66 64 28 63 68 61 72 20 2a 68 6f 73 74 6e 61 6d 65 2c 20 63 68 61 72 20 2a 70 6f 72 74 29 20 7b fd(char.*hostname,.char.*port).{
60a0 0a 20 20 20 20 69 6e 74 20 63 6c 69 65 6e 74 66 64 2c 20 72 63 3b 0a 20 20 20 20 73 74 72 75 63 .....int.clientfd,.rc;.....struc
60c0 74 20 61 64 64 72 69 6e 66 6f 20 68 69 6e 74 73 2c 20 2a 6c 69 73 74 70 2c 20 2a 70 3b 0a 0a 20 t.addrinfo.hints,.*listp,.*p;...
60e0 20 20 20 2f 2a 20 47 65 74 20 61 20 6c 69 73 74 20 6f 66 20 70 6f 74 65 6e 74 69 61 6c 20 73 65 .../*.Get.a.list.of.potential.se
6100 72 76 65 72 20 61 64 64 72 65 73 73 65 73 20 2a 2f 0a 20 20 20 20 6d 65 6d 73 65 74 28 26 68 69 rver.addresses.*/.....memset(&hi
6120 6e 74 73 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 74 72 75 63 74 20 61 64 64 72 69 6e 66 6f 29 29 nts,.0,.sizeof(struct.addrinfo))
6140 3b 0a 20 20 20 20 68 69 6e 74 73 2e 61 69 5f 73 6f 63 6b 74 79 70 65 20 3d 20 53 4f 43 4b 5f 53 ;.....hints.ai_socktype.=.SOCK_S
6160 54 52 45 41 4d 3b 20 20 2f 2a 20 4f 70 65 6e 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a TREAM;../*.Open.a.connection.*/.
6180 20 20 20 20 68 69 6e 74 73 2e 61 69 5f 66 6c 61 67 73 20 3d 20 41 49 5f 4e 55 4d 45 52 49 43 53 ....hints.ai_flags.=.AI_NUMERICS
61a0 45 52 56 3b 20 20 2f 2a 20 2e 2e 2e 20 75 73 69 6e 67 20 61 20 6e 75 6d 65 72 69 63 20 70 6f 72 ERV;../*.....using.a.numeric.por
61c0 74 20 61 72 67 2e 20 2a 2f 0a 20 20 20 20 68 69 6e 74 73 2e 61 69 5f 66 6c 61 67 73 20 7c 3d 20 t.arg..*/.....hints.ai_flags.|=.
61e0 41 49 5f 41 44 44 52 43 4f 4e 46 49 47 3b 20 20 2f 2a 20 52 65 63 6f 6d 6d 65 6e 64 65 64 20 66 AI_ADDRCONFIG;../*.Recommended.f
6200 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 or.connections.*/.....if.((rc.=.
6220 67 65 74 61 64 64 72 69 6e 66 6f 28 68 6f 73 74 6e 61 6d 65 2c 20 70 6f 72 74 2c 20 26 68 69 6e getaddrinfo(hostname,.port,.&hin
6240 74 73 2c 20 26 6c 69 73 74 70 29 29 20 21 3d 20 30 29 20 7b 0a 20 20 20 20 20 20 20 20 66 70 72 ts,.&listp)).!=.0).{.........fpr
6260 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 67 65 74 61 64 64 72 69 6e 66 6f 20 66 61 69 6c 65 64 intf(stderr,."getaddrinfo.failed
6280 20 28 25 73 3a 25 73 29 3a 20 25 73 5c 6e 22 2c 20 68 6f 73 74 6e 61 6d 65 2c 20 70 6f 72 74 2c .(%s:%s):.%s\n",.hostname,.port,
62a0 20 67 61 69 5f 73 74 72 65 72 72 6f 72 28 72 63 29 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 .gai_strerror(rc));.........retu
62c0 72 6e 20 2d 32 3b 0a 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 2f 2a 20 57 61 6c 6b 20 74 68 65 20 rn.-2;.....}......../*.Walk.the.
62e0 6c 69 73 74 20 66 6f 72 20 6f 6e 65 20 74 68 61 74 20 77 65 20 63 61 6e 20 73 75 63 63 65 73 73 list.for.one.that.we.can.success
6300 66 75 6c 6c 79 20 63 6f 6e 6e 65 63 74 20 74 6f 20 2a 2f 0a 20 20 20 20 66 6f 72 20 28 70 20 3d fully.connect.to.*/.....for.(p.=
6320 20 6c 69 73 74 70 3b 20 70 3b 20 70 20 3d 20 70 2d 3e 61 69 5f 6e 65 78 74 29 20 7b 0a 20 20 20 .listp;.p;.p.=.p->ai_next).{....
6340 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 73 6f 63 6b 65 74 20 64 65 73 63 72 69 70 74 ...../*.Create.a.socket.descript
6360 6f 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6c 69 65 6e 74 66 64 20 3d 20 73 6f or.*/.........if.((clientfd.=.so
6380 63 6b 65 74 28 70 2d 3e 61 69 5f 66 61 6d 69 6c 79 2c 20 70 2d 3e 61 69 5f 73 6f 63 6b 74 79 70 cket(p->ai_family,.p->ai_socktyp
63a0 65 2c 20 70 2d 3e 61 69 5f 70 72 6f 74 6f 63 6f 6c 29 29 20 3c 20 30 29 20 0a 20 20 20 20 20 20 e,.p->ai_protocol)).<.0)........
63c0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 20 2f 2a 20 53 6f 63 6b 65 74 20 66 61 69 6c 65 64 ......continue;./*.Socket.failed
63e0 2c 20 74 72 79 20 74 68 65 20 6e 65 78 74 20 2a 2f 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 6f ,.try.the.next.*/........../*.Co
6400 6e 6e 65 63 74 20 74 6f 20 74 68 65 20 73 65 72 76 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 nnect.to.the.server.*/.........i
6420 66 20 28 63 6f 6e 6e 65 63 74 28 63 6c 69 65 6e 74 66 64 2c 20 70 2d 3e 61 69 5f 61 64 64 72 2c f.(connect(clientfd,.p->ai_addr,
6440 20 70 2d 3e 61 69 5f 61 64 64 72 6c 65 6e 29 20 21 3d 20 2d 31 29 20 0a 20 20 20 20 20 20 20 20 .p->ai_addrlen).!=.-1)..........
6460 20 20 20 20 62 72 65 61 6b 3b 20 2f 2a 20 53 75 63 63 65 73 73 20 2a 2f 0a 20 20 20 20 20 20 20 ....break;./*.Success.*/........
6480 20 69 66 20 28 63 6c 6f 73 65 28 63 6c 69 65 6e 74 66 64 29 20 3c 20 30 29 20 7b 20 2f 2a 20 43 .if.(close(clientfd).<.0).{./*.C
64a0 6f 6e 6e 65 63 74 20 66 61 69 6c 65 64 2c 20 74 72 79 20 61 6e 6f 74 68 65 72 20 2a 2f 20 20 2f onnect.failed,.try.another.*/../
64c0 2f 6c 69 6e 65 3a 6e 65 74 70 3a 6f 70 65 6e 63 6c 69 65 6e 74 66 64 3a 63 6c 6f 73 65 66 64 0a /line:netp:openclientfd:closefd.
64e0 20 20 20 20 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6f 70 65 ............fprintf(stderr,."ope
6500 6e 5f 63 6c 69 65 6e 74 66 64 3a 20 63 6c 6f 73 65 20 66 61 69 6c 65 64 3a 20 25 73 5c 6e 22 2c n_clientfd:.close.failed:.%s\n",
6520 20 73 74 72 65 72 72 6f 72 28 65 72 72 6e 6f 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 .strerror(errno));.............r
6540 65 74 75 72 6e 20 2d 31 3b 0a 20 20 20 20 20 20 20 20 7d 20 0a 20 20 20 20 7d 20 0a 0a 20 20 20 eturn.-1;.........}......}......
6560 20 2f 2a 20 43 6c 65 61 6e 20 75 70 20 2a 2f 0a 20 20 20 20 66 72 65 65 61 64 64 72 69 6e 66 6f ./*.Clean.up.*/.....freeaddrinfo
6580 28 6c 69 73 74 70 29 3b 0a 20 20 20 20 69 66 20 28 21 70 29 20 2f 2a 20 41 6c 6c 20 63 6f 6e 6e (listp);.....if.(!p)./*.All.conn
65a0 65 63 74 73 20 66 61 69 6c 65 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 ects.failed.*/.........return.-1
65c0 3b 0a 20 20 20 20 65 6c 73 65 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 63 6f 6e 6e 65 63 ;.....else..../*.The.last.connec
65e0 74 20 73 75 63 63 65 65 64 65 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6c t.succeeded.*/.........return.cl
6600 69 65 6e 74 66 64 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 6f 70 65 6e 5f 63 6c 69 65 6e 74 66 64 20 ientfd;.}./*.$end.open_clientfd.
6620 2a 2f 0a 0a 2f 2a 20 20 0a 20 2a 20 6f 70 65 6e 5f 6c 69 73 74 65 6e 66 64 20 2d 20 4f 70 65 6e */../*....*.open_listenfd.-.Open
6640 20 61 6e 64 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 65 6e 69 6e 67 20 73 6f 63 6b 65 74 20 6f .and.return.a.listening.socket.o
6660 6e 20 70 6f 72 74 2e 20 54 68 69 73 0a 20 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 n.port..This..*.....function.is.
6680 72 65 65 6e 74 72 61 6e 74 20 61 6e 64 20 70 72 6f 74 6f 63 6f 6c 2d 69 6e 64 65 70 65 6e 64 65 reentrant.and.protocol-independe
66a0 6e 74 2e 0a 20 2a 0a 20 2a 20 20 20 20 20 4f 6e 20 65 72 72 6f 72 2c 20 72 65 74 75 72 6e 73 3a nt...*..*.....On.error,.returns:
66c0 20 0a 20 2a 20 20 20 20 20 20 20 2d 32 20 66 6f 72 20 67 65 74 61 64 64 72 69 6e 66 6f 20 65 72 ...*.......-2.for.getaddrinfo.er
66e0 72 6f 72 0a 20 2a 20 20 20 20 20 20 20 2d 31 20 77 69 74 68 20 65 72 72 6e 6f 20 73 65 74 20 66 ror..*.......-1.with.errno.set.f
6700 6f 72 20 6f 74 68 65 72 20 65 72 72 6f 72 73 2e 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 6f or.other.errors...*/./*.$begin.o
6720 70 65 6e 5f 6c 69 73 74 65 6e 66 64 20 2a 2f 0a 69 6e 74 20 6f 70 65 6e 5f 6c 69 73 74 65 6e 66 pen_listenfd.*/.int.open_listenf
6740 64 28 63 68 61 72 20 2a 70 6f 72 74 29 20 0a 7b 0a 20 20 20 20 73 74 72 75 63 74 20 61 64 64 72 d(char.*port)..{.....struct.addr
6760 69 6e 66 6f 20 68 69 6e 74 73 2c 20 2a 6c 69 73 74 70 2c 20 2a 70 3b 0a 20 20 20 20 69 6e 74 20 info.hints,.*listp,.*p;.....int.
6780 6c 69 73 74 65 6e 66 64 2c 20 72 63 2c 20 6f 70 74 76 61 6c 3d 31 3b 0a 0a 20 20 20 20 2f 2a 20 listenfd,.rc,.optval=1;....../*.
67a0 47 65 74 20 61 20 6c 69 73 74 20 6f 66 20 70 6f 74 65 6e 74 69 61 6c 20 73 65 72 76 65 72 20 61 Get.a.list.of.potential.server.a
67c0 64 64 72 65 73 73 65 73 20 2a 2f 0a 20 20 20 20 6d 65 6d 73 65 74 28 26 68 69 6e 74 73 2c 20 30 ddresses.*/.....memset(&hints,.0
67e0 2c 20 73 69 7a 65 6f 66 28 73 74 72 75 63 74 20 61 64 64 72 69 6e 66 6f 29 29 3b 0a 20 20 20 20 ,.sizeof(struct.addrinfo));.....
6800 68 69 6e 74 73 2e 61 69 5f 73 6f 63 6b 74 79 70 65 20 3d 20 53 4f 43 4b 5f 53 54 52 45 41 4d 3b hints.ai_socktype.=.SOCK_STREAM;
6820 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65 70 74 20 63 6f 6e 6e 65 63 74 69 6f ............./*.Accept.connectio
6840 6e 73 20 2a 2f 0a 20 20 20 20 68 69 6e 74 73 2e 61 69 5f 66 6c 61 67 73 20 3d 20 41 49 5f 50 41 ns.*/.....hints.ai_flags.=.AI_PA
6860 53 53 49 56 45 20 7c 20 41 49 5f 41 44 44 52 43 4f 4e 46 49 47 3b 20 2f 2a 20 2e 2e 2e 20 6f 6e SSIVE.|.AI_ADDRCONFIG;./*.....on
6880 20 61 6e 79 20 49 50 20 61 64 64 72 65 73 73 20 2a 2f 0a 20 20 20 20 68 69 6e 74 73 2e 61 69 5f .any.IP.address.*/.....hints.ai_
68a0 66 6c 61 67 73 20 7c 3d 20 41 49 5f 4e 55 4d 45 52 49 43 53 45 52 56 3b 20 20 20 20 20 20 20 20 flags.|=.AI_NUMERICSERV;........
68c0 20 20 20 20 2f 2a 20 2e 2e 2e 20 75 73 69 6e 67 20 70 6f 72 74 20 6e 75 6d 62 65 72 20 2a 2f 0a ..../*.....using.port.number.*/.
68e0 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 67 65 74 61 64 64 72 69 6e 66 6f 28 4e 55 4c 4c 2c 20 ....if.((rc.=.getaddrinfo(NULL,.
6900 70 6f 72 74 2c 20 26 68 69 6e 74 73 2c 20 26 6c 69 73 74 70 29 29 20 21 3d 20 30 29 20 7b 0a 20 port,.&hints,.&listp)).!=.0).{..
6920 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 67 65 74 61 64 64 72 69 .......fprintf(stderr,."getaddri
6940 6e 66 6f 20 66 61 69 6c 65 64 20 28 70 6f 72 74 20 25 73 29 3a 20 25 73 5c 6e 22 2c 20 70 6f 72 nfo.failed.(port.%s):.%s\n",.por
6960 74 2c 20 67 61 69 5f 73 74 72 65 72 72 6f 72 28 72 63 29 29 3b 0a 20 20 20 20 20 20 20 20 72 65 t,.gai_strerror(rc));.........re
6980 74 75 72 6e 20 2d 32 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 57 61 6c 6b 20 74 68 65 20 turn.-2;.....}....../*.Walk.the.
69a0 6c 69 73 74 20 66 6f 72 20 6f 6e 65 20 74 68 61 74 20 77 65 20 63 61 6e 20 62 69 6e 64 20 74 6f list.for.one.that.we.can.bind.to
69c0 20 2a 2f 0a 20 20 20 20 66 6f 72 20 28 70 20 3d 20 6c 69 73 74 70 3b 20 70 3b 20 70 20 3d 20 70 .*/.....for.(p.=.listp;.p;.p.=.p
69e0 2d 3e 61 69 5f 6e 65 78 74 29 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61 ->ai_next).{........./*.Create.a
6a00 20 73 6f 63 6b 65 74 20 64 65 73 63 72 69 70 74 6f 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 .socket.descriptor.*/.........if
6a20 20 28 28 6c 69 73 74 65 6e 66 64 20 3d 20 73 6f 63 6b 65 74 28 70 2d 3e 61 69 5f 66 61 6d 69 6c .((listenfd.=.socket(p->ai_famil
6a40 79 2c 20 70 2d 3e 61 69 5f 73 6f 63 6b 74 79 70 65 2c 20 70 2d 3e 61 69 5f 70 72 6f 74 6f 63 6f y,.p->ai_socktype,.p->ai_protoco
6a60 6c 29 29 20 3c 20 30 29 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 20 l)).<.0)..............continue;.
6a80 20 2f 2a 20 53 6f 63 6b 65 74 20 66 61 69 6c 65 64 2c 20 74 72 79 20 74 68 65 20 6e 65 78 74 20 ./*.Socket.failed,.try.the.next.
6aa0 2a 2f 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 45 6c 69 6d 69 6e 61 74 65 73 20 22 41 64 64 72 65 */........../*.Eliminates."Addre
6ac0 73 73 20 61 6c 72 65 61 64 79 20 69 6e 20 75 73 65 22 20 65 72 72 6f 72 20 66 72 6f 6d 20 62 69 ss.already.in.use".error.from.bi
6ae0 6e 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 65 74 73 6f 63 6b 6f 70 74 28 6c 69 73 74 65 6e 66 nd.*/.........setsockopt(listenf
6b00 64 2c 20 53 4f 4c 5f 53 4f 43 4b 45 54 2c 20 53 4f 5f 52 45 55 53 45 41 44 44 52 2c 20 20 20 20 d,.SOL_SOCKET,.SO_REUSEADDR,....
6b20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 63 73 61 70 70 3a 73 65 74 73 6f 63 6b 6f 70 74 0a 20 20 20 //line:netp:csapp:setsockopt....
6b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 29 26 6f ................(const.void.*)&o
6b60 70 74 76 61 6c 20 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0a 0a 20 20 20 20 20 20 20 20 2f ptval.,.sizeof(int));........../
6b80 2a 20 42 69 6e 64 20 74 68 65 20 64 65 73 63 72 69 70 74 6f 72 20 74 6f 20 74 68 65 20 61 64 64 *.Bind.the.descriptor.to.the.add
6ba0 72 65 73 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 69 6e 64 28 6c 69 73 74 65 6e 66 ress.*/.........if.(bind(listenf
6bc0 64 2c 20 70 2d 3e 61 69 5f 61 64 64 72 2c 20 70 2d 3e 61 69 5f 61 64 64 72 6c 65 6e 29 20 3d 3d d,.p->ai_addr,.p->ai_addrlen).==
6be0 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 20 2f 2a 20 53 75 63 63 65 73 .0).............break;./*.Succes
6c00 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 20 28 63 6c 6f 73 65 28 6c 69 73 74 65 6e 66 64 29 s.*/.........if.(close(listenfd)
6c20 20 3c 20 30 29 20 7b 20 2f 2a 20 42 69 6e 64 20 66 61 69 6c 65 64 2c 20 74 72 79 20 74 68 65 20 .<.0).{./*.Bind.failed,.try.the.
6c40 6e 65 78 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 next.*/.............fprintf(stde
6c60 72 72 2c 20 22 6f 70 65 6e 5f 6c 69 73 74 65 6e 66 64 20 63 6c 6f 73 65 20 66 61 69 6c 65 64 3a rr,."open_listenfd.close.failed:
6c80 20 25 73 5c 6e 22 2c 20 73 74 72 65 72 72 6f 72 28 65 72 72 6e 6f 29 29 3b 0a 20 20 20 20 20 20 .%s\n",.strerror(errno));.......
6ca0 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d ......return.-1;.........}.....}
6cc0 0a 0a 0a 20 20 20 20 2f 2a 20 43 6c 65 61 6e 20 75 70 20 2a 2f 0a 20 20 20 20 66 72 65 65 61 64 ......./*.Clean.up.*/.....freead
6ce0 64 72 69 6e 66 6f 28 6c 69 73 74 70 29 3b 0a 20 20 20 20 69 66 20 28 21 70 29 20 2f 2a 20 4e 6f drinfo(listp);.....if.(!p)./*.No
6d00 20 61 64 64 72 65 73 73 20 77 6f 72 6b 65 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 .address.worked.*/.........retur
6d20 6e 20 2d 31 3b 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 69 74 20 61 20 6c 69 73 74 65 6e 69 6e n.-1;....../*.Make.it.a.listenin
6d40 67 20 73 6f 63 6b 65 74 20 72 65 61 64 79 20 74 6f 20 61 63 63 65 70 74 20 63 6f 6e 6e 65 63 74 g.socket.ready.to.accept.connect
6d60 69 6f 6e 20 72 65 71 75 65 73 74 73 20 2a 2f 0a 20 20 20 20 69 66 20 28 6c 69 73 74 65 6e 28 6c ion.requests.*/.....if.(listen(l
6d80 69 73 74 65 6e 66 64 2c 20 4c 49 53 54 45 4e 51 29 20 3c 20 30 29 20 7b 0a 20 20 20 20 20 20 20 istenfd,.LISTENQ).<.0).{........
6da0 20 63 6c 6f 73 65 28 6c 69 73 74 65 6e 66 64 29 3b 0a 09 72 65 74 75 72 6e 20 2d 31 3b 0a 20 20 .close(listenfd);..return.-1;...
6dc0 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 6c 69 73 74 65 6e 66 64 3b 0a 7d 0a 2f 2a 20 24 65 ..}.....return.listenfd;.}./*.$e
6de0 6e 64 20 6f 70 65 6e 5f 6c 69 73 74 65 6e 66 64 20 2a 2f 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a nd.open_listenfd.*/../**********
6e00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ********************************
6e20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 57 72 61 70 70 65 72 73 20 66 6f 72 20 72 65 65 6e 74 **********..*.Wrappers.for.reent
6e40 72 61 6e 74 20 70 72 6f 74 6f 63 6f 6c 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 68 65 6c 70 65 72 rant.protocol-independent.helper
6e60 73 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a s..*****************************
6e80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 69 6e 74 20 4f 70 65 ***********************/.int.Ope
6ea0 6e 5f 63 6c 69 65 6e 74 66 64 28 63 68 61 72 20 2a 68 6f 73 74 6e 61 6d 65 2c 20 63 68 61 72 20 n_clientfd(char.*hostname,.char.
6ec0 2a 70 6f 72 74 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 *port)..{.....int.rc;......if.((
6ee0 72 63 20 3d 20 6f 70 65 6e 5f 63 6c 69 65 6e 74 66 64 28 68 6f 73 74 6e 61 6d 65 2c 20 70 6f 72 rc.=.open_clientfd(hostname,.por
6f00 74 29 29 20 3c 20 30 29 20 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 4f 70 65 6e 5f 63 6c 69 65 t)).<.0)...unix_error("Open_clie
6f20 6e 74 66 64 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a ntfd.error");.....return.rc;.}..
6f40 69 6e 74 20 4f 70 65 6e 5f 6c 69 73 74 65 6e 66 64 28 63 68 61 72 20 2a 70 6f 72 74 29 20 0a 7b int.Open_listenfd(char.*port)..{
6f60 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 6f 70 65 6e .....int.rc;......if.((rc.=.open
6f80 5f 6c 69 73 74 65 6e 66 64 28 70 6f 72 74 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f _listenfd(port)).<.0)..unix_erro
6fa0 72 28 22 4f 70 65 6e 5f 6c 69 73 74 65 6e 66 64 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 r("Open_listenfd.error");.....re
6fc0 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 20 24 65 6e 64 20 63 73 61 70 70 2e 63 20 2a 2f 0a 0a turn.rc;.}../*.$end.csapp.c.*/..
6fe0 0a 0a 0a 00 00 00 00 00 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 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 63 73 61 70 70 2e 68 00 00 00 00 00 00 00 00 proxylab-handout/csapp.h........
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 30 30 30 30 36 34 34 00 30 30 30 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000644.0006626.0000144.0000
7080 30 30 31 34 37 33 35 00 31 32 34 33 31 32 35 34 37 33 36 00 30 31 33 36 36 33 00 20 30 00 00 00 0014735.12431254736.013663..0...
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 75 73 74 61 72 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
7120 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
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 2f 2a 0a 20 2a 20 63 73 61 70 70 2e 68 20 2d 20 70 72 6f 74 6f 74 79 70 65 73 20 61 6e 64 20 64 /*..*.csapp.h.-.prototypes.and.d
7220 65 66 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 74 68 65 20 43 53 3a 41 50 50 33 65 20 62 6f 6f 6b efinitions.for.the.CS:APP3e.book
7240 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 63 73 61 70 70 2e 68 20 2a 2f 0a 23 69 66 6e 64 65 ..*/./*.$begin.csapp.h.*/.#ifnde
7260 66 20 5f 5f 43 53 41 50 50 5f 48 5f 5f 0a 23 64 65 66 69 6e 65 20 5f 5f 43 53 41 50 50 5f 48 5f f.__CSAPP_H__.#define.__CSAPP_H_
7280 5f 0a 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c _..#include.<stdio.h>.#include.<
72a0 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 61 72 67 2e 68 3e 0a 23 69 stdlib.h>.#include.<stdarg.h>.#i
72c0 6e 63 6c 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 nclude.<unistd.h>.#include.<stri
72e0 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 69 6e 63 6c 75 64 ng.h>.#include.<ctype.h>.#includ
7300 65 20 3c 73 65 74 6a 6d 70 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 69 67 6e 61 6c 2e 68 3e e.<setjmp.h>.#include.<signal.h>
7320 0a 23 69 6e 63 6c 75 64 65 20 3c 64 69 72 65 6e 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 .#include.<dirent.h>.#include.<s
7340 79 73 2f 74 69 6d 65 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74 79 70 65 73 2e 68 ys/time.h>.#include.<sys/types.h
7360 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 77 61 69 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 >.#include.<sys/wait.h>.#include
7380 20 3c 73 79 73 2f 73 74 61 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 66 63 6e 74 6c 2e 68 3e .<sys/stat.h>.#include.<fcntl.h>
73a0 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 6d 6d 61 6e 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 .#include.<sys/mman.h>.#include.
73c0 3c 65 72 72 6e 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 6d 61 74 68 2e 68 3e 0a 23 69 6e 63 <errno.h>.#include.<math.h>.#inc
73e0 6c 75 64 65 20 3c 70 74 68 72 65 61 64 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 65 6d 61 70 lude.<pthread.h>.#include.<semap
7400 68 6f 72 65 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 73 6f 63 6b 65 74 2e 68 3e 0a hore.h>.#include.<sys/socket.h>.
7420 23 69 6e 63 6c 75 64 65 20 3c 6e 65 74 64 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 6e 65 74 #include.<netdb.h>.#include.<net
7440 69 6e 65 74 2f 69 6e 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 72 70 61 2f 69 6e 65 74 2e 68 inet/in.h>.#include.<arpa/inet.h
7460 3e 0a 0a 2f 2a 20 44 65 66 61 75 6c 74 20 66 69 6c 65 20 70 65 72 6d 69 73 73 69 6f 6e 73 20 61 >../*.Default.file.permissions.a
7480 72 65 20 44 45 46 5f 4d 4f 44 45 20 26 20 7e 44 45 46 5f 55 4d 41 53 4b 20 2a 2f 0a 2f 2a 20 24 re.DEF_MODE.&.~DEF_UMASK.*/./*.$
74a0 62 65 67 69 6e 20 63 72 65 61 74 65 6d 61 73 6b 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 45 46 begin.createmasks.*/.#define.DEF
74c0 5f 4d 4f 44 45 20 20 20 53 5f 49 52 55 53 52 7c 53 5f 49 57 55 53 52 7c 53 5f 49 52 47 52 50 7c _MODE...S_IRUSR|S_IWUSR|S_IRGRP|
74e0 53 5f 49 57 47 52 50 7c 53 5f 49 52 4f 54 48 7c 53 5f 49 57 4f 54 48 0a 23 64 65 66 69 6e 65 20 S_IWGRP|S_IROTH|S_IWOTH.#define.
7500 44 45 46 5f 55 4d 41 53 4b 20 20 53 5f 49 57 47 52 50 7c 53 5f 49 57 4f 54 48 0a 2f 2a 20 24 65 DEF_UMASK..S_IWGRP|S_IWOTH./*.$e
7520 6e 64 20 63 72 65 61 74 65 6d 61 73 6b 73 20 2a 2f 0a 0a 2f 2a 20 53 69 6d 70 6c 69 66 69 65 73 nd.createmasks.*/../*.Simplifies
7540 20 63 61 6c 6c 73 20 74 6f 20 62 69 6e 64 28 29 2c 20 63 6f 6e 6e 65 63 74 28 29 2c 20 61 6e 64 .calls.to.bind(),.connect(),.and
7560 20 61 63 63 65 70 74 28 29 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 73 6f 63 6b 61 64 64 72 64 .accept().*/./*.$begin.sockaddrd
7580 65 66 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 73 6f 63 6b 61 64 64 72 20 53 41 ef.*/.typedef.struct.sockaddr.SA
75a0 3b 0a 2f 2a 20 24 65 6e 64 20 73 6f 63 6b 61 64 64 72 64 65 66 20 2a 2f 0a 0a 2f 2a 20 50 65 72 ;./*.$end.sockaddrdef.*/../*.Per
75c0 73 69 73 74 65 6e 74 20 73 74 61 74 65 20 66 6f 72 20 74 68 65 20 72 6f 62 75 73 74 20 49 2f 4f sistent.state.for.the.robust.I/O
75e0 20 28 52 69 6f 29 20 70 61 63 6b 61 67 65 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 72 69 6f 5f .(Rio).package.*/./*.$begin.rio_
7600 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 52 49 4f 5f 42 55 46 53 49 5a 45 20 38 31 39 32 0a 74 79 t.*/.#define.RIO_BUFSIZE.8192.ty
7620 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 69 6e 74 20 72 69 6f 5f 66 64 3b 20 20 pedef.struct.{.....int.rio_fd;..
7640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 73 63 72 69 70 74 6f 72 20 66 6f 72 20 ............../*.Descriptor.for.
7660 74 68 69 73 20 69 6e 74 65 72 6e 61 6c 20 62 75 66 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 69 6f this.internal.buf.*/.....int.rio
7680 5f 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 6e 72 65 61 64 20 62 79 _cnt;.............../*.Unread.by
76a0 74 65 73 20 69 6e 20 69 6e 74 65 72 6e 61 6c 20 62 75 66 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 tes.in.internal.buf.*/.....char.
76c0 2a 72 69 6f 5f 62 75 66 70 74 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 75 6e *rio_bufptr;........../*.Next.un
76e0 72 65 61 64 20 62 79 74 65 20 69 6e 20 69 6e 74 65 72 6e 61 6c 20 62 75 66 20 2a 2f 0a 20 20 20 read.byte.in.internal.buf.*/....
7700 20 63 68 61 72 20 72 69 6f 5f 62 75 66 5b 52 49 4f 5f 42 55 46 53 49 5a 45 5d 3b 20 2f 2a 20 49 .char.rio_buf[RIO_BUFSIZE];./*.I
7720 6e 74 65 72 6e 61 6c 20 62 75 66 66 65 72 20 2a 2f 0a 7d 20 72 69 6f 5f 74 3b 0a 2f 2a 20 24 65 nternal.buffer.*/.}.rio_t;./*.$e
7740 6e 64 20 72 69 6f 5f 74 20 2a 2f 0a 0a 2f 2a 20 45 78 74 65 72 6e 61 6c 20 76 61 72 69 61 62 6c nd.rio_t.*/../*.External.variabl
7760 65 73 20 2a 2f 0a 65 78 74 65 72 6e 20 69 6e 74 20 68 5f 65 72 72 6e 6f 3b 20 20 20 20 2f 2a 20 es.*/.extern.int.h_errno;..../*.
7780 44 65 66 69 6e 65 64 20 62 79 20 42 49 4e 44 20 66 6f 72 20 44 4e 53 20 65 72 72 6f 72 73 20 2a Defined.by.BIND.for.DNS.errors.*
77a0 2f 20 0a 65 78 74 65 72 6e 20 63 68 61 72 20 2a 2a 65 6e 76 69 72 6f 6e 3b 20 2f 2a 20 44 65 66 /..extern.char.**environ;./*.Def
77c0 69 6e 65 64 20 62 79 20 6c 69 62 63 20 2a 2f 0a 0a 2f 2a 20 4d 69 73 63 20 63 6f 6e 73 74 61 6e ined.by.libc.*/../*.Misc.constan
77e0 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 09 4d 41 58 4c 49 4e 45 09 20 38 31 39 32 20 20 2f 2a 20 ts.*/.#define.MAXLINE..8192../*.
7800 4d 61 78 20 74 65 78 74 20 6c 69 6e 65 20 6c 65 6e 67 74 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20 Max.text.line.length.*/.#define.
7820 4d 41 58 42 55 46 20 20 20 38 31 39 32 20 20 2f 2a 20 4d 61 78 20 49 2f 4f 20 62 75 66 66 65 72 MAXBUF...8192../*.Max.I/O.buffer
7840 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 49 53 54 45 4e 51 20 20 31 30 32 34 20 20 .size.*/.#define.LISTENQ..1024..
7860 2f 2a 20 53 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 6c 69 73 74 65 6e 28 29 20 2a /*.Second.argument.to.listen().*
7880 2f 0a 0a 2f 2a 20 4f 75 72 20 6f 77 6e 20 65 72 72 6f 72 2d 68 61 6e 64 6c 69 6e 67 20 66 75 6e /../*.Our.own.error-handling.fun
78a0 63 74 69 6f 6e 73 20 2a 2f 0a 76 6f 69 64 20 75 6e 69 78 5f 65 72 72 6f 72 28 63 68 61 72 20 2a ctions.*/.void.unix_error(char.*
78c0 6d 73 67 29 3b 0a 76 6f 69 64 20 70 6f 73 69 78 5f 65 72 72 6f 72 28 69 6e 74 20 63 6f 64 65 2c msg);.void.posix_error(int.code,
78e0 20 63 68 61 72 20 2a 6d 73 67 29 3b 0a 76 6f 69 64 20 64 6e 73 5f 65 72 72 6f 72 28 63 68 61 72 .char.*msg);.void.dns_error(char
7900 20 2a 6d 73 67 29 3b 0a 76 6f 69 64 20 67 61 69 5f 65 72 72 6f 72 28 69 6e 74 20 63 6f 64 65 2c .*msg);.void.gai_error(int.code,
7920 20 63 68 61 72 20 2a 6d 73 67 29 3b 0a 76 6f 69 64 20 61 70 70 5f 65 72 72 6f 72 28 63 68 61 72 .char.*msg);.void.app_error(char
7940 20 2a 6d 73 67 29 3b 0a 0a 2f 2a 20 50 72 6f 63 65 73 73 20 63 6f 6e 74 72 6f 6c 20 77 72 61 70 .*msg);../*.Process.control.wrap
7960 70 65 72 73 20 2a 2f 0a 70 69 64 5f 74 20 46 6f 72 6b 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 45 pers.*/.pid_t.Fork(void);.void.E
7980 78 65 63 76 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 63 68 61 72 xecve(const.char.*filename,.char
79a0 20 2a 63 6f 6e 73 74 20 61 72 67 76 5b 5d 2c 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e 76 70 .*const.argv[],.char.*const.envp
79c0 5b 5d 29 3b 0a 70 69 64 5f 74 20 57 61 69 74 28 69 6e 74 20 2a 73 74 61 74 75 73 29 3b 0a 70 69 []);.pid_t.Wait(int.*status);.pi
79e0 64 5f 74 20 57 61 69 74 70 69 64 28 70 69 64 5f 74 20 70 69 64 2c 20 69 6e 74 20 2a 69 70 74 72 d_t.Waitpid(pid_t.pid,.int.*iptr
7a00 2c 20 69 6e 74 20 6f 70 74 69 6f 6e 73 29 3b 0a 76 6f 69 64 20 4b 69 6c 6c 28 70 69 64 5f 74 20 ,.int.options);.void.Kill(pid_t.
7a20 70 69 64 2c 20 69 6e 74 20 73 69 67 6e 75 6d 29 3b 0a 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 53 pid,.int.signum);.unsigned.int.S
7a40 6c 65 65 70 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 73 65 63 73 29 3b 0a 76 6f 69 64 20 50 61 leep(unsigned.int.secs);.void.Pa
7a60 75 73 65 28 76 6f 69 64 29 3b 0a 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 41 6c 61 72 6d 28 75 6e use(void);.unsigned.int.Alarm(un
7a80 73 69 67 6e 65 64 20 69 6e 74 20 73 65 63 6f 6e 64 73 29 3b 0a 76 6f 69 64 20 53 65 74 70 67 69 signed.int.seconds);.void.Setpgi
7aa0 64 28 70 69 64 5f 74 20 70 69 64 2c 20 70 69 64 5f 74 20 70 67 69 64 29 3b 0a 70 69 64 5f 74 20 d(pid_t.pid,.pid_t.pgid);.pid_t.
7ac0 47 65 74 70 67 72 70 28 29 3b 0a 0a 2f 2a 20 53 69 67 6e 61 6c 20 77 72 61 70 70 65 72 73 20 2a Getpgrp();../*.Signal.wrappers.*
7ae0 2f 0a 74 79 70 65 64 65 66 20 76 6f 69 64 20 68 61 6e 64 6c 65 72 5f 74 28 69 6e 74 29 3b 0a 68 /.typedef.void.handler_t(int);.h
7b00 61 6e 64 6c 65 72 5f 74 20 2a 53 69 67 6e 61 6c 28 69 6e 74 20 73 69 67 6e 75 6d 2c 20 68 61 6e andler_t.*Signal(int.signum,.han
7b20 64 6c 65 72 5f 74 20 2a 68 61 6e 64 6c 65 72 29 3b 0a 76 6f 69 64 20 53 69 67 70 72 6f 63 6d 61 dler_t.*handler);.void.Sigprocma
7b40 73 6b 28 69 6e 74 20 68 6f 77 2c 20 63 6f 6e 73 74 20 73 69 67 73 65 74 5f 74 20 2a 73 65 74 2c sk(int.how,.const.sigset_t.*set,
7b60 20 73 69 67 73 65 74 5f 74 20 2a 6f 6c 64 73 65 74 29 3b 0a 76 6f 69 64 20 53 69 67 65 6d 70 74 .sigset_t.*oldset);.void.Sigempt
7b80 79 73 65 74 28 73 69 67 73 65 74 5f 74 20 2a 73 65 74 29 3b 0a 76 6f 69 64 20 53 69 67 66 69 6c yset(sigset_t.*set);.void.Sigfil
7ba0 6c 73 65 74 28 73 69 67 73 65 74 5f 74 20 2a 73 65 74 29 3b 0a 76 6f 69 64 20 53 69 67 61 64 64 lset(sigset_t.*set);.void.Sigadd
7bc0 73 65 74 28 73 69 67 73 65 74 5f 74 20 2a 73 65 74 2c 20 69 6e 74 20 73 69 67 6e 75 6d 29 3b 0a set(sigset_t.*set,.int.signum);.
7be0 76 6f 69 64 20 53 69 67 64 65 6c 73 65 74 28 73 69 67 73 65 74 5f 74 20 2a 73 65 74 2c 20 69 6e void.Sigdelset(sigset_t.*set,.in
7c00 74 20 73 69 67 6e 75 6d 29 3b 0a 69 6e 74 20 53 69 67 69 73 6d 65 6d 62 65 72 28 63 6f 6e 73 74 t.signum);.int.Sigismember(const
7c20 20 73 69 67 73 65 74 5f 74 20 2a 73 65 74 2c 20 69 6e 74 20 73 69 67 6e 75 6d 29 3b 0a 69 6e 74 .sigset_t.*set,.int.signum);.int
7c40 20 53 69 67 73 75 73 70 65 6e 64 28 63 6f 6e 73 74 20 73 69 67 73 65 74 5f 74 20 2a 73 65 74 29 .Sigsuspend(const.sigset_t.*set)
7c60 3b 0a 0a 2f 2a 20 53 69 6f 20 28 53 69 67 6e 61 6c 2d 73 61 66 65 20 49 2f 4f 29 20 72 6f 75 74 ;../*.Sio.(Signal-safe.I/O).rout
7c80 69 6e 65 73 20 2a 2f 0a 73 73 69 7a 65 5f 74 20 73 69 6f 5f 70 75 74 73 28 63 68 61 72 20 73 5b ines.*/.ssize_t.sio_puts(char.s[
7ca0 5d 29 3b 0a 73 73 69 7a 65 5f 74 20 73 69 6f 5f 70 75 74 6c 28 6c 6f 6e 67 20 76 29 3b 0a 76 6f ]);.ssize_t.sio_putl(long.v);.vo
7cc0 69 64 20 73 69 6f 5f 65 72 72 6f 72 28 63 68 61 72 20 73 5b 5d 29 3b 0a 0a 2f 2a 20 53 69 6f 20 id.sio_error(char.s[]);../*.Sio.
7ce0 77 72 61 70 70 65 72 73 20 2a 2f 0a 73 73 69 7a 65 5f 74 20 53 69 6f 5f 70 75 74 73 28 63 68 61 wrappers.*/.ssize_t.Sio_puts(cha
7d00 72 20 73 5b 5d 29 3b 0a 73 73 69 7a 65 5f 74 20 53 69 6f 5f 70 75 74 6c 28 6c 6f 6e 67 20 76 29 r.s[]);.ssize_t.Sio_putl(long.v)
7d20 3b 0a 76 6f 69 64 20 53 69 6f 5f 65 72 72 6f 72 28 63 68 61 72 20 73 5b 5d 29 3b 0a 0a 2f 2a 20 ;.void.Sio_error(char.s[]);../*.
7d40 55 6e 69 78 20 49 2f 4f 20 77 72 61 70 70 65 72 73 20 2a 2f 0a 69 6e 74 20 4f 70 65 6e 28 63 6f Unix.I/O.wrappers.*/.int.Open(co
7d60 6e 73 74 20 63 68 61 72 20 2a 70 61 74 68 6e 61 6d 65 2c 20 69 6e 74 20 66 6c 61 67 73 2c 20 6d nst.char.*pathname,.int.flags,.m
7d80 6f 64 65 5f 74 20 6d 6f 64 65 29 3b 0a 73 73 69 7a 65 5f 74 20 52 65 61 64 28 69 6e 74 20 66 64 ode_t.mode);.ssize_t.Read(int.fd
7da0 2c 20 76 6f 69 64 20 2a 62 75 66 2c 20 73 69 7a 65 5f 74 20 63 6f 75 6e 74 29 3b 0a 73 73 69 7a ,.void.*buf,.size_t.count);.ssiz
7dc0 65 5f 74 20 57 72 69 74 65 28 69 6e 74 20 66 64 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 62 75 e_t.Write(int.fd,.const.void.*bu
7de0 66 2c 20 73 69 7a 65 5f 74 20 63 6f 75 6e 74 29 3b 0a 6f 66 66 5f 74 20 4c 73 65 65 6b 28 69 6e f,.size_t.count);.off_t.Lseek(in
7e00 74 20 66 69 6c 64 65 73 2c 20 6f 66 66 5f 74 20 6f 66 66 73 65 74 2c 20 69 6e 74 20 77 68 65 6e t.fildes,.off_t.offset,.int.when
7e20 63 65 29 3b 0a 76 6f 69 64 20 43 6c 6f 73 65 28 69 6e 74 20 66 64 29 3b 0a 69 6e 74 20 53 65 6c ce);.void.Close(int.fd);.int.Sel
7e40 65 63 74 28 69 6e 74 20 20 6e 2c 20 66 64 5f 73 65 74 20 2a 72 65 61 64 66 64 73 2c 20 66 64 5f ect(int..n,.fd_set.*readfds,.fd_
7e60 73 65 74 20 2a 77 72 69 74 65 66 64 73 2c 20 66 64 5f 73 65 74 20 2a 65 78 63 65 70 74 66 64 73 set.*writefds,.fd_set.*exceptfds
7e80 2c 20 0a 09 20 20 20 73 74 72 75 63 74 20 74 69 6d 65 76 61 6c 20 2a 74 69 6d 65 6f 75 74 29 3b ,......struct.timeval.*timeout);
7ea0 0a 69 6e 74 20 44 75 70 32 28 69 6e 74 20 66 64 31 2c 20 69 6e 74 20 66 64 32 29 3b 0a 76 6f 69 .int.Dup2(int.fd1,.int.fd2);.voi
7ec0 64 20 53 74 61 74 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 73 74 72 d.Stat(const.char.*filename,.str
7ee0 75 63 74 20 73 74 61 74 20 2a 62 75 66 29 3b 0a 76 6f 69 64 20 46 73 74 61 74 28 69 6e 74 20 66 uct.stat.*buf);.void.Fstat(int.f
7f00 64 2c 20 73 74 72 75 63 74 20 73 74 61 74 20 2a 62 75 66 29 20 3b 0a 0a 2f 2a 20 44 69 72 65 63 d,.struct.stat.*buf).;../*.Direc
7f20 74 6f 72 79 20 77 72 61 70 70 65 72 73 20 2a 2f 0a 44 49 52 20 2a 4f 70 65 6e 64 69 72 28 63 6f tory.wrappers.*/.DIR.*Opendir(co
7f40 6e 73 74 20 63 68 61 72 20 2a 6e 61 6d 65 29 3b 0a 73 74 72 75 63 74 20 64 69 72 65 6e 74 20 2a nst.char.*name);.struct.dirent.*
7f60 52 65 61 64 64 69 72 28 44 49 52 20 2a 64 69 72 70 29 3b 0a 69 6e 74 20 43 6c 6f 73 65 64 69 72 Readdir(DIR.*dirp);.int.Closedir
7f80 28 44 49 52 20 2a 64 69 72 70 29 3b 0a 0a 2f 2a 20 4d 65 6d 6f 72 79 20 6d 61 70 70 69 6e 67 20 (DIR.*dirp);../*.Memory.mapping.
7fa0 77 72 61 70 70 65 72 73 20 2a 2f 0a 76 6f 69 64 20 2a 4d 6d 61 70 28 76 6f 69 64 20 2a 61 64 64 wrappers.*/.void.*Mmap(void.*add
7fc0 72 2c 20 73 69 7a 65 5f 74 20 6c 65 6e 2c 20 69 6e 74 20 70 72 6f 74 2c 20 69 6e 74 20 66 6c 61 r,.size_t.len,.int.prot,.int.fla
7fe0 67 73 2c 20 69 6e 74 20 66 64 2c 20 6f 66 66 5f 74 20 6f 66 66 73 65 74 29 3b 0a 76 6f 69 64 20 gs,.int.fd,.off_t.offset);.void.
8000 4d 75 6e 6d 61 70 28 76 6f 69 64 20 2a 73 74 61 72 74 2c 20 73 69 7a 65 5f 74 20 6c 65 6e 67 74 Munmap(void.*start,.size_t.lengt
8020 68 29 3b 0a 0a 2f 2a 20 53 74 61 6e 64 61 72 64 20 49 2f 4f 20 77 72 61 70 70 65 72 73 20 2a 2f h);../*.Standard.I/O.wrappers.*/
8040 0a 76 6f 69 64 20 46 63 6c 6f 73 65 28 46 49 4c 45 20 2a 66 70 29 3b 0a 46 49 4c 45 20 2a 46 64 .void.Fclose(FILE.*fp);.FILE.*Fd
8060 6f 70 65 6e 28 69 6e 74 20 66 64 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 74 79 70 65 29 3b 0a open(int.fd,.const.char.*type);.
8080 63 68 61 72 20 2a 46 67 65 74 73 28 63 68 61 72 20 2a 70 74 72 2c 20 69 6e 74 20 6e 2c 20 46 49 char.*Fgets(char.*ptr,.int.n,.FI
80a0 4c 45 20 2a 73 74 72 65 61 6d 29 3b 0a 46 49 4c 45 20 2a 46 6f 70 65 6e 28 63 6f 6e 73 74 20 63 LE.*stream);.FILE.*Fopen(const.c
80c0 68 61 72 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6d 6f 64 65 29 har.*filename,.const.char.*mode)
80e0 3b 0a 76 6f 69 64 20 46 70 75 74 73 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 74 72 2c 20 46 49 ;.void.Fputs(const.char.*ptr,.FI
8100 4c 45 20 2a 73 74 72 65 61 6d 29 3b 0a 73 69 7a 65 5f 74 20 46 72 65 61 64 28 76 6f 69 64 20 2a LE.*stream);.size_t.Fread(void.*
8120 70 74 72 2c 20 73 69 7a 65 5f 74 20 73 69 7a 65 2c 20 73 69 7a 65 5f 74 20 6e 6d 65 6d 62 2c 20 ptr,.size_t.size,.size_t.nmemb,.
8140 46 49 4c 45 20 2a 73 74 72 65 61 6d 29 3b 0a 76 6f 69 64 20 46 77 72 69 74 65 28 63 6f 6e 73 74 FILE.*stream);.void.Fwrite(const
8160 20 76 6f 69 64 20 2a 70 74 72 2c 20 73 69 7a 65 5f 74 20 73 69 7a 65 2c 20 73 69 7a 65 5f 74 20 .void.*ptr,.size_t.size,.size_t.
8180 6e 6d 65 6d 62 2c 20 46 49 4c 45 20 2a 73 74 72 65 61 6d 29 3b 0a 0a 2f 2a 20 44 79 6e 61 6d 69 nmemb,.FILE.*stream);../*.Dynami
81a0 63 20 73 74 6f 72 61 67 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 72 61 70 70 65 72 73 20 2a 2f c.storage.allocation.wrappers.*/
81c0 0a 76 6f 69 64 20 2a 4d 61 6c 6c 6f 63 28 73 69 7a 65 5f 74 20 73 69 7a 65 29 3b 0a 76 6f 69 64 .void.*Malloc(size_t.size);.void
81e0 20 2a 52 65 61 6c 6c 6f 63 28 76 6f 69 64 20 2a 70 74 72 2c 20 73 69 7a 65 5f 74 20 73 69 7a 65 .*Realloc(void.*ptr,.size_t.size
8200 29 3b 0a 76 6f 69 64 20 2a 43 61 6c 6c 6f 63 28 73 69 7a 65 5f 74 20 6e 6d 65 6d 62 2c 20 73 69 );.void.*Calloc(size_t.nmemb,.si
8220 7a 65 5f 74 20 73 69 7a 65 29 3b 0a 76 6f 69 64 20 46 72 65 65 28 76 6f 69 64 20 2a 70 74 72 29 ze_t.size);.void.Free(void.*ptr)
8240 3b 0a 0a 2f 2a 20 53 6f 63 6b 65 74 73 20 69 6e 74 65 72 66 61 63 65 20 77 72 61 70 70 65 72 73 ;../*.Sockets.interface.wrappers
8260 20 2a 2f 0a 69 6e 74 20 53 6f 63 6b 65 74 28 69 6e 74 20 64 6f 6d 61 69 6e 2c 20 69 6e 74 20 74 .*/.int.Socket(int.domain,.int.t
8280 79 70 65 2c 20 69 6e 74 20 70 72 6f 74 6f 63 6f 6c 29 3b 0a 76 6f 69 64 20 53 65 74 73 6f 63 6b ype,.int.protocol);.void.Setsock
82a0 6f 70 74 28 69 6e 74 20 73 2c 20 69 6e 74 20 6c 65 76 65 6c 2c 20 69 6e 74 20 6f 70 74 6e 61 6d opt(int.s,.int.level,.int.optnam
82c0 65 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 6f 70 74 76 61 6c 2c 20 69 6e 74 20 6f 70 74 6c 65 e,.const.void.*optval,.int.optle
82e0 6e 29 3b 0a 76 6f 69 64 20 42 69 6e 64 28 69 6e 74 20 73 6f 63 6b 66 64 2c 20 73 74 72 75 63 74 n);.void.Bind(int.sockfd,.struct
8300 20 73 6f 63 6b 61 64 64 72 20 2a 6d 79 5f 61 64 64 72 2c 20 69 6e 74 20 61 64 64 72 6c 65 6e 29 .sockaddr.*my_addr,.int.addrlen)
8320 3b 0a 76 6f 69 64 20 4c 69 73 74 65 6e 28 69 6e 74 20 73 2c 20 69 6e 74 20 62 61 63 6b 6c 6f 67 ;.void.Listen(int.s,.int.backlog
8340 29 3b 0a 69 6e 74 20 41 63 63 65 70 74 28 69 6e 74 20 73 2c 20 73 74 72 75 63 74 20 73 6f 63 6b );.int.Accept(int.s,.struct.sock
8360 61 64 64 72 20 2a 61 64 64 72 2c 20 73 6f 63 6b 6c 65 6e 5f 74 20 2a 61 64 64 72 6c 65 6e 29 3b addr.*addr,.socklen_t.*addrlen);
8380 0a 76 6f 69 64 20 43 6f 6e 6e 65 63 74 28 69 6e 74 20 73 6f 63 6b 66 64 2c 20 73 74 72 75 63 74 .void.Connect(int.sockfd,.struct
83a0 20 73 6f 63 6b 61 64 64 72 20 2a 73 65 72 76 5f 61 64 64 72 2c 20 69 6e 74 20 61 64 64 72 6c 65 .sockaddr.*serv_addr,.int.addrle
83c0 6e 29 3b 0a 0a 2f 2a 20 50 72 6f 74 6f 63 6f 6c 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 77 72 61 n);../*.Protocol.independent.wra
83e0 70 70 65 72 73 20 2a 2f 0a 76 6f 69 64 20 47 65 74 61 64 64 72 69 6e 66 6f 28 63 6f 6e 73 74 20 ppers.*/.void.Getaddrinfo(const.
8400 63 68 61 72 20 2a 6e 6f 64 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 65 72 76 69 63 65 2c char.*node,.const.char.*service,
8420 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 ...................const.struct.
8440 61 64 64 72 69 6e 66 6f 20 2a 68 69 6e 74 73 2c 20 73 74 72 75 63 74 20 61 64 64 72 69 6e 66 6f addrinfo.*hints,.struct.addrinfo
8460 20 2a 2a 72 65 73 29 3b 0a 76 6f 69 64 20 47 65 74 6e 61 6d 65 69 6e 66 6f 28 63 6f 6e 73 74 20 .**res);.void.Getnameinfo(const.
8480 73 74 72 75 63 74 20 73 6f 63 6b 61 64 64 72 20 2a 73 61 2c 20 73 6f 63 6b 6c 65 6e 5f 74 20 73 struct.sockaddr.*sa,.socklen_t.s
84a0 61 6c 65 6e 2c 20 63 68 61 72 20 2a 68 6f 73 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 alen,.char.*host,...............
84c0 20 20 20 20 73 69 7a 65 5f 74 20 68 6f 73 74 6c 65 6e 2c 20 63 68 61 72 20 2a 73 65 72 76 2c 20 ....size_t.hostlen,.char.*serv,.
84e0 73 69 7a 65 5f 74 20 73 65 72 76 6c 65 6e 2c 20 69 6e 74 20 66 6c 61 67 73 29 3b 0a 76 6f 69 64 size_t.servlen,.int.flags);.void
8500 20 46 72 65 65 61 64 64 72 69 6e 66 6f 28 73 74 72 75 63 74 20 61 64 64 72 69 6e 66 6f 20 2a 72 .Freeaddrinfo(struct.addrinfo.*r
8520 65 73 29 3b 0a 76 6f 69 64 20 49 6e 65 74 5f 6e 74 6f 70 28 69 6e 74 20 61 66 2c 20 63 6f 6e 73 es);.void.Inet_ntop(int.af,.cons
8540 74 20 76 6f 69 64 20 2a 73 72 63 2c 20 63 68 61 72 20 2a 64 73 74 2c 20 73 6f 63 6b 6c 65 6e 5f t.void.*src,.char.*dst,.socklen_
8560 74 20 73 69 7a 65 29 3b 0a 76 6f 69 64 20 49 6e 65 74 5f 70 74 6f 6e 28 69 6e 74 20 61 66 2c 20 t.size);.void.Inet_pton(int.af,.
8580 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 72 63 2c 20 76 6f 69 64 20 2a 64 73 74 29 3b 20 0a 0a 2f const.char.*src,.void.*dst);.../
85a0 2a 20 44 4e 53 20 77 72 61 70 70 65 72 73 20 2a 2f 0a 73 74 72 75 63 74 20 68 6f 73 74 65 6e 74 *.DNS.wrappers.*/.struct.hostent
85c0 20 2a 47 65 74 68 6f 73 74 62 79 6e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 6e 61 6d 65 .*Gethostbyname(const.char.*name
85e0 29 3b 0a 73 74 72 75 63 74 20 68 6f 73 74 65 6e 74 20 2a 47 65 74 68 6f 73 74 62 79 61 64 64 72 );.struct.hostent.*Gethostbyaddr
8600 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 64 64 72 2c 20 69 6e 74 20 6c 65 6e 2c 20 69 6e 74 20 (const.char.*addr,.int.len,.int.
8620 74 79 70 65 29 3b 0a 0a 2f 2a 20 50 74 68 72 65 61 64 73 20 74 68 72 65 61 64 20 63 6f 6e 74 72 type);../*.Pthreads.thread.contr
8640 6f 6c 20 77 72 61 70 70 65 72 73 20 2a 2f 0a 76 6f 69 64 20 50 74 68 72 65 61 64 5f 63 72 65 61 ol.wrappers.*/.void.Pthread_crea
8660 74 65 28 70 74 68 72 65 61 64 5f 74 20 2a 74 69 64 70 2c 20 70 74 68 72 65 61 64 5f 61 74 74 72 te(pthread_t.*tidp,.pthread_attr
8680 5f 74 20 2a 61 74 74 72 70 2c 20 0a 09 09 20 20 20 20 76 6f 69 64 20 2a 20 28 2a 72 6f 75 74 69 _t.*attrp,........void.*.(*routi
86a0 6e 65 29 28 76 6f 69 64 20 2a 29 2c 20 76 6f 69 64 20 2a 61 72 67 70 29 3b 0a 76 6f 69 64 20 50 ne)(void.*),.void.*argp);.void.P
86c0 74 68 72 65 61 64 5f 6a 6f 69 6e 28 70 74 68 72 65 61 64 5f 74 20 74 69 64 2c 20 76 6f 69 64 20 thread_join(pthread_t.tid,.void.
86e0 2a 2a 74 68 72 65 61 64 5f 72 65 74 75 72 6e 29 3b 0a 76 6f 69 64 20 50 74 68 72 65 61 64 5f 63 **thread_return);.void.Pthread_c
8700 61 6e 63 65 6c 28 70 74 68 72 65 61 64 5f 74 20 74 69 64 29 3b 0a 76 6f 69 64 20 50 74 68 72 65 ancel(pthread_t.tid);.void.Pthre
8720 61 64 5f 64 65 74 61 63 68 28 70 74 68 72 65 61 64 5f 74 20 74 69 64 29 3b 0a 76 6f 69 64 20 50 ad_detach(pthread_t.tid);.void.P
8740 74 68 72 65 61 64 5f 65 78 69 74 28 76 6f 69 64 20 2a 72 65 74 76 61 6c 29 3b 0a 70 74 68 72 65 thread_exit(void.*retval);.pthre
8760 61 64 5f 74 20 50 74 68 72 65 61 64 5f 73 65 6c 66 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 50 74 ad_t.Pthread_self(void);.void.Pt
8780 68 72 65 61 64 5f 6f 6e 63 65 28 70 74 68 72 65 61 64 5f 6f 6e 63 65 5f 74 20 2a 6f 6e 63 65 5f hread_once(pthread_once_t.*once_
87a0 63 6f 6e 74 72 6f 6c 2c 20 76 6f 69 64 20 28 2a 69 6e 69 74 5f 66 75 6e 63 74 69 6f 6e 29 28 29 control,.void.(*init_function)()
87c0 29 3b 0a 0a 2f 2a 20 50 4f 53 49 58 20 73 65 6d 61 70 68 6f 72 65 20 77 72 61 70 70 65 72 73 20 );../*.POSIX.semaphore.wrappers.
87e0 2a 2f 0a 76 6f 69 64 20 53 65 6d 5f 69 6e 69 74 28 73 65 6d 5f 74 20 2a 73 65 6d 2c 20 69 6e 74 */.void.Sem_init(sem_t.*sem,.int
8800 20 70 73 68 61 72 65 64 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 76 61 6c 75 65 29 3b 0a 76 .pshared,.unsigned.int.value);.v
8820 6f 69 64 20 50 28 73 65 6d 5f 74 20 2a 73 65 6d 29 3b 0a 76 6f 69 64 20 56 28 73 65 6d 5f 74 20 oid.P(sem_t.*sem);.void.V(sem_t.
8840 2a 73 65 6d 29 3b 0a 0a 2f 2a 20 52 69 6f 20 28 52 6f 62 75 73 74 20 49 2f 4f 29 20 70 61 63 6b *sem);../*.Rio.(Robust.I/O).pack
8860 61 67 65 20 2a 2f 0a 73 73 69 7a 65 5f 74 20 72 69 6f 5f 72 65 61 64 6e 28 69 6e 74 20 66 64 2c age.*/.ssize_t.rio_readn(int.fd,
8880 20 76 6f 69 64 20 2a 75 73 72 62 75 66 2c 20 73 69 7a 65 5f 74 20 6e 29 3b 0a 73 73 69 7a 65 5f .void.*usrbuf,.size_t.n);.ssize_
88a0 74 20 72 69 6f 5f 77 72 69 74 65 6e 28 69 6e 74 20 66 64 2c 20 76 6f 69 64 20 2a 75 73 72 62 75 t.rio_writen(int.fd,.void.*usrbu
88c0 66 2c 20 73 69 7a 65 5f 74 20 6e 29 3b 0a 76 6f 69 64 20 72 69 6f 5f 72 65 61 64 69 6e 69 74 62 f,.size_t.n);.void.rio_readinitb
88e0 28 72 69 6f 5f 74 20 2a 72 70 2c 20 69 6e 74 20 66 64 29 3b 20 0a 73 73 69 7a 65 5f 74 09 72 69 (rio_t.*rp,.int.fd);..ssize_t.ri
8900 6f 5f 72 65 61 64 6e 62 28 72 69 6f 5f 74 20 2a 72 70 2c 20 76 6f 69 64 20 2a 75 73 72 62 75 66 o_readnb(rio_t.*rp,.void.*usrbuf
8920 2c 20 73 69 7a 65 5f 74 20 6e 29 3b 0a 73 73 69 7a 65 5f 74 09 72 69 6f 5f 72 65 61 64 6c 69 6e ,.size_t.n);.ssize_t.rio_readlin
8940 65 62 28 72 69 6f 5f 74 20 2a 72 70 2c 20 76 6f 69 64 20 2a 75 73 72 62 75 66 2c 20 73 69 7a 65 eb(rio_t.*rp,.void.*usrbuf,.size
8960 5f 74 20 6d 61 78 6c 65 6e 29 3b 0a 0a 2f 2a 20 57 72 61 70 70 65 72 73 20 66 6f 72 20 52 69 6f _t.maxlen);../*.Wrappers.for.Rio
8980 20 70 61 63 6b 61 67 65 20 2a 2f 0a 73 73 69 7a 65 5f 74 20 52 69 6f 5f 72 65 61 64 6e 28 69 6e .package.*/.ssize_t.Rio_readn(in
89a0 74 20 66 64 2c 20 76 6f 69 64 20 2a 75 73 72 62 75 66 2c 20 73 69 7a 65 5f 74 20 6e 29 3b 0a 76 t.fd,.void.*usrbuf,.size_t.n);.v
89c0 6f 69 64 20 52 69 6f 5f 77 72 69 74 65 6e 28 69 6e 74 20 66 64 2c 20 76 6f 69 64 20 2a 75 73 72 oid.Rio_writen(int.fd,.void.*usr
89e0 62 75 66 2c 20 73 69 7a 65 5f 74 20 6e 29 3b 0a 76 6f 69 64 20 52 69 6f 5f 72 65 61 64 69 6e 69 buf,.size_t.n);.void.Rio_readini
8a00 74 62 28 72 69 6f 5f 74 20 2a 72 70 2c 20 69 6e 74 20 66 64 29 3b 20 0a 73 73 69 7a 65 5f 74 20 tb(rio_t.*rp,.int.fd);..ssize_t.
8a20 52 69 6f 5f 72 65 61 64 6e 62 28 72 69 6f 5f 74 20 2a 72 70 2c 20 76 6f 69 64 20 2a 75 73 72 62 Rio_readnb(rio_t.*rp,.void.*usrb
8a40 75 66 2c 20 73 69 7a 65 5f 74 20 6e 29 3b 0a 73 73 69 7a 65 5f 74 20 52 69 6f 5f 72 65 61 64 6c uf,.size_t.n);.ssize_t.Rio_readl
8a60 69 6e 65 62 28 72 69 6f 5f 74 20 2a 72 70 2c 20 76 6f 69 64 20 2a 75 73 72 62 75 66 2c 20 73 69 ineb(rio_t.*rp,.void.*usrbuf,.si
8a80 7a 65 5f 74 20 6d 61 78 6c 65 6e 29 3b 0a 0a 2f 2a 20 52 65 65 6e 74 72 61 6e 74 20 70 72 6f 74 ze_t.maxlen);../*.Reentrant.prot
8aa0 6f 63 6f 6c 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 63 6c 69 65 6e 74 2f 73 65 72 76 65 72 20 68 ocol-independent.client/server.h
8ac0 65 6c 70 65 72 73 20 2a 2f 0a 69 6e 74 20 6f 70 65 6e 5f 63 6c 69 65 6e 74 66 64 28 63 68 61 72 elpers.*/.int.open_clientfd(char
8ae0 20 2a 68 6f 73 74 6e 61 6d 65 2c 20 63 68 61 72 20 2a 70 6f 72 74 29 3b 0a 69 6e 74 20 6f 70 65 .*hostname,.char.*port);.int.ope
8b00 6e 5f 6c 69 73 74 65 6e 66 64 28 63 68 61 72 20 2a 70 6f 72 74 29 3b 0a 0a 2f 2a 20 57 72 61 70 n_listenfd(char.*port);../*.Wrap
8b20 70 65 72 73 20 66 6f 72 20 72 65 65 6e 74 72 61 6e 74 20 70 72 6f 74 6f 63 6f 6c 2d 69 6e 64 65 pers.for.reentrant.protocol-inde
8b40 70 65 6e 64 65 6e 74 20 63 6c 69 65 6e 74 2f 73 65 72 76 65 72 20 68 65 6c 70 65 72 73 20 2a 2f pendent.client/server.helpers.*/
8b60 0a 69 6e 74 20 4f 70 65 6e 5f 63 6c 69 65 6e 74 66 64 28 63 68 61 72 20 2a 68 6f 73 74 6e 61 6d .int.Open_clientfd(char.*hostnam
8b80 65 2c 20 63 68 61 72 20 2a 70 6f 72 74 29 3b 0a 69 6e 74 20 4f 70 65 6e 5f 6c 69 73 74 65 6e 66 e,.char.*port);.int.Open_listenf
8ba0 64 28 63 68 61 72 20 2a 70 6f 72 74 29 3b 0a 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 5f 43 53 41 d(char.*port);...#endif./*.__CSA
8bc0 50 50 5f 48 5f 5f 20 2a 2f 0a 2f 2a 20 24 65 6e 64 20 63 73 61 70 70 2e 68 20 2a 2f 0a 00 00 00 PP_H__.*/./*.$end.csapp.h.*/....
8be0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8c00 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 74 69 6e 79 2f 00 00 00 00 00 00 00 00 00 00 proxylab-handout/tiny/..........
8c20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8c40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8c60 00 00 00 00 30 30 30 30 37 35 35 00 30 30 30 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000755.0006626.0000144.0000
8c80 30 30 30 30 30 30 30 00 31 33 35 36 33 33 31 30 34 35 37 00 30 31 33 33 35 35 00 20 35 00 00 00 0000000.13563310457.013355..5...
8ca0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8cc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8ce0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8d00 00 75 73 74 61 72 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
8d20 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
8d40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8d60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8d80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8da0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8dc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8de0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8e00 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 74 69 6e 79 2f 74 69 6e 79 2e 63 00 00 00 00 proxylab-handout/tiny/tiny.c....
8e20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8e40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8e60 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000644.0006626.0000144.0000
8e80 30 30 32 30 36 35 35 00 31 33 35 36 33 33 31 30 32 30 32 00 30 31 34 35 30 30 00 20 30 00 00 00 0020655.13563310202.014500..0...
8ea0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8ec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8ee0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8f00 00 75 73 74 61 72 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
8f20 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
8f40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8f60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8f80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8fa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8fc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
8fe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
9000 2f 2a 20 24 62 65 67 69 6e 20 74 69 6e 79 6d 61 69 6e 20 2a 2f 0a 2f 2a 0a 20 2a 20 74 69 6e 79 /*.$begin.tinymain.*/./*..*.tiny
9020 2e 63 20 2d 20 41 20 73 69 6d 70 6c 65 2c 20 69 74 65 72 61 74 69 76 65 20 48 54 54 50 2f 31 2e .c.-.A.simple,.iterative.HTTP/1.
9040 30 20 57 65 62 20 73 65 72 76 65 72 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20 0a 20 2a 20 20 0.Web.server.that.uses.the...*..
9060 20 20 20 47 45 54 20 6d 65 74 68 6f 64 20 74 6f 20 73 65 72 76 65 20 73 74 61 74 69 63 20 61 6e ...GET.method.to.serve.static.an
9080 64 20 64 79 6e 61 6d 69 63 20 63 6f 6e 74 65 6e 74 2e 0a 20 2a 0a 20 2a 20 55 70 64 61 74 65 64 d.dynamic.content...*..*.Updated
90a0 20 31 31 2f 32 30 31 39 20 64 72 6f 68 20 0a 20 2a 20 20 20 2d 20 46 69 78 65 64 20 73 70 72 69 .11/2019.droh...*...-.Fixed.spri
90c0 6e 74 66 28 29 20 61 6c 69 61 73 69 6e 67 20 69 73 73 75 65 20 69 6e 20 73 65 72 76 65 5f 73 74 ntf().aliasing.issue.in.serve_st
90e0 61 74 69 63 28 29 2c 20 61 6e 64 20 63 6c 69 65 6e 74 65 72 72 6f 72 28 29 2e 0a 20 2a 2f 0a 23 atic(),.and.clienterror()...*/.#
9100 69 6e 63 6c 75 64 65 20 22 63 73 61 70 70 2e 68 22 0a 0a 76 6f 69 64 20 64 6f 69 74 28 69 6e 74 include."csapp.h"..void.doit(int
9120 20 66 64 29 3b 0a 76 6f 69 64 20 72 65 61 64 5f 72 65 71 75 65 73 74 68 64 72 73 28 72 69 6f 5f .fd);.void.read_requesthdrs(rio_
9140 74 20 2a 72 70 29 3b 0a 69 6e 74 20 70 61 72 73 65 5f 75 72 69 28 63 68 61 72 20 2a 75 72 69 2c t.*rp);.int.parse_uri(char.*uri,
9160 20 63 68 61 72 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 63 68 61 72 20 2a 63 67 69 61 72 67 73 29 3b .char.*filename,.char.*cgiargs);
9180 0a 76 6f 69 64 20 73 65 72 76 65 5f 73 74 61 74 69 63 28 69 6e 74 20 66 64 2c 20 63 68 61 72 20 .void.serve_static(int.fd,.char.
91a0 2a 66 69 6c 65 6e 61 6d 65 2c 20 69 6e 74 20 66 69 6c 65 73 69 7a 65 29 3b 0a 76 6f 69 64 20 67 *filename,.int.filesize);.void.g
91c0 65 74 5f 66 69 6c 65 74 79 70 65 28 63 68 61 72 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 63 68 61 72 et_filetype(char.*filename,.char
91e0 20 2a 66 69 6c 65 74 79 70 65 29 3b 0a 76 6f 69 64 20 73 65 72 76 65 5f 64 79 6e 61 6d 69 63 28 .*filetype);.void.serve_dynamic(
9200 69 6e 74 20 66 64 2c 20 63 68 61 72 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 63 68 61 72 20 2a 63 67 int.fd,.char.*filename,.char.*cg
9220 69 61 72 67 73 29 3b 0a 76 6f 69 64 20 63 6c 69 65 6e 74 65 72 72 6f 72 28 69 6e 74 20 66 64 2c iargs);.void.clienterror(int.fd,
9240 20 63 68 61 72 20 2a 63 61 75 73 65 2c 20 63 68 61 72 20 2a 65 72 72 6e 75 6d 2c 20 0a 09 09 20 .char.*cause,.char.*errnum,.....
9260 63 68 61 72 20 2a 73 68 6f 72 74 6d 73 67 2c 20 63 68 61 72 20 2a 6c 6f 6e 67 6d 73 67 29 3b 0a char.*shortmsg,.char.*longmsg);.
9280 0a 69 6e 74 20 6d 61 69 6e 28 69 6e 74 20 61 72 67 63 2c 20 63 68 61 72 20 2a 2a 61 72 67 76 29 .int.main(int.argc,.char.**argv)
92a0 20 0a 7b 0a 20 20 20 20 69 6e 74 20 6c 69 73 74 65 6e 66 64 2c 20 63 6f 6e 6e 66 64 3b 0a 20 20 ..{.....int.listenfd,.connfd;...
92c0 20 20 63 68 61 72 20 68 6f 73 74 6e 61 6d 65 5b 4d 41 58 4c 49 4e 45 5d 2c 20 70 6f 72 74 5b 4d ..char.hostname[MAXLINE],.port[M
92e0 41 58 4c 49 4e 45 5d 3b 0a 20 20 20 20 73 6f 63 6b 6c 65 6e 5f 74 20 63 6c 69 65 6e 74 6c 65 6e AXLINE];.....socklen_t.clientlen
9300 3b 0a 20 20 20 20 73 74 72 75 63 74 20 73 6f 63 6b 61 64 64 72 5f 73 74 6f 72 61 67 65 20 63 6c ;.....struct.sockaddr_storage.cl
9320 69 65 6e 74 61 64 64 72 3b 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 63 6f 6d 6d 61 6e 64 20 ientaddr;....../*.Check.command.
9340 6c 69 6e 65 20 61 72 67 73 20 2a 2f 0a 20 20 20 20 69 66 20 28 61 72 67 63 20 21 3d 20 32 29 20 line.args.*/.....if.(argc.!=.2).
9360 7b 0a 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 75 73 61 67 65 3a 20 25 73 20 3c 70 {..fprintf(stderr,."usage:.%s.<p
9380 6f 72 74 3e 5c 6e 22 2c 20 61 72 67 76 5b 30 5d 29 3b 0a 09 65 78 69 74 28 31 29 3b 0a 20 20 20 ort>\n",.argv[0]);..exit(1);....
93a0 20 7d 0a 0a 20 20 20 20 6c 69 73 74 65 6e 66 64 20 3d 20 4f 70 65 6e 5f 6c 69 73 74 65 6e 66 64 .}......listenfd.=.Open_listenfd
93c0 28 61 72 67 76 5b 31 5d 29 3b 0a 20 20 20 20 77 68 69 6c 65 20 28 31 29 20 7b 0a 09 63 6c 69 65 (argv[1]);.....while.(1).{..clie
93e0 6e 74 6c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6c 69 65 6e 74 61 64 64 72 29 3b 0a 09 63 6f 6e ntlen.=.sizeof(clientaddr);..con
9400 6e 66 64 20 3d 20 41 63 63 65 70 74 28 6c 69 73 74 65 6e 66 64 2c 20 28 53 41 20 2a 29 26 63 6c nfd.=.Accept(listenfd,.(SA.*)&cl
9420 69 65 6e 74 61 64 64 72 2c 20 26 63 6c 69 65 6e 74 6c 65 6e 29 3b 20 2f 2f 6c 69 6e 65 3a 6e 65 ientaddr,.&clientlen);.//line:ne
9440 74 70 3a 74 69 6e 79 3a 61 63 63 65 70 74 0a 20 20 20 20 20 20 20 20 47 65 74 6e 61 6d 65 69 6e tp:tiny:accept.........Getnamein
9460 66 6f 28 28 53 41 20 2a 29 20 26 63 6c 69 65 6e 74 61 64 64 72 2c 20 63 6c 69 65 6e 74 6c 65 6e fo((SA.*).&clientaddr,.clientlen
9480 2c 20 68 6f 73 74 6e 61 6d 65 2c 20 4d 41 58 4c 49 4e 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 ,.hostname,.MAXLINE,............
94a0 20 20 20 20 20 20 20 20 20 20 70 6f 72 74 2c 20 4d 41 58 4c 49 4e 45 2c 20 30 29 3b 0a 20 20 20 ..........port,.MAXLINE,.0);....
94c0 20 20 20 20 20 70 72 69 6e 74 66 28 22 41 63 63 65 70 74 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e .....printf("Accepted.connection
94e0 20 66 72 6f 6d 20 28 25 73 2c 20 25 73 29 5c 6e 22 2c 20 68 6f 73 74 6e 61 6d 65 2c 20 70 6f 72 .from.(%s,.%s)\n",.hostname,.por
9500 74 29 3b 0a 09 64 6f 69 74 28 63 6f 6e 6e 66 64 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 t);..doit(connfd);..............
9520 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 2f .............................../
9540 2f 6c 69 6e 65 3a 6e 65 74 70 3a 74 69 6e 79 3a 64 6f 69 74 0a 09 43 6c 6f 73 65 28 63 6f 6e 6e /line:netp:tiny:doit..Close(conn
9560 66 64 29 3b 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 fd);............................
9580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 74 69 6e 79 ................//line:netp:tiny
95a0 3a 63 6c 6f 73 65 0a 20 20 20 20 7d 0a 7d 0a 2f 2a 20 24 65 6e 64 20 74 69 6e 79 6d 61 69 6e 20 :close.....}.}./*.$end.tinymain.
95c0 2a 2f 0a 0a 2f 2a 0a 20 2a 20 64 6f 69 74 20 2d 20 68 61 6e 64 6c 65 20 6f 6e 65 20 48 54 54 50 */../*..*.doit.-.handle.one.HTTP
95e0 20 72 65 71 75 65 73 74 2f 72 65 73 70 6f 6e 73 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 2a .request/response.transaction..*
9600 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 64 6f 69 74 20 2a 2f 0a 76 6f 69 64 20 64 6f 69 74 28 69 6e /./*.$begin.doit.*/.void.doit(in
9620 74 20 66 64 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 69 73 5f 73 74 61 74 69 63 3b 0a 20 20 20 20 t.fd)..{.....int.is_static;.....
9640 73 74 72 75 63 74 20 73 74 61 74 20 73 62 75 66 3b 0a 20 20 20 20 63 68 61 72 20 62 75 66 5b 4d struct.stat.sbuf;.....char.buf[M
9660 41 58 4c 49 4e 45 5d 2c 20 6d 65 74 68 6f 64 5b 4d 41 58 4c 49 4e 45 5d 2c 20 75 72 69 5b 4d 41 AXLINE],.method[MAXLINE],.uri[MA
9680 58 4c 49 4e 45 5d 2c 20 76 65 72 73 69 6f 6e 5b 4d 41 58 4c 49 4e 45 5d 3b 0a 20 20 20 20 63 68 XLINE],.version[MAXLINE];.....ch
96a0 61 72 20 66 69 6c 65 6e 61 6d 65 5b 4d 41 58 4c 49 4e 45 5d 2c 20 63 67 69 61 72 67 73 5b 4d 41 ar.filename[MAXLINE],.cgiargs[MA
96c0 58 4c 49 4e 45 5d 3b 0a 20 20 20 20 72 69 6f 5f 74 20 72 69 6f 3b 0a 0a 20 20 20 20 2f 2a 20 52 XLINE];.....rio_t.rio;....../*.R
96e0 65 61 64 20 72 65 71 75 65 73 74 20 6c 69 6e 65 20 61 6e 64 20 68 65 61 64 65 72 73 20 2a 2f 0a ead.request.line.and.headers.*/.
9700 20 20 20 20 52 69 6f 5f 72 65 61 64 69 6e 69 74 62 28 26 72 69 6f 2c 20 66 64 29 3b 0a 20 20 20 ....Rio_readinitb(&rio,.fd);....
9720 20 69 66 20 28 21 52 69 6f 5f 72 65 61 64 6c 69 6e 65 62 28 26 72 69 6f 2c 20 62 75 66 2c 20 4d .if.(!Rio_readlineb(&rio,.buf,.M
9740 41 58 4c 49 4e 45 29 29 20 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 64 6f 69 74 3a 72 65 61 64 72 AXLINE))..//line:netp:doit:readr
9760 65 71 75 65 73 74 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 20 20 70 72 69 6e 74 equest.........return;.....print
9780 66 28 22 25 73 22 2c 20 62 75 66 29 3b 0a 20 20 20 20 73 73 63 61 6e 66 28 62 75 66 2c 20 22 25 f("%s",.buf);.....sscanf(buf,."%
97a0 73 20 25 73 20 25 73 22 2c 20 6d 65 74 68 6f 64 2c 20 75 72 69 2c 20 76 65 72 73 69 6f 6e 29 3b s.%s.%s",.method,.uri,.version);
97c0 20 20 20 20 20 20 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 64 6f 69 74 3a 70 61 72 73 65 72 65 71 .......//line:netp:doit:parsereq
97e0 75 65 73 74 0a 20 20 20 20 69 66 20 28 73 74 72 63 61 73 65 63 6d 70 28 6d 65 74 68 6f 64 2c 20 uest.....if.(strcasecmp(method,.
9800 22 47 45 54 22 29 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f "GET")).{.....................//
9820 6c 69 6e 65 3a 6e 65 74 70 3a 64 6f 69 74 3a 62 65 67 69 6e 72 65 71 75 65 73 74 65 72 72 0a 20 line:netp:doit:beginrequesterr..
9840 20 20 20 20 20 20 20 63 6c 69 65 6e 74 65 72 72 6f 72 28 66 64 2c 20 6d 65 74 68 6f 64 2c 20 22 .......clienterror(fd,.method,."
9860 35 30 31 22 2c 20 22 4e 6f 74 20 49 6d 70 6c 65 6d 65 6e 74 65 64 22 2c 0a 20 20 20 20 20 20 20 501",."Not.Implemented",........
9880 20 20 20 20 20 20 20 20 20 20 20 20 20 22 54 69 6e 79 20 64 6f 65 73 20 6e 6f 74 20 69 6d 70 6c ............."Tiny.does.not.impl
98a0 65 6d 65 6e 74 20 74 68 69 73 20 6d 65 74 68 6f 64 22 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 ement.this.method");.........ret
98c0 75 72 6e 3b 0a 20 20 20 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 urn;.....}......................
98e0 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 2f 2f ..............................//
9900 6c 69 6e 65 3a 6e 65 74 70 3a 64 6f 69 74 3a 65 6e 64 72 65 71 75 65 73 74 65 72 72 0a 20 20 20 line:netp:doit:endrequesterr....
9920 20 72 65 61 64 5f 72 65 71 75 65 73 74 68 64 72 73 28 26 72 69 6f 29 3b 20 20 20 20 20 20 20 20 .read_requesthdrs(&rio);........
9940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 6c 69 6e 65 3a 6e 65 74 ......................//line:net
9960 70 3a 64 6f 69 74 3a 72 65 61 64 72 65 71 75 65 73 74 68 64 72 73 0a 0a 20 20 20 20 2f 2a 20 50 p:doit:readrequesthdrs....../*.P
9980 61 72 73 65 20 55 52 49 20 66 72 6f 6d 20 47 45 54 20 72 65 71 75 65 73 74 20 2a 2f 0a 20 20 20 arse.URI.from.GET.request.*/....
99a0 20 69 73 5f 73 74 61 74 69 63 20 3d 20 70 61 72 73 65 5f 75 72 69 28 75 72 69 2c 20 66 69 6c 65 .is_static.=.parse_uri(uri,.file
99c0 6e 61 6d 65 2c 20 63 67 69 61 72 67 73 29 3b 20 20 20 20 20 20 20 2f 2f 6c 69 6e 65 3a 6e 65 74 name,.cgiargs);.......//line:net
99e0 70 3a 64 6f 69 74 3a 73 74 61 74 69 63 63 68 65 63 6b 0a 20 20 20 20 69 66 20 28 73 74 61 74 28 p:doit:staticcheck.....if.(stat(
9a00 66 69 6c 65 6e 61 6d 65 2c 20 26 73 62 75 66 29 20 3c 20 30 29 20 7b 20 20 20 20 20 20 20 20 20 filename,.&sbuf).<.0).{.........
9a20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 64 6f 69 74 3a 62 65 67 ............//line:netp:doit:beg
9a40 69 6e 6e 6f 74 66 6f 75 6e 64 0a 09 63 6c 69 65 6e 74 65 72 72 6f 72 28 66 64 2c 20 66 69 6c 65 innotfound..clienterror(fd,.file
9a60 6e 61 6d 65 2c 20 22 34 30 34 22 2c 20 22 4e 6f 74 20 66 6f 75 6e 64 22 2c 0a 09 09 20 20 20 20 name,."404",."Not.found",.......
9a80 22 54 69 6e 79 20 63 6f 75 6c 64 6e 27 74 20 66 69 6e 64 20 74 68 69 73 20 66 69 6c 65 22 29 3b "Tiny.couldn't.find.this.file");
9aa0 0a 09 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ..return;.....}.................
9ac0 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 20 ................................
9ae0 20 20 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 64 6f 69 74 3a 65 6e 64 6e 6f 74 66 6f 75 6e 64 0a ...//line:netp:doit:endnotfound.
9b00 0a 20 20 20 20 69 66 20 28 69 73 5f 73 74 61 74 69 63 29 20 7b 20 2f 2a 20 53 65 72 76 65 20 73 .....if.(is_static).{./*.Serve.s
9b20 74 61 74 69 63 20 63 6f 6e 74 65 6e 74 20 2a 2f 20 20 20 20 20 20 20 20 20 20 0a 09 69 66 20 28 tatic.content.*/............if.(
9b40 21 28 53 5f 49 53 52 45 47 28 73 62 75 66 2e 73 74 5f 6d 6f 64 65 29 29 20 7c 7c 20 21 28 53 5f !(S_ISREG(sbuf.st_mode)).||.!(S_
9b60 49 52 55 53 52 20 26 20 73 62 75 66 2e 73 74 5f 6d 6f 64 65 29 29 20 7b 20 2f 2f 6c 69 6e 65 3a IRUSR.&.sbuf.st_mode)).{.//line:
9b80 6e 65 74 70 3a 64 6f 69 74 3a 72 65 61 64 61 62 6c 65 0a 09 20 20 20 20 63 6c 69 65 6e 74 65 72 netp:doit:readable......clienter
9ba0 72 6f 72 28 66 64 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 22 34 30 33 22 2c 20 22 46 6f 72 62 69 64 ror(fd,.filename,."403",."Forbid
9bc0 64 65 6e 22 2c 0a 09 09 09 22 54 69 6e 79 20 63 6f 75 6c 64 6e 27 74 20 72 65 61 64 20 74 68 65 den",...."Tiny.couldn't.read.the
9be0 20 66 69 6c 65 22 29 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 3b 0a 09 7d 0a 09 73 65 72 76 65 5f .file");......return;..}..serve_
9c00 73 74 61 74 69 63 28 66 64 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 73 62 75 66 2e 73 74 5f 73 69 7a static(fd,.filename,.sbuf.st_siz
9c20 65 29 3b 20 20 20 20 20 20 20 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 64 6f 69 74 3a 73 65 72 76 e);........//line:netp:doit:serv
9c40 65 73 74 61 74 69 63 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 7b 20 2f 2a 20 53 65 72 76 estatic.....}.....else.{./*.Serv
9c60 65 20 64 79 6e 61 6d 69 63 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 09 69 66 20 28 21 28 53 5f 49 53 e.dynamic.content.*/..if.(!(S_IS
9c80 52 45 47 28 73 62 75 66 2e 73 74 5f 6d 6f 64 65 29 29 20 7c 7c 20 21 28 53 5f 49 58 55 53 52 20 REG(sbuf.st_mode)).||.!(S_IXUSR.
9ca0 26 20 73 62 75 66 2e 73 74 5f 6d 6f 64 65 29 29 20 7b 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 64 &.sbuf.st_mode)).{.//line:netp:d
9cc0 6f 69 74 3a 65 78 65 63 75 74 61 62 6c 65 0a 09 20 20 20 20 63 6c 69 65 6e 74 65 72 72 6f 72 28 oit:executable......clienterror(
9ce0 66 64 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 22 34 30 33 22 2c 20 22 46 6f 72 62 69 64 64 65 6e 22 fd,.filename,."403",."Forbidden"
9d00 2c 0a 09 09 09 22 54 69 6e 79 20 63 6f 75 6c 64 6e 27 74 20 72 75 6e 20 74 68 65 20 43 47 49 20 ,...."Tiny.couldn't.run.the.CGI.
9d20 70 72 6f 67 72 61 6d 22 29 3b 0a 09 20 20 20 20 72 65 74 75 72 6e 3b 0a 09 7d 0a 09 73 65 72 76 program");......return;..}..serv
9d40 65 5f 64 79 6e 61 6d 69 63 28 66 64 2c 20 66 69 6c 65 6e 61 6d 65 2c 20 63 67 69 61 72 67 73 29 e_dynamic(fd,.filename,.cgiargs)
9d60 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 64 6f 69 74 3a 73 65 ;............//line:netp:doit:se
9d80 72 76 65 64 79 6e 61 6d 69 63 0a 20 20 20 20 7d 0a 7d 0a 2f 2a 20 24 65 6e 64 20 64 6f 69 74 20 rvedynamic.....}.}./*.$end.doit.
9da0 2a 2f 0a 0a 2f 2a 0a 20 2a 20 72 65 61 64 5f 72 65 71 75 65 73 74 68 64 72 73 20 2d 20 72 65 61 */../*..*.read_requesthdrs.-.rea
9dc0 64 20 48 54 54 50 20 72 65 71 75 65 73 74 20 68 65 61 64 65 72 73 0a 20 2a 2f 0a 2f 2a 20 24 62 d.HTTP.request.headers..*/./*.$b
9de0 65 67 69 6e 20 72 65 61 64 5f 72 65 71 75 65 73 74 68 64 72 73 20 2a 2f 0a 76 6f 69 64 20 72 65 egin.read_requesthdrs.*/.void.re
9e00 61 64 5f 72 65 71 75 65 73 74 68 64 72 73 28 72 69 6f 5f 74 20 2a 72 70 29 20 0a 7b 0a 20 20 20 ad_requesthdrs(rio_t.*rp)..{....
9e20 20 63 68 61 72 20 62 75 66 5b 4d 41 58 4c 49 4e 45 5d 3b 0a 0a 20 20 20 20 52 69 6f 5f 72 65 61 .char.buf[MAXLINE];......Rio_rea
9e40 64 6c 69 6e 65 62 28 72 70 2c 20 62 75 66 2c 20 4d 41 58 4c 49 4e 45 29 3b 0a 20 20 20 20 70 72 dlineb(rp,.buf,.MAXLINE);.....pr
9e60 69 6e 74 66 28 22 25 73 22 2c 20 62 75 66 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 73 74 72 63 6d intf("%s",.buf);.....while(strcm
9e80 70 28 62 75 66 2c 20 22 5c 72 5c 6e 22 29 29 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2f 6c 69 6e p(buf,."\r\n")).{..........//lin
9ea0 65 3a 6e 65 74 70 3a 72 65 61 64 68 64 72 73 3a 63 68 65 63 6b 74 65 72 6d 0a 09 52 69 6f 5f 72 e:netp:readhdrs:checkterm..Rio_r
9ec0 65 61 64 6c 69 6e 65 62 28 72 70 2c 20 62 75 66 2c 20 4d 41 58 4c 49 4e 45 29 3b 0a 09 70 72 69 eadlineb(rp,.buf,.MAXLINE);..pri
9ee0 6e 74 66 28 22 25 73 22 2c 20 62 75 66 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e ntf("%s",.buf);.....}.....return
9f00 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 72 65 61 64 5f 72 65 71 75 65 73 74 68 64 72 73 20 2a 2f 0a ;.}./*.$end.read_requesthdrs.*/.
9f20 0a 2f 2a 0a 20 2a 20 70 61 72 73 65 5f 75 72 69 20 2d 20 70 61 72 73 65 20 55 52 49 20 69 6e 74 ./*..*.parse_uri.-.parse.URI.int
9f40 6f 20 66 69 6c 65 6e 61 6d 65 20 61 6e 64 20 43 47 49 20 61 72 67 73 0a 20 2a 20 20 20 20 20 20 o.filename.and.CGI.args..*......
9f60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 20 69 66 20 64 79 6e 61 6d 69 63 20 63 6f 6e 74 65 .......return.0.if.dynamic.conte
9f80 6e 74 2c 20 31 20 69 66 20 73 74 61 74 69 63 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 70 61 nt,.1.if.static..*/./*.$begin.pa
9fa0 72 73 65 5f 75 72 69 20 2a 2f 0a 69 6e 74 20 70 61 72 73 65 5f 75 72 69 28 63 68 61 72 20 2a 75 rse_uri.*/.int.parse_uri(char.*u
9fc0 72 69 2c 20 63 68 61 72 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 63 68 61 72 20 2a 63 67 69 61 72 67 ri,.char.*filename,.char.*cgiarg
9fe0 73 29 20 0a 7b 0a 20 20 20 20 63 68 61 72 20 2a 70 74 72 3b 0a 0a 20 20 20 20 69 66 20 28 21 73 s)..{.....char.*ptr;......if.(!s
a000 74 72 73 74 72 28 75 72 69 2c 20 22 63 67 69 2d 62 69 6e 22 29 29 20 7b 20 20 2f 2a 20 53 74 61 trstr(uri,."cgi-bin")).{../*.Sta
a020 74 69 63 20 63 6f 6e 74 65 6e 74 20 2a 2f 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 70 61 72 73 65 tic.content.*/.//line:netp:parse
a040 75 72 69 3a 69 73 73 74 61 74 69 63 0a 09 73 74 72 63 70 79 28 63 67 69 61 72 67 73 2c 20 22 22 uri:isstatic..strcpy(cgiargs,.""
a060 29 3b 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 2f );............................./
a080 2f 6c 69 6e 65 3a 6e 65 74 70 3a 70 61 72 73 65 75 72 69 3a 63 6c 65 61 72 63 67 69 0a 09 73 74 /line:netp:parseuri:clearcgi..st
a0a0 72 63 70 79 28 66 69 6c 65 6e 61 6d 65 2c 20 22 2e 22 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 rcpy(filename,.".");............
a0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 70 61 72 73 65 ...............//line:netp:parse
a0e0 75 72 69 3a 62 65 67 69 6e 63 6f 6e 76 65 72 74 31 0a 09 73 74 72 63 61 74 28 66 69 6c 65 6e 61 uri:beginconvert1..strcat(filena
a100 6d 65 2c 20 75 72 69 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 me,.uri);.......................
a120 20 20 20 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 70 61 72 73 65 75 72 69 3a 65 6e 64 63 6f 6e 76 ....//line:netp:parseuri:endconv
a140 65 72 74 31 0a 09 69 66 20 28 75 72 69 5b 73 74 72 6c 65 6e 28 75 72 69 29 2d 31 5d 20 3d 3d 20 ert1..if.(uri[strlen(uri)-1].==.
a160 27 2f 27 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 6c 69 6e 65 3a 6e 65 '/')...................//line:ne
a180 74 70 3a 70 61 72 73 65 75 72 69 3a 73 6c 61 73 68 63 68 65 63 6b 0a 09 20 20 20 20 73 74 72 63 tp:parseuri:slashcheck......strc
a1a0 61 74 28 66 69 6c 65 6e 61 6d 65 2c 20 22 68 6f 6d 65 2e 68 74 6d 6c 22 29 3b 20 20 20 20 20 20 at(filename,."home.html");......
a1c0 20 20 20 20 20 20 20 20 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 70 61 72 73 65 75 72 69 3a 61 70 .........//line:netp:parseuri:ap
a1e0 70 65 6e 64 64 65 66 61 75 6c 74 0a 09 72 65 74 75 72 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 penddefault..return.1;.....}....
a200 20 65 6c 73 65 20 7b 20 20 2f 2a 20 44 79 6e 61 6d 69 63 20 63 6f 6e 74 65 6e 74 20 2a 2f 20 20 .else.{../*.Dynamic.content.*/..
a220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 6c 69 6e 65 3a 6e 65 74 ......................//line:net
a240 70 3a 70 61 72 73 65 75 72 69 3a 69 73 64 79 6e 61 6d 69 63 0a 09 70 74 72 20 3d 20 69 6e 64 65 p:parseuri:isdynamic..ptr.=.inde
a260 78 28 75 72 69 2c 20 27 3f 27 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 x(uri,.'?');....................
a280 20 20 20 20 20 20 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 70 61 72 73 65 75 72 69 3a 62 65 67 69 .......//line:netp:parseuri:begi
a2a0 6e 65 78 74 72 61 63 74 0a 09 69 66 20 28 70 74 72 29 20 7b 0a 09 20 20 20 20 73 74 72 63 70 79 nextract..if.(ptr).{......strcpy
a2c0 28 63 67 69 61 72 67 73 2c 20 70 74 72 2b 31 29 3b 0a 09 20 20 20 20 2a 70 74 72 20 3d 20 27 5c (cgiargs,.ptr+1);......*ptr.=.'\
a2e0 30 27 3b 0a 09 7d 0a 09 65 6c 73 65 20 0a 09 20 20 20 20 73 74 72 63 70 79 28 63 67 69 61 72 67 0';..}..else.......strcpy(cgiarg
a300 73 2c 20 22 22 29 3b 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 s,."");.........................
a320 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 70 61 72 73 65 75 72 69 3a 65 6e 64 65 78 74 72 61 63 74 0a //line:netp:parseuri:endextract.
a340 09 73 74 72 63 70 79 28 66 69 6c 65 6e 61 6d 65 2c 20 22 2e 22 29 3b 20 20 20 20 20 20 20 20 20 .strcpy(filename,.".");.........
a360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 70 61 ..................//line:netp:pa
a380 72 73 65 75 72 69 3a 62 65 67 69 6e 63 6f 6e 76 65 72 74 32 0a 09 73 74 72 63 61 74 28 66 69 6c rseuri:beginconvert2..strcat(fil
a3a0 65 6e 61 6d 65 2c 20 75 72 69 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ename,.uri);....................
a3c0 20 20 20 20 20 20 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 70 61 72 73 65 75 72 69 3a 65 6e 64 63 .......//line:netp:parseuri:endc
a3e0 6f 6e 76 65 72 74 32 0a 09 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 7d 0a 2f 2a 20 24 65 onvert2..return.0;.....}.}./*.$e
a400 6e 64 20 70 61 72 73 65 5f 75 72 69 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 73 65 72 76 65 5f 73 74 61 nd.parse_uri.*/../*..*.serve_sta
a420 74 69 63 20 2d 20 63 6f 70 79 20 61 20 66 69 6c 65 20 62 61 63 6b 20 74 6f 20 74 68 65 20 63 6c tic.-.copy.a.file.back.to.the.cl
a440 69 65 6e 74 20 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 73 65 72 76 65 5f 73 74 61 74 69 63 ient...*/./*.$begin.serve_static
a460 20 2a 2f 0a 76 6f 69 64 20 73 65 72 76 65 5f 73 74 61 74 69 63 28 69 6e 74 20 66 64 2c 20 63 68 .*/.void.serve_static(int.fd,.ch
a480 61 72 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 69 6e 74 20 66 69 6c 65 73 69 7a 65 29 0a 7b 0a 20 20 ar.*filename,.int.filesize).{...
a4a0 20 20 69 6e 74 20 73 72 63 66 64 3b 0a 20 20 20 20 63 68 61 72 20 2a 73 72 63 70 2c 20 66 69 6c ..int.srcfd;.....char.*srcp,.fil
a4c0 65 74 79 70 65 5b 4d 41 58 4c 49 4e 45 5d 2c 20 62 75 66 5b 4d 41 58 42 55 46 5d 3b 0a 0a 20 20 etype[MAXLINE],.buf[MAXBUF];....
a4e0 20 20 2f 2a 20 53 65 6e 64 20 72 65 73 70 6f 6e 73 65 20 68 65 61 64 65 72 73 20 74 6f 20 63 6c ../*.Send.response.headers.to.cl
a500 69 65 6e 74 20 2a 2f 0a 20 20 20 20 67 65 74 5f 66 69 6c 65 74 79 70 65 28 66 69 6c 65 6e 61 6d ient.*/.....get_filetype(filenam
a520 65 2c 20 66 69 6c 65 74 79 70 65 29 3b 20 20 20 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 73 65 72 e,.filetype);....//line:netp:ser
a540 76 65 73 74 61 74 69 63 3a 67 65 74 66 69 6c 65 74 79 70 65 0a 20 20 20 20 73 70 72 69 6e 74 66 vestatic:getfiletype.....sprintf
a560 28 62 75 66 2c 20 22 48 54 54 50 2f 31 2e 30 20 32 30 30 20 4f 4b 5c 72 5c 6e 22 29 3b 20 2f 2f (buf,."HTTP/1.0.200.OK\r\n");.//
a580 6c 69 6e 65 3a 6e 65 74 70 3a 73 65 72 76 65 73 74 61 74 69 63 3a 62 65 67 69 6e 73 65 72 76 65 line:netp:servestatic:beginserve
a5a0 0a 20 20 20 20 52 69 6f 5f 77 72 69 74 65 6e 28 66 64 2c 20 62 75 66 2c 20 73 74 72 6c 65 6e 28 .....Rio_writen(fd,.buf,.strlen(
a5c0 62 75 66 29 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 62 75 66 2c 20 22 53 65 72 76 65 72 3a buf));.....sprintf(buf,."Server:
a5e0 20 54 69 6e 79 20 57 65 62 20 53 65 72 76 65 72 5c 72 5c 6e 22 29 3b 0a 20 20 20 20 52 69 6f 5f .Tiny.Web.Server\r\n");.....Rio_
a600 77 72 69 74 65 6e 28 66 64 2c 20 62 75 66 2c 20 73 74 72 6c 65 6e 28 62 75 66 29 29 3b 0a 20 20 writen(fd,.buf,.strlen(buf));...
a620 20 20 73 70 72 69 6e 74 66 28 62 75 66 2c 20 22 43 6f 6e 74 65 6e 74 2d 6c 65 6e 67 74 68 3a 20 ..sprintf(buf,."Content-length:.
a640 25 64 5c 72 5c 6e 22 2c 20 66 69 6c 65 73 69 7a 65 29 3b 0a 20 20 20 20 52 69 6f 5f 77 72 69 74 %d\r\n",.filesize);.....Rio_writ
a660 65 6e 28 66 64 2c 20 62 75 66 2c 20 73 74 72 6c 65 6e 28 62 75 66 29 29 3b 0a 20 20 20 20 73 70 en(fd,.buf,.strlen(buf));.....sp
a680 72 69 6e 74 66 28 62 75 66 2c 20 22 43 6f 6e 74 65 6e 74 2d 74 79 70 65 3a 20 25 73 5c 72 5c 6e rintf(buf,."Content-type:.%s\r\n
a6a0 5c 72 5c 6e 22 2c 20 66 69 6c 65 74 79 70 65 29 3b 0a 20 20 20 20 52 69 6f 5f 77 72 69 74 65 6e \r\n",.filetype);.....Rio_writen
a6c0 28 66 64 2c 20 62 75 66 2c 20 73 74 72 6c 65 6e 28 62 75 66 29 29 3b 20 20 20 20 2f 2f 6c 69 6e (fd,.buf,.strlen(buf));....//lin
a6e0 65 3a 6e 65 74 70 3a 73 65 72 76 65 73 74 61 74 69 63 3a 65 6e 64 73 65 72 76 65 0a 0a 20 20 20 e:netp:servestatic:endserve.....
a700 20 2f 2a 20 53 65 6e 64 20 72 65 73 70 6f 6e 73 65 20 62 6f 64 79 20 74 6f 20 63 6c 69 65 6e 74 ./*.Send.response.body.to.client
a720 20 2a 2f 0a 20 20 20 20 73 72 63 66 64 20 3d 20 4f 70 65 6e 28 66 69 6c 65 6e 61 6d 65 2c 20 4f .*/.....srcfd.=.Open(filename,.O
a740 5f 52 44 4f 4e 4c 59 2c 20 30 29 3b 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 73 65 72 76 65 73 74 _RDONLY,.0);.//line:netp:servest
a760 61 74 69 63 3a 6f 70 65 6e 0a 20 20 20 20 73 72 63 70 20 3d 20 4d 6d 61 70 28 30 2c 20 66 69 6c atic:open.....srcp.=.Mmap(0,.fil
a780 65 73 69 7a 65 2c 20 50 52 4f 54 5f 52 45 41 44 2c 20 4d 41 50 5f 50 52 49 56 41 54 45 2c 20 73 esize,.PROT_READ,.MAP_PRIVATE,.s
a7a0 72 63 66 64 2c 20 30 29 3b 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 73 65 72 76 65 73 74 61 74 69 rcfd,.0);.//line:netp:servestati
a7c0 63 3a 6d 6d 61 70 0a 20 20 20 20 43 6c 6f 73 65 28 73 72 63 66 64 29 3b 20 20 20 20 20 20 20 20 c:mmap.....Close(srcfd);........
a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 73 65 72 76 65 ...............//line:netp:serve
a800 73 74 61 74 69 63 3a 63 6c 6f 73 65 0a 20 20 20 20 52 69 6f 5f 77 72 69 74 65 6e 28 66 64 2c 20 static:close.....Rio_writen(fd,.
a820 73 72 63 70 2c 20 66 69 6c 65 73 69 7a 65 29 3b 20 20 20 20 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 srcp,.filesize);.....//line:netp
a840 3a 73 65 72 76 65 73 74 61 74 69 63 3a 77 72 69 74 65 0a 20 20 20 20 4d 75 6e 6d 61 70 28 73 72 :servestatic:write.....Munmap(sr
a860 63 70 2c 20 66 69 6c 65 73 69 7a 65 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 6c 69 6e cp,.filesize);.............//lin
a880 65 3a 6e 65 74 70 3a 73 65 72 76 65 73 74 61 74 69 63 3a 6d 75 6e 6d 61 70 0a 7d 0a 0a 2f 2a 0a e:netp:servestatic:munmap.}../*.
a8a0 20 2a 20 67 65 74 5f 66 69 6c 65 74 79 70 65 20 2d 20 64 65 72 69 76 65 20 66 69 6c 65 20 74 79 .*.get_filetype.-.derive.file.ty
a8c0 70 65 20 66 72 6f 6d 20 66 69 6c 65 20 6e 61 6d 65 0a 20 2a 2f 0a 76 6f 69 64 20 67 65 74 5f 66 pe.from.file.name..*/.void.get_f
a8e0 69 6c 65 74 79 70 65 28 63 68 61 72 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 63 68 61 72 20 2a 66 69 iletype(char.*filename,.char.*fi
a900 6c 65 74 79 70 65 29 20 0a 7b 0a 20 20 20 20 69 66 20 28 73 74 72 73 74 72 28 66 69 6c 65 6e 61 letype)..{.....if.(strstr(filena
a920 6d 65 2c 20 22 2e 68 74 6d 6c 22 29 29 0a 09 73 74 72 63 70 79 28 66 69 6c 65 74 79 70 65 2c 20 me,.".html"))..strcpy(filetype,.
a940 22 74 65 78 74 2f 68 74 6d 6c 22 29 3b 0a 20 20 20 20 65 6c 73 65 20 69 66 20 28 73 74 72 73 74 "text/html");.....else.if.(strst
a960 72 28 66 69 6c 65 6e 61 6d 65 2c 20 22 2e 67 69 66 22 29 29 0a 09 73 74 72 63 70 79 28 66 69 6c r(filename,.".gif"))..strcpy(fil
a980 65 74 79 70 65 2c 20 22 69 6d 61 67 65 2f 67 69 66 22 29 3b 0a 20 20 20 20 65 6c 73 65 20 69 66 etype,."image/gif");.....else.if
a9a0 20 28 73 74 72 73 74 72 28 66 69 6c 65 6e 61 6d 65 2c 20 22 2e 70 6e 67 22 29 29 0a 09 73 74 72 .(strstr(filename,.".png"))..str
a9c0 63 70 79 28 66 69 6c 65 74 79 70 65 2c 20 22 69 6d 61 67 65 2f 70 6e 67 22 29 3b 0a 20 20 20 20 cpy(filetype,."image/png");.....
a9e0 65 6c 73 65 20 69 66 20 28 73 74 72 73 74 72 28 66 69 6c 65 6e 61 6d 65 2c 20 22 2e 6a 70 67 22 else.if.(strstr(filename,.".jpg"
aa00 29 29 0a 09 73 74 72 63 70 79 28 66 69 6c 65 74 79 70 65 2c 20 22 69 6d 61 67 65 2f 6a 70 65 67 ))..strcpy(filetype,."image/jpeg
aa20 22 29 3b 0a 20 20 20 20 65 6c 73 65 0a 09 73 74 72 63 70 79 28 66 69 6c 65 74 79 70 65 2c 20 22 ");.....else..strcpy(filetype,."
aa40 74 65 78 74 2f 70 6c 61 69 6e 22 29 3b 0a 7d 20 20 0a 2f 2a 20 24 65 6e 64 20 73 65 72 76 65 5f text/plain");.}.../*.$end.serve_
aa60 73 74 61 74 69 63 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 73 65 72 76 65 5f 64 79 6e 61 6d 69 63 20 2d static.*/../*..*.serve_dynamic.-
aa80 20 72 75 6e 20 61 20 43 47 49 20 70 72 6f 67 72 61 6d 20 6f 6e 20 62 65 68 61 6c 66 20 6f 66 20 .run.a.CGI.program.on.behalf.of.
aaa0 74 68 65 20 63 6c 69 65 6e 74 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 73 65 72 76 65 5f 64 the.client..*/./*.$begin.serve_d
aac0 79 6e 61 6d 69 63 20 2a 2f 0a 76 6f 69 64 20 73 65 72 76 65 5f 64 79 6e 61 6d 69 63 28 69 6e 74 ynamic.*/.void.serve_dynamic(int
aae0 20 66 64 2c 20 63 68 61 72 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 63 68 61 72 20 2a 63 67 69 61 72 .fd,.char.*filename,.char.*cgiar
ab00 67 73 29 20 0a 7b 0a 20 20 20 20 63 68 61 72 20 62 75 66 5b 4d 41 58 4c 49 4e 45 5d 2c 20 2a 65 gs)..{.....char.buf[MAXLINE],.*e
ab20 6d 70 74 79 6c 69 73 74 5b 5d 20 3d 20 7b 20 4e 55 4c 4c 20 7d 3b 0a 0a 20 20 20 20 2f 2a 20 52 mptylist[].=.{.NULL.};....../*.R
ab40 65 74 75 72 6e 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 48 54 54 50 20 72 65 73 70 6f 6e 73 eturn.first.part.of.HTTP.respons
ab60 65 20 2a 2f 0a 20 20 20 20 73 70 72 69 6e 74 66 28 62 75 66 2c 20 22 48 54 54 50 2f 31 2e 30 20 e.*/.....sprintf(buf,."HTTP/1.0.
ab80 32 30 30 20 4f 4b 5c 72 5c 6e 22 29 3b 20 0a 20 20 20 20 52 69 6f 5f 77 72 69 74 65 6e 28 66 64 200.OK\r\n");......Rio_writen(fd
aba0 2c 20 62 75 66 2c 20 73 74 72 6c 65 6e 28 62 75 66 29 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 ,.buf,.strlen(buf));.....sprintf
abc0 28 62 75 66 2c 20 22 53 65 72 76 65 72 3a 20 54 69 6e 79 20 57 65 62 20 53 65 72 76 65 72 5c 72 (buf,."Server:.Tiny.Web.Server\r
abe0 5c 6e 22 29 3b 0a 20 20 20 20 52 69 6f 5f 77 72 69 74 65 6e 28 66 64 2c 20 62 75 66 2c 20 73 74 \n");.....Rio_writen(fd,.buf,.st
ac00 72 6c 65 6e 28 62 75 66 29 29 3b 0a 20 20 0a 20 20 20 20 69 66 20 28 46 6f 72 6b 28 29 20 3d 3d rlen(buf));........if.(Fork().==
ac20 20 30 29 20 7b 20 2f 2a 20 43 68 69 6c 64 20 2a 2f 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 73 65 .0).{./*.Child.*/.//line:netp:se
ac40 72 76 65 64 79 6e 61 6d 69 63 3a 66 6f 72 6b 0a 09 2f 2a 20 52 65 61 6c 20 73 65 72 76 65 72 20 rvedynamic:fork../*.Real.server.
ac60 77 6f 75 6c 64 20 73 65 74 20 61 6c 6c 20 43 47 49 20 76 61 72 73 20 68 65 72 65 20 2a 2f 0a 09 would.set.all.CGI.vars.here.*/..
ac80 73 65 74 65 6e 76 28 22 51 55 45 52 59 5f 53 54 52 49 4e 47 22 2c 20 63 67 69 61 72 67 73 2c 20 setenv("QUERY_STRING",.cgiargs,.
aca0 31 29 3b 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 73 65 72 76 65 64 79 6e 61 6d 69 63 3a 73 65 74 1);.//line:netp:servedynamic:set
acc0 65 6e 76 0a 09 44 75 70 32 28 66 64 2c 20 53 54 44 4f 55 54 5f 46 49 4c 45 4e 4f 29 3b 20 20 20 env..Dup2(fd,.STDOUT_FILENO);...
ace0 20 20 20 20 20 20 2f 2a 20 52 65 64 69 72 65 63 74 20 73 74 64 6f 75 74 20 74 6f 20 63 6c 69 65 ....../*.Redirect.stdout.to.clie
ad00 6e 74 20 2a 2f 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 73 65 72 76 65 64 79 6e 61 6d 69 63 3a 64 nt.*/.//line:netp:servedynamic:d
ad20 75 70 32 0a 09 45 78 65 63 76 65 28 66 69 6c 65 6e 61 6d 65 2c 20 65 6d 70 74 79 6c 69 73 74 2c up2..Execve(filename,.emptylist,
ad40 20 65 6e 76 69 72 6f 6e 29 3b 20 2f 2a 20 52 75 6e 20 43 47 49 20 70 72 6f 67 72 61 6d 20 2a 2f .environ);./*.Run.CGI.program.*/
ad60 20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 73 65 72 76 65 64 79 6e 61 6d 69 63 3a 65 78 65 63 76 65 .//line:netp:servedynamic:execve
ad80 0a 20 20 20 20 7d 0a 20 20 20 20 57 61 69 74 28 4e 55 4c 4c 29 3b 20 2f 2a 20 50 61 72 65 6e 74 .....}.....Wait(NULL);./*.Parent
ada0 20 77 61 69 74 73 20 66 6f 72 20 61 6e 64 20 72 65 61 70 73 20 63 68 69 6c 64 20 2a 2f 20 2f 2f .waits.for.and.reaps.child.*/.//
adc0 6c 69 6e 65 3a 6e 65 74 70 3a 73 65 72 76 65 64 79 6e 61 6d 69 63 3a 77 61 69 74 0a 7d 0a 2f 2a line:netp:servedynamic:wait.}./*
ade0 20 24 65 6e 64 20 73 65 72 76 65 5f 64 79 6e 61 6d 69 63 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 63 6c .$end.serve_dynamic.*/../*..*.cl
ae00 69 65 6e 74 65 72 72 6f 72 20 2d 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 ienterror.-.returns.an.error.mes
ae20 73 61 67 65 20 74 6f 20 74 68 65 20 63 6c 69 65 6e 74 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e sage.to.the.client..*/./*.$begin
ae40 20 63 6c 69 65 6e 74 65 72 72 6f 72 20 2a 2f 0a 76 6f 69 64 20 63 6c 69 65 6e 74 65 72 72 6f 72 .clienterror.*/.void.clienterror
ae60 28 69 6e 74 20 66 64 2c 20 63 68 61 72 20 2a 63 61 75 73 65 2c 20 63 68 61 72 20 2a 65 72 72 6e (int.fd,.char.*cause,.char.*errn
ae80 75 6d 2c 20 0a 09 09 20 63 68 61 72 20 2a 73 68 6f 72 74 6d 73 67 2c 20 63 68 61 72 20 2a 6c 6f um,.....char.*shortmsg,.char.*lo
aea0 6e 67 6d 73 67 29 20 0a 7b 0a 20 20 20 20 63 68 61 72 20 62 75 66 5b 4d 41 58 4c 49 4e 45 5d 3b ngmsg)..{.....char.buf[MAXLINE];
aec0 0a 0a 20 20 20 20 2f 2a 20 50 72 69 6e 74 20 74 68 65 20 48 54 54 50 20 72 65 73 70 6f 6e 73 65 ....../*.Print.the.HTTP.response
aee0 20 68 65 61 64 65 72 73 20 2a 2f 0a 20 20 20 20 73 70 72 69 6e 74 66 28 62 75 66 2c 20 22 48 54 .headers.*/.....sprintf(buf,."HT
af00 54 50 2f 31 2e 30 20 25 73 20 25 73 5c 72 5c 6e 22 2c 20 65 72 72 6e 75 6d 2c 20 73 68 6f 72 74 TP/1.0.%s.%s\r\n",.errnum,.short
af20 6d 73 67 29 3b 0a 20 20 20 20 52 69 6f 5f 77 72 69 74 65 6e 28 66 64 2c 20 62 75 66 2c 20 73 74 msg);.....Rio_writen(fd,.buf,.st
af40 72 6c 65 6e 28 62 75 66 29 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 62 75 66 2c 20 22 43 6f rlen(buf));.....sprintf(buf,."Co
af60 6e 74 65 6e 74 2d 74 79 70 65 3a 20 74 65 78 74 2f 68 74 6d 6c 5c 72 5c 6e 5c 72 5c 6e 22 29 3b ntent-type:.text/html\r\n\r\n");
af80 0a 20 20 20 20 52 69 6f 5f 77 72 69 74 65 6e 28 66 64 2c 20 62 75 66 2c 20 73 74 72 6c 65 6e 28 .....Rio_writen(fd,.buf,.strlen(
afa0 62 75 66 29 29 3b 0a 0a 20 20 20 20 2f 2a 20 50 72 69 6e 74 20 74 68 65 20 48 54 54 50 20 72 65 buf));....../*.Print.the.HTTP.re
afc0 73 70 6f 6e 73 65 20 62 6f 64 79 20 2a 2f 0a 20 20 20 20 73 70 72 69 6e 74 66 28 62 75 66 2c 20 sponse.body.*/.....sprintf(buf,.
afe0 22 3c 68 74 6d 6c 3e 3c 74 69 74 6c 65 3e 54 69 6e 79 20 45 72 72 6f 72 3c 2f 74 69 74 6c 65 3e "<html><title>Tiny.Error</title>
b000 22 29 3b 0a 20 20 20 20 52 69 6f 5f 77 72 69 74 65 6e 28 66 64 2c 20 62 75 66 2c 20 73 74 72 6c ");.....Rio_writen(fd,.buf,.strl
b020 65 6e 28 62 75 66 29 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 62 75 66 2c 20 22 3c 62 6f 64 en(buf));.....sprintf(buf,."<bod
b040 79 20 62 67 63 6f 6c 6f 72 3d 22 22 66 66 66 66 66 66 22 22 3e 5c 72 5c 6e 22 29 3b 0a 20 20 20 y.bgcolor=""ffffff"">\r\n");....
b060 20 52 69 6f 5f 77 72 69 74 65 6e 28 66 64 2c 20 62 75 66 2c 20 73 74 72 6c 65 6e 28 62 75 66 29 .Rio_writen(fd,.buf,.strlen(buf)
b080 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 62 75 66 2c 20 22 25 73 3a 20 25 73 5c 72 5c 6e 22 );.....sprintf(buf,."%s:.%s\r\n"
b0a0 2c 20 65 72 72 6e 75 6d 2c 20 73 68 6f 72 74 6d 73 67 29 3b 0a 20 20 20 20 52 69 6f 5f 77 72 69 ,.errnum,.shortmsg);.....Rio_wri
b0c0 74 65 6e 28 66 64 2c 20 62 75 66 2c 20 73 74 72 6c 65 6e 28 62 75 66 29 29 3b 0a 20 20 20 20 73 ten(fd,.buf,.strlen(buf));.....s
b0e0 70 72 69 6e 74 66 28 62 75 66 2c 20 22 3c 70 3e 25 73 3a 20 25 73 5c 72 5c 6e 22 2c 20 6c 6f 6e printf(buf,."<p>%s:.%s\r\n",.lon
b100 67 6d 73 67 2c 20 63 61 75 73 65 29 3b 0a 20 20 20 20 52 69 6f 5f 77 72 69 74 65 6e 28 66 64 2c gmsg,.cause);.....Rio_writen(fd,
b120 20 62 75 66 2c 20 73 74 72 6c 65 6e 28 62 75 66 29 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 .buf,.strlen(buf));.....sprintf(
b140 62 75 66 2c 20 22 3c 68 72 3e 3c 65 6d 3e 54 68 65 20 54 69 6e 79 20 57 65 62 20 73 65 72 76 65 buf,."<hr><em>The.Tiny.Web.serve
b160 72 3c 2f 65 6d 3e 5c 72 5c 6e 22 29 3b 0a 20 20 20 20 52 69 6f 5f 77 72 69 74 65 6e 28 66 64 2c r</em>\r\n");.....Rio_writen(fd,
b180 20 62 75 66 2c 20 73 74 72 6c 65 6e 28 62 75 66 29 29 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 63 6c .buf,.strlen(buf));.}./*.$end.cl
b1a0 69 65 6e 74 65 72 72 6f 72 20 2a 2f 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ienterror.*/....................
b1c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b1e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b200 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 74 69 6e 79 2f 63 73 61 70 70 2e 63 00 00 00 proxylab-handout/tiny/csapp.c...
b220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b260 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000644.0006626.0000144.0000
b280 30 30 35 36 37 34 33 00 31 33 35 36 33 33 31 30 30 32 36 00 30 31 34 36 33 36 00 20 30 00 00 00 0056743.13563310026.014636..0...
b2a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b2c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b2e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b300 00 75 73 74 61 72 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
b320 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
b340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b3a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b3c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b3e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
b400 2f 2a 20 0a 20 2a 20 63 73 61 70 70 2e 63 20 2d 20 46 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20 74 /*...*.csapp.c.-.Functions.for.t
b420 68 65 20 43 53 3a 41 50 50 33 65 20 62 6f 6f 6b 0a 20 2a 0a 20 2a 20 55 70 64 61 74 65 64 20 31 he.CS:APP3e.book..*..*.Updated.1
b440 30 2f 32 30 31 36 20 72 65 62 3a 0a 20 2a 20 20 20 2d 20 46 69 78 65 64 20 62 75 67 20 69 6e 20 0/2016.reb:..*...-.Fixed.bug.in.
b460 73 69 6f 5f 6c 74 6f 61 20 74 68 61 74 20 64 69 64 6e 27 74 20 63 6f 76 65 72 20 6e 65 67 61 74 sio_ltoa.that.didn't.cover.negat
b480 69 76 65 20 6e 75 6d 62 65 72 73 0a 20 2a 0a 20 2a 20 55 70 64 61 74 65 64 20 32 2f 32 30 31 36 ive.numbers..*..*.Updated.2/2016
b4a0 20 64 72 6f 68 3a 0a 20 2a 20 20 20 2d 20 55 70 64 61 74 65 64 20 6f 70 65 6e 5f 63 6c 69 65 6e .droh:..*...-.Updated.open_clien
b4c0 74 66 64 20 61 6e 64 20 6f 70 65 6e 5f 6c 69 73 74 65 6e 66 64 20 74 6f 20 66 61 69 6c 20 6d 6f tfd.and.open_listenfd.to.fail.mo
b4e0 72 65 20 67 72 61 63 65 66 75 6c 6c 79 0a 20 2a 0a 20 2a 20 55 70 64 61 74 65 64 20 38 2f 32 30 re.gracefully..*..*.Updated.8/20
b500 31 34 20 64 72 6f 68 3a 20 0a 20 2a 20 20 20 2d 20 4e 65 77 20 76 65 72 73 69 6f 6e 73 20 6f 66 14.droh:...*...-.New.versions.of
b520 20 6f 70 65 6e 5f 63 6c 69 65 6e 74 66 64 20 61 6e 64 20 6f 70 65 6e 5f 6c 69 73 74 65 6e 66 64 .open_clientfd.and.open_listenfd
b540 20 61 72 65 20 72 65 65 6e 74 72 61 6e 74 20 61 6e 64 0a 20 2a 20 20 20 20 20 70 72 6f 74 6f 63 .are.reentrant.and..*.....protoc
b560 6f 6c 20 69 6e 64 65 70 65 6e 64 65 6e 74 2e 0a 20 2a 0a 20 2a 20 20 20 2d 20 41 64 64 65 64 20 ol.independent...*..*...-.Added.
b580 70 72 6f 74 6f 63 6f 6c 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 69 6e 65 74 5f 6e 74 6f 70 20 61 protocol-independent.inet_ntop.a
b5a0 6e 64 20 69 6e 65 74 5f 70 74 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 2e 20 54 68 65 0a 20 2a 20 20 nd.inet_pton.functions..The..*..
b5c0 20 20 20 69 6e 65 74 5f 6e 74 6f 61 20 61 6e 64 20 69 6e 65 74 5f 61 74 6f 6e 20 66 75 6e 63 74 ...inet_ntoa.and.inet_aton.funct
b5e0 69 6f 6e 73 20 61 72 65 20 6f 62 73 6f 6c 65 74 65 2e 0a 20 2a 0a 20 2a 20 55 70 64 61 74 65 64 ions.are.obsolete...*..*.Updated
b600 20 37 2f 32 30 31 34 20 64 72 6f 68 3a 0a 20 2a 20 20 20 2d 20 41 64 65 64 20 72 65 65 6e 74 72 .7/2014.droh:..*...-.Aded.reentr
b620 61 6e 74 20 73 69 6f 20 28 73 69 67 6e 61 6c 2d 73 61 66 65 20 49 2f 4f 29 20 72 6f 75 74 69 6e ant.sio.(signal-safe.I/O).routin
b640 65 73 0a 20 2a 20 0a 20 2a 20 55 70 64 61 74 65 64 20 34 2f 32 30 31 33 20 64 72 6f 68 3a 20 0a es..*...*.Updated.4/2013.droh:..
b660 20 2a 20 20 20 2d 20 72 69 6f 5f 72 65 61 64 6c 69 6e 65 62 3a 20 66 69 78 65 64 20 65 64 67 65 .*...-.rio_readlineb:.fixed.edge
b680 20 63 61 73 65 20 62 75 67 0a 20 2a 20 20 20 2d 20 72 69 6f 5f 72 65 61 64 6e 62 3a 20 72 65 6d .case.bug..*...-.rio_readnb:.rem
b6a0 6f 76 65 64 20 72 65 64 75 6e 64 61 6e 74 20 45 49 4e 54 52 20 63 68 65 63 6b 0a 20 2a 2f 0a 2f oved.redundant.EINTR.check..*/./
b6c0 2a 20 24 62 65 67 69 6e 20 63 73 61 70 70 2e 63 20 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 63 73 *.$begin.csapp.c.*/.#include."cs
b6e0 61 70 70 2e 68 22 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a app.h"../***********************
b700 2a 2a 2a 20 0a 20 2a 20 45 72 72 6f 72 2d 68 61 6e 64 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 ***...*.Error-handling.functions
b720 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 2f 2a ..**************************/./*
b740 20 24 62 65 67 69 6e 20 65 72 72 6f 72 66 75 6e 73 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 75 .$begin.errorfuns.*/./*.$begin.u
b760 6e 69 78 65 72 72 6f 72 20 2a 2f 0a 76 6f 69 64 20 75 6e 69 78 5f 65 72 72 6f 72 28 63 68 61 72 nixerror.*/.void.unix_error(char
b780 20 2a 6d 73 67 29 20 2f 2a 20 55 6e 69 78 2d 73 74 79 6c 65 20 65 72 72 6f 72 20 2a 2f 0a 7b 0a .*msg)./*.Unix-style.error.*/.{.
b7a0 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 3a 20 25 73 5c 6e 22 2c 20 ....fprintf(stderr,."%s:.%s\n",.
b7c0 6d 73 67 2c 20 73 74 72 65 72 72 6f 72 28 65 72 72 6e 6f 29 29 3b 0a 20 20 20 20 65 78 69 74 28 msg,.strerror(errno));.....exit(
b7e0 30 29 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 75 6e 69 78 65 72 72 6f 72 20 2a 2f 0a 0a 76 6f 69 64 0);.}./*.$end.unixerror.*/..void
b800 20 70 6f 73 69 78 5f 65 72 72 6f 72 28 69 6e 74 20 63 6f 64 65 2c 20 63 68 61 72 20 2a 6d 73 67 .posix_error(int.code,.char.*msg
b820 29 20 2f 2a 20 50 6f 73 69 78 2d 73 74 79 6c 65 20 65 72 72 6f 72 20 2a 2f 0a 7b 0a 20 20 20 20 )./*.Posix-style.error.*/.{.....
b840 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 3a 20 25 73 5c 6e 22 2c 20 6d 73 67 2c fprintf(stderr,."%s:.%s\n",.msg,
b860 20 73 74 72 65 72 72 6f 72 28 63 6f 64 65 29 29 3b 0a 20 20 20 20 65 78 69 74 28 30 29 3b 0a 7d .strerror(code));.....exit(0);.}
b880 0a 0a 76 6f 69 64 20 67 61 69 5f 65 72 72 6f 72 28 69 6e 74 20 63 6f 64 65 2c 20 63 68 61 72 20 ..void.gai_error(int.code,.char.
b8a0 2a 6d 73 67 29 20 2f 2a 20 47 65 74 61 64 64 72 69 6e 66 6f 2d 73 74 79 6c 65 20 65 72 72 6f 72 *msg)./*.Getaddrinfo-style.error
b8c0 20 2a 2f 0a 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 3a 20 25 .*/.{.....fprintf(stderr,."%s:.%
b8e0 73 5c 6e 22 2c 20 6d 73 67 2c 20 67 61 69 5f 73 74 72 65 72 72 6f 72 28 63 6f 64 65 29 29 3b 0a s\n",.msg,.gai_strerror(code));.
b900 20 20 20 20 65 78 69 74 28 30 29 3b 0a 7d 0a 0a 76 6f 69 64 20 61 70 70 5f 65 72 72 6f 72 28 63 ....exit(0);.}..void.app_error(c
b920 68 61 72 20 2a 6d 73 67 29 20 2f 2a 20 41 70 70 6c 69 63 61 74 69 6f 6e 20 65 72 72 6f 72 20 2a har.*msg)./*.Application.error.*
b940 2f 0a 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 5c 6e 22 2c 20 /.{.....fprintf(stderr,."%s\n",.
b960 6d 73 67 29 3b 0a 20 20 20 20 65 78 69 74 28 30 29 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 65 72 72 msg);.....exit(0);.}./*.$end.err
b980 6f 72 66 75 6e 73 20 2a 2f 0a 0a 76 6f 69 64 20 64 6e 73 5f 65 72 72 6f 72 28 63 68 61 72 20 2a orfuns.*/..void.dns_error(char.*
b9a0 6d 73 67 29 20 2f 2a 20 4f 62 73 6f 6c 65 74 65 20 67 65 74 68 6f 73 74 62 79 6e 61 6d 65 20 65 msg)./*.Obsolete.gethostbyname.e
b9c0 72 72 6f 72 20 2a 2f 0a 7b 0a 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 25 rror.*/.{.....fprintf(stderr,."%
b9e0 73 5c 6e 22 2c 20 6d 73 67 29 3b 0a 20 20 20 20 65 78 69 74 28 30 29 3b 0a 7d 0a 0a 0a 2f 2a 2a s\n",.msg);.....exit(0);.}.../**
ba00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ********************************
ba20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 57 72 61 70 70 65 72 73 20 66 6f 72 20 55 6e 69 78 ***********..*.Wrappers.for.Unix
ba40 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 72 6f 6c 20 66 75 6e 63 74 69 6f 6e 73 0a 20 2a 2a 2a 2a .process.control.functions..****
ba60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ********************************
ba80 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 24 62 65 67 69 6e 20 66 6f 72 6b 77 72 61 70 70 65 72 ********/../*.$begin.forkwrapper
baa0 20 2a 2f 0a 70 69 64 5f 74 20 46 6f 72 6b 28 76 6f 69 64 29 20 0a 7b 0a 20 20 20 20 70 69 64 5f .*/.pid_t.Fork(void)..{.....pid_
bac0 74 20 70 69 64 3b 0a 0a 20 20 20 20 69 66 20 28 28 70 69 64 20 3d 20 66 6f 72 6b 28 29 29 20 3c t.pid;......if.((pid.=.fork()).<
bae0 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 46 6f 72 6b 20 65 72 72 6f 72 22 29 3b 0a 20 .0)..unix_error("Fork.error");..
bb00 20 20 20 72 65 74 75 72 6e 20 70 69 64 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 66 6f 72 6b 77 72 61 ...return.pid;.}./*.$end.forkwra
bb20 70 70 65 72 20 2a 2f 0a 0a 76 6f 69 64 20 45 78 65 63 76 65 28 63 6f 6e 73 74 20 63 68 61 72 20 pper.*/..void.Execve(const.char.
bb40 2a 66 69 6c 65 6e 61 6d 65 2c 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 61 72 67 76 5b 5d 2c 20 63 *filename,.char.*const.argv[],.c
bb60 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e 76 70 5b 5d 29 20 0a 7b 0a 20 20 20 20 69 66 20 28 65 78 har.*const.envp[])..{.....if.(ex
bb80 65 63 76 65 28 66 69 6c 65 6e 61 6d 65 2c 20 61 72 67 76 2c 20 65 6e 76 70 29 20 3c 20 30 29 0a ecve(filename,.argv,.envp).<.0).
bba0 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 45 78 65 63 76 65 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a .unix_error("Execve.error");.}..
bbc0 2f 2a 20 24 62 65 67 69 6e 20 77 61 69 74 20 2a 2f 0a 70 69 64 5f 74 20 57 61 69 74 28 69 6e 74 /*.$begin.wait.*/.pid_t.Wait(int
bbe0 20 2a 73 74 61 74 75 73 29 20 0a 7b 0a 20 20 20 20 70 69 64 5f 74 20 70 69 64 3b 0a 0a 20 20 20 .*status)..{.....pid_t.pid;.....
bc00 20 69 66 20 28 28 70 69 64 20 20 3d 20 77 61 69 74 28 73 74 61 74 75 73 29 29 20 3c 20 30 29 0a .if.((pid..=.wait(status)).<.0).
bc20 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 57 61 69 74 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 .unix_error("Wait.error");.....r
bc40 65 74 75 72 6e 20 70 69 64 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 77 61 69 74 20 2a 2f 0a 0a 70 69 eturn.pid;.}./*.$end.wait.*/..pi
bc60 64 5f 74 20 57 61 69 74 70 69 64 28 70 69 64 5f 74 20 70 69 64 2c 20 69 6e 74 20 2a 69 70 74 72 d_t.Waitpid(pid_t.pid,.int.*iptr
bc80 2c 20 69 6e 74 20 6f 70 74 69 6f 6e 73 29 20 0a 7b 0a 20 20 20 20 70 69 64 5f 74 20 72 65 74 70 ,.int.options)..{.....pid_t.retp
bca0 69 64 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 65 74 70 69 64 20 20 3d 20 77 61 69 74 70 69 64 28 id;......if.((retpid..=.waitpid(
bcc0 70 69 64 2c 20 69 70 74 72 2c 20 6f 70 74 69 6f 6e 73 29 29 20 3c 20 30 29 20 0a 09 75 6e 69 78 pid,.iptr,.options)).<.0)...unix
bce0 5f 65 72 72 6f 72 28 22 57 61 69 74 70 69 64 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 _error("Waitpid.error");.....ret
bd00 75 72 6e 28 72 65 74 70 69 64 29 3b 0a 7d 0a 0a 2f 2a 20 24 62 65 67 69 6e 20 6b 69 6c 6c 20 2a urn(retpid);.}../*.$begin.kill.*
bd20 2f 0a 76 6f 69 64 20 4b 69 6c 6c 28 70 69 64 5f 74 20 70 69 64 2c 20 69 6e 74 20 73 69 67 6e 75 /.void.Kill(pid_t.pid,.int.signu
bd40 6d 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d m)..{.....int.rc;......if.((rc.=
bd60 20 6b 69 6c 6c 28 70 69 64 2c 20 73 69 67 6e 75 6d 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 .kill(pid,.signum)).<.0)..unix_e
bd80 72 72 6f 72 28 22 4b 69 6c 6c 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 6b 69 rror("Kill.error");.}./*.$end.ki
bda0 6c 6c 20 2a 2f 0a 0a 76 6f 69 64 20 50 61 75 73 65 28 29 20 0a 7b 0a 20 20 20 20 28 76 6f 69 64 ll.*/..void.Pause()..{.....(void
bdc0 29 70 61 75 73 65 28 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 7d 0a 0a 75 6e 73 69 67 6e 65 )pause();.....return;.}..unsigne
bde0 64 20 69 6e 74 20 53 6c 65 65 70 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 73 65 63 73 29 20 0a d.int.Sleep(unsigned.int.secs)..
be00 7b 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 {.....unsigned.int.rc;......if.(
be20 28 72 63 20 3d 20 73 6c 65 65 70 28 73 65 63 73 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 (rc.=.sleep(secs)).<.0)..unix_er
be40 72 6f 72 28 22 53 6c 65 65 70 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 ror("Sleep.error");.....return.r
be60 63 3b 0a 7d 0a 0a 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 41 6c 61 72 6d 28 75 6e 73 69 67 6e 65 c;.}..unsigned.int.Alarm(unsigne
be80 64 20 69 6e 74 20 73 65 63 6f 6e 64 73 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 61 6c 61 72 d.int.seconds).{.....return.alar
bea0 6d 28 73 65 63 6f 6e 64 73 29 3b 0a 7d 0a 20 0a 76 6f 69 64 20 53 65 74 70 67 69 64 28 70 69 64 m(seconds);.}...void.Setpgid(pid
bec0 5f 74 20 70 69 64 2c 20 70 69 64 5f 74 20 70 67 69 64 29 20 7b 0a 20 20 20 20 69 6e 74 20 72 63 _t.pid,.pid_t.pgid).{.....int.rc
bee0 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 73 65 74 70 67 69 64 28 70 69 64 2c 20 70 67 ;......if.((rc.=.setpgid(pid,.pg
bf00 69 64 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 53 65 74 70 67 69 64 20 65 id)).<.0)..unix_error("Setpgid.e
bf20 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 7d 0a 0a 70 69 64 5f 74 20 47 65 74 rror");.....return;.}..pid_t.Get
bf40 70 67 72 70 28 76 6f 69 64 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 67 65 74 70 67 72 70 28 pgrp(void).{.....return.getpgrp(
bf60 29 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a );.}../*************************
bf80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 57 72 61 70 70 65 72 73 20 66 6f 72 20 55 6e 69 78 ***********..*.Wrappers.for.Unix
bfa0 20 73 69 67 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 73 20 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a .signal.functions...************
bfc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 24 62 65 ***********************/../*.$be
bfe0 67 69 6e 20 73 69 67 61 63 74 69 6f 6e 20 2a 2f 0a 68 61 6e 64 6c 65 72 5f 74 20 2a 53 69 67 6e gin.sigaction.*/.handler_t.*Sign
c000 61 6c 28 69 6e 74 20 73 69 67 6e 75 6d 2c 20 68 61 6e 64 6c 65 72 5f 74 20 2a 68 61 6e 64 6c 65 al(int.signum,.handler_t.*handle
c020 72 29 20 0a 7b 0a 20 20 20 20 73 74 72 75 63 74 20 73 69 67 61 63 74 69 6f 6e 20 61 63 74 69 6f r)..{.....struct.sigaction.actio
c040 6e 2c 20 6f 6c 64 5f 61 63 74 69 6f 6e 3b 0a 0a 20 20 20 20 61 63 74 69 6f 6e 2e 73 61 5f 68 61 n,.old_action;......action.sa_ha
c060 6e 64 6c 65 72 20 3d 20 68 61 6e 64 6c 65 72 3b 20 20 0a 20 20 20 20 73 69 67 65 6d 70 74 79 73 ndler.=.handler;.......sigemptys
c080 65 74 28 26 61 63 74 69 6f 6e 2e 73 61 5f 6d 61 73 6b 29 3b 20 2f 2a 20 42 6c 6f 63 6b 20 73 69 et(&action.sa_mask);./*.Block.si
c0a0 67 73 20 6f 66 20 74 79 70 65 20 62 65 69 6e 67 20 68 61 6e 64 6c 65 64 20 2a 2f 0a 20 20 20 20 gs.of.type.being.handled.*/.....
c0c0 61 63 74 69 6f 6e 2e 73 61 5f 66 6c 61 67 73 20 3d 20 53 41 5f 52 45 53 54 41 52 54 3b 20 2f 2a action.sa_flags.=.SA_RESTART;./*
c0e0 20 52 65 73 74 61 72 74 20 73 79 73 63 61 6c 6c 73 20 69 66 20 70 6f 73 73 69 62 6c 65 20 2a 2f .Restart.syscalls.if.possible.*/
c100 0a 0a 20 20 20 20 69 66 20 28 73 69 67 61 63 74 69 6f 6e 28 73 69 67 6e 75 6d 2c 20 26 61 63 74 ......if.(sigaction(signum,.&act
c120 69 6f 6e 2c 20 26 6f 6c 64 5f 61 63 74 69 6f 6e 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 ion,.&old_action).<.0)..unix_err
c140 6f 72 28 22 53 69 67 6e 61 6c 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 28 or("Signal.error");.....return.(
c160 6f 6c 64 5f 61 63 74 69 6f 6e 2e 73 61 5f 68 61 6e 64 6c 65 72 29 3b 0a 7d 0a 2f 2a 20 24 65 6e old_action.sa_handler);.}./*.$en
c180 64 20 73 69 67 61 63 74 69 6f 6e 20 2a 2f 0a 0a 76 6f 69 64 20 53 69 67 70 72 6f 63 6d 61 73 6b d.sigaction.*/..void.Sigprocmask
c1a0 28 69 6e 74 20 68 6f 77 2c 20 63 6f 6e 73 74 20 73 69 67 73 65 74 5f 74 20 2a 73 65 74 2c 20 73 (int.how,.const.sigset_t.*set,.s
c1c0 69 67 73 65 74 5f 74 20 2a 6f 6c 64 73 65 74 29 0a 7b 0a 20 20 20 20 69 66 20 28 73 69 67 70 72 igset_t.*oldset).{.....if.(sigpr
c1e0 6f 63 6d 61 73 6b 28 68 6f 77 2c 20 73 65 74 2c 20 6f 6c 64 73 65 74 29 20 3c 20 30 29 0a 09 75 ocmask(how,.set,.oldset).<.0)..u
c200 6e 69 78 5f 65 72 72 6f 72 28 22 53 69 67 70 72 6f 63 6d 61 73 6b 20 65 72 72 6f 72 22 29 3b 0a nix_error("Sigprocmask.error");.
c220 20 20 20 20 72 65 74 75 72 6e 3b 0a 7d 0a 0a 76 6f 69 64 20 53 69 67 65 6d 70 74 79 73 65 74 28 ....return;.}..void.Sigemptyset(
c240 73 69 67 73 65 74 5f 74 20 2a 73 65 74 29 0a 7b 0a 20 20 20 20 69 66 20 28 73 69 67 65 6d 70 74 sigset_t.*set).{.....if.(sigempt
c260 79 73 65 74 28 73 65 74 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 53 69 67 65 yset(set).<.0)..unix_error("Sige
c280 6d 70 74 79 73 65 74 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a 7d 0a 0a mptyset.error");.....return;.}..
c2a0 76 6f 69 64 20 53 69 67 66 69 6c 6c 73 65 74 28 73 69 67 73 65 74 5f 74 20 2a 73 65 74 29 0a 7b void.Sigfillset(sigset_t.*set).{
c2c0 20 0a 20 20 20 20 69 66 20 28 73 69 67 66 69 6c 6c 73 65 74 28 73 65 74 29 20 3c 20 30 29 0a 09 ......if.(sigfillset(set).<.0)..
c2e0 75 6e 69 78 5f 65 72 72 6f 72 28 22 53 69 67 66 69 6c 6c 73 65 74 20 65 72 72 6f 72 22 29 3b 0a unix_error("Sigfillset.error");.
c300 20 20 20 20 72 65 74 75 72 6e 3b 0a 7d 0a 0a 76 6f 69 64 20 53 69 67 61 64 64 73 65 74 28 73 69 ....return;.}..void.Sigaddset(si
c320 67 73 65 74 5f 74 20 2a 73 65 74 2c 20 69 6e 74 20 73 69 67 6e 75 6d 29 0a 7b 0a 20 20 20 20 69 gset_t.*set,.int.signum).{.....i
c340 66 20 28 73 69 67 61 64 64 73 65 74 28 73 65 74 2c 20 73 69 67 6e 75 6d 29 20 3c 20 30 29 0a 09 f.(sigaddset(set,.signum).<.0)..
c360 75 6e 69 78 5f 65 72 72 6f 72 28 22 53 69 67 61 64 64 73 65 74 20 65 72 72 6f 72 22 29 3b 0a 20 unix_error("Sigaddset.error");..
c380 20 20 20 72 65 74 75 72 6e 3b 0a 7d 0a 0a 76 6f 69 64 20 53 69 67 64 65 6c 73 65 74 28 73 69 67 ...return;.}..void.Sigdelset(sig
c3a0 73 65 74 5f 74 20 2a 73 65 74 2c 20 69 6e 74 20 73 69 67 6e 75 6d 29 0a 7b 0a 20 20 20 20 69 66 set_t.*set,.int.signum).{.....if
c3c0 20 28 73 69 67 64 65 6c 73 65 74 28 73 65 74 2c 20 73 69 67 6e 75 6d 29 20 3c 20 30 29 0a 09 75 .(sigdelset(set,.signum).<.0)..u
c3e0 6e 69 78 5f 65 72 72 6f 72 28 22 53 69 67 64 65 6c 73 65 74 20 65 72 72 6f 72 22 29 3b 0a 20 20 nix_error("Sigdelset.error");...
c400 20 20 72 65 74 75 72 6e 3b 0a 7d 0a 0a 69 6e 74 20 53 69 67 69 73 6d 65 6d 62 65 72 28 63 6f 6e ..return;.}..int.Sigismember(con
c420 73 74 20 73 69 67 73 65 74 5f 74 20 2a 73 65 74 2c 20 69 6e 74 20 73 69 67 6e 75 6d 29 0a 7b 0a st.sigset_t.*set,.int.signum).{.
c440 20 20 20 20 69 6e 74 20 72 63 3b 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 73 69 67 69 73 6d ....int.rc;.....if.((rc.=.sigism
c460 65 6d 62 65 72 28 73 65 74 2c 20 73 69 67 6e 75 6d 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 ember(set,.signum)).<.0)..unix_e
c480 72 72 6f 72 28 22 53 69 67 69 73 6d 65 6d 62 65 72 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 rror("Sigismember.error");.....r
c4a0 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 69 6e 74 20 53 69 67 73 75 73 70 65 6e 64 28 63 6f 6e 73 eturn.rc;.}..int.Sigsuspend(cons
c4c0 74 20 73 69 67 73 65 74 5f 74 20 2a 73 65 74 29 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 20 3d 20 t.sigset_t.*set).{.....int.rc.=.
c4e0 73 69 67 73 75 73 70 65 6e 64 28 73 65 74 29 3b 20 2f 2a 20 61 6c 77 61 79 73 20 72 65 74 75 72 sigsuspend(set);./*.always.retur
c500 6e 73 20 2d 31 20 2a 2f 0a 20 20 20 20 69 66 20 28 65 72 72 6e 6f 20 21 3d 20 45 49 4e 54 52 29 ns.-1.*/.....if.(errno.!=.EINTR)
c520 0a 20 20 20 20 20 20 20 20 75 6e 69 78 5f 65 72 72 6f 72 28 22 53 69 67 73 75 73 70 65 6e 64 20 .........unix_error("Sigsuspend.
c540 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a error");.....return.rc;.}../****
c560 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ********************************
c580 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 54 68 65 *************************..*.The
c5a0 20 53 69 6f 20 28 53 69 67 6e 61 6c 2d 73 61 66 65 20 49 2f 4f 29 20 70 61 63 6b 61 67 65 20 2d .Sio.(Signal-safe.I/O).package.-
c5c0 20 73 69 6d 70 6c 65 20 72 65 65 6e 74 72 61 6e 74 20 6f 75 74 70 75 74 0a 20 2a 20 66 75 6e 63 .simple.reentrant.output..*.func
c5e0 74 69 6f 6e 73 20 74 68 61 74 20 61 72 65 20 73 61 66 65 20 66 6f 72 20 73 69 67 6e 61 6c 20 68 tions.that.are.safe.for.signal.h
c600 61 6e 64 6c 65 72 73 2e 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a andlers...**********************
c620 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ********************************
c640 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 50 72 69 76 61 74 65 20 73 69 6f 20 66 75 6e 63 74 69 6f *******/../*.Private.sio.functio
c660 6e 73 20 2a 2f 0a 0a 2f 2a 20 24 62 65 67 69 6e 20 73 69 6f 70 72 69 76 61 74 65 20 2a 2f 0a 2f ns.*/../*.$begin.sioprivate.*/./
c680 2a 20 73 69 6f 5f 72 65 76 65 72 73 65 20 2d 20 52 65 76 65 72 73 65 20 61 20 73 74 72 69 6e 67 *.sio_reverse.-.Reverse.a.string
c6a0 20 28 66 72 6f 6d 20 4b 26 52 29 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 69 6f 5f 72 .(from.K&R).*/.static.void.sio_r
c6c0 65 76 65 72 73 65 28 63 68 61 72 20 73 5b 5d 29 0a 7b 0a 20 20 20 20 69 6e 74 20 63 2c 20 69 2c everse(char.s[]).{.....int.c,.i,
c6e0 20 6a 3b 0a 0a 20 20 20 20 66 6f 72 20 28 69 20 3d 20 30 2c 20 6a 20 3d 20 73 74 72 6c 65 6e 28 .j;......for.(i.=.0,.j.=.strlen(
c700 73 29 2d 31 3b 20 69 20 3c 20 6a 3b 20 69 2b 2b 2c 20 6a 2d 2d 29 20 7b 0a 20 20 20 20 20 20 20 s)-1;.i.<.j;.i++,.j--).{........
c720 20 63 20 3d 20 73 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 73 5b 69 5d 20 3d 20 73 5b 6a 5d 3b 0a .c.=.s[i];.........s[i].=.s[j];.
c740 20 20 20 20 20 20 20 20 73 5b 6a 5d 20 3d 20 63 3b 0a 20 20 20 20 7d 0a 7d 0a 0a 2f 2a 20 73 69 ........s[j].=.c;.....}.}../*.si
c760 6f 5f 6c 74 6f 61 20 2d 20 43 6f 6e 76 65 72 74 20 6c 6f 6e 67 20 74 6f 20 62 61 73 65 20 62 20 o_ltoa.-.Convert.long.to.base.b.
c780 73 74 72 69 6e 67 20 28 66 72 6f 6d 20 4b 26 52 29 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 string.(from.K&R).*/.static.void
c7a0 20 73 69 6f 5f 6c 74 6f 61 28 6c 6f 6e 67 20 76 2c 20 63 68 61 72 20 73 5b 5d 2c 20 69 6e 74 20 .sio_ltoa(long.v,.char.s[],.int.
c7c0 62 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 63 2c 20 69 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 b)..{.....int.c,.i.=.0;.....int.
c7e0 6e 65 67 20 3d 20 76 20 3c 20 30 3b 0a 0a 20 20 20 20 69 66 20 28 6e 65 67 29 0a 09 76 20 3d 20 neg.=.v.<.0;......if.(neg)..v.=.
c800 2d 76 3b 0a 0a 20 20 20 20 64 6f 20 7b 20 20 0a 20 20 20 20 20 20 20 20 73 5b 69 2b 2b 5d 20 3d -v;......do.{...........s[i++].=
c820 20 28 28 63 20 3d 20 28 76 20 25 20 62 29 29 20 3c 20 31 30 29 20 20 3f 20 20 63 20 2b 20 27 30 .((c.=.(v.%.b)).<.10)..?..c.+.'0
c840 27 20 3a 20 63 20 2d 20 31 30 20 2b 20 27 61 27 3b 0a 20 20 20 20 7d 20 77 68 69 6c 65 20 28 28 '.:.c.-.10.+.'a';.....}.while.((
c860 76 20 2f 3d 20 62 29 20 3e 20 30 29 3b 0a 0a 20 20 20 20 69 66 20 28 6e 65 67 29 0a 09 73 5b 69 v./=.b).>.0);......if.(neg)..s[i
c880 2b 2b 5d 20 3d 20 27 2d 27 3b 0a 0a 20 20 20 20 73 5b 69 5d 20 3d 20 27 5c 30 27 3b 0a 20 20 20 ++].=.'-';......s[i].=.'\0';....
c8a0 20 73 69 6f 5f 72 65 76 65 72 73 65 28 73 29 3b 0a 7d 0a 0a 2f 2a 20 73 69 6f 5f 73 74 72 6c 65 .sio_reverse(s);.}../*.sio_strle
c8c0 6e 20 2d 20 52 65 74 75 72 6e 20 6c 65 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67 20 28 66 72 6f n.-.Return.length.of.string.(fro
c8e0 6d 20 4b 26 52 29 20 2a 2f 0a 73 74 61 74 69 63 20 73 69 7a 65 5f 74 20 73 69 6f 5f 73 74 72 6c m.K&R).*/.static.size_t.sio_strl
c900 65 6e 28 63 68 61 72 20 73 5b 5d 29 0a 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 0a 20 en(char.s[]).{.....int.i.=.0;...
c920 20 20 20 77 68 69 6c 65 20 28 73 5b 69 5d 20 21 3d 20 27 5c 30 27 29 0a 20 20 20 20 20 20 20 20 ...while.(s[i].!=.'\0').........
c940 2b 2b 69 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 69 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 73 69 6f ++i;.....return.i;.}./*.$end.sio
c960 70 72 69 76 61 74 65 20 2a 2f 0a 0a 2f 2a 20 50 75 62 6c 69 63 20 53 69 6f 20 66 75 6e 63 74 69 private.*/../*.Public.Sio.functi
c980 6f 6e 73 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 73 69 6f 70 75 62 6c 69 63 20 2a 2f 0a 0a 73 ons.*/./*.$begin.siopublic.*/..s
c9a0 73 69 7a 65 5f 74 20 73 69 6f 5f 70 75 74 73 28 63 68 61 72 20 73 5b 5d 29 20 2f 2a 20 50 75 74 size_t.sio_puts(char.s[])./*.Put
c9c0 20 73 74 72 69 6e 67 20 2a 2f 0a 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 77 72 69 74 65 28 53 54 .string.*/.{.....return.write(ST
c9e0 44 4f 55 54 5f 46 49 4c 45 4e 4f 2c 20 73 2c 20 73 69 6f 5f 73 74 72 6c 65 6e 28 73 29 29 3b 20 DOUT_FILENO,.s,.sio_strlen(s));.
ca00 2f 2f 6c 69 6e 65 3a 63 73 61 70 70 3a 73 69 6f 73 74 72 6c 65 6e 0a 7d 0a 0a 73 73 69 7a 65 5f //line:csapp:siostrlen.}..ssize_
ca20 74 20 73 69 6f 5f 70 75 74 6c 28 6c 6f 6e 67 20 76 29 20 2f 2a 20 50 75 74 20 6c 6f 6e 67 20 2a t.sio_putl(long.v)./*.Put.long.*
ca40 2f 0a 7b 0a 20 20 20 20 63 68 61 72 20 73 5b 31 32 38 5d 3b 0a 20 20 20 20 0a 20 20 20 20 73 69 /.{.....char.s[128];..........si
ca60 6f 5f 6c 74 6f 61 28 76 2c 20 73 2c 20 31 30 29 3b 20 2f 2a 20 42 61 73 65 64 20 6f 6e 20 4b 26 o_ltoa(v,.s,.10);./*.Based.on.K&
ca80 52 20 69 74 6f 61 28 29 20 2a 2f 20 20 2f 2f 6c 69 6e 65 3a 63 73 61 70 70 3a 73 69 6f 6c 74 6f R.itoa().*/..//line:csapp:siolto
caa0 61 0a 20 20 20 20 72 65 74 75 72 6e 20 73 69 6f 5f 70 75 74 73 28 73 29 3b 0a 7d 0a 0a 76 6f 69 a.....return.sio_puts(s);.}..voi
cac0 64 20 73 69 6f 5f 65 72 72 6f 72 28 63 68 61 72 20 73 5b 5d 29 20 2f 2a 20 50 75 74 20 65 72 72 d.sio_error(char.s[])./*.Put.err
cae0 6f 72 20 6d 65 73 73 61 67 65 20 61 6e 64 20 65 78 69 74 20 2a 2f 0a 7b 0a 20 20 20 20 73 69 6f or.message.and.exit.*/.{.....sio
cb00 5f 70 75 74 73 28 73 29 3b 0a 20 20 20 20 5f 65 78 69 74 28 31 29 3b 20 20 20 20 20 20 20 20 20 _puts(s);....._exit(1);.........
cb20 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 2f 2f 6c .............................//l
cb40 69 6e 65 3a 63 73 61 70 70 3a 73 69 6f 65 78 69 74 0a 7d 0a 2f 2a 20 24 65 6e 64 20 73 69 6f 70 ine:csapp:sioexit.}./*.$end.siop
cb60 75 62 6c 69 63 20 2a 2f 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ublic.*/../*********************
cb80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 57 72 61 70 70 65 72 73 20 66 6f 72 20 74 68 65 20 53 **********..*.Wrappers.for.the.S
cba0 49 4f 20 72 6f 75 74 69 6e 65 73 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a IO.routines..*******************
cbc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 73 73 69 7a 65 5f 74 20 53 69 6f 5f 70 75 74 6c 28 6c 6f ***********/.ssize_t.Sio_putl(lo
cbe0 6e 67 20 76 29 0a 7b 0a 20 20 20 20 73 73 69 7a 65 5f 74 20 6e 3b 0a 20 20 0a 20 20 20 20 69 66 ng.v).{.....ssize_t.n;........if
cc00 20 28 28 6e 20 3d 20 73 69 6f 5f 70 75 74 6c 28 76 29 29 20 3c 20 30 29 0a 09 73 69 6f 5f 65 72 .((n.=.sio_putl(v)).<.0)..sio_er
cc20 72 6f 72 28 22 53 69 6f 5f 70 75 74 6c 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 ror("Sio_putl.error");.....retur
cc40 6e 20 6e 3b 0a 7d 0a 0a 73 73 69 7a 65 5f 74 20 53 69 6f 5f 70 75 74 73 28 63 68 61 72 20 73 5b n.n;.}..ssize_t.Sio_puts(char.s[
cc60 5d 29 0a 7b 0a 20 20 20 20 73 73 69 7a 65 5f 74 20 6e 3b 0a 20 20 0a 20 20 20 20 69 66 20 28 28 ]).{.....ssize_t.n;........if.((
cc80 6e 20 3d 20 73 69 6f 5f 70 75 74 73 28 73 29 29 20 3c 20 30 29 0a 09 73 69 6f 5f 65 72 72 6f 72 n.=.sio_puts(s)).<.0)..sio_error
cca0 28 22 53 69 6f 5f 70 75 74 73 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 6e ("Sio_puts.error");.....return.n
ccc0 3b 0a 7d 0a 0a 76 6f 69 64 20 53 69 6f 5f 65 72 72 6f 72 28 63 68 61 72 20 73 5b 5d 29 0a 7b 0a ;.}..void.Sio_error(char.s[]).{.
cce0 20 20 20 20 73 69 6f 5f 65 72 72 6f 72 28 73 29 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ....sio_error(s);.}../**********
cd00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 57 72 61 70 70 65 **********************..*.Wrappe
cd20 72 73 20 66 6f 72 20 55 6e 69 78 20 49 2f 4f 20 72 6f 75 74 69 6e 65 73 0a 20 2a 2a 2a 2a 2a 2a rs.for.Unix.I/O.routines..******
cd40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 69 6e 74 **************************/..int
cd60 20 4f 70 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 61 74 68 6e 61 6d 65 2c 20 69 6e 74 20 .Open(const.char.*pathname,.int.
cd80 66 6c 61 67 73 2c 20 6d 6f 64 65 5f 74 20 6d 6f 64 65 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 flags,.mode_t.mode)..{.....int.r
cda0 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 6f 70 65 6e 28 70 61 74 68 6e 61 6d 65 2c c;......if.((rc.=.open(pathname,
cdc0 20 66 6c 61 67 73 2c 20 6d 6f 64 65 29 29 20 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 .flags,.mode))..<.0)..unix_error
cde0 28 22 4f 70 65 6e 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d ("Open.error");.....return.rc;.}
ce00 0a 0a 73 73 69 7a 65 5f 74 20 52 65 61 64 28 69 6e 74 20 66 64 2c 20 76 6f 69 64 20 2a 62 75 66 ..ssize_t.Read(int.fd,.void.*buf
ce20 2c 20 73 69 7a 65 5f 74 20 63 6f 75 6e 74 29 20 0a 7b 0a 20 20 20 20 73 73 69 7a 65 5f 74 20 72 ,.size_t.count)..{.....ssize_t.r
ce40 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 72 65 61 64 28 66 64 2c 20 62 75 66 2c 20 c;......if.((rc.=.read(fd,.buf,.
ce60 63 6f 75 6e 74 29 29 20 3c 20 30 29 20 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 52 65 61 64 20 count)).<.0)...unix_error("Read.
ce80 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 73 73 69 7a 65 error");.....return.rc;.}..ssize
cea0 5f 74 20 57 72 69 74 65 28 69 6e 74 20 66 64 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 62 75 66 _t.Write(int.fd,.const.void.*buf
cec0 2c 20 73 69 7a 65 5f 74 20 63 6f 75 6e 74 29 20 0a 7b 0a 20 20 20 20 73 73 69 7a 65 5f 74 20 72 ,.size_t.count)..{.....ssize_t.r
cee0 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 77 72 69 74 65 28 66 64 2c 20 62 75 66 2c c;......if.((rc.=.write(fd,.buf,
cf00 20 63 6f 75 6e 74 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 57 72 69 74 65 .count)).<.0)..unix_error("Write
cf20 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 6f 66 66 5f .error");.....return.rc;.}..off_
cf40 74 20 4c 73 65 65 6b 28 69 6e 74 20 66 69 6c 64 65 73 2c 20 6f 66 66 5f 74 20 6f 66 66 73 65 74 t.Lseek(int.fildes,.off_t.offset
cf60 2c 20 69 6e 74 20 77 68 65 6e 63 65 29 20 0a 7b 0a 20 20 20 20 6f 66 66 5f 74 20 72 63 3b 0a 0a ,.int.whence)..{.....off_t.rc;..
cf80 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 6c 73 65 65 6b 28 66 69 6c 64 65 73 2c 20 6f 66 66 73 ....if.((rc.=.lseek(fildes,.offs
cfa0 65 74 2c 20 77 68 65 6e 63 65 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 4c et,.whence)).<.0)..unix_error("L
cfc0 73 65 65 6b 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a seek.error");.....return.rc;.}..
cfe0 76 6f 69 64 20 43 6c 6f 73 65 28 69 6e 74 20 66 64 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 void.Close(int.fd)..{.....int.rc
d000 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 63 6c 6f 73 65 28 66 64 29 29 20 3c 20 30 29 ;......if.((rc.=.close(fd)).<.0)
d020 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 43 6c 6f 73 65 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a ..unix_error("Close.error");.}..
d040 69 6e 74 20 53 65 6c 65 63 74 28 69 6e 74 20 20 6e 2c 20 66 64 5f 73 65 74 20 2a 72 65 61 64 66 int.Select(int..n,.fd_set.*readf
d060 64 73 2c 20 66 64 5f 73 65 74 20 2a 77 72 69 74 65 66 64 73 2c 0a 09 20 20 20 66 64 5f 73 65 74 ds,.fd_set.*writefds,.....fd_set
d080 20 2a 65 78 63 65 70 74 66 64 73 2c 20 73 74 72 75 63 74 20 74 69 6d 65 76 61 6c 20 2a 74 69 6d .*exceptfds,.struct.timeval.*tim
d0a0 65 6f 75 74 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 eout)..{.....int.rc;......if.((r
d0c0 63 20 3d 20 73 65 6c 65 63 74 28 6e 2c 20 72 65 61 64 66 64 73 2c 20 77 72 69 74 65 66 64 73 2c c.=.select(n,.readfds,.writefds,
d0e0 20 65 78 63 65 70 74 66 64 73 2c 20 74 69 6d 65 6f 75 74 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 .exceptfds,.timeout)).<.0)..unix
d100 5f 65 72 72 6f 72 28 22 53 65 6c 65 63 74 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 _error("Select.error");.....retu
d120 72 6e 20 72 63 3b 0a 7d 0a 0a 69 6e 74 20 44 75 70 32 28 69 6e 74 20 66 64 31 2c 20 69 6e 74 20 rn.rc;.}..int.Dup2(int.fd1,.int.
d140 66 64 32 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 fd2)..{.....int.rc;......if.((rc
d160 20 3d 20 64 75 70 32 28 66 64 31 2c 20 66 64 32 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 .=.dup2(fd1,.fd2)).<.0)..unix_er
d180 72 6f 72 28 22 44 75 70 32 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 ror("Dup2.error");.....return.rc
d1a0 3b 0a 7d 0a 0a 76 6f 69 64 20 53 74 61 74 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 69 6c 65 6e ;.}..void.Stat(const.char.*filen
d1c0 61 6d 65 2c 20 73 74 72 75 63 74 20 73 74 61 74 20 2a 62 75 66 29 20 0a 7b 0a 20 20 20 20 69 66 ame,.struct.stat.*buf)..{.....if
d1e0 20 28 73 74 61 74 28 66 69 6c 65 6e 61 6d 65 2c 20 62 75 66 29 20 3c 20 30 29 0a 09 75 6e 69 78 .(stat(filename,.buf).<.0)..unix
d200 5f 65 72 72 6f 72 28 22 53 74 61 74 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 76 6f 69 64 20 46 73 _error("Stat.error");.}..void.Fs
d220 74 61 74 28 69 6e 74 20 66 64 2c 20 73 74 72 75 63 74 20 73 74 61 74 20 2a 62 75 66 29 20 0a 7b tat(int.fd,.struct.stat.*buf)..{
d240 0a 20 20 20 20 69 66 20 28 66 73 74 61 74 28 66 64 2c 20 62 75 66 29 20 3c 20 30 29 0a 09 75 6e .....if.(fstat(fd,.buf).<.0)..un
d260 69 78 5f 65 72 72 6f 72 28 22 46 73 74 61 74 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 2f 2a 2a 2a ix_error("Fstat.error");.}../***
d280 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 ******************************..
d2a0 2a 20 57 72 61 70 70 65 72 73 20 66 6f 72 20 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f *.Wrappers.for.directory.functio
d2c0 6e 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a n..*****************************
d2e0 2a 2a 2a 2a 2f 0a 0a 44 49 52 20 2a 4f 70 65 6e 64 69 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a ****/..DIR.*Opendir(const.char.*
d300 6e 61 6d 65 29 20 0a 7b 0a 20 20 20 20 44 49 52 20 2a 64 69 72 70 20 3d 20 6f 70 65 6e 64 69 72 name)..{.....DIR.*dirp.=.opendir
d320 28 6e 61 6d 65 29 3b 20 0a 0a 20 20 20 20 69 66 20 28 21 64 69 72 70 29 0a 20 20 20 20 20 20 20 (name);.......if.(!dirp)........
d340 20 75 6e 69 78 5f 65 72 72 6f 72 28 22 6f 70 65 6e 64 69 72 20 65 72 72 6f 72 22 29 3b 0a 20 20 .unix_error("opendir.error");...
d360 20 20 72 65 74 75 72 6e 20 64 69 72 70 3b 0a 7d 0a 0a 73 74 72 75 63 74 20 64 69 72 65 6e 74 20 ..return.dirp;.}..struct.dirent.
d380 2a 52 65 61 64 64 69 72 28 44 49 52 20 2a 64 69 72 70 29 0a 7b 0a 20 20 20 20 73 74 72 75 63 74 *Readdir(DIR.*dirp).{.....struct
d3a0 20 64 69 72 65 6e 74 20 2a 64 65 70 3b 0a 20 20 20 20 0a 20 20 20 20 65 72 72 6e 6f 20 3d 20 30 .dirent.*dep;..........errno.=.0
d3c0 3b 0a 20 20 20 20 64 65 70 20 3d 20 72 65 61 64 64 69 72 28 64 69 72 70 29 3b 0a 20 20 20 20 69 ;.....dep.=.readdir(dirp);.....i
d3e0 66 20 28 28 64 65 70 20 3d 3d 20 4e 55 4c 4c 29 20 26 26 20 28 65 72 72 6e 6f 20 21 3d 20 30 29 f.((dep.==.NULL).&&.(errno.!=.0)
d400 29 0a 20 20 20 20 20 20 20 20 75 6e 69 78 5f 65 72 72 6f 72 28 22 72 65 61 64 64 69 72 20 65 72 ).........unix_error("readdir.er
d420 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 64 65 70 3b 0a 7d 0a 0a 69 6e 74 20 43 6c ror");.....return.dep;.}..int.Cl
d440 6f 73 65 64 69 72 28 44 49 52 20 2a 64 69 72 70 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b osedir(DIR.*dirp)..{.....int.rc;
d460 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 63 6c 6f 73 65 64 69 72 28 64 69 72 70 29 29 20 ......if.((rc.=.closedir(dirp)).
d480 3c 20 30 29 0a 20 20 20 20 20 20 20 20 75 6e 69 78 5f 65 72 72 6f 72 28 22 63 6c 6f 73 65 64 69 <.0).........unix_error("closedi
d4a0 72 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 2a r.error");.....return.rc;.}../**
d4c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ********************************
d4e0 2a 2a 2a 2a 2a 0a 20 2a 20 57 72 61 70 70 65 72 73 20 66 6f 72 20 6d 65 6d 6f 72 79 20 6d 61 70 *****..*.Wrappers.for.memory.map
d500 70 69 6e 67 20 66 75 6e 63 74 69 6f 6e 73 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ping.functions..****************
d520 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 76 6f 69 64 20 2a 4d ***********************/.void.*M
d540 6d 61 70 28 76 6f 69 64 20 2a 61 64 64 72 2c 20 73 69 7a 65 5f 74 20 6c 65 6e 2c 20 69 6e 74 20 map(void.*addr,.size_t.len,.int.
d560 70 72 6f 74 2c 20 69 6e 74 20 66 6c 61 67 73 2c 20 69 6e 74 20 66 64 2c 20 6f 66 66 5f 74 20 6f prot,.int.flags,.int.fd,.off_t.o
d580 66 66 73 65 74 29 20 0a 7b 0a 20 20 20 20 76 6f 69 64 20 2a 70 74 72 3b 0a 0a 20 20 20 20 69 66 ffset)..{.....void.*ptr;......if
d5a0 20 28 28 70 74 72 20 3d 20 6d 6d 61 70 28 61 64 64 72 2c 20 6c 65 6e 2c 20 70 72 6f 74 2c 20 66 .((ptr.=.mmap(addr,.len,.prot,.f
d5c0 6c 61 67 73 2c 20 66 64 2c 20 6f 66 66 73 65 74 29 29 20 3d 3d 20 28 28 76 6f 69 64 20 2a 29 20 lags,.fd,.offset)).==.((void.*).
d5e0 2d 31 29 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 6d 6d 61 70 20 65 72 72 6f 72 22 29 3b 0a -1))..unix_error("mmap.error");.
d600 20 20 20 20 72 65 74 75 72 6e 28 70 74 72 29 3b 0a 7d 0a 0a 76 6f 69 64 20 4d 75 6e 6d 61 70 28 ....return(ptr);.}..void.Munmap(
d620 76 6f 69 64 20 2a 73 74 61 72 74 2c 20 73 69 7a 65 5f 74 20 6c 65 6e 67 74 68 29 20 0a 7b 0a 20 void.*start,.size_t.length)..{..
d640 20 20 20 69 66 20 28 6d 75 6e 6d 61 70 28 73 74 61 72 74 2c 20 6c 65 6e 67 74 68 29 20 3c 20 30 ...if.(munmap(start,.length).<.0
d660 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 6d 75 6e 6d 61 70 20 65 72 72 6f 72 22 29 3b 0a 7d )..unix_error("munmap.error");.}
d680 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ../*****************************
d6a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 57 72 61 70 70 65 **********************..*.Wrappe
d6c0 72 73 20 66 6f 72 20 64 79 6e 61 6d 69 63 20 73 74 6f 72 61 67 65 20 61 6c 6c 6f 63 61 74 69 6f rs.for.dynamic.storage.allocatio
d6e0 6e 20 66 75 6e 63 74 69 6f 6e 73 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a n.functions..*******************
d700 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ********************************
d720 2f 0a 0a 76 6f 69 64 20 2a 4d 61 6c 6c 6f 63 28 73 69 7a 65 5f 74 20 73 69 7a 65 29 20 0a 7b 0a /..void.*Malloc(size_t.size)..{.
d740 20 20 20 20 76 6f 69 64 20 2a 70 3b 0a 0a 20 20 20 20 69 66 20 28 28 70 20 20 3d 20 6d 61 6c 6c ....void.*p;......if.((p..=.mall
d760 6f 63 28 73 69 7a 65 29 29 20 3d 3d 20 4e 55 4c 4c 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 oc(size)).==.NULL)..unix_error("
d780 4d 61 6c 6c 6f 63 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a Malloc.error");.....return.p;.}.
d7a0 0a 76 6f 69 64 20 2a 52 65 61 6c 6c 6f 63 28 76 6f 69 64 20 2a 70 74 72 2c 20 73 69 7a 65 5f 74 .void.*Realloc(void.*ptr,.size_t
d7c0 20 73 69 7a 65 29 20 0a 7b 0a 20 20 20 20 76 6f 69 64 20 2a 70 3b 0a 0a 20 20 20 20 69 66 20 28 .size)..{.....void.*p;......if.(
d7e0 28 70 20 20 3d 20 72 65 61 6c 6c 6f 63 28 70 74 72 2c 20 73 69 7a 65 29 29 20 3d 3d 20 4e 55 4c (p..=.realloc(ptr,.size)).==.NUL
d800 4c 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 52 65 61 6c 6c 6f 63 20 65 72 72 6f 72 22 29 3b L)..unix_error("Realloc.error");
d820 0a 20 20 20 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a 76 6f 69 64 20 2a 43 61 6c 6c 6f 63 28 73 .....return.p;.}..void.*Calloc(s
d840 69 7a 65 5f 74 20 6e 6d 65 6d 62 2c 20 73 69 7a 65 5f 74 20 73 69 7a 65 29 20 0a 7b 0a 20 20 20 ize_t.nmemb,.size_t.size)..{....
d860 20 76 6f 69 64 20 2a 70 3b 0a 0a 20 20 20 20 69 66 20 28 28 70 20 3d 20 63 61 6c 6c 6f 63 28 6e .void.*p;......if.((p.=.calloc(n
d880 6d 65 6d 62 2c 20 73 69 7a 65 29 29 20 3d 3d 20 4e 55 4c 4c 29 0a 09 75 6e 69 78 5f 65 72 72 6f memb,.size)).==.NULL)..unix_erro
d8a0 72 28 22 43 61 6c 6c 6f 63 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 3b r("Calloc.error");.....return.p;
d8c0 0a 7d 0a 0a 76 6f 69 64 20 46 72 65 65 28 76 6f 69 64 20 2a 70 74 72 29 20 0a 7b 0a 20 20 20 20 .}..void.Free(void.*ptr)..{.....
d8e0 66 72 65 65 28 70 74 72 29 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a free(ptr);.}../*****************
d900 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 57 72 61 *************************..*.Wra
d920 70 70 65 72 73 20 66 6f 72 20 74 68 65 20 53 74 61 6e 64 61 72 64 20 49 2f 4f 20 66 75 6e 63 74 ppers.for.the.Standard.I/O.funct
d940 69 6f 6e 73 2e 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ions...*************************
d960 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 76 6f 69 64 20 46 63 6c 6f 73 65 28 46 *****************/.void.Fclose(F
d980 49 4c 45 20 2a 66 70 29 20 0a 7b 0a 20 20 20 20 69 66 20 28 66 63 6c 6f 73 65 28 66 70 29 20 21 ILE.*fp)..{.....if.(fclose(fp).!
d9a0 3d 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 46 63 6c 6f 73 65 20 65 72 72 6f 72 22 29 =.0)..unix_error("Fclose.error")
d9c0 3b 0a 7d 0a 0a 46 49 4c 45 20 2a 46 64 6f 70 65 6e 28 69 6e 74 20 66 64 2c 20 63 6f 6e 73 74 20 ;.}..FILE.*Fdopen(int.fd,.const.
d9e0 63 68 61 72 20 2a 74 79 70 65 29 20 0a 7b 0a 20 20 20 20 46 49 4c 45 20 2a 66 70 3b 0a 0a 20 20 char.*type)..{.....FILE.*fp;....
da00 20 20 69 66 20 28 28 66 70 20 3d 20 66 64 6f 70 65 6e 28 66 64 2c 20 74 79 70 65 29 29 20 3d 3d ..if.((fp.=.fdopen(fd,.type)).==
da20 20 4e 55 4c 4c 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 46 64 6f 70 65 6e 20 65 72 72 6f 72 .NULL)..unix_error("Fdopen.error
da40 22 29 3b 0a 0a 20 20 20 20 72 65 74 75 72 6e 20 66 70 3b 0a 7d 0a 0a 63 68 61 72 20 2a 46 67 65 ");......return.fp;.}..char.*Fge
da60 74 73 28 63 68 61 72 20 2a 70 74 72 2c 20 69 6e 74 20 6e 2c 20 46 49 4c 45 20 2a 73 74 72 65 61 ts(char.*ptr,.int.n,.FILE.*strea
da80 6d 29 20 0a 7b 0a 20 20 20 20 63 68 61 72 20 2a 72 70 74 72 3b 0a 0a 20 20 20 20 69 66 20 28 28 m)..{.....char.*rptr;......if.((
daa0 28 72 70 74 72 20 3d 20 66 67 65 74 73 28 70 74 72 2c 20 6e 2c 20 73 74 72 65 61 6d 29 29 20 3d (rptr.=.fgets(ptr,.n,.stream)).=
dac0 3d 20 4e 55 4c 4c 29 20 26 26 20 66 65 72 72 6f 72 28 73 74 72 65 61 6d 29 29 0a 09 61 70 70 5f =.NULL).&&.ferror(stream))..app_
dae0 65 72 72 6f 72 28 22 46 67 65 74 73 20 65 72 72 6f 72 22 29 3b 0a 0a 20 20 20 20 72 65 74 75 72 error("Fgets.error");......retur
db00 6e 20 72 70 74 72 3b 0a 7d 0a 0a 46 49 4c 45 20 2a 46 6f 70 65 6e 28 63 6f 6e 73 74 20 63 68 61 n.rptr;.}..FILE.*Fopen(const.cha
db20 72 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6d 6f 64 65 29 20 0a r.*filename,.const.char.*mode)..
db40 7b 0a 20 20 20 20 46 49 4c 45 20 2a 66 70 3b 0a 0a 20 20 20 20 69 66 20 28 28 66 70 20 3d 20 66 {.....FILE.*fp;......if.((fp.=.f
db60 6f 70 65 6e 28 66 69 6c 65 6e 61 6d 65 2c 20 6d 6f 64 65 29 29 20 3d 3d 20 4e 55 4c 4c 29 0a 09 open(filename,.mode)).==.NULL)..
db80 75 6e 69 78 5f 65 72 72 6f 72 28 22 46 6f 70 65 6e 20 65 72 72 6f 72 22 29 3b 0a 0a 20 20 20 20 unix_error("Fopen.error");......
dba0 72 65 74 75 72 6e 20 66 70 3b 0a 7d 0a 0a 76 6f 69 64 20 46 70 75 74 73 28 63 6f 6e 73 74 20 63 return.fp;.}..void.Fputs(const.c
dbc0 68 61 72 20 2a 70 74 72 2c 20 46 49 4c 45 20 2a 73 74 72 65 61 6d 29 20 0a 7b 0a 20 20 20 20 69 har.*ptr,.FILE.*stream)..{.....i
dbe0 66 20 28 66 70 75 74 73 28 70 74 72 2c 20 73 74 72 65 61 6d 29 20 3d 3d 20 45 4f 46 29 0a 09 75 f.(fputs(ptr,.stream).==.EOF)..u
dc00 6e 69 78 5f 65 72 72 6f 72 28 22 46 70 75 74 73 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 73 69 7a nix_error("Fputs.error");.}..siz
dc20 65 5f 74 20 46 72 65 61 64 28 76 6f 69 64 20 2a 70 74 72 2c 20 73 69 7a 65 5f 74 20 73 69 7a 65 e_t.Fread(void.*ptr,.size_t.size
dc40 2c 20 73 69 7a 65 5f 74 20 6e 6d 65 6d 62 2c 20 46 49 4c 45 20 2a 73 74 72 65 61 6d 29 20 0a 7b ,.size_t.nmemb,.FILE.*stream)..{
dc60 0a 20 20 20 20 73 69 7a 65 5f 74 20 6e 3b 0a 0a 20 20 20 20 69 66 20 28 28 28 6e 20 3d 20 66 72 .....size_t.n;......if.(((n.=.fr
dc80 65 61 64 28 70 74 72 2c 20 73 69 7a 65 2c 20 6e 6d 65 6d 62 2c 20 73 74 72 65 61 6d 29 29 20 3c ead(ptr,.size,.nmemb,.stream)).<
dca0 20 6e 6d 65 6d 62 29 20 26 26 20 66 65 72 72 6f 72 28 73 74 72 65 61 6d 29 29 20 0a 09 75 6e 69 .nmemb).&&.ferror(stream))...uni
dcc0 78 5f 65 72 72 6f 72 28 22 46 72 65 61 64 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 x_error("Fread.error");.....retu
dce0 72 6e 20 6e 3b 0a 7d 0a 0a 76 6f 69 64 20 46 77 72 69 74 65 28 63 6f 6e 73 74 20 76 6f 69 64 20 rn.n;.}..void.Fwrite(const.void.
dd00 2a 70 74 72 2c 20 73 69 7a 65 5f 74 20 73 69 7a 65 2c 20 73 69 7a 65 5f 74 20 6e 6d 65 6d 62 2c *ptr,.size_t.size,.size_t.nmemb,
dd20 20 46 49 4c 45 20 2a 73 74 72 65 61 6d 29 20 0a 7b 0a 20 20 20 20 69 66 20 28 66 77 72 69 74 65 .FILE.*stream)..{.....if.(fwrite
dd40 28 70 74 72 2c 20 73 69 7a 65 2c 20 6e 6d 65 6d 62 2c 20 73 74 72 65 61 6d 29 20 3c 20 6e 6d 65 (ptr,.size,.nmemb,.stream).<.nme
dd60 6d 62 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 46 77 72 69 74 65 20 65 72 72 6f 72 22 29 3b mb)..unix_error("Fwrite.error");
dd80 0a 7d 0a 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a .}.../**************************
dda0 2a 2a 20 0a 20 2a 20 53 6f 63 6b 65 74 73 20 69 6e 74 65 72 66 61 63 65 20 77 72 61 70 70 65 72 **...*.Sockets.interface.wrapper
ddc0 73 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f s..****************************/
dde0 0a 0a 69 6e 74 20 53 6f 63 6b 65 74 28 69 6e 74 20 64 6f 6d 61 69 6e 2c 20 69 6e 74 20 74 79 70 ..int.Socket(int.domain,.int.typ
de00 65 2c 20 69 6e 74 20 70 72 6f 74 6f 63 6f 6c 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a e,.int.protocol)..{.....int.rc;.
de20 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 73 6f 63 6b 65 74 28 64 6f 6d 61 69 6e 2c 20 74 79 .....if.((rc.=.socket(domain,.ty
de40 70 65 2c 20 70 72 6f 74 6f 63 6f 6c 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 pe,.protocol)).<.0)..unix_error(
de60 22 53 6f 63 6b 65 74 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a "Socket.error");.....return.rc;.
de80 7d 0a 0a 76 6f 69 64 20 53 65 74 73 6f 63 6b 6f 70 74 28 69 6e 74 20 73 2c 20 69 6e 74 20 6c 65 }..void.Setsockopt(int.s,.int.le
dea0 76 65 6c 2c 20 69 6e 74 20 6f 70 74 6e 61 6d 65 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 6f 70 vel,.int.optname,.const.void.*op
dec0 74 76 61 6c 2c 20 69 6e 74 20 6f 70 74 6c 65 6e 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b tval,.int.optlen)..{.....int.rc;
dee0 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 73 65 74 73 6f 63 6b 6f 70 74 28 73 2c 20 6c 65 ......if.((rc.=.setsockopt(s,.le
df00 76 65 6c 2c 20 6f 70 74 6e 61 6d 65 2c 20 6f 70 74 76 61 6c 2c 20 6f 70 74 6c 65 6e 29 29 20 3c vel,.optname,.optval,.optlen)).<
df20 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 53 65 74 73 6f 63 6b 6f 70 74 20 65 72 72 6f .0)..unix_error("Setsockopt.erro
df40 72 22 29 3b 0a 7d 0a 0a 76 6f 69 64 20 42 69 6e 64 28 69 6e 74 20 73 6f 63 6b 66 64 2c 20 73 74 r");.}..void.Bind(int.sockfd,.st
df60 72 75 63 74 20 73 6f 63 6b 61 64 64 72 20 2a 6d 79 5f 61 64 64 72 2c 20 69 6e 74 20 61 64 64 72 ruct.sockaddr.*my_addr,.int.addr
df80 6c 65 6e 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 len)..{.....int.rc;......if.((rc
dfa0 20 3d 20 62 69 6e 64 28 73 6f 63 6b 66 64 2c 20 6d 79 5f 61 64 64 72 2c 20 61 64 64 72 6c 65 6e .=.bind(sockfd,.my_addr,.addrlen
dfc0 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 42 69 6e 64 20 65 72 72 6f 72 22 )).<.0)..unix_error("Bind.error"
dfe0 29 3b 0a 7d 0a 0a 76 6f 69 64 20 4c 69 73 74 65 6e 28 69 6e 74 20 73 2c 20 69 6e 74 20 62 61 63 );.}..void.Listen(int.s,.int.bac
e000 6b 6c 6f 67 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 klog)..{.....int.rc;......if.((r
e020 63 20 3d 20 6c 69 73 74 65 6e 28 73 2c 20 20 62 61 63 6b 6c 6f 67 29 29 20 3c 20 30 29 0a 09 75 c.=.listen(s,..backlog)).<.0)..u
e040 6e 69 78 5f 65 72 72 6f 72 28 22 4c 69 73 74 65 6e 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 69 6e nix_error("Listen.error");.}..in
e060 74 20 41 63 63 65 70 74 28 69 6e 74 20 73 2c 20 73 74 72 75 63 74 20 73 6f 63 6b 61 64 64 72 20 t.Accept(int.s,.struct.sockaddr.
e080 2a 61 64 64 72 2c 20 73 6f 63 6b 6c 65 6e 5f 74 20 2a 61 64 64 72 6c 65 6e 29 20 0a 7b 0a 20 20 *addr,.socklen_t.*addrlen)..{...
e0a0 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 61 63 63 65 70 74 28 ..int.rc;......if.((rc.=.accept(
e0c0 73 2c 20 61 64 64 72 2c 20 61 64 64 72 6c 65 6e 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 s,.addr,.addrlen)).<.0)..unix_er
e0e0 72 6f 72 28 22 41 63 63 65 70 74 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 ror("Accept.error");.....return.
e100 72 63 3b 0a 7d 0a 0a 76 6f 69 64 20 43 6f 6e 6e 65 63 74 28 69 6e 74 20 73 6f 63 6b 66 64 2c 20 rc;.}..void.Connect(int.sockfd,.
e120 73 74 72 75 63 74 20 73 6f 63 6b 61 64 64 72 20 2a 73 65 72 76 5f 61 64 64 72 2c 20 69 6e 74 20 struct.sockaddr.*serv_addr,.int.
e140 61 64 64 72 6c 65 6e 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 addrlen)..{.....int.rc;......if.
e160 28 28 72 63 20 3d 20 63 6f 6e 6e 65 63 74 28 73 6f 63 6b 66 64 2c 20 73 65 72 76 5f 61 64 64 72 ((rc.=.connect(sockfd,.serv_addr
e180 2c 20 61 64 64 72 6c 65 6e 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 43 6f ,.addrlen)).<.0)..unix_error("Co
e1a0 6e 6e 65 63 74 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a nnect.error");.}../*************
e1c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 50 72 6f 74 6f 63 6f 6c 2d 69 ******************..*.Protocol-i
e1e0 6e 64 65 70 65 6e 64 65 6e 74 20 77 72 61 70 70 65 72 73 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ndependent.wrappers..***********
e200 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 ********************/./*.$begin.
e220 67 65 74 61 64 64 72 69 6e 66 6f 20 2a 2f 0a 76 6f 69 64 20 47 65 74 61 64 64 72 69 6e 66 6f 28 getaddrinfo.*/.void.Getaddrinfo(
e240 63 6f 6e 73 74 20 63 68 61 72 20 2a 6e 6f 64 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 65 const.char.*node,.const.char.*se
e260 72 76 69 63 65 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 73 rvice,...................const.s
e280 74 72 75 63 74 20 61 64 64 72 69 6e 66 6f 20 2a 68 69 6e 74 73 2c 20 73 74 72 75 63 74 20 61 64 truct.addrinfo.*hints,.struct.ad
e2a0 64 72 69 6e 66 6f 20 2a 2a 72 65 73 29 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 drinfo.**res).{.....int.rc;.....
e2c0 20 69 66 20 28 28 72 63 20 3d 20 67 65 74 61 64 64 72 69 6e 66 6f 28 6e 6f 64 65 2c 20 73 65 72 .if.((rc.=.getaddrinfo(node,.ser
e2e0 76 69 63 65 2c 20 68 69 6e 74 73 2c 20 72 65 73 29 29 20 21 3d 20 30 29 20 0a 20 20 20 20 20 20 vice,.hints,.res)).!=.0)........
e300 20 20 67 61 69 5f 65 72 72 6f 72 28 72 63 2c 20 22 47 65 74 61 64 64 72 69 6e 66 6f 20 65 72 72 ..gai_error(rc,."Getaddrinfo.err
e320 6f 72 22 29 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 67 65 74 61 64 64 72 69 6e 66 6f 20 2a 2f 0a 0a or");.}./*.$end.getaddrinfo.*/..
e340 76 6f 69 64 20 47 65 74 6e 61 6d 65 69 6e 66 6f 28 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73 6f void.Getnameinfo(const.struct.so
e360 63 6b 61 64 64 72 20 2a 73 61 2c 20 73 6f 63 6b 6c 65 6e 5f 74 20 73 61 6c 65 6e 2c 20 63 68 61 ckaddr.*sa,.socklen_t.salen,.cha
e380 72 20 2a 68 6f 73 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 5f r.*host,...................size_
e3a0 74 20 68 6f 73 74 6c 65 6e 2c 20 63 68 61 72 20 2a 73 65 72 76 2c 20 73 69 7a 65 5f 74 20 73 65 t.hostlen,.char.*serv,.size_t.se
e3c0 72 76 6c 65 6e 2c 20 69 6e 74 20 66 6c 61 67 73 29 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a rvlen,.int.flags).{.....int.rc;.
e3e0 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 67 65 74 6e 61 6d 65 69 6e 66 6f 28 73 61 2c 20 73 .....if.((rc.=.getnameinfo(sa,.s
e400 61 6c 65 6e 2c 20 68 6f 73 74 2c 20 68 6f 73 74 6c 65 6e 2c 20 73 65 72 76 2c 20 0a 20 20 20 20 alen,.host,.hostlen,.serv,......
e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 72 76 6c 65 6e 2c 20 66 ......................servlen,.f
e440 6c 61 67 73 29 29 20 21 3d 20 30 29 20 0a 20 20 20 20 20 20 20 20 67 61 69 5f 65 72 72 6f 72 28 lags)).!=.0)..........gai_error(
e460 72 63 2c 20 22 47 65 74 6e 61 6d 65 69 6e 66 6f 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 76 6f 69 rc,."Getnameinfo.error");.}..voi
e480 64 20 46 72 65 65 61 64 64 72 69 6e 66 6f 28 73 74 72 75 63 74 20 61 64 64 72 69 6e 66 6f 20 2a d.Freeaddrinfo(struct.addrinfo.*
e4a0 72 65 73 29 0a 7b 0a 20 20 20 20 66 72 65 65 61 64 64 72 69 6e 66 6f 28 72 65 73 29 3b 0a 7d 0a res).{.....freeaddrinfo(res);.}.
e4c0 0a 76 6f 69 64 20 49 6e 65 74 5f 6e 74 6f 70 28 69 6e 74 20 61 66 2c 20 63 6f 6e 73 74 20 76 6f .void.Inet_ntop(int.af,.const.vo
e4e0 69 64 20 2a 73 72 63 2c 20 63 68 61 72 20 2a 64 73 74 2c 20 73 6f 63 6b 6c 65 6e 5f 74 20 73 69 id.*src,.char.*dst,.socklen_t.si
e500 7a 65 29 0a 7b 0a 20 20 20 20 69 66 20 28 21 69 6e 65 74 5f 6e 74 6f 70 28 61 66 2c 20 73 72 63 ze).{.....if.(!inet_ntop(af,.src
e520 2c 20 64 73 74 2c 20 73 69 7a 65 29 29 0a 20 20 20 20 20 20 20 20 75 6e 69 78 5f 65 72 72 6f 72 ,.dst,.size)).........unix_error
e540 28 22 49 6e 65 74 5f 6e 74 6f 70 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 76 6f 69 64 20 49 6e 65 ("Inet_ntop.error");.}..void.Ine
e560 74 5f 70 74 6f 6e 28 69 6e 74 20 61 66 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 72 63 2c 20 t_pton(int.af,.const.char.*src,.
e580 76 6f 69 64 20 2a 64 73 74 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 72 void.*dst)..{.....int.rc;......r
e5a0 63 20 3d 20 69 6e 65 74 5f 70 74 6f 6e 28 61 66 2c 20 73 72 63 2c 20 64 73 74 29 3b 0a 20 20 20 c.=.inet_pton(af,.src,.dst);....
e5c0 20 69 66 20 28 72 63 20 3d 3d 20 30 29 0a 09 61 70 70 5f 65 72 72 6f 72 28 22 69 6e 65 74 5f 70 .if.(rc.==.0)..app_error("inet_p
e5e0 74 6f 6e 20 65 72 72 6f 72 3a 20 69 6e 76 61 6c 69 64 20 64 6f 74 74 65 64 2d 64 65 63 69 6d 61 ton.error:.invalid.dotted-decima
e600 6c 20 61 64 64 72 65 73 73 22 29 3b 0a 20 20 20 20 65 6c 73 65 20 69 66 20 28 72 63 20 3c 20 30 l.address");.....else.if.(rc.<.0
e620 29 0a 20 20 20 20 20 20 20 20 75 6e 69 78 5f 65 72 72 6f 72 28 22 49 6e 65 74 5f 70 74 6f 6e 20 ).........unix_error("Inet_pton.
e640 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a error");.}../*******************
e660 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 44 4e 53 20 ************************..*.DNS.
e680 69 6e 74 65 72 66 61 63 65 20 77 72 61 70 70 65 72 73 2e 20 0a 20 2a 0a 20 2a 20 4e 4f 54 45 3a interface.wrappers....*..*.NOTE:
e6a0 20 54 68 65 73 65 20 61 72 65 20 6f 62 73 6f 6c 65 74 65 20 62 65 63 61 75 73 65 20 74 68 65 79 .These.are.obsolete.because.they
e6c0 20 61 72 65 20 6e 6f 74 20 74 68 72 65 61 64 20 73 61 66 65 2e 20 55 73 65 0a 20 2a 20 67 65 74 .are.not.thread.safe..Use..*.get
e6e0 61 64 64 72 69 6e 66 6f 20 61 6e 64 20 67 65 74 6e 61 6d 65 69 6e 66 6f 20 69 6e 73 74 65 61 64 addrinfo.and.getnameinfo.instead
e700 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ..******************************
e720 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 24 62 65 67 69 6e 20 67 65 74 68 6f 73 74 62 79 6e 61 6d 65 20 *****/../*.$begin.gethostbyname.
e740 2a 2f 0a 73 74 72 75 63 74 20 68 6f 73 74 65 6e 74 20 2a 47 65 74 68 6f 73 74 62 79 6e 61 6d 65 */.struct.hostent.*Gethostbyname
e760 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 6e 61 6d 65 29 20 0a 7b 0a 20 20 20 20 73 74 72 75 63 74 (const.char.*name)..{.....struct
e780 20 68 6f 73 74 65 6e 74 20 2a 70 3b 0a 0a 20 20 20 20 69 66 20 28 28 70 20 3d 20 67 65 74 68 6f .hostent.*p;......if.((p.=.getho
e7a0 73 74 62 79 6e 61 6d 65 28 6e 61 6d 65 29 29 20 3d 3d 20 4e 55 4c 4c 29 0a 09 64 6e 73 5f 65 72 stbyname(name)).==.NULL)..dns_er
e7c0 72 6f 72 28 22 47 65 74 68 6f 73 74 62 79 6e 61 6d 65 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 ror("Gethostbyname.error");.....
e7e0 72 65 74 75 72 6e 20 70 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 67 65 74 68 6f 73 74 62 79 6e 61 6d return.p;.}./*.$end.gethostbynam
e800 65 20 2a 2f 0a 0a 73 74 72 75 63 74 20 68 6f 73 74 65 6e 74 20 2a 47 65 74 68 6f 73 74 62 79 61 e.*/..struct.hostent.*Gethostbya
e820 64 64 72 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 64 64 72 2c 20 69 6e 74 20 6c 65 6e 2c 20 69 ddr(const.char.*addr,.int.len,.i
e840 6e 74 20 74 79 70 65 29 20 0a 7b 0a 20 20 20 20 73 74 72 75 63 74 20 68 6f 73 74 65 6e 74 20 2a nt.type)..{.....struct.hostent.*
e860 70 3b 0a 0a 20 20 20 20 69 66 20 28 28 70 20 3d 20 67 65 74 68 6f 73 74 62 79 61 64 64 72 28 61 p;......if.((p.=.gethostbyaddr(a
e880 64 64 72 2c 20 6c 65 6e 2c 20 74 79 70 65 29 29 20 3d 3d 20 4e 55 4c 4c 29 0a 09 64 6e 73 5f 65 ddr,.len,.type)).==.NULL)..dns_e
e8a0 72 72 6f 72 28 22 47 65 74 68 6f 73 74 62 79 61 64 64 72 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 rror("Gethostbyaddr.error");....
e8c0 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a .return.p;.}../*****************
e8e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a *******************************.
e900 20 2a 20 57 72 61 70 70 65 72 73 20 66 6f 72 20 50 74 68 72 65 61 64 73 20 74 68 72 65 61 64 20 .*.Wrappers.for.Pthreads.thread.
e920 63 6f 6e 74 72 6f 6c 20 66 75 6e 63 74 69 6f 6e 73 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a control.functions..*************
e940 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ********************************
e960 2a 2a 2a 2f 0a 0a 76 6f 69 64 20 50 74 68 72 65 61 64 5f 63 72 65 61 74 65 28 70 74 68 72 65 61 ***/..void.Pthread_create(pthrea
e980 64 5f 74 20 2a 74 69 64 70 2c 20 70 74 68 72 65 61 64 5f 61 74 74 72 5f 74 20 2a 61 74 74 72 70 d_t.*tidp,.pthread_attr_t.*attrp
e9a0 2c 20 0a 09 09 20 20 20 20 76 6f 69 64 20 2a 20 28 2a 72 6f 75 74 69 6e 65 29 28 76 6f 69 64 20 ,........void.*.(*routine)(void.
e9c0 2a 29 2c 20 76 6f 69 64 20 2a 61 72 67 70 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a *),.void.*argp)..{.....int.rc;..
e9e0 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 70 74 68 72 65 61 64 5f 63 72 65 61 74 65 28 74 69 64 ....if.((rc.=.pthread_create(tid
ea00 70 2c 20 61 74 74 72 70 2c 20 72 6f 75 74 69 6e 65 2c 20 61 72 67 70 29 29 20 21 3d 20 30 29 0a p,.attrp,.routine,.argp)).!=.0).
ea20 09 70 6f 73 69 78 5f 65 72 72 6f 72 28 72 63 2c 20 22 50 74 68 72 65 61 64 5f 63 72 65 61 74 65 .posix_error(rc,."Pthread_create
ea40 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 76 6f 69 64 20 50 74 68 72 65 61 64 5f 63 61 6e 63 65 6c .error");.}..void.Pthread_cancel
ea60 28 70 74 68 72 65 61 64 5f 74 20 74 69 64 29 20 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 (pthread_t.tid).{.....int.rc;...
ea80 20 20 20 69 66 20 28 28 72 63 20 3d 20 70 74 68 72 65 61 64 5f 63 61 6e 63 65 6c 28 74 69 64 29 ...if.((rc.=.pthread_cancel(tid)
eaa0 29 20 21 3d 20 30 29 0a 09 70 6f 73 69 78 5f 65 72 72 6f 72 28 72 63 2c 20 22 50 74 68 72 65 61 ).!=.0)..posix_error(rc,."Pthrea
eac0 64 5f 63 61 6e 63 65 6c 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 76 6f 69 64 20 50 74 68 72 65 61 d_cancel.error");.}..void.Pthrea
eae0 64 5f 6a 6f 69 6e 28 70 74 68 72 65 61 64 5f 74 20 74 69 64 2c 20 76 6f 69 64 20 2a 2a 74 68 72 d_join(pthread_t.tid,.void.**thr
eb00 65 61 64 5f 72 65 74 75 72 6e 29 20 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 ead_return).{.....int.rc;......i
eb20 66 20 28 28 72 63 20 3d 20 70 74 68 72 65 61 64 5f 6a 6f 69 6e 28 74 69 64 2c 20 74 68 72 65 61 f.((rc.=.pthread_join(tid,.threa
eb40 64 5f 72 65 74 75 72 6e 29 29 20 21 3d 20 30 29 0a 09 70 6f 73 69 78 5f 65 72 72 6f 72 28 72 63 d_return)).!=.0)..posix_error(rc
eb60 2c 20 22 50 74 68 72 65 61 64 5f 6a 6f 69 6e 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 2f 2a 20 24 ,."Pthread_join.error");.}../*.$
eb80 62 65 67 69 6e 20 64 65 74 61 63 68 20 2a 2f 0a 76 6f 69 64 20 50 74 68 72 65 61 64 5f 64 65 74 begin.detach.*/.void.Pthread_det
eba0 61 63 68 28 70 74 68 72 65 61 64 5f 74 20 74 69 64 29 20 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b ach(pthread_t.tid).{.....int.rc;
ebc0 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 70 74 68 72 65 61 64 5f 64 65 74 61 63 68 28 74 ......if.((rc.=.pthread_detach(t
ebe0 69 64 29 29 20 21 3d 20 30 29 0a 09 70 6f 73 69 78 5f 65 72 72 6f 72 28 72 63 2c 20 22 50 74 68 id)).!=.0)..posix_error(rc,."Pth
ec00 72 65 61 64 5f 64 65 74 61 63 68 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 64 read_detach.error");.}./*.$end.d
ec20 65 74 61 63 68 20 2a 2f 0a 0a 76 6f 69 64 20 50 74 68 72 65 61 64 5f 65 78 69 74 28 76 6f 69 64 etach.*/..void.Pthread_exit(void
ec40 20 2a 72 65 74 76 61 6c 29 20 7b 0a 20 20 20 20 70 74 68 72 65 61 64 5f 65 78 69 74 28 72 65 74 .*retval).{.....pthread_exit(ret
ec60 76 61 6c 29 3b 0a 7d 0a 0a 70 74 68 72 65 61 64 5f 74 20 50 74 68 72 65 61 64 5f 73 65 6c 66 28 val);.}..pthread_t.Pthread_self(
ec80 76 6f 69 64 29 20 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 74 68 72 65 61 64 5f 73 65 6c 66 28 void).{.....return.pthread_self(
eca0 29 3b 0a 7d 0a 20 0a 76 6f 69 64 20 50 74 68 72 65 61 64 5f 6f 6e 63 65 28 70 74 68 72 65 61 64 );.}...void.Pthread_once(pthread
ecc0 5f 6f 6e 63 65 5f 74 20 2a 6f 6e 63 65 5f 63 6f 6e 74 72 6f 6c 2c 20 76 6f 69 64 20 28 2a 69 6e _once_t.*once_control,.void.(*in
ece0 69 74 5f 66 75 6e 63 74 69 6f 6e 29 28 29 29 20 7b 0a 20 20 20 20 70 74 68 72 65 61 64 5f 6f 6e it_function)()).{.....pthread_on
ed00 63 65 28 6f 6e 63 65 5f 63 6f 6e 74 72 6f 6c 2c 20 69 6e 69 74 5f 66 75 6e 63 74 69 6f 6e 29 3b ce(once_control,.init_function);
ed20 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a .}../***************************
ed40 2a 2a 2a 2a 0a 20 2a 20 57 72 61 70 70 65 72 73 20 66 6f 72 20 50 6f 73 69 78 20 73 65 6d 61 70 ****..*.Wrappers.for.Posix.semap
ed60 68 6f 72 65 73 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a hores..*************************
ed80 2a 2a 2a 2a 2a 2a 2f 0a 0a 76 6f 69 64 20 53 65 6d 5f 69 6e 69 74 28 73 65 6d 5f 74 20 2a 73 65 ******/..void.Sem_init(sem_t.*se
eda0 6d 2c 20 69 6e 74 20 70 73 68 61 72 65 64 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 76 61 6c m,.int.pshared,.unsigned.int.val
edc0 75 65 29 20 0a 7b 0a 20 20 20 20 69 66 20 28 73 65 6d 5f 69 6e 69 74 28 73 65 6d 2c 20 70 73 68 ue)..{.....if.(sem_init(sem,.psh
ede0 61 72 65 64 2c 20 76 61 6c 75 65 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 53 ared,.value).<.0)..unix_error("S
ee00 65 6d 5f 69 6e 69 74 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 76 6f 69 64 20 50 28 73 65 6d 5f 74 em_init.error");.}..void.P(sem_t
ee20 20 2a 73 65 6d 29 20 0a 7b 0a 20 20 20 20 69 66 20 28 73 65 6d 5f 77 61 69 74 28 73 65 6d 29 20 .*sem)..{.....if.(sem_wait(sem).
ee40 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 50 20 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a <.0)..unix_error("P.error");.}..
ee60 76 6f 69 64 20 56 28 73 65 6d 5f 74 20 2a 73 65 6d 29 20 0a 7b 0a 20 20 20 20 69 66 20 28 73 65 void.V(sem_t.*sem)..{.....if.(se
ee80 6d 5f 70 6f 73 74 28 73 65 6d 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 56 20 m_post(sem).<.0)..unix_error("V.
eea0 65 72 72 6f 72 22 29 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a error");.}../*******************
eec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 54 68 65 20 52 69 6f *********************..*.The.Rio
eee0 20 70 61 63 6b 61 67 65 20 2d 20 52 6f 62 75 73 74 20 49 2f 4f 20 66 75 6e 63 74 69 6f 6e 73 0a .package.-.Robust.I/O.functions.
ef00 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a .*******************************
ef20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 0a 20 2a 20 72 69 6f 5f 72 65 61 64 6e 20 2d 20 52 6f *********/../*..*.rio_readn.-.Ro
ef40 62 75 73 74 6c 79 20 72 65 61 64 20 6e 20 62 79 74 65 73 20 28 75 6e 62 75 66 66 65 72 65 64 29 bustly.read.n.bytes.(unbuffered)
ef60 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 72 69 6f 5f 72 65 61 64 6e 20 2a 2f 0a 73 73 69 7a ..*/./*.$begin.rio_readn.*/.ssiz
ef80 65 5f 74 20 72 69 6f 5f 72 65 61 64 6e 28 69 6e 74 20 66 64 2c 20 76 6f 69 64 20 2a 75 73 72 62 e_t.rio_readn(int.fd,.void.*usrb
efa0 75 66 2c 20 73 69 7a 65 5f 74 20 6e 29 20 0a 7b 0a 20 20 20 20 73 69 7a 65 5f 74 20 6e 6c 65 66 uf,.size_t.n)..{.....size_t.nlef
efc0 74 20 3d 20 6e 3b 0a 20 20 20 20 73 73 69 7a 65 5f 74 20 6e 72 65 61 64 3b 0a 20 20 20 20 63 68 t.=.n;.....ssize_t.nread;.....ch
efe0 61 72 20 2a 62 75 66 70 20 3d 20 75 73 72 62 75 66 3b 0a 0a 20 20 20 20 77 68 69 6c 65 20 28 6e ar.*bufp.=.usrbuf;......while.(n
f000 6c 65 66 74 20 3e 20 30 29 20 7b 0a 09 69 66 20 28 28 6e 72 65 61 64 20 3d 20 72 65 61 64 28 66 left.>.0).{..if.((nread.=.read(f
f020 64 2c 20 62 75 66 70 2c 20 6e 6c 65 66 74 29 29 20 3c 20 30 29 20 7b 0a 09 20 20 20 20 69 66 20 d,.bufp,.nleft)).<.0).{......if.
f040 28 65 72 72 6e 6f 20 3d 3d 20 45 49 4e 54 52 29 20 2f 2a 20 49 6e 74 65 72 72 75 70 74 65 64 20 (errno.==.EINTR)./*.Interrupted.
f060 62 79 20 73 69 67 20 68 61 6e 64 6c 65 72 20 72 65 74 75 72 6e 20 2a 2f 0a 09 09 6e 72 65 61 64 by.sig.handler.return.*/...nread
f080 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 61 6e 64 20 63 61 6c 6c 20 72 65 61 64 28 29 20 61 67 .=.0;....../*.and.call.read().ag
f0a0 61 69 6e 20 2a 2f 0a 09 20 20 20 20 65 6c 73 65 0a 09 09 72 65 74 75 72 6e 20 2d 31 3b 20 20 20 ain.*/......else...return.-1;...
f0c0 20 20 20 2f 2a 20 65 72 72 6e 6f 20 73 65 74 20 62 79 20 72 65 61 64 28 29 20 2a 2f 20 0a 09 7d .../*.errno.set.by.read().*/...}
f0e0 20 0a 09 65 6c 73 65 20 69 66 20 28 6e 72 65 61 64 20 3d 3d 20 30 29 0a 09 20 20 20 20 62 72 65 ...else.if.(nread.==.0)......bre
f100 61 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 4f 46 20 2a 2f 0a 09 6e 6c 65 66 ak;............../*.EOF.*/..nlef
f120 74 20 2d 3d 20 6e 72 65 61 64 3b 0a 09 62 75 66 70 20 2b 3d 20 6e 72 65 61 64 3b 0a 20 20 20 20 t.-=.nread;..bufp.+=.nread;.....
f140 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 28 6e 20 2d 20 6e 6c 65 66 74 29 3b 20 20 20 20 20 20 20 }.....return.(n.-.nleft);.......
f160 20 20 2f 2a 20 52 65 74 75 72 6e 20 3e 3d 20 30 20 2a 2f 0a 7d 0a 2f 2a 20 24 65 6e 64 20 72 69 ../*.Return.>=.0.*/.}./*.$end.ri
f180 6f 5f 72 65 61 64 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 72 69 6f 5f 77 72 69 74 65 6e 20 2d 20 52 o_readn.*/../*..*.rio_writen.-.R
f1a0 6f 62 75 73 74 6c 79 20 77 72 69 74 65 20 6e 20 62 79 74 65 73 20 28 75 6e 62 75 66 66 65 72 65 obustly.write.n.bytes.(unbuffere
f1c0 64 29 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 72 69 6f 5f 77 72 69 74 65 6e 20 2a 2f 0a 73 d)..*/./*.$begin.rio_writen.*/.s
f1e0 73 69 7a 65 5f 74 20 72 69 6f 5f 77 72 69 74 65 6e 28 69 6e 74 20 66 64 2c 20 76 6f 69 64 20 2a size_t.rio_writen(int.fd,.void.*
f200 75 73 72 62 75 66 2c 20 73 69 7a 65 5f 74 20 6e 29 20 0a 7b 0a 20 20 20 20 73 69 7a 65 5f 74 20 usrbuf,.size_t.n)..{.....size_t.
f220 6e 6c 65 66 74 20 3d 20 6e 3b 0a 20 20 20 20 73 73 69 7a 65 5f 74 20 6e 77 72 69 74 74 65 6e 3b nleft.=.n;.....ssize_t.nwritten;
f240 0a 20 20 20 20 63 68 61 72 20 2a 62 75 66 70 20 3d 20 75 73 72 62 75 66 3b 0a 0a 20 20 20 20 77 .....char.*bufp.=.usrbuf;......w
f260 68 69 6c 65 20 28 6e 6c 65 66 74 20 3e 20 30 29 20 7b 0a 09 69 66 20 28 28 6e 77 72 69 74 74 65 hile.(nleft.>.0).{..if.((nwritte
f280 6e 20 3d 20 77 72 69 74 65 28 66 64 2c 20 62 75 66 70 2c 20 6e 6c 65 66 74 29 29 20 3c 3d 20 30 n.=.write(fd,.bufp,.nleft)).<=.0
f2a0 29 20 7b 0a 09 20 20 20 20 69 66 20 28 65 72 72 6e 6f 20 3d 3d 20 45 49 4e 54 52 29 20 20 2f 2a ).{......if.(errno.==.EINTR)../*
f2c0 20 49 6e 74 65 72 72 75 70 74 65 64 20 62 79 20 73 69 67 20 68 61 6e 64 6c 65 72 20 72 65 74 75 .Interrupted.by.sig.handler.retu
f2e0 72 6e 20 2a 2f 0a 09 09 6e 77 72 69 74 74 65 6e 20 3d 20 30 3b 20 20 20 20 2f 2a 20 61 6e 64 20 rn.*/...nwritten.=.0;..../*.and.
f300 63 61 6c 6c 20 77 72 69 74 65 28 29 20 61 67 61 69 6e 20 2a 2f 0a 09 20 20 20 20 65 6c 73 65 0a call.write().again.*/......else.
f320 09 09 72 65 74 75 72 6e 20 2d 31 3b 20 20 20 20 20 20 20 2f 2a 20 65 72 72 6e 6f 20 73 65 74 20 ..return.-1;......./*.errno.set.
f340 62 79 20 77 72 69 74 65 28 29 20 2a 2f 0a 09 7d 0a 09 6e 6c 65 66 74 20 2d 3d 20 6e 77 72 69 74 by.write().*/..}..nleft.-=.nwrit
f360 74 65 6e 3b 0a 09 62 75 66 70 20 2b 3d 20 6e 77 72 69 74 74 65 6e 3b 0a 20 20 20 20 7d 0a 20 20 ten;..bufp.+=.nwritten;.....}...
f380 20 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 72 69 6f 5f 77 72 69 74 65 6e ..return.n;.}./*.$end.rio_writen
f3a0 20 2a 2f 0a 0a 0a 2f 2a 20 0a 20 2a 20 72 69 6f 5f 72 65 61 64 20 2d 20 54 68 69 73 20 69 73 20 .*/.../*...*.rio_read.-.This.is.
f3c0 61 20 77 72 61 70 70 65 72 20 66 6f 72 20 74 68 65 20 55 6e 69 78 20 72 65 61 64 28 29 20 66 75 a.wrapper.for.the.Unix.read().fu
f3e0 6e 63 74 69 6f 6e 20 74 68 61 74 0a 20 2a 20 20 20 20 74 72 61 6e 73 66 65 72 73 20 6d 69 6e 28 nction.that..*....transfers.min(
f400 6e 2c 20 72 69 6f 5f 63 6e 74 29 20 62 79 74 65 73 20 66 72 6f 6d 20 61 6e 20 69 6e 74 65 72 6e n,.rio_cnt).bytes.from.an.intern
f420 61 6c 20 62 75 66 66 65 72 20 74 6f 20 61 20 75 73 65 72 0a 20 2a 20 20 20 20 62 75 66 66 65 72 al.buffer.to.a.user..*....buffer
f440 2c 20 77 68 65 72 65 20 6e 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 ,.where.n.is.the.number.of.bytes
f460 20 72 65 71 75 65 73 74 65 64 20 62 79 20 74 68 65 20 75 73 65 72 20 61 6e 64 0a 20 2a 20 20 20 .requested.by.the.user.and..*...
f480 20 72 69 6f 5f 63 6e 74 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 75 6e 72 65 61 64 .rio_cnt.is.the.number.of.unread
f4a0 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 62 75 66 66 65 72 2e 20 4f .bytes.in.the.internal.buffer..O
f4c0 6e 0a 20 2a 20 20 20 20 65 6e 74 72 79 2c 20 72 69 6f 5f 72 65 61 64 28 29 20 72 65 66 69 6c 6c n..*....entry,.rio_read().refill
f4e0 73 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 62 75 66 66 65 72 20 76 69 61 20 61 20 63 61 6c 6c s.the.internal.buffer.via.a.call
f500 20 74 6f 0a 20 2a 20 20 20 20 72 65 61 64 28 29 20 69 66 20 74 68 65 20 69 6e 74 65 72 6e 61 6c .to..*....read().if.the.internal
f520 20 62 75 66 66 65 72 20 69 73 20 65 6d 70 74 79 2e 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 .buffer.is.empty...*/./*.$begin.
f540 72 69 6f 5f 72 65 61 64 20 2a 2f 0a 73 74 61 74 69 63 20 73 73 69 7a 65 5f 74 20 72 69 6f 5f 72 rio_read.*/.static.ssize_t.rio_r
f560 65 61 64 28 72 69 6f 5f 74 20 2a 72 70 2c 20 63 68 61 72 20 2a 75 73 72 62 75 66 2c 20 73 69 7a ead(rio_t.*rp,.char.*usrbuf,.siz
f580 65 5f 74 20 6e 29 0a 7b 0a 20 20 20 20 69 6e 74 20 63 6e 74 3b 0a 0a 20 20 20 20 77 68 69 6c 65 e_t.n).{.....int.cnt;......while
f5a0 20 28 72 70 2d 3e 72 69 6f 5f 63 6e 74 20 3c 3d 20 30 29 20 7b 20 20 2f 2a 20 52 65 66 69 6c 6c .(rp->rio_cnt.<=.0).{../*.Refill
f5c0 20 69 66 20 62 75 66 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 09 72 70 2d 3e 72 69 6f 5f 63 6e 74 .if.buf.is.empty.*/..rp->rio_cnt
f5e0 20 3d 20 72 65 61 64 28 72 70 2d 3e 72 69 6f 5f 66 64 2c 20 72 70 2d 3e 72 69 6f 5f 62 75 66 2c .=.read(rp->rio_fd,.rp->rio_buf,
f600 20 0a 09 09 09 20 20 20 73 69 7a 65 6f 66 28 72 70 2d 3e 72 69 6f 5f 62 75 66 29 29 3b 0a 09 69 ........sizeof(rp->rio_buf));..i
f620 66 20 28 72 70 2d 3e 72 69 6f 5f 63 6e 74 20 3c 20 30 29 20 7b 0a 09 20 20 20 20 69 66 20 28 65 f.(rp->rio_cnt.<.0).{......if.(e
f640 72 72 6e 6f 20 21 3d 20 45 49 4e 54 52 29 20 2f 2a 20 49 6e 74 65 72 72 75 70 74 65 64 20 62 79 rrno.!=.EINTR)./*.Interrupted.by
f660 20 73 69 67 20 68 61 6e 64 6c 65 72 20 72 65 74 75 72 6e 20 2a 2f 0a 09 09 72 65 74 75 72 6e 20 .sig.handler.return.*/...return.
f680 2d 31 3b 0a 09 7d 0a 09 65 6c 73 65 20 69 66 20 28 72 70 2d 3e 72 69 6f 5f 63 6e 74 20 3d 3d 20 -1;..}..else.if.(rp->rio_cnt.==.
f6a0 30 29 20 20 2f 2a 20 45 4f 46 20 2a 2f 0a 09 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 09 65 6c 0)../*.EOF.*/......return.0;..el
f6c0 73 65 20 0a 09 20 20 20 20 72 70 2d 3e 72 69 6f 5f 62 75 66 70 74 72 20 3d 20 72 70 2d 3e 72 69 se.......rp->rio_bufptr.=.rp->ri
f6e0 6f 5f 62 75 66 3b 20 2f 2a 20 52 65 73 65 74 20 62 75 66 66 65 72 20 70 74 72 20 2a 2f 0a 20 20 o_buf;./*.Reset.buffer.ptr.*/...
f700 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 43 6f 70 79 20 6d 69 6e 28 6e 2c 20 72 70 2d 3e 72 69 6f 5f ..}....../*.Copy.min(n,.rp->rio_
f720 63 6e 74 29 20 62 79 74 65 73 20 66 72 6f 6d 20 69 6e 74 65 72 6e 61 6c 20 62 75 66 20 74 6f 20 cnt).bytes.from.internal.buf.to.
f740 75 73 65 72 20 62 75 66 20 2a 2f 0a 20 20 20 20 63 6e 74 20 3d 20 6e 3b 20 20 20 20 20 20 20 20 user.buf.*/.....cnt.=.n;........
f760 20 20 0a 20 20 20 20 69 66 20 28 72 70 2d 3e 72 69 6f 5f 63 6e 74 20 3c 20 6e 29 20 20 20 0a 09 .......if.(rp->rio_cnt.<.n).....
f780 63 6e 74 20 3d 20 72 70 2d 3e 72 69 6f 5f 63 6e 74 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 75 73 cnt.=.rp->rio_cnt;.....memcpy(us
f7a0 72 62 75 66 2c 20 72 70 2d 3e 72 69 6f 5f 62 75 66 70 74 72 2c 20 63 6e 74 29 3b 0a 20 20 20 20 rbuf,.rp->rio_bufptr,.cnt);.....
f7c0 72 70 2d 3e 72 69 6f 5f 62 75 66 70 74 72 20 2b 3d 20 63 6e 74 3b 0a 20 20 20 20 72 70 2d 3e 72 rp->rio_bufptr.+=.cnt;.....rp->r
f7e0 69 6f 5f 63 6e 74 20 2d 3d 20 63 6e 74 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 63 6e 74 3b 0a 7d io_cnt.-=.cnt;.....return.cnt;.}
f800 0a 2f 2a 20 24 65 6e 64 20 72 69 6f 5f 72 65 61 64 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 72 69 6f 5f ./*.$end.rio_read.*/../*..*.rio_
f820 72 65 61 64 69 6e 69 74 62 20 2d 20 41 73 73 6f 63 69 61 74 65 20 61 20 64 65 73 63 72 69 70 74 readinitb.-.Associate.a.descript
f840 6f 72 20 77 69 74 68 20 61 20 72 65 61 64 20 62 75 66 66 65 72 20 61 6e 64 20 72 65 73 65 74 20 or.with.a.read.buffer.and.reset.
f860 62 75 66 66 65 72 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 72 69 6f 5f 72 65 61 64 69 6e 69 buffer..*/./*.$begin.rio_readini
f880 74 62 20 2a 2f 0a 76 6f 69 64 20 72 69 6f 5f 72 65 61 64 69 6e 69 74 62 28 72 69 6f 5f 74 20 2a tb.*/.void.rio_readinitb(rio_t.*
f8a0 72 70 2c 20 69 6e 74 20 66 64 29 20 0a 7b 0a 20 20 20 20 72 70 2d 3e 72 69 6f 5f 66 64 20 3d 20 rp,.int.fd)..{.....rp->rio_fd.=.
f8c0 66 64 3b 20 20 0a 20 20 20 20 72 70 2d 3e 72 69 6f 5f 63 6e 74 20 3d 20 30 3b 20 20 0a 20 20 20 fd;.......rp->rio_cnt.=.0;......
f8e0 20 72 70 2d 3e 72 69 6f 5f 62 75 66 70 74 72 20 3d 20 72 70 2d 3e 72 69 6f 5f 62 75 66 3b 0a 7d .rp->rio_bufptr.=.rp->rio_buf;.}
f900 0a 2f 2a 20 24 65 6e 64 20 72 69 6f 5f 72 65 61 64 69 6e 69 74 62 20 2a 2f 0a 0a 2f 2a 0a 20 2a ./*.$end.rio_readinitb.*/../*..*
f920 20 72 69 6f 5f 72 65 61 64 6e 62 20 2d 20 52 6f 62 75 73 74 6c 79 20 72 65 61 64 20 6e 20 62 79 .rio_readnb.-.Robustly.read.n.by
f940 74 65 73 20 28 62 75 66 66 65 72 65 64 29 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 72 69 6f tes.(buffered)..*/./*.$begin.rio
f960 5f 72 65 61 64 6e 62 20 2a 2f 0a 73 73 69 7a 65 5f 74 20 72 69 6f 5f 72 65 61 64 6e 62 28 72 69 _readnb.*/.ssize_t.rio_readnb(ri
f980 6f 5f 74 20 2a 72 70 2c 20 76 6f 69 64 20 2a 75 73 72 62 75 66 2c 20 73 69 7a 65 5f 74 20 6e 29 o_t.*rp,.void.*usrbuf,.size_t.n)
f9a0 20 0a 7b 0a 20 20 20 20 73 69 7a 65 5f 74 20 6e 6c 65 66 74 20 3d 20 6e 3b 0a 20 20 20 20 73 73 ..{.....size_t.nleft.=.n;.....ss
f9c0 69 7a 65 5f 74 20 6e 72 65 61 64 3b 0a 20 20 20 20 63 68 61 72 20 2a 62 75 66 70 20 3d 20 75 73 ize_t.nread;.....char.*bufp.=.us
f9e0 72 62 75 66 3b 0a 20 20 20 20 0a 20 20 20 20 77 68 69 6c 65 20 28 6e 6c 65 66 74 20 3e 20 30 29 rbuf;..........while.(nleft.>.0)
fa00 20 7b 0a 09 69 66 20 28 28 6e 72 65 61 64 20 3d 20 72 69 6f 5f 72 65 61 64 28 72 70 2c 20 62 75 .{..if.((nread.=.rio_read(rp,.bu
fa20 66 70 2c 20 6e 6c 65 66 74 29 29 20 3c 20 30 29 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 fp,.nleft)).<.0)..............re
fa40 74 75 72 6e 20 2d 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 65 72 72 6e 6f 20 73 65 74 20 62 turn.-1;........../*.errno.set.b
fa60 79 20 72 65 61 64 28 29 20 2a 2f 20 0a 09 65 6c 73 65 20 69 66 20 28 6e 72 65 61 64 20 3d 3d 20 y.read().*/...else.if.(nread.==.
fa80 30 29 0a 09 20 20 20 20 62 72 65 61 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 0)......break;............../*.E
faa0 4f 46 20 2a 2f 0a 09 6e 6c 65 66 74 20 2d 3d 20 6e 72 65 61 64 3b 0a 09 62 75 66 70 20 2b 3d 20 OF.*/..nleft.-=.nread;..bufp.+=.
fac0 6e 72 65 61 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 28 6e 20 2d 20 6e 6c 65 nread;.....}.....return.(n.-.nle
fae0 66 74 29 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72 6e 20 3e 3d 20 30 20 2a 2f 0a 7d ft);........./*.return.>=.0.*/.}
fb00 0a 2f 2a 20 24 65 6e 64 20 72 69 6f 5f 72 65 61 64 6e 62 20 2a 2f 0a 0a 2f 2a 20 0a 20 2a 20 72 ./*.$end.rio_readnb.*/../*...*.r
fb20 69 6f 5f 72 65 61 64 6c 69 6e 65 62 20 2d 20 52 6f 62 75 73 74 6c 79 20 72 65 61 64 20 61 20 74 io_readlineb.-.Robustly.read.a.t
fb40 65 78 74 20 6c 69 6e 65 20 28 62 75 66 66 65 72 65 64 29 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 ext.line.(buffered)..*/./*.$begi
fb60 6e 20 72 69 6f 5f 72 65 61 64 6c 69 6e 65 62 20 2a 2f 0a 73 73 69 7a 65 5f 74 20 72 69 6f 5f 72 n.rio_readlineb.*/.ssize_t.rio_r
fb80 65 61 64 6c 69 6e 65 62 28 72 69 6f 5f 74 20 2a 72 70 2c 20 76 6f 69 64 20 2a 75 73 72 62 75 66 eadlineb(rio_t.*rp,.void.*usrbuf
fba0 2c 20 73 69 7a 65 5f 74 20 6d 61 78 6c 65 6e 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 6e 2c 20 72 ,.size_t.maxlen)..{.....int.n,.r
fbc0 63 3b 0a 20 20 20 20 63 68 61 72 20 63 2c 20 2a 62 75 66 70 20 3d 20 75 73 72 62 75 66 3b 0a 0a c;.....char.c,.*bufp.=.usrbuf;..
fbe0 20 20 20 20 66 6f 72 20 28 6e 20 3d 20 31 3b 20 6e 20 3c 20 6d 61 78 6c 65 6e 3b 20 6e 2b 2b 29 ....for.(n.=.1;.n.<.maxlen;.n++)
fc00 20 7b 20 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 72 69 6f 5f 72 65 61 64 28 72 .{..........if.((rc.=.rio_read(r
fc20 70 2c 20 26 63 2c 20 31 29 29 20 3d 3d 20 31 29 20 7b 0a 09 20 20 20 20 2a 62 75 66 70 2b 2b 20 p,.&c,.1)).==.1).{......*bufp++.
fc40 3d 20 63 3b 0a 09 20 20 20 20 69 66 20 28 63 20 3d 3d 20 27 5c 6e 27 29 20 7b 0a 20 20 20 20 20 =.c;......if.(c.==.'\n').{......
fc60 20 20 20 20 20 20 20 20 20 20 20 6e 2b 2b 3b 0a 20 20 20 20 20 09 09 62 72 65 61 6b 3b 0a 20 20 ...........n++;........break;...
fc80 20 20 20 20 20 20 20 20 20 20 7d 0a 09 7d 20 65 6c 73 65 20 69 66 20 28 72 63 20 3d 3d 20 30 29 ..........}..}.else.if.(rc.==.0)
fca0 20 7b 0a 09 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 31 29 0a 09 09 72 65 74 75 72 6e 20 30 3b 20 .{......if.(n.==.1)...return.0;.
fcc0 2f 2a 20 45 4f 46 2c 20 6e 6f 20 64 61 74 61 20 72 65 61 64 20 2a 2f 0a 09 20 20 20 20 65 6c 73 /*.EOF,.no.data.read.*/......els
fce0 65 0a 09 09 62 72 65 61 6b 3b 20 20 20 20 2f 2a 20 45 4f 46 2c 20 73 6f 6d 65 20 64 61 74 61 20 e...break;..../*.EOF,.some.data.
fd00 77 61 73 20 72 65 61 64 20 2a 2f 0a 09 7d 20 65 6c 73 65 0a 09 20 20 20 20 72 65 74 75 72 6e 20 was.read.*/..}.else......return.
fd20 2d 31 3b 09 20 20 2f 2a 20 45 72 72 6f 72 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 2a 62 75 66 -1;.../*.Error.*/.....}.....*buf
fd40 70 20 3d 20 30 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 6e 2d 31 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 p.=.0;.....return.n-1;.}./*.$end
fd60 20 72 69 6f 5f 72 65 61 64 6c 69 6e 65 62 20 2a 2f 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a .rio_readlineb.*/../************
fd80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 57 72 61 70 70 65 **********************..*.Wrappe
fda0 72 73 20 66 6f 72 20 72 6f 62 75 73 74 20 49 2f 4f 20 72 6f 75 74 69 6e 65 73 0a 20 2a 2a 2a 2a rs.for.robust.I/O.routines..****
fdc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a ******************************/.
fde0 73 73 69 7a 65 5f 74 20 52 69 6f 5f 72 65 61 64 6e 28 69 6e 74 20 66 64 2c 20 76 6f 69 64 20 2a ssize_t.Rio_readn(int.fd,.void.*
fe00 70 74 72 2c 20 73 69 7a 65 5f 74 20 6e 62 79 74 65 73 29 20 0a 7b 0a 20 20 20 20 73 73 69 7a 65 ptr,.size_t.nbytes)..{.....ssize
fe20 5f 74 20 6e 3b 0a 20 20 0a 20 20 20 20 69 66 20 28 28 6e 20 3d 20 72 69 6f 5f 72 65 61 64 6e 28 _t.n;........if.((n.=.rio_readn(
fe40 66 64 2c 20 70 74 72 2c 20 6e 62 79 74 65 73 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 fd,.ptr,.nbytes)).<.0)..unix_err
fe60 6f 72 28 22 52 69 6f 5f 72 65 61 64 6e 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 or("Rio_readn.error");.....retur
fe80 6e 20 6e 3b 0a 7d 0a 0a 76 6f 69 64 20 52 69 6f 5f 77 72 69 74 65 6e 28 69 6e 74 20 66 64 2c 20 n.n;.}..void.Rio_writen(int.fd,.
fea0 76 6f 69 64 20 2a 75 73 72 62 75 66 2c 20 73 69 7a 65 5f 74 20 6e 29 20 0a 7b 0a 20 20 20 20 69 void.*usrbuf,.size_t.n)..{.....i
fec0 66 20 28 72 69 6f 5f 77 72 69 74 65 6e 28 66 64 2c 20 75 73 72 62 75 66 2c 20 6e 29 20 21 3d 20 f.(rio_writen(fd,.usrbuf,.n).!=.
fee0 6e 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 52 69 6f 5f 77 72 69 74 65 6e 20 65 72 72 6f 72 n)..unix_error("Rio_writen.error
ff00 22 29 3b 0a 7d 0a 0a 76 6f 69 64 20 52 69 6f 5f 72 65 61 64 69 6e 69 74 62 28 72 69 6f 5f 74 20 ");.}..void.Rio_readinitb(rio_t.
ff20 2a 72 70 2c 20 69 6e 74 20 66 64 29 0a 7b 0a 20 20 20 20 72 69 6f 5f 72 65 61 64 69 6e 69 74 62 *rp,.int.fd).{.....rio_readinitb
ff40 28 72 70 2c 20 66 64 29 3b 0a 7d 20 0a 0a 73 73 69 7a 65 5f 74 20 52 69 6f 5f 72 65 61 64 6e 62 (rp,.fd);.}...ssize_t.Rio_readnb
ff60 28 72 69 6f 5f 74 20 2a 72 70 2c 20 76 6f 69 64 20 2a 75 73 72 62 75 66 2c 20 73 69 7a 65 5f 74 (rio_t.*rp,.void.*usrbuf,.size_t
ff80 20 6e 29 20 0a 7b 0a 20 20 20 20 73 73 69 7a 65 5f 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 .n)..{.....ssize_t.rc;......if.(
ffa0 28 72 63 20 3d 20 72 69 6f 5f 72 65 61 64 6e 62 28 72 70 2c 20 75 73 72 62 75 66 2c 20 6e 29 29 (rc.=.rio_readnb(rp,.usrbuf,.n))
ffc0 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 52 69 6f 5f 72 65 61 64 6e 62 20 65 72 .<.0)..unix_error("Rio_readnb.er
ffe0 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 73 73 69 7a 65 5f 74 ror");.....return.rc;.}..ssize_t
10000 20 52 69 6f 5f 72 65 61 64 6c 69 6e 65 62 28 72 69 6f 5f 74 20 2a 72 70 2c 20 76 6f 69 64 20 2a .Rio_readlineb(rio_t.*rp,.void.*
10020 75 73 72 62 75 66 2c 20 73 69 7a 65 5f 74 20 6d 61 78 6c 65 6e 29 20 0a 7b 0a 20 20 20 20 73 73 usrbuf,.size_t.maxlen)..{.....ss
10040 69 7a 65 5f 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 72 69 6f 5f 72 65 61 ize_t.rc;......if.((rc.=.rio_rea
10060 64 6c 69 6e 65 62 28 72 70 2c 20 75 73 72 62 75 66 2c 20 6d 61 78 6c 65 6e 29 29 20 3c 20 30 29 dlineb(rp,.usrbuf,.maxlen)).<.0)
10080 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 52 69 6f 5f 72 65 61 64 6c 69 6e 65 62 20 65 72 72 6f ..unix_error("Rio_readlineb.erro
100a0 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 20 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a r");.....return.rc;.}.../*******
100c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 0a 20 2a 20 43 6c *************************...*.Cl
100e0 69 65 6e 74 2f 73 65 72 76 65 72 20 68 65 6c 70 65 72 20 66 75 6e 63 74 69 6f 6e 73 0a 20 2a 2a ient/server.helper.functions..**
10100 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a ******************************/.
10120 2f 2a 0a 20 2a 20 6f 70 65 6e 5f 63 6c 69 65 6e 74 66 64 20 2d 20 4f 70 65 6e 20 63 6f 6e 6e 65 /*..*.open_clientfd.-.Open.conne
10140 63 74 69 6f 6e 20 74 6f 20 73 65 72 76 65 72 20 61 74 20 3c 68 6f 73 74 6e 61 6d 65 2c 20 70 6f ction.to.server.at.<hostname,.po
10160 72 74 3e 20 61 6e 64 0a 20 2a 20 20 20 20 20 72 65 74 75 72 6e 20 61 20 73 6f 63 6b 65 74 20 64 rt>.and..*.....return.a.socket.d
10180 65 73 63 72 69 70 74 6f 72 20 72 65 61 64 79 20 66 6f 72 20 72 65 61 64 69 6e 67 20 61 6e 64 20 escriptor.ready.for.reading.and.
101a0 77 72 69 74 69 6e 67 2e 20 54 68 69 73 0a 20 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 69 73 writing..This..*.....function.is
101c0 20 72 65 65 6e 74 72 61 6e 74 20 61 6e 64 20 70 72 6f 74 6f 63 6f 6c 2d 69 6e 64 65 70 65 6e 64 .reentrant.and.protocol-independ
101e0 65 6e 74 2e 0a 20 2a 0a 20 2a 20 20 20 20 20 4f 6e 20 65 72 72 6f 72 2c 20 72 65 74 75 72 6e 73 ent...*..*.....On.error,.returns
10200 3a 20 0a 20 2a 20 20 20 20 20 20 20 2d 32 20 66 6f 72 20 67 65 74 61 64 64 72 69 6e 66 6f 20 65 :...*.......-2.for.getaddrinfo.e
10220 72 72 6f 72 0a 20 2a 20 20 20 20 20 20 20 2d 31 20 77 69 74 68 20 65 72 72 6e 6f 20 73 65 74 20 rror..*.......-1.with.errno.set.
10240 66 6f 72 20 6f 74 68 65 72 20 65 72 72 6f 72 73 2e 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 for.other.errors...*/./*.$begin.
10260 6f 70 65 6e 5f 63 6c 69 65 6e 74 66 64 20 2a 2f 0a 69 6e 74 20 6f 70 65 6e 5f 63 6c 69 65 6e 74 open_clientfd.*/.int.open_client
10280 66 64 28 63 68 61 72 20 2a 68 6f 73 74 6e 61 6d 65 2c 20 63 68 61 72 20 2a 70 6f 72 74 29 20 7b fd(char.*hostname,.char.*port).{
102a0 0a 20 20 20 20 69 6e 74 20 63 6c 69 65 6e 74 66 64 2c 20 72 63 3b 0a 20 20 20 20 73 74 72 75 63 .....int.clientfd,.rc;.....struc
102c0 74 20 61 64 64 72 69 6e 66 6f 20 68 69 6e 74 73 2c 20 2a 6c 69 73 74 70 2c 20 2a 70 3b 0a 0a 20 t.addrinfo.hints,.*listp,.*p;...
102e0 20 20 20 2f 2a 20 47 65 74 20 61 20 6c 69 73 74 20 6f 66 20 70 6f 74 65 6e 74 69 61 6c 20 73 65 .../*.Get.a.list.of.potential.se
10300 72 76 65 72 20 61 64 64 72 65 73 73 65 73 20 2a 2f 0a 20 20 20 20 6d 65 6d 73 65 74 28 26 68 69 rver.addresses.*/.....memset(&hi
10320 6e 74 73 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 74 72 75 63 74 20 61 64 64 72 69 6e 66 6f 29 29 nts,.0,.sizeof(struct.addrinfo))
10340 3b 0a 20 20 20 20 68 69 6e 74 73 2e 61 69 5f 73 6f 63 6b 74 79 70 65 20 3d 20 53 4f 43 4b 5f 53 ;.....hints.ai_socktype.=.SOCK_S
10360 54 52 45 41 4d 3b 20 20 2f 2a 20 4f 70 65 6e 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a TREAM;../*.Open.a.connection.*/.
10380 20 20 20 20 68 69 6e 74 73 2e 61 69 5f 66 6c 61 67 73 20 3d 20 41 49 5f 4e 55 4d 45 52 49 43 53 ....hints.ai_flags.=.AI_NUMERICS
103a0 45 52 56 3b 20 20 2f 2a 20 2e 2e 2e 20 75 73 69 6e 67 20 61 20 6e 75 6d 65 72 69 63 20 70 6f 72 ERV;../*.....using.a.numeric.por
103c0 74 20 61 72 67 2e 20 2a 2f 0a 20 20 20 20 68 69 6e 74 73 2e 61 69 5f 66 6c 61 67 73 20 7c 3d 20 t.arg..*/.....hints.ai_flags.|=.
103e0 41 49 5f 41 44 44 52 43 4f 4e 46 49 47 3b 20 20 2f 2a 20 52 65 63 6f 6d 6d 65 6e 64 65 64 20 66 AI_ADDRCONFIG;../*.Recommended.f
10400 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 or.connections.*/.....if.((rc.=.
10420 67 65 74 61 64 64 72 69 6e 66 6f 28 68 6f 73 74 6e 61 6d 65 2c 20 70 6f 72 74 2c 20 26 68 69 6e getaddrinfo(hostname,.port,.&hin
10440 74 73 2c 20 26 6c 69 73 74 70 29 29 20 21 3d 20 30 29 20 7b 0a 20 20 20 20 20 20 20 20 66 70 72 ts,.&listp)).!=.0).{.........fpr
10460 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 67 65 74 61 64 64 72 69 6e 66 6f 20 66 61 69 6c 65 64 intf(stderr,."getaddrinfo.failed
10480 20 28 25 73 3a 25 73 29 3a 20 25 73 5c 6e 22 2c 20 68 6f 73 74 6e 61 6d 65 2c 20 70 6f 72 74 2c .(%s:%s):.%s\n",.hostname,.port,
104a0 20 67 61 69 5f 73 74 72 65 72 72 6f 72 28 72 63 29 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 .gai_strerror(rc));.........retu
104c0 72 6e 20 2d 32 3b 0a 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 2f 2a 20 57 61 6c 6b 20 74 68 65 20 rn.-2;.....}......../*.Walk.the.
104e0 6c 69 73 74 20 66 6f 72 20 6f 6e 65 20 74 68 61 74 20 77 65 20 63 61 6e 20 73 75 63 63 65 73 73 list.for.one.that.we.can.success
10500 66 75 6c 6c 79 20 63 6f 6e 6e 65 63 74 20 74 6f 20 2a 2f 0a 20 20 20 20 66 6f 72 20 28 70 20 3d fully.connect.to.*/.....for.(p.=
10520 20 6c 69 73 74 70 3b 20 70 3b 20 70 20 3d 20 70 2d 3e 61 69 5f 6e 65 78 74 29 20 7b 0a 20 20 20 .listp;.p;.p.=.p->ai_next).{....
10540 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 73 6f 63 6b 65 74 20 64 65 73 63 72 69 70 74 ...../*.Create.a.socket.descript
10560 6f 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6c 69 65 6e 74 66 64 20 3d 20 73 6f or.*/.........if.((clientfd.=.so
10580 63 6b 65 74 28 70 2d 3e 61 69 5f 66 61 6d 69 6c 79 2c 20 70 2d 3e 61 69 5f 73 6f 63 6b 74 79 70 cket(p->ai_family,.p->ai_socktyp
105a0 65 2c 20 70 2d 3e 61 69 5f 70 72 6f 74 6f 63 6f 6c 29 29 20 3c 20 30 29 20 0a 20 20 20 20 20 20 e,.p->ai_protocol)).<.0)........
105c0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 20 2f 2a 20 53 6f 63 6b 65 74 20 66 61 69 6c 65 64 ......continue;./*.Socket.failed
105e0 2c 20 74 72 79 20 74 68 65 20 6e 65 78 74 20 2a 2f 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 6f ,.try.the.next.*/........../*.Co
10600 6e 6e 65 63 74 20 74 6f 20 74 68 65 20 73 65 72 76 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 nnect.to.the.server.*/.........i
10620 66 20 28 63 6f 6e 6e 65 63 74 28 63 6c 69 65 6e 74 66 64 2c 20 70 2d 3e 61 69 5f 61 64 64 72 2c f.(connect(clientfd,.p->ai_addr,
10640 20 70 2d 3e 61 69 5f 61 64 64 72 6c 65 6e 29 20 21 3d 20 2d 31 29 20 0a 20 20 20 20 20 20 20 20 .p->ai_addrlen).!=.-1)..........
10660 20 20 20 20 62 72 65 61 6b 3b 20 2f 2a 20 53 75 63 63 65 73 73 20 2a 2f 0a 20 20 20 20 20 20 20 ....break;./*.Success.*/........
10680 20 69 66 20 28 63 6c 6f 73 65 28 63 6c 69 65 6e 74 66 64 29 20 3c 20 30 29 20 7b 20 2f 2a 20 43 .if.(close(clientfd).<.0).{./*.C
106a0 6f 6e 6e 65 63 74 20 66 61 69 6c 65 64 2c 20 74 72 79 20 61 6e 6f 74 68 65 72 20 2a 2f 20 20 2f onnect.failed,.try.another.*/../
106c0 2f 6c 69 6e 65 3a 6e 65 74 70 3a 6f 70 65 6e 63 6c 69 65 6e 74 66 64 3a 63 6c 6f 73 65 66 64 0a /line:netp:openclientfd:closefd.
106e0 20 20 20 20 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 6f 70 65 ............fprintf(stderr,."ope
10700 6e 5f 63 6c 69 65 6e 74 66 64 3a 20 63 6c 6f 73 65 20 66 61 69 6c 65 64 3a 20 25 73 5c 6e 22 2c n_clientfd:.close.failed:.%s\n",
10720 20 73 74 72 65 72 72 6f 72 28 65 72 72 6e 6f 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 .strerror(errno));.............r
10740 65 74 75 72 6e 20 2d 31 3b 0a 20 20 20 20 20 20 20 20 7d 20 0a 20 20 20 20 7d 20 0a 0a 20 20 20 eturn.-1;.........}......}......
10760 20 2f 2a 20 43 6c 65 61 6e 20 75 70 20 2a 2f 0a 20 20 20 20 66 72 65 65 61 64 64 72 69 6e 66 6f ./*.Clean.up.*/.....freeaddrinfo
10780 28 6c 69 73 74 70 29 3b 0a 20 20 20 20 69 66 20 28 21 70 29 20 2f 2a 20 41 6c 6c 20 63 6f 6e 6e (listp);.....if.(!p)./*.All.conn
107a0 65 63 74 73 20 66 61 69 6c 65 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 ects.failed.*/.........return.-1
107c0 3b 0a 20 20 20 20 65 6c 73 65 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 63 6f 6e 6e 65 63 ;.....else..../*.The.last.connec
107e0 74 20 73 75 63 63 65 65 64 65 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6c t.succeeded.*/.........return.cl
10800 69 65 6e 74 66 64 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 6f 70 65 6e 5f 63 6c 69 65 6e 74 66 64 20 ientfd;.}./*.$end.open_clientfd.
10820 2a 2f 0a 0a 2f 2a 20 20 0a 20 2a 20 6f 70 65 6e 5f 6c 69 73 74 65 6e 66 64 20 2d 20 4f 70 65 6e */../*....*.open_listenfd.-.Open
10840 20 61 6e 64 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 65 6e 69 6e 67 20 73 6f 63 6b 65 74 20 6f .and.return.a.listening.socket.o
10860 6e 20 70 6f 72 74 2e 20 54 68 69 73 0a 20 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 n.port..This..*.....function.is.
10880 72 65 65 6e 74 72 61 6e 74 20 61 6e 64 20 70 72 6f 74 6f 63 6f 6c 2d 69 6e 64 65 70 65 6e 64 65 reentrant.and.protocol-independe
108a0 6e 74 2e 0a 20 2a 0a 20 2a 20 20 20 20 20 4f 6e 20 65 72 72 6f 72 2c 20 72 65 74 75 72 6e 73 3a nt...*..*.....On.error,.returns:
108c0 20 0a 20 2a 20 20 20 20 20 20 20 2d 32 20 66 6f 72 20 67 65 74 61 64 64 72 69 6e 66 6f 20 65 72 ...*.......-2.for.getaddrinfo.er
108e0 72 6f 72 0a 20 2a 20 20 20 20 20 20 20 2d 31 20 77 69 74 68 20 65 72 72 6e 6f 20 73 65 74 20 66 ror..*.......-1.with.errno.set.f
10900 6f 72 20 6f 74 68 65 72 20 65 72 72 6f 72 73 2e 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 6f or.other.errors...*/./*.$begin.o
10920 70 65 6e 5f 6c 69 73 74 65 6e 66 64 20 2a 2f 0a 69 6e 74 20 6f 70 65 6e 5f 6c 69 73 74 65 6e 66 pen_listenfd.*/.int.open_listenf
10940 64 28 63 68 61 72 20 2a 70 6f 72 74 29 20 0a 7b 0a 20 20 20 20 73 74 72 75 63 74 20 61 64 64 72 d(char.*port)..{.....struct.addr
10960 69 6e 66 6f 20 68 69 6e 74 73 2c 20 2a 6c 69 73 74 70 2c 20 2a 70 3b 0a 20 20 20 20 69 6e 74 20 info.hints,.*listp,.*p;.....int.
10980 6c 69 73 74 65 6e 66 64 2c 20 72 63 2c 20 6f 70 74 76 61 6c 3d 31 3b 0a 0a 20 20 20 20 2f 2a 20 listenfd,.rc,.optval=1;....../*.
109a0 47 65 74 20 61 20 6c 69 73 74 20 6f 66 20 70 6f 74 65 6e 74 69 61 6c 20 73 65 72 76 65 72 20 61 Get.a.list.of.potential.server.a
109c0 64 64 72 65 73 73 65 73 20 2a 2f 0a 20 20 20 20 6d 65 6d 73 65 74 28 26 68 69 6e 74 73 2c 20 30 ddresses.*/.....memset(&hints,.0
109e0 2c 20 73 69 7a 65 6f 66 28 73 74 72 75 63 74 20 61 64 64 72 69 6e 66 6f 29 29 3b 0a 20 20 20 20 ,.sizeof(struct.addrinfo));.....
10a00 68 69 6e 74 73 2e 61 69 5f 73 6f 63 6b 74 79 70 65 20 3d 20 53 4f 43 4b 5f 53 54 52 45 41 4d 3b hints.ai_socktype.=.SOCK_STREAM;
10a20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65 70 74 20 63 6f 6e 6e 65 63 74 69 6f ............./*.Accept.connectio
10a40 6e 73 20 2a 2f 0a 20 20 20 20 68 69 6e 74 73 2e 61 69 5f 66 6c 61 67 73 20 3d 20 41 49 5f 50 41 ns.*/.....hints.ai_flags.=.AI_PA
10a60 53 53 49 56 45 20 7c 20 41 49 5f 41 44 44 52 43 4f 4e 46 49 47 3b 20 2f 2a 20 2e 2e 2e 20 6f 6e SSIVE.|.AI_ADDRCONFIG;./*.....on
10a80 20 61 6e 79 20 49 50 20 61 64 64 72 65 73 73 20 2a 2f 0a 20 20 20 20 68 69 6e 74 73 2e 61 69 5f .any.IP.address.*/.....hints.ai_
10aa0 66 6c 61 67 73 20 7c 3d 20 41 49 5f 4e 55 4d 45 52 49 43 53 45 52 56 3b 20 20 20 20 20 20 20 20 flags.|=.AI_NUMERICSERV;........
10ac0 20 20 20 20 2f 2a 20 2e 2e 2e 20 75 73 69 6e 67 20 70 6f 72 74 20 6e 75 6d 62 65 72 20 2a 2f 0a ..../*.....using.port.number.*/.
10ae0 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 67 65 74 61 64 64 72 69 6e 66 6f 28 4e 55 4c 4c 2c 20 ....if.((rc.=.getaddrinfo(NULL,.
10b00 70 6f 72 74 2c 20 26 68 69 6e 74 73 2c 20 26 6c 69 73 74 70 29 29 20 21 3d 20 30 29 20 7b 0a 20 port,.&hints,.&listp)).!=.0).{..
10b20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 67 65 74 61 64 64 72 69 .......fprintf(stderr,."getaddri
10b40 6e 66 6f 20 66 61 69 6c 65 64 20 28 70 6f 72 74 20 25 73 29 3a 20 25 73 5c 6e 22 2c 20 70 6f 72 nfo.failed.(port.%s):.%s\n",.por
10b60 74 2c 20 67 61 69 5f 73 74 72 65 72 72 6f 72 28 72 63 29 29 3b 0a 20 20 20 20 20 20 20 20 72 65 t,.gai_strerror(rc));.........re
10b80 74 75 72 6e 20 2d 32 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 57 61 6c 6b 20 74 68 65 20 turn.-2;.....}....../*.Walk.the.
10ba0 6c 69 73 74 20 66 6f 72 20 6f 6e 65 20 74 68 61 74 20 77 65 20 63 61 6e 20 62 69 6e 64 20 74 6f list.for.one.that.we.can.bind.to
10bc0 20 2a 2f 0a 20 20 20 20 66 6f 72 20 28 70 20 3d 20 6c 69 73 74 70 3b 20 70 3b 20 70 20 3d 20 70 .*/.....for.(p.=.listp;.p;.p.=.p
10be0 2d 3e 61 69 5f 6e 65 78 74 29 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61 ->ai_next).{........./*.Create.a
10c00 20 73 6f 63 6b 65 74 20 64 65 73 63 72 69 70 74 6f 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 .socket.descriptor.*/.........if
10c20 20 28 28 6c 69 73 74 65 6e 66 64 20 3d 20 73 6f 63 6b 65 74 28 70 2d 3e 61 69 5f 66 61 6d 69 6c .((listenfd.=.socket(p->ai_famil
10c40 79 2c 20 70 2d 3e 61 69 5f 73 6f 63 6b 74 79 70 65 2c 20 70 2d 3e 61 69 5f 70 72 6f 74 6f 63 6f y,.p->ai_socktype,.p->ai_protoco
10c60 6c 29 29 20 3c 20 30 29 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 20 l)).<.0)..............continue;.
10c80 20 2f 2a 20 53 6f 63 6b 65 74 20 66 61 69 6c 65 64 2c 20 74 72 79 20 74 68 65 20 6e 65 78 74 20 ./*.Socket.failed,.try.the.next.
10ca0 2a 2f 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 45 6c 69 6d 69 6e 61 74 65 73 20 22 41 64 64 72 65 */........../*.Eliminates."Addre
10cc0 73 73 20 61 6c 72 65 61 64 79 20 69 6e 20 75 73 65 22 20 65 72 72 6f 72 20 66 72 6f 6d 20 62 69 ss.already.in.use".error.from.bi
10ce0 6e 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 65 74 73 6f 63 6b 6f 70 74 28 6c 69 73 74 65 6e 66 nd.*/.........setsockopt(listenf
10d00 64 2c 20 53 4f 4c 5f 53 4f 43 4b 45 54 2c 20 53 4f 5f 52 45 55 53 45 41 44 44 52 2c 20 20 20 20 d,.SOL_SOCKET,.SO_REUSEADDR,....
10d20 2f 2f 6c 69 6e 65 3a 6e 65 74 70 3a 63 73 61 70 70 3a 73 65 74 73 6f 63 6b 6f 70 74 0a 20 20 20 //line:netp:csapp:setsockopt....
10d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 29 26 6f ................(const.void.*)&o
10d60 70 74 76 61 6c 20 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b 0a 0a 20 20 20 20 20 20 20 20 2f ptval.,.sizeof(int));........../
10d80 2a 20 42 69 6e 64 20 74 68 65 20 64 65 73 63 72 69 70 74 6f 72 20 74 6f 20 74 68 65 20 61 64 64 *.Bind.the.descriptor.to.the.add
10da0 72 65 73 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 20 28 62 69 6e 64 28 6c 69 73 74 65 6e 66 ress.*/.........if.(bind(listenf
10dc0 64 2c 20 70 2d 3e 61 69 5f 61 64 64 72 2c 20 70 2d 3e 61 69 5f 61 64 64 72 6c 65 6e 29 20 3d 3d d,.p->ai_addr,.p->ai_addrlen).==
10de0 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 20 2f 2a 20 53 75 63 63 65 73 .0).............break;./*.Succes
10e00 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 20 28 63 6c 6f 73 65 28 6c 69 73 74 65 6e 66 64 29 s.*/.........if.(close(listenfd)
10e20 20 3c 20 30 29 20 7b 20 2f 2a 20 42 69 6e 64 20 66 61 69 6c 65 64 2c 20 74 72 79 20 74 68 65 20 .<.0).{./*.Bind.failed,.try.the.
10e40 6e 65 78 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 next.*/.............fprintf(stde
10e60 72 72 2c 20 22 6f 70 65 6e 5f 6c 69 73 74 65 6e 66 64 20 63 6c 6f 73 65 20 66 61 69 6c 65 64 3a rr,."open_listenfd.close.failed:
10e80 20 25 73 5c 6e 22 2c 20 73 74 72 65 72 72 6f 72 28 65 72 72 6e 6f 29 29 3b 0a 20 20 20 20 20 20 .%s\n",.strerror(errno));.......
10ea0 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d ......return.-1;.........}.....}
10ec0 0a 0a 0a 20 20 20 20 2f 2a 20 43 6c 65 61 6e 20 75 70 20 2a 2f 0a 20 20 20 20 66 72 65 65 61 64 ......./*.Clean.up.*/.....freead
10ee0 64 72 69 6e 66 6f 28 6c 69 73 74 70 29 3b 0a 20 20 20 20 69 66 20 28 21 70 29 20 2f 2a 20 4e 6f drinfo(listp);.....if.(!p)./*.No
10f00 20 61 64 64 72 65 73 73 20 77 6f 72 6b 65 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 .address.worked.*/.........retur
10f20 6e 20 2d 31 3b 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 69 74 20 61 20 6c 69 73 74 65 6e 69 6e n.-1;....../*.Make.it.a.listenin
10f40 67 20 73 6f 63 6b 65 74 20 72 65 61 64 79 20 74 6f 20 61 63 63 65 70 74 20 63 6f 6e 6e 65 63 74 g.socket.ready.to.accept.connect
10f60 69 6f 6e 20 72 65 71 75 65 73 74 73 20 2a 2f 0a 20 20 20 20 69 66 20 28 6c 69 73 74 65 6e 28 6c ion.requests.*/.....if.(listen(l
10f80 69 73 74 65 6e 66 64 2c 20 4c 49 53 54 45 4e 51 29 20 3c 20 30 29 20 7b 0a 20 20 20 20 20 20 20 istenfd,.LISTENQ).<.0).{........
10fa0 20 63 6c 6f 73 65 28 6c 69 73 74 65 6e 66 64 29 3b 0a 09 72 65 74 75 72 6e 20 2d 31 3b 0a 20 20 .close(listenfd);..return.-1;...
10fc0 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 6c 69 73 74 65 6e 66 64 3b 0a 7d 0a 2f 2a 20 24 65 ..}.....return.listenfd;.}./*.$e
10fe0 6e 64 20 6f 70 65 6e 5f 6c 69 73 74 65 6e 66 64 20 2a 2f 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a nd.open_listenfd.*/../**********
11000 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ********************************
11020 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 57 72 61 70 70 65 72 73 20 66 6f 72 20 72 65 65 6e 74 **********..*.Wrappers.for.reent
11040 72 61 6e 74 20 70 72 6f 74 6f 63 6f 6c 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 68 65 6c 70 65 72 rant.protocol-independent.helper
11060 73 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a s..*****************************
11080 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 69 6e 74 20 4f 70 65 ***********************/.int.Ope
110a0 6e 5f 63 6c 69 65 6e 74 66 64 28 63 68 61 72 20 2a 68 6f 73 74 6e 61 6d 65 2c 20 63 68 61 72 20 n_clientfd(char.*hostname,.char.
110c0 2a 70 6f 72 74 29 20 0a 7b 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 *port)..{.....int.rc;......if.((
110e0 72 63 20 3d 20 6f 70 65 6e 5f 63 6c 69 65 6e 74 66 64 28 68 6f 73 74 6e 61 6d 65 2c 20 70 6f 72 rc.=.open_clientfd(hostname,.por
11100 74 29 29 20 3c 20 30 29 20 0a 09 75 6e 69 78 5f 65 72 72 6f 72 28 22 4f 70 65 6e 5f 63 6c 69 65 t)).<.0)...unix_error("Open_clie
11120 6e 74 66 64 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a ntfd.error");.....return.rc;.}..
11140 69 6e 74 20 4f 70 65 6e 5f 6c 69 73 74 65 6e 66 64 28 63 68 61 72 20 2a 70 6f 72 74 29 20 0a 7b int.Open_listenfd(char.*port)..{
11160 0a 20 20 20 20 69 6e 74 20 72 63 3b 0a 0a 20 20 20 20 69 66 20 28 28 72 63 20 3d 20 6f 70 65 6e .....int.rc;......if.((rc.=.open
11180 5f 6c 69 73 74 65 6e 66 64 28 70 6f 72 74 29 29 20 3c 20 30 29 0a 09 75 6e 69 78 5f 65 72 72 6f _listenfd(port)).<.0)..unix_erro
111a0 72 28 22 4f 70 65 6e 5f 6c 69 73 74 65 6e 66 64 20 65 72 72 6f 72 22 29 3b 0a 20 20 20 20 72 65 r("Open_listenfd.error");.....re
111c0 74 75 72 6e 20 72 63 3b 0a 7d 0a 0a 2f 2a 20 24 65 6e 64 20 63 73 61 70 70 2e 63 20 2a 2f 0a 0a turn.rc;.}../*.$end.csapp.c.*/..
111e0 0a 0a 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
11200 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 74 69 6e 79 2f 63 73 61 70 70 2e 68 00 00 00 proxylab-handout/tiny/csapp.h...
11220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
11240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
11260 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000644.0006626.0000144.0000
11280 30 30 31 34 37 33 35 00 31 32 36 35 34 37 33 35 33 30 34 00 30 31 34 36 35 30 00 20 30 00 00 00 0014735.12654735304.014650..0...
112a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
112c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
112e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
11300 00 75 73 74 61 72 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
11320 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
11340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
11360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
11380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
113a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
113c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
113e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
11400 2f 2a 0a 20 2a 20 63 73 61 70 70 2e 68 20 2d 20 70 72 6f 74 6f 74 79 70 65 73 20 61 6e 64 20 64 /*..*.csapp.h.-.prototypes.and.d
11420 65 66 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 74 68 65 20 43 53 3a 41 50 50 33 65 20 62 6f 6f 6b efinitions.for.the.CS:APP3e.book
11440 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 63 73 61 70 70 2e 68 20 2a 2f 0a 23 69 66 6e 64 65 ..*/./*.$begin.csapp.h.*/.#ifnde
11460 66 20 5f 5f 43 53 41 50 50 5f 48 5f 5f 0a 23 64 65 66 69 6e 65 20 5f 5f 43 53 41 50 50 5f 48 5f f.__CSAPP_H__.#define.__CSAPP_H_
11480 5f 0a 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c _..#include.<stdio.h>.#include.<
114a0 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 61 72 67 2e 68 3e 0a 23 69 stdlib.h>.#include.<stdarg.h>.#i
114c0 6e 63 6c 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 nclude.<unistd.h>.#include.<stri
114e0 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 69 6e 63 6c 75 64 ng.h>.#include.<ctype.h>.#includ
11500 65 20 3c 73 65 74 6a 6d 70 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 69 67 6e 61 6c 2e 68 3e e.<setjmp.h>.#include.<signal.h>
11520 0a 23 69 6e 63 6c 75 64 65 20 3c 64 69 72 65 6e 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 .#include.<dirent.h>.#include.<s
11540 79 73 2f 74 69 6d 65 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74 79 70 65 73 2e 68 ys/time.h>.#include.<sys/types.h
11560 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 77 61 69 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 >.#include.<sys/wait.h>.#include
11580 20 3c 73 79 73 2f 73 74 61 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 66 63 6e 74 6c 2e 68 3e .<sys/stat.h>.#include.<fcntl.h>
115a0 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 6d 6d 61 6e 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 .#include.<sys/mman.h>.#include.
115c0 3c 65 72 72 6e 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 6d 61 74 68 2e 68 3e 0a 23 69 6e 63 <errno.h>.#include.<math.h>.#inc
115e0 6c 75 64 65 20 3c 70 74 68 72 65 61 64 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 65 6d 61 70 lude.<pthread.h>.#include.<semap
11600 68 6f 72 65 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 73 6f 63 6b 65 74 2e 68 3e 0a hore.h>.#include.<sys/socket.h>.
11620 23 69 6e 63 6c 75 64 65 20 3c 6e 65 74 64 62 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 6e 65 74 #include.<netdb.h>.#include.<net
11640 69 6e 65 74 2f 69 6e 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 72 70 61 2f 69 6e 65 74 2e 68 inet/in.h>.#include.<arpa/inet.h
11660 3e 0a 0a 2f 2a 20 44 65 66 61 75 6c 74 20 66 69 6c 65 20 70 65 72 6d 69 73 73 69 6f 6e 73 20 61 >../*.Default.file.permissions.a
11680 72 65 20 44 45 46 5f 4d 4f 44 45 20 26 20 7e 44 45 46 5f 55 4d 41 53 4b 20 2a 2f 0a 2f 2a 20 24 re.DEF_MODE.&.~DEF_UMASK.*/./*.$
116a0 62 65 67 69 6e 20 63 72 65 61 74 65 6d 61 73 6b 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 45 46 begin.createmasks.*/.#define.DEF
116c0 5f 4d 4f 44 45 20 20 20 53 5f 49 52 55 53 52 7c 53 5f 49 57 55 53 52 7c 53 5f 49 52 47 52 50 7c _MODE...S_IRUSR|S_IWUSR|S_IRGRP|
116e0 53 5f 49 57 47 52 50 7c 53 5f 49 52 4f 54 48 7c 53 5f 49 57 4f 54 48 0a 23 64 65 66 69 6e 65 20 S_IWGRP|S_IROTH|S_IWOTH.#define.
11700 44 45 46 5f 55 4d 41 53 4b 20 20 53 5f 49 57 47 52 50 7c 53 5f 49 57 4f 54 48 0a 2f 2a 20 24 65 DEF_UMASK..S_IWGRP|S_IWOTH./*.$e
11720 6e 64 20 63 72 65 61 74 65 6d 61 73 6b 73 20 2a 2f 0a 0a 2f 2a 20 53 69 6d 70 6c 69 66 69 65 73 nd.createmasks.*/../*.Simplifies
11740 20 63 61 6c 6c 73 20 74 6f 20 62 69 6e 64 28 29 2c 20 63 6f 6e 6e 65 63 74 28 29 2c 20 61 6e 64 .calls.to.bind(),.connect(),.and
11760 20 61 63 63 65 70 74 28 29 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 73 6f 63 6b 61 64 64 72 64 .accept().*/./*.$begin.sockaddrd
11780 65 66 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 73 6f 63 6b 61 64 64 72 20 53 41 ef.*/.typedef.struct.sockaddr.SA
117a0 3b 0a 2f 2a 20 24 65 6e 64 20 73 6f 63 6b 61 64 64 72 64 65 66 20 2a 2f 0a 0a 2f 2a 20 50 65 72 ;./*.$end.sockaddrdef.*/../*.Per
117c0 73 69 73 74 65 6e 74 20 73 74 61 74 65 20 66 6f 72 20 74 68 65 20 72 6f 62 75 73 74 20 49 2f 4f sistent.state.for.the.robust.I/O
117e0 20 28 52 69 6f 29 20 70 61 63 6b 61 67 65 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 72 69 6f 5f .(Rio).package.*/./*.$begin.rio_
11800 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 52 49 4f 5f 42 55 46 53 49 5a 45 20 38 31 39 32 0a 74 79 t.*/.#define.RIO_BUFSIZE.8192.ty
11820 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 69 6e 74 20 72 69 6f 5f 66 64 3b 20 20 pedef.struct.{.....int.rio_fd;..
11840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 73 63 72 69 70 74 6f 72 20 66 6f 72 20 ............../*.Descriptor.for.
11860 74 68 69 73 20 69 6e 74 65 72 6e 61 6c 20 62 75 66 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 69 6f this.internal.buf.*/.....int.rio
11880 5f 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 6e 72 65 61 64 20 62 79 _cnt;.............../*.Unread.by
118a0 74 65 73 20 69 6e 20 69 6e 74 65 72 6e 61 6c 20 62 75 66 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 tes.in.internal.buf.*/.....char.
118c0 2a 72 69 6f 5f 62 75 66 70 74 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 75 6e *rio_bufptr;........../*.Next.un
118e0 72 65 61 64 20 62 79 74 65 20 69 6e 20 69 6e 74 65 72 6e 61 6c 20 62 75 66 20 2a 2f 0a 20 20 20 read.byte.in.internal.buf.*/....
11900 20 63 68 61 72 20 72 69 6f 5f 62 75 66 5b 52 49 4f 5f 42 55 46 53 49 5a 45 5d 3b 20 2f 2a 20 49 .char.rio_buf[RIO_BUFSIZE];./*.I
11920 6e 74 65 72 6e 61 6c 20 62 75 66 66 65 72 20 2a 2f 0a 7d 20 72 69 6f 5f 74 3b 0a 2f 2a 20 24 65 nternal.buffer.*/.}.rio_t;./*.$e
11940 6e 64 20 72 69 6f 5f 74 20 2a 2f 0a 0a 2f 2a 20 45 78 74 65 72 6e 61 6c 20 76 61 72 69 61 62 6c nd.rio_t.*/../*.External.variabl
11960 65 73 20 2a 2f 0a 65 78 74 65 72 6e 20 69 6e 74 20 68 5f 65 72 72 6e 6f 3b 20 20 20 20 2f 2a 20 es.*/.extern.int.h_errno;..../*.
11980 44 65 66 69 6e 65 64 20 62 79 20 42 49 4e 44 20 66 6f 72 20 44 4e 53 20 65 72 72 6f 72 73 20 2a Defined.by.BIND.for.DNS.errors.*
119a0 2f 20 0a 65 78 74 65 72 6e 20 63 68 61 72 20 2a 2a 65 6e 76 69 72 6f 6e 3b 20 2f 2a 20 44 65 66 /..extern.char.**environ;./*.Def
119c0 69 6e 65 64 20 62 79 20 6c 69 62 63 20 2a 2f 0a 0a 2f 2a 20 4d 69 73 63 20 63 6f 6e 73 74 61 6e ined.by.libc.*/../*.Misc.constan
119e0 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 09 4d 41 58 4c 49 4e 45 09 20 38 31 39 32 20 20 2f 2a 20 ts.*/.#define.MAXLINE..8192../*.
11a00 4d 61 78 20 74 65 78 74 20 6c 69 6e 65 20 6c 65 6e 67 74 68 20 2a 2f 0a 23 64 65 66 69 6e 65 20 Max.text.line.length.*/.#define.
11a20 4d 41 58 42 55 46 20 20 20 38 31 39 32 20 20 2f 2a 20 4d 61 78 20 49 2f 4f 20 62 75 66 66 65 72 MAXBUF...8192../*.Max.I/O.buffer
11a40 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 49 53 54 45 4e 51 20 20 31 30 32 34 20 20 .size.*/.#define.LISTENQ..1024..
11a60 2f 2a 20 53 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 6c 69 73 74 65 6e 28 29 20 2a /*.Second.argument.to.listen().*
11a80 2f 0a 0a 2f 2a 20 4f 75 72 20 6f 77 6e 20 65 72 72 6f 72 2d 68 61 6e 64 6c 69 6e 67 20 66 75 6e /../*.Our.own.error-handling.fun
11aa0 63 74 69 6f 6e 73 20 2a 2f 0a 76 6f 69 64 20 75 6e 69 78 5f 65 72 72 6f 72 28 63 68 61 72 20 2a ctions.*/.void.unix_error(char.*
11ac0 6d 73 67 29 3b 0a 76 6f 69 64 20 70 6f 73 69 78 5f 65 72 72 6f 72 28 69 6e 74 20 63 6f 64 65 2c msg);.void.posix_error(int.code,
11ae0 20 63 68 61 72 20 2a 6d 73 67 29 3b 0a 76 6f 69 64 20 64 6e 73 5f 65 72 72 6f 72 28 63 68 61 72 .char.*msg);.void.dns_error(char
11b00 20 2a 6d 73 67 29 3b 0a 76 6f 69 64 20 67 61 69 5f 65 72 72 6f 72 28 69 6e 74 20 63 6f 64 65 2c .*msg);.void.gai_error(int.code,
11b20 20 63 68 61 72 20 2a 6d 73 67 29 3b 0a 76 6f 69 64 20 61 70 70 5f 65 72 72 6f 72 28 63 68 61 72 .char.*msg);.void.app_error(char
11b40 20 2a 6d 73 67 29 3b 0a 0a 2f 2a 20 50 72 6f 63 65 73 73 20 63 6f 6e 74 72 6f 6c 20 77 72 61 70 .*msg);../*.Process.control.wrap
11b60 70 65 72 73 20 2a 2f 0a 70 69 64 5f 74 20 46 6f 72 6b 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 45 pers.*/.pid_t.Fork(void);.void.E
11b80 78 65 63 76 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 63 68 61 72 xecve(const.char.*filename,.char
11ba0 20 2a 63 6f 6e 73 74 20 61 72 67 76 5b 5d 2c 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 65 6e 76 70 .*const.argv[],.char.*const.envp
11bc0 5b 5d 29 3b 0a 70 69 64 5f 74 20 57 61 69 74 28 69 6e 74 20 2a 73 74 61 74 75 73 29 3b 0a 70 69 []);.pid_t.Wait(int.*status);.pi
11be0 64 5f 74 20 57 61 69 74 70 69 64 28 70 69 64 5f 74 20 70 69 64 2c 20 69 6e 74 20 2a 69 70 74 72 d_t.Waitpid(pid_t.pid,.int.*iptr
11c00 2c 20 69 6e 74 20 6f 70 74 69 6f 6e 73 29 3b 0a 76 6f 69 64 20 4b 69 6c 6c 28 70 69 64 5f 74 20 ,.int.options);.void.Kill(pid_t.
11c20 70 69 64 2c 20 69 6e 74 20 73 69 67 6e 75 6d 29 3b 0a 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 53 pid,.int.signum);.unsigned.int.S
11c40 6c 65 65 70 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 73 65 63 73 29 3b 0a 76 6f 69 64 20 50 61 leep(unsigned.int.secs);.void.Pa
11c60 75 73 65 28 76 6f 69 64 29 3b 0a 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 41 6c 61 72 6d 28 75 6e use(void);.unsigned.int.Alarm(un
11c80 73 69 67 6e 65 64 20 69 6e 74 20 73 65 63 6f 6e 64 73 29 3b 0a 76 6f 69 64 20 53 65 74 70 67 69 signed.int.seconds);.void.Setpgi
11ca0 64 28 70 69 64 5f 74 20 70 69 64 2c 20 70 69 64 5f 74 20 70 67 69 64 29 3b 0a 70 69 64 5f 74 20 d(pid_t.pid,.pid_t.pgid);.pid_t.
11cc0 47 65 74 70 67 72 70 28 29 3b 0a 0a 2f 2a 20 53 69 67 6e 61 6c 20 77 72 61 70 70 65 72 73 20 2a Getpgrp();../*.Signal.wrappers.*
11ce0 2f 0a 74 79 70 65 64 65 66 20 76 6f 69 64 20 68 61 6e 64 6c 65 72 5f 74 28 69 6e 74 29 3b 0a 68 /.typedef.void.handler_t(int);.h
11d00 61 6e 64 6c 65 72 5f 74 20 2a 53 69 67 6e 61 6c 28 69 6e 74 20 73 69 67 6e 75 6d 2c 20 68 61 6e andler_t.*Signal(int.signum,.han
11d20 64 6c 65 72 5f 74 20 2a 68 61 6e 64 6c 65 72 29 3b 0a 76 6f 69 64 20 53 69 67 70 72 6f 63 6d 61 dler_t.*handler);.void.Sigprocma
11d40 73 6b 28 69 6e 74 20 68 6f 77 2c 20 63 6f 6e 73 74 20 73 69 67 73 65 74 5f 74 20 2a 73 65 74 2c sk(int.how,.const.sigset_t.*set,
11d60 20 73 69 67 73 65 74 5f 74 20 2a 6f 6c 64 73 65 74 29 3b 0a 76 6f 69 64 20 53 69 67 65 6d 70 74 .sigset_t.*oldset);.void.Sigempt
11d80 79 73 65 74 28 73 69 67 73 65 74 5f 74 20 2a 73 65 74 29 3b 0a 76 6f 69 64 20 53 69 67 66 69 6c yset(sigset_t.*set);.void.Sigfil
11da0 6c 73 65 74 28 73 69 67 73 65 74 5f 74 20 2a 73 65 74 29 3b 0a 76 6f 69 64 20 53 69 67 61 64 64 lset(sigset_t.*set);.void.Sigadd
11dc0 73 65 74 28 73 69 67 73 65 74 5f 74 20 2a 73 65 74 2c 20 69 6e 74 20 73 69 67 6e 75 6d 29 3b 0a set(sigset_t.*set,.int.signum);.
11de0 76 6f 69 64 20 53 69 67 64 65 6c 73 65 74 28 73 69 67 73 65 74 5f 74 20 2a 73 65 74 2c 20 69 6e void.Sigdelset(sigset_t.*set,.in
11e00 74 20 73 69 67 6e 75 6d 29 3b 0a 69 6e 74 20 53 69 67 69 73 6d 65 6d 62 65 72 28 63 6f 6e 73 74 t.signum);.int.Sigismember(const
11e20 20 73 69 67 73 65 74 5f 74 20 2a 73 65 74 2c 20 69 6e 74 20 73 69 67 6e 75 6d 29 3b 0a 69 6e 74 .sigset_t.*set,.int.signum);.int
11e40 20 53 69 67 73 75 73 70 65 6e 64 28 63 6f 6e 73 74 20 73 69 67 73 65 74 5f 74 20 2a 73 65 74 29 .Sigsuspend(const.sigset_t.*set)
11e60 3b 0a 0a 2f 2a 20 53 69 6f 20 28 53 69 67 6e 61 6c 2d 73 61 66 65 20 49 2f 4f 29 20 72 6f 75 74 ;../*.Sio.(Signal-safe.I/O).rout
11e80 69 6e 65 73 20 2a 2f 0a 73 73 69 7a 65 5f 74 20 73 69 6f 5f 70 75 74 73 28 63 68 61 72 20 73 5b ines.*/.ssize_t.sio_puts(char.s[
11ea0 5d 29 3b 0a 73 73 69 7a 65 5f 74 20 73 69 6f 5f 70 75 74 6c 28 6c 6f 6e 67 20 76 29 3b 0a 76 6f ]);.ssize_t.sio_putl(long.v);.vo
11ec0 69 64 20 73 69 6f 5f 65 72 72 6f 72 28 63 68 61 72 20 73 5b 5d 29 3b 0a 0a 2f 2a 20 53 69 6f 20 id.sio_error(char.s[]);../*.Sio.
11ee0 77 72 61 70 70 65 72 73 20 2a 2f 0a 73 73 69 7a 65 5f 74 20 53 69 6f 5f 70 75 74 73 28 63 68 61 wrappers.*/.ssize_t.Sio_puts(cha
11f00 72 20 73 5b 5d 29 3b 0a 73 73 69 7a 65 5f 74 20 53 69 6f 5f 70 75 74 6c 28 6c 6f 6e 67 20 76 29 r.s[]);.ssize_t.Sio_putl(long.v)
11f20 3b 0a 76 6f 69 64 20 53 69 6f 5f 65 72 72 6f 72 28 63 68 61 72 20 73 5b 5d 29 3b 0a 0a 2f 2a 20 ;.void.Sio_error(char.s[]);../*.
11f40 55 6e 69 78 20 49 2f 4f 20 77 72 61 70 70 65 72 73 20 2a 2f 0a 69 6e 74 20 4f 70 65 6e 28 63 6f Unix.I/O.wrappers.*/.int.Open(co
11f60 6e 73 74 20 63 68 61 72 20 2a 70 61 74 68 6e 61 6d 65 2c 20 69 6e 74 20 66 6c 61 67 73 2c 20 6d nst.char.*pathname,.int.flags,.m
11f80 6f 64 65 5f 74 20 6d 6f 64 65 29 3b 0a 73 73 69 7a 65 5f 74 20 52 65 61 64 28 69 6e 74 20 66 64 ode_t.mode);.ssize_t.Read(int.fd
11fa0 2c 20 76 6f 69 64 20 2a 62 75 66 2c 20 73 69 7a 65 5f 74 20 63 6f 75 6e 74 29 3b 0a 73 73 69 7a ,.void.*buf,.size_t.count);.ssiz
11fc0 65 5f 74 20 57 72 69 74 65 28 69 6e 74 20 66 64 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 62 75 e_t.Write(int.fd,.const.void.*bu
11fe0 66 2c 20 73 69 7a 65 5f 74 20 63 6f 75 6e 74 29 3b 0a 6f 66 66 5f 74 20 4c 73 65 65 6b 28 69 6e f,.size_t.count);.off_t.Lseek(in
12000 74 20 66 69 6c 64 65 73 2c 20 6f 66 66 5f 74 20 6f 66 66 73 65 74 2c 20 69 6e 74 20 77 68 65 6e t.fildes,.off_t.offset,.int.when
12020 63 65 29 3b 0a 76 6f 69 64 20 43 6c 6f 73 65 28 69 6e 74 20 66 64 29 3b 0a 69 6e 74 20 53 65 6c ce);.void.Close(int.fd);.int.Sel
12040 65 63 74 28 69 6e 74 20 20 6e 2c 20 66 64 5f 73 65 74 20 2a 72 65 61 64 66 64 73 2c 20 66 64 5f ect(int..n,.fd_set.*readfds,.fd_
12060 73 65 74 20 2a 77 72 69 74 65 66 64 73 2c 20 66 64 5f 73 65 74 20 2a 65 78 63 65 70 74 66 64 73 set.*writefds,.fd_set.*exceptfds
12080 2c 20 0a 09 20 20 20 73 74 72 75 63 74 20 74 69 6d 65 76 61 6c 20 2a 74 69 6d 65 6f 75 74 29 3b ,......struct.timeval.*timeout);
120a0 0a 69 6e 74 20 44 75 70 32 28 69 6e 74 20 66 64 31 2c 20 69 6e 74 20 66 64 32 29 3b 0a 76 6f 69 .int.Dup2(int.fd1,.int.fd2);.voi
120c0 64 20 53 74 61 74 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 73 74 72 d.Stat(const.char.*filename,.str
120e0 75 63 74 20 73 74 61 74 20 2a 62 75 66 29 3b 0a 76 6f 69 64 20 46 73 74 61 74 28 69 6e 74 20 66 uct.stat.*buf);.void.Fstat(int.f
12100 64 2c 20 73 74 72 75 63 74 20 73 74 61 74 20 2a 62 75 66 29 20 3b 0a 0a 2f 2a 20 44 69 72 65 63 d,.struct.stat.*buf).;../*.Direc
12120 74 6f 72 79 20 77 72 61 70 70 65 72 73 20 2a 2f 0a 44 49 52 20 2a 4f 70 65 6e 64 69 72 28 63 6f tory.wrappers.*/.DIR.*Opendir(co
12140 6e 73 74 20 63 68 61 72 20 2a 6e 61 6d 65 29 3b 0a 73 74 72 75 63 74 20 64 69 72 65 6e 74 20 2a nst.char.*name);.struct.dirent.*
12160 52 65 61 64 64 69 72 28 44 49 52 20 2a 64 69 72 70 29 3b 0a 69 6e 74 20 43 6c 6f 73 65 64 69 72 Readdir(DIR.*dirp);.int.Closedir
12180 28 44 49 52 20 2a 64 69 72 70 29 3b 0a 0a 2f 2a 20 4d 65 6d 6f 72 79 20 6d 61 70 70 69 6e 67 20 (DIR.*dirp);../*.Memory.mapping.
121a0 77 72 61 70 70 65 72 73 20 2a 2f 0a 76 6f 69 64 20 2a 4d 6d 61 70 28 76 6f 69 64 20 2a 61 64 64 wrappers.*/.void.*Mmap(void.*add
121c0 72 2c 20 73 69 7a 65 5f 74 20 6c 65 6e 2c 20 69 6e 74 20 70 72 6f 74 2c 20 69 6e 74 20 66 6c 61 r,.size_t.len,.int.prot,.int.fla
121e0 67 73 2c 20 69 6e 74 20 66 64 2c 20 6f 66 66 5f 74 20 6f 66 66 73 65 74 29 3b 0a 76 6f 69 64 20 gs,.int.fd,.off_t.offset);.void.
12200 4d 75 6e 6d 61 70 28 76 6f 69 64 20 2a 73 74 61 72 74 2c 20 73 69 7a 65 5f 74 20 6c 65 6e 67 74 Munmap(void.*start,.size_t.lengt
12220 68 29 3b 0a 0a 2f 2a 20 53 74 61 6e 64 61 72 64 20 49 2f 4f 20 77 72 61 70 70 65 72 73 20 2a 2f h);../*.Standard.I/O.wrappers.*/
12240 0a 76 6f 69 64 20 46 63 6c 6f 73 65 28 46 49 4c 45 20 2a 66 70 29 3b 0a 46 49 4c 45 20 2a 46 64 .void.Fclose(FILE.*fp);.FILE.*Fd
12260 6f 70 65 6e 28 69 6e 74 20 66 64 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 74 79 70 65 29 3b 0a open(int.fd,.const.char.*type);.
12280 63 68 61 72 20 2a 46 67 65 74 73 28 63 68 61 72 20 2a 70 74 72 2c 20 69 6e 74 20 6e 2c 20 46 49 char.*Fgets(char.*ptr,.int.n,.FI
122a0 4c 45 20 2a 73 74 72 65 61 6d 29 3b 0a 46 49 4c 45 20 2a 46 6f 70 65 6e 28 63 6f 6e 73 74 20 63 LE.*stream);.FILE.*Fopen(const.c
122c0 68 61 72 20 2a 66 69 6c 65 6e 61 6d 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 6d 6f 64 65 29 har.*filename,.const.char.*mode)
122e0 3b 0a 76 6f 69 64 20 46 70 75 74 73 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 74 72 2c 20 46 49 ;.void.Fputs(const.char.*ptr,.FI
12300 4c 45 20 2a 73 74 72 65 61 6d 29 3b 0a 73 69 7a 65 5f 74 20 46 72 65 61 64 28 76 6f 69 64 20 2a LE.*stream);.size_t.Fread(void.*
12320 70 74 72 2c 20 73 69 7a 65 5f 74 20 73 69 7a 65 2c 20 73 69 7a 65 5f 74 20 6e 6d 65 6d 62 2c 20 ptr,.size_t.size,.size_t.nmemb,.
12340 46 49 4c 45 20 2a 73 74 72 65 61 6d 29 3b 0a 76 6f 69 64 20 46 77 72 69 74 65 28 63 6f 6e 73 74 FILE.*stream);.void.Fwrite(const
12360 20 76 6f 69 64 20 2a 70 74 72 2c 20 73 69 7a 65 5f 74 20 73 69 7a 65 2c 20 73 69 7a 65 5f 74 20 .void.*ptr,.size_t.size,.size_t.
12380 6e 6d 65 6d 62 2c 20 46 49 4c 45 20 2a 73 74 72 65 61 6d 29 3b 0a 0a 2f 2a 20 44 79 6e 61 6d 69 nmemb,.FILE.*stream);../*.Dynami
123a0 63 20 73 74 6f 72 61 67 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 72 61 70 70 65 72 73 20 2a 2f c.storage.allocation.wrappers.*/
123c0 0a 76 6f 69 64 20 2a 4d 61 6c 6c 6f 63 28 73 69 7a 65 5f 74 20 73 69 7a 65 29 3b 0a 76 6f 69 64 .void.*Malloc(size_t.size);.void
123e0 20 2a 52 65 61 6c 6c 6f 63 28 76 6f 69 64 20 2a 70 74 72 2c 20 73 69 7a 65 5f 74 20 73 69 7a 65 .*Realloc(void.*ptr,.size_t.size
12400 29 3b 0a 76 6f 69 64 20 2a 43 61 6c 6c 6f 63 28 73 69 7a 65 5f 74 20 6e 6d 65 6d 62 2c 20 73 69 );.void.*Calloc(size_t.nmemb,.si
12420 7a 65 5f 74 20 73 69 7a 65 29 3b 0a 76 6f 69 64 20 46 72 65 65 28 76 6f 69 64 20 2a 70 74 72 29 ze_t.size);.void.Free(void.*ptr)
12440 3b 0a 0a 2f 2a 20 53 6f 63 6b 65 74 73 20 69 6e 74 65 72 66 61 63 65 20 77 72 61 70 70 65 72 73 ;../*.Sockets.interface.wrappers
12460 20 2a 2f 0a 69 6e 74 20 53 6f 63 6b 65 74 28 69 6e 74 20 64 6f 6d 61 69 6e 2c 20 69 6e 74 20 74 .*/.int.Socket(int.domain,.int.t
12480 79 70 65 2c 20 69 6e 74 20 70 72 6f 74 6f 63 6f 6c 29 3b 0a 76 6f 69 64 20 53 65 74 73 6f 63 6b ype,.int.protocol);.void.Setsock
124a0 6f 70 74 28 69 6e 74 20 73 2c 20 69 6e 74 20 6c 65 76 65 6c 2c 20 69 6e 74 20 6f 70 74 6e 61 6d opt(int.s,.int.level,.int.optnam
124c0 65 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 6f 70 74 76 61 6c 2c 20 69 6e 74 20 6f 70 74 6c 65 e,.const.void.*optval,.int.optle
124e0 6e 29 3b 0a 76 6f 69 64 20 42 69 6e 64 28 69 6e 74 20 73 6f 63 6b 66 64 2c 20 73 74 72 75 63 74 n);.void.Bind(int.sockfd,.struct
12500 20 73 6f 63 6b 61 64 64 72 20 2a 6d 79 5f 61 64 64 72 2c 20 69 6e 74 20 61 64 64 72 6c 65 6e 29 .sockaddr.*my_addr,.int.addrlen)
12520 3b 0a 76 6f 69 64 20 4c 69 73 74 65 6e 28 69 6e 74 20 73 2c 20 69 6e 74 20 62 61 63 6b 6c 6f 67 ;.void.Listen(int.s,.int.backlog
12540 29 3b 0a 69 6e 74 20 41 63 63 65 70 74 28 69 6e 74 20 73 2c 20 73 74 72 75 63 74 20 73 6f 63 6b );.int.Accept(int.s,.struct.sock
12560 61 64 64 72 20 2a 61 64 64 72 2c 20 73 6f 63 6b 6c 65 6e 5f 74 20 2a 61 64 64 72 6c 65 6e 29 3b addr.*addr,.socklen_t.*addrlen);
12580 0a 76 6f 69 64 20 43 6f 6e 6e 65 63 74 28 69 6e 74 20 73 6f 63 6b 66 64 2c 20 73 74 72 75 63 74 .void.Connect(int.sockfd,.struct
125a0 20 73 6f 63 6b 61 64 64 72 20 2a 73 65 72 76 5f 61 64 64 72 2c 20 69 6e 74 20 61 64 64 72 6c 65 .sockaddr.*serv_addr,.int.addrle
125c0 6e 29 3b 0a 0a 2f 2a 20 50 72 6f 74 6f 63 6f 6c 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 77 72 61 n);../*.Protocol.independent.wra
125e0 70 70 65 72 73 20 2a 2f 0a 76 6f 69 64 20 47 65 74 61 64 64 72 69 6e 66 6f 28 63 6f 6e 73 74 20 ppers.*/.void.Getaddrinfo(const.
12600 63 68 61 72 20 2a 6e 6f 64 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 65 72 76 69 63 65 2c char.*node,.const.char.*service,
12620 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 ...................const.struct.
12640 61 64 64 72 69 6e 66 6f 20 2a 68 69 6e 74 73 2c 20 73 74 72 75 63 74 20 61 64 64 72 69 6e 66 6f addrinfo.*hints,.struct.addrinfo
12660 20 2a 2a 72 65 73 29 3b 0a 76 6f 69 64 20 47 65 74 6e 61 6d 65 69 6e 66 6f 28 63 6f 6e 73 74 20 .**res);.void.Getnameinfo(const.
12680 73 74 72 75 63 74 20 73 6f 63 6b 61 64 64 72 20 2a 73 61 2c 20 73 6f 63 6b 6c 65 6e 5f 74 20 73 struct.sockaddr.*sa,.socklen_t.s
126a0 61 6c 65 6e 2c 20 63 68 61 72 20 2a 68 6f 73 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 alen,.char.*host,...............
126c0 20 20 20 20 73 69 7a 65 5f 74 20 68 6f 73 74 6c 65 6e 2c 20 63 68 61 72 20 2a 73 65 72 76 2c 20 ....size_t.hostlen,.char.*serv,.
126e0 73 69 7a 65 5f 74 20 73 65 72 76 6c 65 6e 2c 20 69 6e 74 20 66 6c 61 67 73 29 3b 0a 76 6f 69 64 size_t.servlen,.int.flags);.void
12700 20 46 72 65 65 61 64 64 72 69 6e 66 6f 28 73 74 72 75 63 74 20 61 64 64 72 69 6e 66 6f 20 2a 72 .Freeaddrinfo(struct.addrinfo.*r
12720 65 73 29 3b 0a 76 6f 69 64 20 49 6e 65 74 5f 6e 74 6f 70 28 69 6e 74 20 61 66 2c 20 63 6f 6e 73 es);.void.Inet_ntop(int.af,.cons
12740 74 20 76 6f 69 64 20 2a 73 72 63 2c 20 63 68 61 72 20 2a 64 73 74 2c 20 73 6f 63 6b 6c 65 6e 5f t.void.*src,.char.*dst,.socklen_
12760 74 20 73 69 7a 65 29 3b 0a 76 6f 69 64 20 49 6e 65 74 5f 70 74 6f 6e 28 69 6e 74 20 61 66 2c 20 t.size);.void.Inet_pton(int.af,.
12780 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 72 63 2c 20 76 6f 69 64 20 2a 64 73 74 29 3b 20 0a 0a 2f const.char.*src,.void.*dst);.../
127a0 2a 20 44 4e 53 20 77 72 61 70 70 65 72 73 20 2a 2f 0a 73 74 72 75 63 74 20 68 6f 73 74 65 6e 74 *.DNS.wrappers.*/.struct.hostent
127c0 20 2a 47 65 74 68 6f 73 74 62 79 6e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 6e 61 6d 65 .*Gethostbyname(const.char.*name
127e0 29 3b 0a 73 74 72 75 63 74 20 68 6f 73 74 65 6e 74 20 2a 47 65 74 68 6f 73 74 62 79 61 64 64 72 );.struct.hostent.*Gethostbyaddr
12800 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 61 64 64 72 2c 20 69 6e 74 20 6c 65 6e 2c 20 69 6e 74 20 (const.char.*addr,.int.len,.int.
12820 74 79 70 65 29 3b 0a 0a 2f 2a 20 50 74 68 72 65 61 64 73 20 74 68 72 65 61 64 20 63 6f 6e 74 72 type);../*.Pthreads.thread.contr
12840 6f 6c 20 77 72 61 70 70 65 72 73 20 2a 2f 0a 76 6f 69 64 20 50 74 68 72 65 61 64 5f 63 72 65 61 ol.wrappers.*/.void.Pthread_crea
12860 74 65 28 70 74 68 72 65 61 64 5f 74 20 2a 74 69 64 70 2c 20 70 74 68 72 65 61 64 5f 61 74 74 72 te(pthread_t.*tidp,.pthread_attr
12880 5f 74 20 2a 61 74 74 72 70 2c 20 0a 09 09 20 20 20 20 76 6f 69 64 20 2a 20 28 2a 72 6f 75 74 69 _t.*attrp,........void.*.(*routi
128a0 6e 65 29 28 76 6f 69 64 20 2a 29 2c 20 76 6f 69 64 20 2a 61 72 67 70 29 3b 0a 76 6f 69 64 20 50 ne)(void.*),.void.*argp);.void.P
128c0 74 68 72 65 61 64 5f 6a 6f 69 6e 28 70 74 68 72 65 61 64 5f 74 20 74 69 64 2c 20 76 6f 69 64 20 thread_join(pthread_t.tid,.void.
128e0 2a 2a 74 68 72 65 61 64 5f 72 65 74 75 72 6e 29 3b 0a 76 6f 69 64 20 50 74 68 72 65 61 64 5f 63 **thread_return);.void.Pthread_c
12900 61 6e 63 65 6c 28 70 74 68 72 65 61 64 5f 74 20 74 69 64 29 3b 0a 76 6f 69 64 20 50 74 68 72 65 ancel(pthread_t.tid);.void.Pthre
12920 61 64 5f 64 65 74 61 63 68 28 70 74 68 72 65 61 64 5f 74 20 74 69 64 29 3b 0a 76 6f 69 64 20 50 ad_detach(pthread_t.tid);.void.P
12940 74 68 72 65 61 64 5f 65 78 69 74 28 76 6f 69 64 20 2a 72 65 74 76 61 6c 29 3b 0a 70 74 68 72 65 thread_exit(void.*retval);.pthre
12960 61 64 5f 74 20 50 74 68 72 65 61 64 5f 73 65 6c 66 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 50 74 ad_t.Pthread_self(void);.void.Pt
12980 68 72 65 61 64 5f 6f 6e 63 65 28 70 74 68 72 65 61 64 5f 6f 6e 63 65 5f 74 20 2a 6f 6e 63 65 5f hread_once(pthread_once_t.*once_
129a0 63 6f 6e 74 72 6f 6c 2c 20 76 6f 69 64 20 28 2a 69 6e 69 74 5f 66 75 6e 63 74 69 6f 6e 29 28 29 control,.void.(*init_function)()
129c0 29 3b 0a 0a 2f 2a 20 50 4f 53 49 58 20 73 65 6d 61 70 68 6f 72 65 20 77 72 61 70 70 65 72 73 20 );../*.POSIX.semaphore.wrappers.
129e0 2a 2f 0a 76 6f 69 64 20 53 65 6d 5f 69 6e 69 74 28 73 65 6d 5f 74 20 2a 73 65 6d 2c 20 69 6e 74 */.void.Sem_init(sem_t.*sem,.int
12a00 20 70 73 68 61 72 65 64 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 76 61 6c 75 65 29 3b 0a 76 .pshared,.unsigned.int.value);.v
12a20 6f 69 64 20 50 28 73 65 6d 5f 74 20 2a 73 65 6d 29 3b 0a 76 6f 69 64 20 56 28 73 65 6d 5f 74 20 oid.P(sem_t.*sem);.void.V(sem_t.
12a40 2a 73 65 6d 29 3b 0a 0a 2f 2a 20 52 69 6f 20 28 52 6f 62 75 73 74 20 49 2f 4f 29 20 70 61 63 6b *sem);../*.Rio.(Robust.I/O).pack
12a60 61 67 65 20 2a 2f 0a 73 73 69 7a 65 5f 74 20 72 69 6f 5f 72 65 61 64 6e 28 69 6e 74 20 66 64 2c age.*/.ssize_t.rio_readn(int.fd,
12a80 20 76 6f 69 64 20 2a 75 73 72 62 75 66 2c 20 73 69 7a 65 5f 74 20 6e 29 3b 0a 73 73 69 7a 65 5f .void.*usrbuf,.size_t.n);.ssize_
12aa0 74 20 72 69 6f 5f 77 72 69 74 65 6e 28 69 6e 74 20 66 64 2c 20 76 6f 69 64 20 2a 75 73 72 62 75 t.rio_writen(int.fd,.void.*usrbu
12ac0 66 2c 20 73 69 7a 65 5f 74 20 6e 29 3b 0a 76 6f 69 64 20 72 69 6f 5f 72 65 61 64 69 6e 69 74 62 f,.size_t.n);.void.rio_readinitb
12ae0 28 72 69 6f 5f 74 20 2a 72 70 2c 20 69 6e 74 20 66 64 29 3b 20 0a 73 73 69 7a 65 5f 74 09 72 69 (rio_t.*rp,.int.fd);..ssize_t.ri
12b00 6f 5f 72 65 61 64 6e 62 28 72 69 6f 5f 74 20 2a 72 70 2c 20 76 6f 69 64 20 2a 75 73 72 62 75 66 o_readnb(rio_t.*rp,.void.*usrbuf
12b20 2c 20 73 69 7a 65 5f 74 20 6e 29 3b 0a 73 73 69 7a 65 5f 74 09 72 69 6f 5f 72 65 61 64 6c 69 6e ,.size_t.n);.ssize_t.rio_readlin
12b40 65 62 28 72 69 6f 5f 74 20 2a 72 70 2c 20 76 6f 69 64 20 2a 75 73 72 62 75 66 2c 20 73 69 7a 65 eb(rio_t.*rp,.void.*usrbuf,.size
12b60 5f 74 20 6d 61 78 6c 65 6e 29 3b 0a 0a 2f 2a 20 57 72 61 70 70 65 72 73 20 66 6f 72 20 52 69 6f _t.maxlen);../*.Wrappers.for.Rio
12b80 20 70 61 63 6b 61 67 65 20 2a 2f 0a 73 73 69 7a 65 5f 74 20 52 69 6f 5f 72 65 61 64 6e 28 69 6e .package.*/.ssize_t.Rio_readn(in
12ba0 74 20 66 64 2c 20 76 6f 69 64 20 2a 75 73 72 62 75 66 2c 20 73 69 7a 65 5f 74 20 6e 29 3b 0a 76 t.fd,.void.*usrbuf,.size_t.n);.v
12bc0 6f 69 64 20 52 69 6f 5f 77 72 69 74 65 6e 28 69 6e 74 20 66 64 2c 20 76 6f 69 64 20 2a 75 73 72 oid.Rio_writen(int.fd,.void.*usr
12be0 62 75 66 2c 20 73 69 7a 65 5f 74 20 6e 29 3b 0a 76 6f 69 64 20 52 69 6f 5f 72 65 61 64 69 6e 69 buf,.size_t.n);.void.Rio_readini
12c00 74 62 28 72 69 6f 5f 74 20 2a 72 70 2c 20 69 6e 74 20 66 64 29 3b 20 0a 73 73 69 7a 65 5f 74 20 tb(rio_t.*rp,.int.fd);..ssize_t.
12c20 52 69 6f 5f 72 65 61 64 6e 62 28 72 69 6f 5f 74 20 2a 72 70 2c 20 76 6f 69 64 20 2a 75 73 72 62 Rio_readnb(rio_t.*rp,.void.*usrb
12c40 75 66 2c 20 73 69 7a 65 5f 74 20 6e 29 3b 0a 73 73 69 7a 65 5f 74 20 52 69 6f 5f 72 65 61 64 6c uf,.size_t.n);.ssize_t.Rio_readl
12c60 69 6e 65 62 28 72 69 6f 5f 74 20 2a 72 70 2c 20 76 6f 69 64 20 2a 75 73 72 62 75 66 2c 20 73 69 ineb(rio_t.*rp,.void.*usrbuf,.si
12c80 7a 65 5f 74 20 6d 61 78 6c 65 6e 29 3b 0a 0a 2f 2a 20 52 65 65 6e 74 72 61 6e 74 20 70 72 6f 74 ze_t.maxlen);../*.Reentrant.prot
12ca0 6f 63 6f 6c 2d 69 6e 64 65 70 65 6e 64 65 6e 74 20 63 6c 69 65 6e 74 2f 73 65 72 76 65 72 20 68 ocol-independent.client/server.h
12cc0 65 6c 70 65 72 73 20 2a 2f 0a 69 6e 74 20 6f 70 65 6e 5f 63 6c 69 65 6e 74 66 64 28 63 68 61 72 elpers.*/.int.open_clientfd(char
12ce0 20 2a 68 6f 73 74 6e 61 6d 65 2c 20 63 68 61 72 20 2a 70 6f 72 74 29 3b 0a 69 6e 74 20 6f 70 65 .*hostname,.char.*port);.int.ope
12d00 6e 5f 6c 69 73 74 65 6e 66 64 28 63 68 61 72 20 2a 70 6f 72 74 29 3b 0a 0a 2f 2a 20 57 72 61 70 n_listenfd(char.*port);../*.Wrap
12d20 70 65 72 73 20 66 6f 72 20 72 65 65 6e 74 72 61 6e 74 20 70 72 6f 74 6f 63 6f 6c 2d 69 6e 64 65 pers.for.reentrant.protocol-inde
12d40 70 65 6e 64 65 6e 74 20 63 6c 69 65 6e 74 2f 73 65 72 76 65 72 20 68 65 6c 70 65 72 73 20 2a 2f pendent.client/server.helpers.*/
12d60 0a 69 6e 74 20 4f 70 65 6e 5f 63 6c 69 65 6e 74 66 64 28 63 68 61 72 20 2a 68 6f 73 74 6e 61 6d .int.Open_clientfd(char.*hostnam
12d80 65 2c 20 63 68 61 72 20 2a 70 6f 72 74 29 3b 0a 69 6e 74 20 4f 70 65 6e 5f 6c 69 73 74 65 6e 66 e,.char.*port);.int.Open_listenf
12da0 64 28 63 68 61 72 20 2a 70 6f 72 74 29 3b 0a 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 5f 5f 43 53 41 d(char.*port);...#endif./*.__CSA
12dc0 50 50 5f 48 5f 5f 20 2a 2f 0a 2f 2a 20 24 65 6e 64 20 63 73 61 70 70 2e 68 20 2a 2f 0a 00 00 00 PP_H__.*/./*.$end.csapp.h.*/....
12de0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
12e00 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 74 69 6e 79 2f 68 6f 6d 65 2e 68 74 6d 6c 00 proxylab-handout/tiny/home.html.
12e20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
12e40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
12e60 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000644.0006626.0000144.0000
12e80 30 30 30 30 31 37 30 00 30 37 34 30 34 34 35 35 32 32 33 00 30 31 35 31 36 37 00 20 30 00 00 00 0000170.07404455223.015167..0...
12ea0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
12ec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
12ee0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
12f00 00 75 73 74 61 72 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
12f20 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
12f40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
12f60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
12f80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
12fa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
12fc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
12fe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13000 3c 68 74 6d 6c 3e 0a 3c 68 65 61 64 3e 3c 74 69 74 6c 65 3e 74 65 73 74 3c 2f 74 69 74 6c 65 3e <html>.<head><title>test</title>
13020 3c 2f 68 65 61 64 3e 0a 3c 62 6f 64 79 3e 20 0a 3c 69 6d 67 20 61 6c 69 67 6e 3d 22 6d 69 64 64 </head>.<body>..<img.align="midd
13040 6c 65 22 20 73 72 63 3d 22 67 6f 64 7a 69 6c 6c 61 2e 67 69 66 22 3e 0a 44 61 76 65 20 4f 27 48 le".src="godzilla.gif">.Dave.O'H
13060 61 6c 6c 61 72 6f 6e 0a 3c 2f 62 6f 64 79 3e 0a 3c 2f 68 74 6d 6c 3e 0a 00 00 00 00 00 00 00 00 allaron.</body>.</html>.........
13080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
130a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
130c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
130e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
131a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
131c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
131e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13200 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 74 69 6e 79 2f 67 6f 64 7a 69 6c 6c 61 2e 67 proxylab-handout/tiny/godzilla.g
13220 69 66 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 if..............................
13240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13260 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000644.0006626.0000144.0000
13280 30 30 32 37 35 37 33 00 30 37 34 30 34 34 35 35 32 32 33 00 30 31 35 36 36 35 00 20 30 00 00 00 0027573.07404455223.015665..0...
132a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
132c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
132e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13300 00 75 73 74 61 72 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
13320 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
13340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
133a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
133c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
133e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13400 47 49 46 38 37 61 64 00 7d 00 f7 00 00 18 12 23 a2 bd 59 4a 70 30 6f 9b 58 df cf 69 b1 7c 43 90 GIF87ad.}......#..YJp0o.X..i.|C.
13420 49 2f 87 bb af 30 41 1c 60 90 bd 5b 23 2a 45 66 7f c8 96 b2 c5 d4 cd 89 43 6d b1 6f 91 d8 9a 53 I/...0A.`..[#*Ef........Cm.o...S
13440 2d 34 54 db c5 c8 a5 c5 d1 5a 86 43 7a 83 b9 f9 f0 ec a4 60 30 41 86 a9 e0 e9 ea ce 8d 54 35 5a -4T......Z.Cz......`0A.......T5Z
13460 2c d9 a8 c1 cb 82 aa cc c4 69 ec dc 73 74 39 1b 62 b2 e8 e7 da da e7 ee f4 2b 2b 1f 6e 94 83 d8 ,........i..st9.b........++.n...
13480 e3 e0 5a 7d 6d a2 56 86 31 50 67 8d 9a ce 76 66 9f d2 47 3d 90 bb e7 46 69 59 74 a4 d5 e1 5b 40 ..Z}m.V.1Pg...vf..G=...FiYt...[@
134a0 ec be 62 72 31 58 c1 30 30 6a b5 a0 de 51 89 d4 94 82 54 4a 2d bb 90 d6 3d 18 1b 63 53 80 d2 bd ..br1X.00j...Q....TJ-...=..cS...
134c0 e5 ed e1 da a3 b5 89 a2 cd ec e0 a9 93 a8 ac ac b5 c7 9e 9d 5f 5f 46 30 33 e4 73 4d ae 68 b7 c8 ....................__F03.sM.h..
134e0 a0 e1 b9 71 64 75 7d d5 79 6f 6c 8e 84 81 4e 3f 67 59 72 c6 e4 7e af e3 6c 9e 9d 24 34 c4 44 82 ...qdu}.yol...N?gYr..~..l..$4.D.
13500 65 5b 58 8d 47 4e 8e 89 53 98 a2 e4 a8 b5 e4 5d 85 d6 e4 e4 b0 55 49 4f f6 e8 bf 5b 1e 40 b7 39 e[X.GN..S......].....UIO...[.@.9
13520 76 ef 90 b9 f1 a9 c1 bd ad 8c 44 2f 56 c2 bd d0 cf c1 9f a6 9b 99 72 68 c9 ec 7f 7d d8 d1 9c eb v.........D/V.........rh...}....
13540 ba 8f 84 92 e4 33 33 28 df cb ef 61 57 b9 bb ca e9 c3 73 9b 8f 87 c1 ac a0 6a ab b1 d0 67 5e 2e .....33(...aW.....s......j...g^.
13560 9e 59 bb 39 47 3c cb 86 7d b2 de f1 f0 e4 b7 ec 84 4c c2 7d cb f0 e6 ea 1d 20 59 35 0c 1c d1 db .Y.9G<..}........L.}......Y5....
13580 f4 3c 14 2e ee d3 a4 37 5a 4d d3 47 65 e1 5b 66 a4 25 5c e2 7b d4 f1 a4 db e4 71 7b 22 1e 26 8b .<.....7ZM.Ge.[f.%\.{.....q{".&.
135a0 bb d9 67 2c 31 36 3d 5d 7f 40 43 85 b3 e8 f6 ef f5 c7 39 53 47 1f 24 57 49 74 97 97 60 62 93 dd ..g,16=].@C.......9SG.$WIt..`b..
135c0 65 28 4e 4e 3a 3a 9b 50 5a 2f 2b 3c 46 1d 38 68 9b c8 4e 70 8d cf da d5 e1 cd d0 ad cd d9 9a ab e(NN::.PZ/+<F.8h..Np............
135e0 6f 3c 64 37 e0 b0 ca f2 c0 d2 a9 8c c8 82 6f ab 98 c7 eb 50 73 63 7d 3a 62 86 a9 9c 5b 54 34 c5 o<d7..........o....Psc}:b...[T4.
13600 97 dd 6e 5d 8d ac be 95 aa d5 ee be d0 a7 84 7a 74 99 8f 8c 6f 65 60 ae bd e9 6d 9f e4 72 6b 36 ..n]...........zt...oe`...m..rk6
13620 c7 d5 f0 bb ae 56 cd 6c 42 82 b1 d3 30 3d 3a 77 16 29 83 41 8d 93 77 b5 f3 ee fa 5a 78 9d e4 ed .....V.lB...0=:w.).A..w....Zx...
13640 ef 73 35 39 7d ab e4 f4 ea ee 27 22 32 ed de ed ee 94 8f a0 a5 cf b8 50 63 00 00 00 00 00 00 00 .s59}.....'"2..........Pc.......
13660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13680 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
136a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
136c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
136e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
13700 00 00 00 00 00 00 00 00 00 00 00 00 00 2c 00 00 00 00 64 00 7d 00 00 08 fe 00 25 ac 99 d0 60 8d .............,....d.}.....%...`.
13720 a2 36 3e de d0 d2 14 eb 4d 8b 35 9d 34 f9 00 f3 46 91 a1 37 3e 0c 85 32 01 46 91 8f 2a 86 14 69 .6>.....M.5.4...F..7>..2.F..*..i
13740 5a e3 43 13 a6 0c 19 50 6d c2 a2 eb 44 14 39 49 4e a0 91 64 e3 80 8b 4b 4b e4 44 21 75 e2 06 ac Z.C....Pm...D.9IN..d...KK.D!u...
13760 5a 51 5c c8 71 e1 e7 c4 2a 9e 88 92 d4 da 20 47 4e 84 01 25 9c 06 ad 45 e9 06 a9 56 07 5c bd 31 ZQ\.q...*......GN..%...E...V.\.1
13780 64 22 cd 9a 35 69 32 7c a2 f2 06 0c 0e 2a 55 de a8 e8 45 d6 d0 99 4f 6b aa 7c 8a 55 05 a1 ab 0a d"..5i2|.....*U...E...Ok.|.U....
137a0 90 84 e1 58 63 48 d8 1a 61 6d 42 55 79 51 a5 13 98 35 25 48 34 5a 81 05 8b 0e 47 92 1a 91 40 33 ...XcH..amBUyQ...5%H4Z....G...@3
137c0 a4 d5 12 19 58 86 a0 91 d3 e8 cb 90 cc 8d fc 4c 62 73 69 48 a3 1c 24 86 dc 68 54 cb d1 21 ce 72 ....X..........LbsiH..$..hT..!.r
137e0 86 28 38 64 20 51 94 52 89 b0 4c 58 b3 03 a4 b0 58 a9 54 80 12 f6 06 94 0a 4d 0c 3e b5 48 7b e6 .(8d.Q.R..LX....X.T......M.>.H{.
13800 85 30 2a 2a 26 18 a9 52 65 a4 26 ea 6b da 18 aa c2 a0 ca 1a 23 38 5a fe b8 d2 21 e7 44 92 25 4a .0**&..Re.&.k.......#8Z...!.D.%J
13820 4e 25 91 92 08 e6 e7 5a bf 5a 45 88 9d 33 33 1a 34 7c e4 50 a2 74 21 a6 1c 2c 24 90 b0 4a 14 68 N%.....Z.ZE..33.4|.P.t!..,$..J.h
13840 50 e5 c0 14 5f a0 e1 02 25 05 c6 86 05 1a 94 7c b2 43 26 24 b9 12 57 1b 2f a8 80 0b 24 67 e0 52 P..._...%......|.C&$..W./...$g.R
13860 85 86 55 b8 f2 89 5f b8 58 d2 82 5a cb 55 14 8a 78 6b b9 02 52 15 3b ac f1 86 26 b5 14 42 82 24 ..U..._.X..Z.U..xk..R.;...&..B.$
13880 50 74 32 41 66 b5 3c 50 44 13 03 50 b2 c1 7d 08 a0 70 cb 09 4a 48 22 09 16 5f 90 f0 cb 2f 43 48 Pt2Af.<PD..P..}..p..JH".._.../CH
138a0 f2 59 7b 94 b4 82 c5 0d 5f 24 92 88 28 8f 48 11 89 1c ab 0d e1 07 2f 37 0c 21 c6 1a b1 70 b5 47 .Y{....._$..(.H......./7.!...p.G
138c0 6f 40 50 01 c6 27 67 a8 00 c4 19 4c a8 40 05 24 17 e1 40 dd 27 15 a9 d0 82 22 48 bc 51 45 78 2d o@P..'g....L.@.$..@.'...."H.QEx-
138e0 28 f7 8a 0a 20 7d 52 41 2b a8 25 01 c6 04 2a 34 d6 88 02 51 a0 90 08 2c 0a fc 82 46 23 ac 9c 80 (....}RA+.%...*4...Q...,...F#...
13900 05 a6 0e 34 32 05 1a bf c4 46 c9 14 9f 4c 32 c5 21 bc 70 b0 40 2d fe b5 28 f0 c5 0d 51 38 80 05 ...42....F...L2.!.p.@-..(...Q8..
13920 25 24 7c b1 8a 18 27 34 22 07 2b 20 f1 96 4a 2c 90 e0 72 18 2e c2 ec 20 0c 2e a1 50 91 c0 2b 72 %$|...'4".+...J,..r........P..+r
13940 f5 52 05 18 d5 b9 e2 0a 15 8a 7c b5 06 15 16 be 41 45 2a 15 5c 62 48 18 03 f6 08 04 0a 42 b4 d2 .R........|.....AE*.\bH......B..
13960 6b 22 ad 94 b0 4a 2b 43 3c a9 e9 25 03 7e 21 c9 17 a5 20 30 93 02 47 38 71 45 03 58 d4 d2 88 0d k"...J+C<..%.~!....0..G8qE.X....
13980 ac c8 d2 ca 24 51 1c e2 c0 1b 49 94 22 e5 10 42 24 d2 48 22 53 c8 b0 1b 18 16 5a d2 17 12 2a 7c ....$Q....I."..B$.H"S.....Z...*|
139a0 52 84 a0 7c 16 2a 8c 22 2a 20 a4 82 30 a9 bc c9 5b 15 8a 54 e0 9d 0a 5f 59 82 05 0a 99 48 e0 c8 R..|.*."*...0...[..T..._Y....H..
139c0 2a 14 96 a0 04 2f 39 70 72 87 14 ab 4c 21 c9 0d bf 34 02 c7 21 32 b8 a4 80 24 9c 0c b1 9f 02 1c *..../9pr...L!...4..!2...$......
139e0 64 92 84 1c b0 7c f1 df 0e 0d 18 91 01 18 22 1c 21 8c 1b 58 1c 81 02 28 60 94 c1 4a 14 32 90 f9 d....|........".!..X...(`..J.2..
13a00 c6 0e c0 34 00 18 75 a0 04 da 06 15 81 56 81 96 26 54 6c e7 ca fe 5a 54 b4 c0 16 b5 2a 18 b2 b7 ...4..u......V..&Tl...ZT....*...
13a20 22 69 55 91 04 1b 42 b8 f0 05 0a 9f ac 30 f5 4c c3 04 d1 4a 12 8e 38 9d c8 28 2b c8 01 87 14 51 "iU...B......0.L...J..8..(+....Q
13a40 70 22 05 2f 2e d4 a2 a4 0b 25 70 72 c8 10 47 88 31 4c 27 49 38 a1 44 07 42 e8 9c c8 27 62 60 c2 p"./.....%pr..G.1L'I8.D.B...'b`.
13a60 80 08 99 24 7b 4a 14 43 b0 81 89 10 0a 00 31 c1 88 72 a9 90 97 30 1c 83 61 8a 21 9a 18 21 4c 0b ...${J.C......1..r...0..a.!..!L.
13a80 54 84 f7 8a 30 76 bf 21 e3 27 84 7f 12 4a 1a 1d ac b1 42 96 6c b0 c1 c0 25 89 e8 30 4a 09 ba 38 T...0v.!.'...J....B.l...%..0J..8
13aa0 f0 c8 10 72 44 d2 01 18 51 b4 d2 5e 2d bc b8 31 8c 03 51 30 20 c9 2f 8d f9 21 87 01 58 10 43 10 ...rD...Q..^-..1..Q0../..!..X.C.
13ac0 68 a6 02 36 70 c0 5d f8 13 05 29 32 31 01 52 74 22 13 a4 e0 1d 10 84 20 07 5e a0 a0 08 86 d0 90 h..6p.]...)21.Rt"........^......
13ae0 b5 da 50 85 09 58 42 05 a1 50 41 e0 34 b1 15 4d 7c 82 3a 9a f0 9b 30 0e 23 97 58 4c 60 15 25 10 ..P..XB..PA.4..M|.:...0.#.XL`.%.
13b00 81 26 80 70 03 19 74 61 02 ac 68 c5 11 8e 50 83 4d fc c0 01 fe ab 88 c4 00 80 10 06 17 88 e1 14 .&.p..ta..h...P.M...............
13b20 87 b8 57 23 70 71 1b 07 88 80 5c 43 38 44 2d 72 40 09 c6 a5 0e 08 0d 90 c5 2a 9a b2 a4 28 60 41 ..W#pq....\C8D-r@........*...(`A
13b40 12 ad 80 03 16 02 10 14 2f 4a a2 16 7e 58 82 a2 da d0 31 e2 e0 40 7b ae 88 83 22 7a d1 06 b5 54 ......../J..~X....1..@{..."z...T
13b60 e0 0d 22 7a 43 2a de f0 89 5e bc 21 14 bd 88 c2 1c 44 10 00 29 84 81 03 5e e8 44 07 4a 20 94 c5 .."zC*...^.!.....D..)...^.D.J...
13b80 b1 21 08 51 38 c1 14 6c d3 0a 14 04 e1 11 89 f8 42 2b 24 31 13 03 58 6d 09 86 50 42 12 26 c1 0a .!.Q8..l........B+$1..Xm..PB.&..
13ba0 08 61 61 07 13 70 c3 d9 10 21 09 12 50 62 09 06 f0 83 66 a2 c4 09 39 28 a0 14 02 50 80 66 1a d1 .aa..p...!..Pb....f...9(...P.f..
13bc0 88 56 d4 85 14 19 64 82 1f e7 56 b8 ea bc e1 0c b4 b0 9b 22 26 80 03 87 f8 05 3a 78 90 c0 12 5a .V....d...V........"&.....:x...Z
13be0 c1 8a 39 a0 22 09 a4 d8 c4 02 dc 10 89 56 38 02 05 49 a8 d4 14 a2 30 0c c6 60 21 9c a5 50 00 27 ..9."........V8..I....0..`!..P.'
13c00 6a 71 88 77 35 62 08 51 7a 00 07 6c f0 05 31 48 81 03 22 fe b0 41 09 fc 40 09 05 b0 66 08 6e 28 jq.w5b.Qz..l..1H.."..A..@...f.n(
13c20 05 1a 6e 90 08 58 a1 21 07 07 55 0c 1a 4a 31 84 37 a5 a5 08 23 43 16 24 c6 40 bd 0a c0 05 07 2a ..n..X.!..U..J1.7...#C.$.@.....*
13c40 48 c5 b5 14 d1 02 15 bc 80 16 b1 e8 c4 03 4a 80 c5 4d 38 0a 16 aa 90 c4 11 92 80 85 55 60 e1 01 H.............J..M8.........U`..
13c60 43 f8 84 14 94 e0 82 1c 38 40 05 42 d8 84 12 5a 21 0a 0a 34 22 7e 94 38 e3 3b a3 e0 84 4c 64 02 C.......8@.B...Z!..4"~.8.;...Ld.
13c80 0f 0d 10 44 15 4e a0 33 02 0d c1 11 50 ba 01 25 fc f7 85 2b c9 21 35 ec 63 1f 25 7a 35 04 15 20 ...D.N.3....P..%...+.!5.c.%z5...
13ca0 61 85 1d 9b c0 1b 90 60 08 43 20 e1 15 af 50 8e 22 f8 f4 97 df 44 10 15 6c c8 40 03 e6 00 2f 31 a......`.C....P."....D..l.@.../1
13cc0 b0 62 09 68 d0 02 07 94 b0 8a 39 30 20 05 81 c0 84 12 12 31 04 5e 98 e2 14 36 38 42 a7 0e 91 88 .b.h......90.......1.^...68B....
13ce0 55 80 82 77 4b 50 8d 24 1c d0 81 30 48 21 0d 22 10 81 1c d0 80 82 47 9c a2 15 52 10 43 12 a5 44 U..wKP.$...0H!."......G...R.C..D
13d00 aa 5f 38 89 93 92 59 1a 1f 60 41 58 17 90 a2 63 2d 13 fe 86 8b 54 60 ad c0 19 e2 13 87 a2 ce 1b ._8...Y..`AX...c-....T`.........
13d20 26 b0 84 0e b8 60 0a 1a 60 c0 cc 30 21 06 14 28 01 93 2e b0 81 2f 50 21 06 25 cc 01 0d 93 10 82 &....`..`..0!..(...../P!.%......
13d40 28 4a 41 09 29 34 e0 08 73 50 c2 10 b8 30 07 09 bc e1 0b 53 08 a7 0b b0 80 99 55 40 e1 0d 28 10 (JA.)4..sP...0.....S......U@..(.
13d60 46 10 58 e1 99 06 1c 80 93 11 48 c1 10 14 d3 4a 12 44 80 12 8d 78 d8 19 87 10 09 2c bc 13 17 e2 F.X.......H....J.D...x.....,....
13d80 69 83 25 68 d1 86 0a f4 42 18 18 7c 03 0e 5c 51 28 ea a8 80 16 b5 92 83 16 94 a0 04 5c 00 a1 13 i.%h....B..|..\Q(...........\...
13da0 ac f0 83 14 58 d1 14 46 e0 21 13 28 f0 c2 25 e4 80 c8 ff 34 e2 01 6e 90 00 10 a2 90 04 4b 3e e0 ....X..F.!.(..%....4..n......K>.
13dc0 07 ab 70 03 e7 1e c0 06 07 b0 82 0d 9b d8 22 16 5c 60 b4 44 48 a2 14 54 94 04 1f 22 f3 ce 0b b8 ..p...........".\`.DH..T..."....
13de0 32 05 0a 98 0c 02 92 8c 86 d4 34 02 0d 22 04 89 5a de 00 09 15 d8 31 99 38 30 04 18 3a c0 80 08 2.........4.."..Z.....1.80..:...
13e00 b6 02 86 a1 25 ec 30 58 81 88 99 95 e0 0b 8d f8 83 fe 2f 82 b0 8a 9d b6 62 02 9b 68 c5 02 a4 00 ....%.0X........../.....b..h....
13e20 06 15 b8 14 0a 40 40 c5 5f 19 f0 80 20 24 d2 09 12 78 c0 1c c2 00 84 80 65 46 12 fa c1 6f 2b f5 .....@@._....$...x......eF...o+.
13e40 d3 14 57 4a a2 10 a5 7a 27 1f f8 70 08 d3 0e e1 0b 94 90 43 2f 3e c1 80 0c 16 41 13 86 e0 60 a8 ..WJ...z'..p.......C/>....A...`.
13e60 d9 02 09 4b 88 01 08 3a 58 05 0a 24 90 04 06 e0 01 0f 60 c0 42 0d 30 71 84 5a 04 02 0c 4e 53 42 ...K...:X..$......`.B.0q.Z...NSB
13e80 1b 68 50 82 44 b8 00 0e 0a 90 c1 0b fc f0 00 4c 18 02 08 ac d0 40 09 58 21 86 49 00 e1 0d 0d 58 .hP.D..........L.....@.X!.I....X
13ea0 45 27 4e 1d 05 4c 04 61 0a 70 28 ac a4 66 c2 9a 1c f8 ea 10 10 e2 8c 93 a0 e4 6d 3e b4 a2 54 11 E'N..L.a.p(..f............m>..T.
13ec0 b8 c1 66 c7 f2 02 8b b6 c0 58 69 e1 e0 87 84 a1 04 21 1c e0 08 1d 00 02 29 bc c0 86 1d 98 c0 07 ..f......Xi......!......).......
13ee0 49 a8 1d 2e d0 f0 00 20 48 82 12 0e 38 01 28 30 93 82 aa ac 40 01 2f d5 69 05 56 a0 84 01 c8 21 I.......H...8.(0....@./.i.V....!
13f00 bd 73 10 42 5f bd db 86 47 74 60 13 09 db 0c 1f fe 7e a1 cb fb 84 06 0e 8d a8 84 2c f5 c0 07 a7 .s.B_...Gt`......~.........,....
13f20 fd 82 0f 95 e0 85 2e 25 21 83 78 49 49 13 7b a3 4e 05 fc 04 51 43 7c ac 05 0c b0 c1 12 1c 21 07 .......%!.xII.{.N...QC|.......!.
13f40 31 f8 a1 15 9d 38 00 22 c4 90 09 53 7c e1 04 27 70 c4 1b 0e f0 05 05 94 60 34 9e c2 82 02 da 10 1....8."...S|..'p.......`4......
13f60 b6 53 b0 a2 04 47 70 80 1f ce e8 00 da 29 81 bc 99 10 01 28 1e a1 04 20 54 a0 07 a5 f0 2f 7c 18 .S...Gp......).....(....T..../|.
13f80 0a 4f 4a 4c d1 b4 a9 71 b4 92 26 73 08 2c 88 38 34 23 8f 02 09 db f0 1d 20 5c 44 18 96 38 a1 08 .OJL...q..&s.,.84#.......\D..8..
13fa0 1b 10 85 20 e8 00 17 a7 10 03 0f 1e 70 1b 28 b0 c2 0b 24 38 c4 03 56 b0 82 03 20 dc 10 ac 38 c2 ............p.(...$8..V.......8.
13fc0 25 12 2e 85 1e c0 82 03 c2 c0 c2 30 de 10 05 b4 71 20 08 07 f8 fa 30 d6 c0 00 2c 8a 41 0c 51 90 %..........0....q.....0...,.A.Q.
13fe0 52 55 87 26 07 3e 8c 57 01 f8 c9 41 21 86 2f 55 12 ac b6 16 37 58 c2 30 4a 90 4e 81 4e b1 11 6d RU.&.>.W...A!./U....7X.0J.N.N..m
14000 a0 45 2f 8a 80 bd 37 14 c1 07 54 f0 50 2f 2c fe 41 d3 c3 49 00 6c 7e 10 e8 28 8a c0 5e 3f 7c e1 .E/...7...T.P/,.A..I.l~..(..^?|.
14020 10 85 16 ae 14 de 20 02 43 e8 40 09 a2 68 82 25 18 20 35 07 00 e1 88 aa c7 c4 03 c4 e0 05 28 68 ........C.@..h.%..5...........(h
14040 19 13 40 b0 02 7e 90 1b 72 50 0a 32 20 07 53 10 09 43 c0 4a f3 45 09 43 50 0a 7c 40 02 f2 45 02 ..@..~..rP.2..S..C.J.E.CP.|@..E.
14060 f0 61 72 bc e0 05 4a 10 01 4a 40 5d 92 41 09 b4 60 05 88 d2 6e 82 c3 27 ae 80 03 c2 40 0a 0a a0 .ar...J..J@].A..`...n..'....@...
14080 00 53 80 74 be 60 08 9b 85 70 69 20 06 0e 43 09 8c 10 05 89 90 09 4a 00 05 bb d0 65 42 c0 18 87 .S.t.`...pi...C.......J....eB...
140a0 f1 03 26 c0 0a 1d 70 04 0d 30 0c c3 c0 00 19 50 02 60 c0 01 3a 72 38 ac a0 03 5e 54 55 4b a0 6e ..&...p..0.....P.`..:r8...^TUK.n
140c0 ac 05 4f 4f a6 07 0e 88 05 57 c5 4b 4f a2 07 fb 33 19 ec 73 03 a0 40 29 12 33 04 20 21 06 20 61 ..OO.....W.KO...3..s..@).3..!..a
140e0 09 dc 62 09 7e 61 08 dc 97 03 52 f0 05 a3 00 04 aa 50 02 37 30 1f 25 d0 01 3b e0 07 f9 95 09 68 ..b.~a....R......P.70.%..;.....h
14100 03 0c 13 e0 04 19 e0 05 28 70 00 a0 60 1b fe 94 97 4a 0d a0 04 52 10 79 0f c0 0a 6d 20 01 99 60 ........(p..`....J...R.y...m...`
14120 04 a4 30 05 42 c0 00 6d 17 3f 2e d5 14 8d e0 5f bf f0 63 95 40 09 78 47 02 7a a0 19 7c 50 08 95 ..0.B..m.?....._..c.@.xG.z..|P..
14140 93 64 9b 85 69 b5 b0 29 8d 40 09 15 e0 17 a6 a0 3d 55 80 0b bd 10 0a 9f 60 08 2e 20 09 06 20 04 .d..i..).@......=U......`.......
14160 0f f0 00 47 e8 06 61 00 15 5f 70 04 bb c0 0a 5a 07 6d 03 20 05 86 f0 02 28 40 55 07 68 2f 58 b0 ...G..a.._p....Z.m......(@U.h/X.
14180 04 89 30 01 49 30 04 b8 70 7b 73 00 04 3f b0 06 16 b6 09 6d 00 0a 95 a8 2e a9 d6 0a 7e 70 08 b8 ..0.I0..p{s..?.....m........~p..
141a0 12 54 ec 83 06 85 40 09 85 d0 64 8d f0 0b 08 d0 72 29 70 03 92 90 03 ab f1 0b 94 a0 57 8f f0 05 .T....@...d.....r)p.........W...
141c0 22 44 3d 86 b0 17 ae f0 1c 6b 70 06 93 f0 1f 58 10 06 6b 10 05 0f 70 89 4d 50 02 bc 20 09 4a f0 "D=......kp....X..k...p.MP....J.
141e0 00 8f 10 44 26 60 3f 40 f0 65 97 b6 04 3a a0 85 0e e0 08 2f e1 00 5f 20 05 9f b0 7f 40 50 05 87 ...D&`?@.e...:...../.._.....@P..
14200 74 7b 93 70 15 a3 01 04 87 18 5e 72 30 fe 85 fb 81 05 23 17 20 2e 07 4f 9b 82 2b fa e8 4a f9 91 t{.p......^r0.....#....O..+..J..
14220 1a 60 50 02 91 e0 07 7e f2 09 c6 73 42 19 74 18 1c c0 00 52 e0 00 72 20 03 98 90 04 2a 00 0b 49 .`P....~...sB.t....R..r.....*..I
14240 c0 01 53 c8 07 0a 20 0a 0a 80 08 ba f0 58 8b 14 05 a8 e6 00 98 50 05 a7 50 0a 29 00 0b f3 e1 00 ..S..........X.......P..P.).....
14260 38 c0 00 a8 00 04 13 79 7f 36 00 0c 99 e0 05 ad e0 00 49 40 61 16 37 0a fe 93 69 37 50 5a 4f a2 8......y.6........I@a.7...i7PZO.
14280 18 7e b0 29 12 78 08 ef 38 04 5a 60 35 5a 20 55 43 10 05 70 c0 09 70 c0 00 9d b6 56 cd 28 5b 54 .~.).x..8.Z`5Z.UC..p..p....V.([T
142a0 70 00 86 30 0c a4 e4 00 0e 90 06 49 00 95 40 60 02 3d 80 05 a5 d0 24 fa a8 03 41 80 0b 4e 00 06 p..0.......I..@`.=....$...A..N..
142c0 36 50 04 49 99 09 40 c0 66 57 85 06 0b a3 67 49 b0 7f 1c 20 01 1d 10 1d 4a b0 02 73 b0 57 1c 30 6P.I..@.fW....gI........J..s.W.0
142e0 01 42 30 04 97 80 69 a4 e2 4a 24 50 08 f9 45 02 57 f5 0b 1b e0 24 92 31 19 b9 92 08 9b 31 0a c3 .B0...i..J$P..E.W....$.1.....1..
14300 a0 6e f1 e8 22 b8 f0 06 b1 f0 46 76 fe a3 02 16 e1 00 4b 20 06 89 c0 06 0d 80 0a 97 a8 04 5e f0 .n..".....Fv......K...........^.
14320 06 65 30 07 9d 20 04 a1 78 02 68 38 01 19 d0 01 19 00 04 32 40 0a a4 90 02 4a 41 02 32 50 05 cc .e0.....x.h8.......2@....JA.2P..
14340 36 00 32 d0 0a 40 d0 01 92 f8 65 3a e0 00 9d 20 02 98 40 0a aa 90 04 99 e4 19 01 92 03 f1 e2 6d 6.2..@....e:......@............m
14360 ac a1 07 7a 40 19 a6 85 1a eb e3 7b 52 a0 00 ab 10 77 94 e1 85 20 f1 02 68 41 1d 77 b0 03 7d e1 ...z@......{R....w......hA.w..}.
14380 0a 61 80 05 3f 80 07 2b c0 0a c0 c0 69 38 84 05 4a c0 0a 57 30 00 24 e0 00 15 70 04 73 69 9e 07 .a..?..+....i8..J..W0.$...p.si..
143a0 f0 00 32 a0 6e b9 d1 08 17 70 48 3d ca 00 98 20 0c 0c 60 9b 07 a0 04 6c b0 02 6d 80 8c 2e 61 2f ..2.n....pH=......`....l..m...a/
143c0 b8 32 50 8d 40 2b 43 10 01 fa 68 5a 68 c0 72 f0 a1 29 79 80 05 a6 85 5f ec 58 08 15 f8 4e 80 21 .2P.@+C...hZh.r..)y...._.X...N.!
143e0 2d 6d c0 16 82 42 16 69 b0 03 36 90 04 99 80 0a 5e c0 00 60 20 89 99 90 19 e1 87 06 0b 50 04 8e -m...B.i..6.....^..`.........P..
14400 39 9b 4a e0 08 98 21 06 55 55 0b fe b1 f1 08 0f f4 28 35 c3 35 4a 60 14 6d d7 30 52 b0 00 f6 72 9.J...!.UU.......(5.5J`.m.0R...r
14420 70 f2 38 92 36 30 07 93 70 25 a4 c2 20 37 90 03 39 10 46 9c ca 63 ec f8 24 08 a5 1a 89 40 50 91 p.8.60..p%...7..9.F..c..$....@P.
14440 d0 41 24 78 06 15 e0 0a 1c a3 09 60 c0 06 40 70 3b be d0 05 78 20 02 1c 80 09 9d 70 02 08 07 3c .A$x.......`..@p;...x......p...<
14460 89 20 01 5e 00 0c bb c2 0a 8e c0 0a b6 32 2b 89 10 09 ce c5 03 41 e8 06 2e 25 3c a0 90 46 bc 10 ...^.........2+......A...%<..F..
14480 30 56 13 05 be 92 7b aa 31 0c 3f 60 03 12 20 04 fe e5 24 b8 d2 08 11 40 19 92 80 00 bf a0 07 ab 0V....{.1.?`......$....@........
144a0 81 55 24 80 00 99 f1 1f 7c 40 09 52 f6 06 0e f1 06 46 10 12 82 f2 02 05 5a 07 78 c0 03 b9 30 02 .U$.....|@.R.....F......Z.x...0.
144c0 2b 80 07 3b b0 4f 91 90 a4 4a 90 09 7d c0 03 a4 e0 09 ef d5 6a 51 a0 03 93 00 40 a8 c3 03 2d a0 +..;.O...J..}.......jQ....@...-.
144e0 03 a7 d6 06 62 70 04 8f 90 19 0a d0 8a 43 90 03 56 23 07 89 30 0c 6e c0 0b 0e 00 0c 66 f0 03 42 ....bp.......C..V#..0.n.....f..B
14500 f0 30 01 a2 85 4d c6 07 ad a8 fe 29 9d 88 06 87 70 08 65 02 4f 02 33 13 bd 80 28 75 61 08 12 50 .0...M.....)....p.e.O.3...(ua..P
14520 04 ae 90 10 55 d0 0b cb 86 05 a4 f0 03 23 d0 00 0e 84 07 51 90 82 11 81 ab 83 60 02 0c 00 0c 4a ....U........#.....Q......`....J
14540 40 0a 52 40 01 4b d0 18 ad 80 69 62 60 03 9f c0 0a 49 a0 03 4b 30 4e b7 31 04 d7 f8 45 57 2a 07 @.R@.K....ib`....I..K0N.1...EW*.
14560 87 10 06 b4 06 0b 43 90 09 3c f0 03 ad 10 1b 9a e2 24 f1 f2 8e ad 34 04 a7 d0 72 72 a0 8f 7b f7 ......C..<.......$....4...rr..{.
14580 64 61 da 37 a6 40 05 07 26 0c 80 64 04 32 82 0b 9a f0 08 37 e0 00 a0 b0 0a 3d 40 0b 8f 20 04 29 da.7.@..&..d.2.....7.....=@....)
145a0 50 08 0f f8 05 40 00 0c 98 50 02 28 00 06 27 f0 05 20 70 1f 6e e0 00 b5 90 1a 28 70 0a 2a c0 3b P....@...P.(..'...p.n.....(p.*.;
145c0 51 80 50 94 21 07 92 10 09 92 40 01 4f c0 08 b5 80 69 8d b0 0a b5 31 04 3f e0 09 aa e0 25 0f 72 Q.P.!.....@.O....i....1.?....%.r
145e0 50 10 fa 64 ab bb 01 0a 70 03 f6 18 8f fa 38 45 7c c0 85 66 e8 0a 9d 00 12 d7 d1 1c d0 53 56 46 P..d....p.....8E|..f.........SVF
14600 b0 62 c7 7a 03 2e 90 2e 99 fe 41 8a 39 e0 02 28 c0 03 c9 42 79 10 22 a9 94 90 6d 43 90 02 98 41 .b.z......A.9..(...By."...mC...A
14620 01 68 30 1f a6 71 80 bc 30 1a 8c 38 0b 06 50 34 f0 31 04 05 10 91 41 50 06 8f 60 be a5 e8 24 9b .h0..q..0..8..P4.1....AP..`...$.
14640 72 1f 94 90 03 b1 51 08 28 2b 8a 4d 36 19 ad 84 06 6f e1 0a 8a 80 0b b1 e0 8d 2f f3 0a cb f1 09 r.....Q.(+.M6....o......../.....
14660 9a a0 14 56 a5 13 72 20 7c 37 9a 09 26 b0 06 b7 27 8a b5 80 05 11 c0 09 fb 08 26 94 10 40 32 40 ...V..r.|7..&...'.........&..@2@
14680 09 10 28 86 52 70 04 4d 00 0c be b0 0b 06 70 01 17 f0 4e 93 d1 08 33 30 05 43 c0 01 61 90 04 92 ..(.Rp.M......p...N...30.C..a...
146a0 81 1a 45 c3 07 20 50 c1 be 72 1f 96 36 05 24 07 07 37 50 09 fc 93 03 9a 42 3d 27 43 07 23 f2 15 ..E...P..r..6.$..7P.....B='C.#..
146c0 00 a6 15 65 c5 03 40 50 aa 05 f0 00 3e 76 2f 93 c1 07 60 00 04 40 a0 c3 9f d1 ae e6 07 21 41 55 ...e..@P....>v/...`..@.......!AU
146e0 0a ef a4 09 68 86 06 5f c0 90 36 e0 09 78 e0 0b 78 00 0b 06 30 0b 07 97 1a 4b 13 45 3f 70 1e 91 ....h.._..6..x..x...0....K.E?p..
14700 e1 4a 62 fa 24 0e 18 20 fe c2 99 03 7c e0 07 51 70 23 87 d0 08 23 e7 6d d7 f2 02 a1 80 03 37 2b .Jb.$.......|..Qp#...#.m......7+
14720 0c 38 07 af 71 f1 06 78 60 02 41 20 07 52 10 03 88 2b 09 b4 1b 2a c2 40 52 89 a0 29 09 a2 18 09 .8..q..x`.A..R...+...*.@R..)....
14740 92 85 72 40 15 53 e8 07 81 20 03 2e 00 05 62 00 06 5d e0 0b 8b e0 05 52 60 a9 fd 95 08 32 d7 08 ..r@.S........b..].....R`....2..
14760 8c 60 03 dc ea 5f 9b 92 b1 9a f2 0b bd 0b 4f bb 98 03 63 a7 19 f3 28 09 a1 78 03 a7 d4 1d 71 71 .`..._........O...c...(..x....qq
14780 06 c4 01 b8 e2 21 28 32 32 05 92 73 08 66 40 04 9d a1 04 1a 00 01 7f 60 02 1c 71 02 72 80 00 9f .....!(22..s.f@........`..q.r...
147a0 a1 03 32 c0 3b 0a e0 02 3a 00 31 ac 70 69 4a f0 03 2b 86 3f 2d 25 01 bb c0 03 51 f0 04 47 73 08 ..2.;...:.1.piJ..+.?-%....Q..Gs.
147c0 c3 10 19 89 c0 01 0f c0 09 9b 02 2b 4e 12 ba 45 43 19 7b f9 0b bb 08 7c 91 50 c8 2f a8 19 55 37 ...........+N..EC.{....|.P./..U7
147e0 af c2 00 17 dc 11 0b 54 a0 1d ac da 0b 6b d0 03 a7 d0 09 52 90 04 47 00 01 1a f0 19 b3 20 01 9d .......T.....k.....R..G.........
14800 60 02 f9 b4 24 7c b0 fe 01 93 d0 00 c0 90 06 38 40 ad 0a 60 7e fe 25 1b 0d c3 01 aa 70 04 43 b0 `...$|.........8@..`~.%.....p.C.
14820 04 92 90 04 ab 20 02 0e 00 7c 43 50 aa 93 d0 09 3f 10 05 a1 cb 4b 4a 5c 34 40 c6 1a 9e f8 bd df .........|CP....?....KJ\4@......
14840 cb 64 ad c0 64 f9 45 05 d0 ec 2d b4 20 af 5b 61 0a 46 00 48 a6 20 09 d7 69 70 91 60 06 31 30 0b .d..d.E...-...[a.F.H....ip.`.10.
14860 58 c0 0a 9d 26 06 08 7a 09 6f 60 03 52 30 ac cf 46 0a 52 12 01 11 60 1a 4d e0 02 71 37 04 ac 60 X...&..z.o`.R0..F.R...`.M..q7..`
14880 8d 58 22 04 bf e9 77 bf 79 03 52 00 05 5e 70 02 43 20 30 c2 a7 93 4d d6 8a 36 22 c3 24 f0 45 56 .X"...w.y.R..^p.C.0...M..6".$.EV
148a0 53 09 af 01 b3 0a 30 8f bf e0 07 07 81 16 6c 54 28 dc e9 aa 69 b1 03 49 20 02 af 9c 08 94 f0 03 S.....0.......lT(...i..I........
148c0 b5 29 02 40 f0 00 3b f0 00 65 20 04 9f a0 0a 0b 20 09 88 90 1e 99 eb 34 10 52 0b 1b 09 2f 43 d0 .).@..;..e.............4.R.../C.
148e0 06 3a 30 76 97 d0 77 35 e4 45 02 03 71 b1 61 7c f7 68 5a ab d1 08 88 f0 64 c3 67 c2 08 05 07 5a .:0v..w5.E..q.a|.hZ.....d.g....Z
14900 10 3a 66 7c 1f 93 fe c6 4b f8 b5 5b 66 21 18 7c d2 0b c3 51 05 48 50 05 69 60 03 99 d5 09 89 b0 .:f|....K..[f!.|...Q.HP.i`......
14920 74 41 20 06 3e 80 09 12 60 03 0c d0 09 3b 40 03 60 da 64 52 b2 04 03 e0 5f 55 c1 24 5f 80 08 0a tA..>...`....;@.`.dR...._U.$_...
14940 70 55 37 02 4f 1e eb 34 2e 00 71 ba 34 8d af 38 e0 5a ea 9c 24 80 1a 36 82 1a 5b d8 14 4f 62 db pU7.O..4..q.4..8.Z..$..6..[..Ob.
14960 01 92 2b 9c 4a 09 69 9a 16 7e 84 31 54 70 1d cf 23 38 0d a0 09 19 b0 03 a7 dd 09 4b 50 29 1c f0 ..+.J.i..~.1Tp..#8.........KP)..
14980 09 2e 30 01 60 d0 00 57 20 05 7a 30 6e 5f 50 39 39 a1 24 05 b5 ce 4f 52 08 7a b0 34 51 a0 05 a3 ..0.`..W..z0n_P99.$...OR.z.4Q...
149a0 20 00 f9 a5 80 ca 0c 4f b0 c0 0b 26 0c 0b 0a e5 6d 82 2c bc a6 b1 4b 07 b5 a5 a4 78 23 85 a0 00 .......O...&....m.,...K....x#...
149c0 11 00 02 08 25 07 b7 b5 15 b1 28 23 6b a3 2c 9a 40 42 86 20 4f 40 60 04 4a b0 29 5a 12 4e 91 10 ....%.....(#k.,.@B..O@`.J.)Z.N..
149e0 06 a0 e0 00 ad d0 0a b0 c0 07 d7 2b 09 e7 b8 59 43 06 98 a6 f5 4e 95 c0 cc 3e 26 03 3e 56 26 89 ...........+...YC....N...>&.>V&.
14a00 c0 50 58 a0 98 fe 4c 32 09 9b 4a 8a f3 45 8a 9b 61 23 05 52 9c 07 be a5 bf 50 0a 42 4e 02 12 d3 .PX...L2..J..E..a#.R.....P.BN...
14a20 64 9f 70 2d 1c d4 32 d9 92 8b 21 42 2d 99 10 3e 60 c0 03 b8 80 2b 98 31 09 b6 e2 2a f0 71 23 c0 d.p-..2...!B-..>`....+.1...*.q#.
14a40 a6 e6 af 21 0a ca 0c 21 55 5a ae b5 40 58 9d a8 00 a7 70 03 87 30 09 8e 70 03 47 d0 77 97 e3 02 ...!...!UZ..@X....p..0..p.G.w...
14a60 0b d0 1e 9e e1 30 fa 88 72 01 62 5a 34 fe 4e 2b ae 19 01 62 77 c3 89 06 b0 20 09 6b 70 42 a9 60 .....0..r.bZ4.N+...bw......kpB.`
14a80 0a 38 a0 08 cb a2 08 69 b5 ec a0 c0 05 5e 50 02 4d c0 bd a7 f0 00 8e d9 00 8f e0 00 b7 b0 1f ed .8.....i.....^P.M...............
14aa0 28 8a 2f a1 07 85 90 b8 a0 c9 20 70 50 c0 ae 94 dc 0c 95 1f f6 61 4b d3 f8 b6 88 06 71 07 07 0b (./........pP........aK.....q...
14ac0 9b 05 4f 08 60 ee 7c 70 50 08 a0 64 9c 9a 13 a7 b1 59 0f 6e 1a 1f 62 09 d3 22 17 12 b0 03 79 43 ..O.`.|pP..d.....Y.n..b.."....yC
14ae0 2d 60 10 06 0c 30 00 c3 10 16 41 10 04 2b c0 00 a8 02 06 03 e2 02 43 00 00 8d 9d 44 23 d7 08 2f -`...0....A..+........C....D#../
14b00 fe 20 b2 71 fe 08 f3 18 8a a9 e1 00 63 29 06 40 1e 2b ab 10 80 3b 95 25 83 35 04 4a 40 20 c8 d9 ...q........c).@.+...;.%.5.J@...
14b20 97 00 ac 55 92 31 a6 c2 fc ef 24 d7 64 26 4c 09 45 20 ed 8f 4e 0b c6 d2 c5 07 a0 62 b0 d7 0a c9 ...U.1....$.d&L.E...N......b....
14b40 91 09 ae 70 41 04 50 b5 bf 82 eb 60 62 23 7a 00 9d 9a b1 e7 2b f0 09 b7 10 30 b9 82 2b 64 fa 4a ...pA.P....`b#z.....+....0..+d.J
14b60 aa eb 12 05 bc ee 51 70 03 ac 8b 7c 32 50 4b 8d 00 6e 36 42 ae 9c d1 08 1b 70 03 14 5a 34 36 e2 ......Qp...|2PK..n6B.....p..Z46.
14b80 4a 8d b0 e2 37 60 c6 bf 20 05 72 c0 f0 c7 41 05 15 70 d5 6b b1 04 6c 20 d8 50 70 40 c3 90 09 0c J...7`....r...A..p.k..l..Pp@....
14ba0 90 04 c1 80 07 2b 86 06 84 b5 e4 bf 90 e0 8d 50 02 07 d0 01 73 90 06 78 80 09 15 90 19 54 44 34 .....+.........P....s..x.....TD4
14bc0 c8 09 7c fa 78 c8 4f 36 05 6d ef 02 ab 70 c8 dc 26 7c 88 1c 20 91 d1 64 4d 76 98 72 db 97 ab 41 ..|.x.O6.m...p..&|.....dMv.r...A
14be0 a6 48 4c 2a 93 f0 05 7b 63 3d a6 80 28 6f 00 04 56 20 06 0c 90 d7 5e 20 09 51 70 ab 33 1a 57 a9 .HL*...{c=..(o..V.....^..Qp.3.W.
14c00 40 03 b1 fe 62 d4 01 e3 c7 fa f8 05 81 50 04 46 e5 07 3d 90 08 db f8 8a 08 00 69 8a a1 a5 f1 02 @...b........P.F..=.......i.....
14c20 2b 4f e6 14 89 50 02 92 71 03 a9 e1 6d e9 7a 1a a6 51 f9 24 90 df ee 18 8f 10 2a 03 77 a7 c4 80 +O...P..q...m.z..Q.$......*.w...
14c40 2e 09 67 b5 56 2c 73 07 60 90 43 be e3 0a 00 71 2a 03 a8 39 0c c0 24 4a 32 27 53 03 30 0e 18 0c ..g.V,s.`.C....q*..9..$J2'S.0...
14c60 29 54 a8 d1 af 5f 87 d0 24 62 c0 4a 0e 22 39 51 86 0c 81 25 04 d6 0d 8a 24 7e 7d fc 55 0b 96 82 )T..._..$b.J."9Q...%....$~}.U...
14c80 5f 4b 1a 7d 94 a4 60 89 24 49 37 0e 4d 1c 52 2b 07 25 12 24 d0 a0 d1 43 02 ce 4d 39 8d f8 14 02 _K.}..`.$I7.M.R+.%.$...C..M9....
14ca0 90 03 22 80 5f 8d 72 9c 44 a4 42 45 95 37 bd 2a ac c1 84 e5 82 27 5f 26 0e b1 62 e5 c9 d3 0e 25 .."._.r.D.BE.7.*.....'_&..b....%
14cc0 94 a4 64 4a 61 a2 41 90 2f 11 01 20 3d c9 46 82 9c 44 5f 28 49 42 33 84 d2 49 19 24 0a fd 22 a1 ..dJa.A./...=.F..D_(IB3..I.$..".
14ce0 17 41 23 05 72 48 50 82 85 25 a7 0b 34 37 5c f8 bc f1 74 88 24 bf 85 b0 2c a9 d5 48 8a 9c 0d bf .A#.rHP..%..47\...t.$...,..H....
14d00 5a 01 fe 2e 44 09 4d 4f a5 70 9c de 70 f5 e6 93 2b 45 9f 44 28 91 e4 c4 57 26 3f 87 14 30 e0 91 Z...D.MO.p..p...+E.D(...W&?..0..
14d20 a9 84 1f 17 89 38 c8 b1 21 e2 01 26 04 6f 0b 91 60 0a 24 80 14 29 3d 1e 9c 94 43 99 44 23 e9 2f .....8..!..&.o..`.$..)=...C.D#./
14d40 1b 61 c1 f2 14 4d 23 8f 43 25 6d c0 c2 67 f4 2f 34 c7 49 ea 01 d9 08 4d 29 05 92 10 f8 a4 64 3d .a...M#.C%m..g./4.I....M).....d=
14d60 87 24 88 87 0d 53 c2 55 c5 55 11 2a a9 3a ad ea 84 07 2e 1a c0 82 84 1c 50 40 81 87 12 90 82 83 .$...S.U.U.*.:..........P@......
14d80 13 12 a2 50 e2 93 56 10 08 ed 97 bf 7e e2 c3 92 28 1e f0 83 0f 00 d0 90 84 8f 94 78 42 40 bb d0 ...P..V.....~...(..........xB@..
14da0 fc 9a 88 12 39 74 a8 05 b0 1c e0 ca 01 0d c0 28 43 60 b0 5a 14 d8 2b 82 21 28 6a c4 85 8f e0 88 ....9t.........(C`.Z..+.!(j.....
14dc0 c2 c0 1d f3 a2 44 11 2a 2a 68 e1 8d 22 d6 b0 a1 13 56 3a 99 40 8e ed 1e 28 c0 04 0a 24 a1 e4 a9 .....D.**h.."....V:.@...(...$...
14de0 46 86 f9 24 8a a6 4c 2a 64 88 f7 84 50 60 15 49 b0 a8 04 25 12 6a fb 45 45 4a f4 f8 4b 12 f5 6e F..$..L*d...P`.I...%.j.EEJ..K..n
14e00 1c fe e2 86 9e c6 0b 2a a2 5f 10 b9 e1 af f8 de fc e5 86 08 38 82 05 2f 3f be d8 68 b4 16 4d 22 .......*._..........8../?..h..M"
14e20 6f 08 57 84 b1 44 85 37 3a d9 21 0b 4d 86 e9 c4 8f 56 64 10 c2 8b 26 2c 71 a9 10 39 c2 e4 90 92 o.W..D.7:.!.M....Vd...&,q..9....
14e40 bd 2c 34 4e 0f 4c 86 30 60 95 20 23 01 0d b1 9e 8e a3 35 c6 12 7b 94 64 3e c0 46 a3 c4 4e f4 12 .,4N.L.0`..#......5..{.d>.F..N..
14e60 39 ec a3 9e 48 28 ac 96 28 14 f0 88 ba 16 95 8a af 29 39 4c eb c0 88 33 70 78 03 0c 31 3c 99 80 9...H(..(........)9L...3px..1<..
14e80 0d 60 a2 60 a3 04 36 f0 c8 00 05 1b 4a f9 72 14 12 22 e3 63 d6 b7 c8 0b 63 09 4a 92 00 82 0f d3 .`.`..6.....J.r..".c....c.J.....
14ea0 78 0c cf c0 46 f4 48 49 8e f7 0c cc 32 87 46 32 cb 81 04 04 14 f0 c9 c0 ca 5a 2c 24 af 9f 00 ab x...F.HI....2.F2.........Z,$....
14ec0 e5 0b 19 29 a9 c4 11 49 52 ba a1 15 85 d7 a0 02 17 13 76 10 83 90 45 16 f1 a4 04 05 92 a0 84 81 ...)...IR.........v...E.........
14ee0 11 30 e9 64 89 1c ec 14 42 92 a4 22 82 19 e6 5f 6e 11 c5 24 bf 72 a8 c5 2f 12 58 69 84 c2 a0 48 .0.d....B.."..._n..$.r../.Xi...H
14f00 fe c8 d3 c2 42 f4 88 02 cb 5a 12 19 ad 90 5c 01 98 4e e7 46 48 58 16 8d 80 01 1b c2 34 90 14 48 ....B....Z....\..N.FHX......4..H
14f20 c4 0f 96 e4 b8 61 88 46 aa 80 c4 12 30 aa 00 62 07 3c 16 d9 45 8e 4a 0e c4 64 8d 37 80 40 20 10 .....a.F....0..b.<..E.J..d.7.@..
14f40 1d 8e 40 a1 91 52 56 6e 84 bb bb b9 46 e3 93 13 00 03 40 0f 00 f6 3a 8e 17 2c d4 eb 19 ce 74 fb ..@..RVn....F.....@...:..,....t.
14f60 fc 45 eb 9f ca 43 2e 34 00 98 6e e4 b8 9c 81 fe ab 90 17 4d 1a b5 16 39 86 80 5a c6 9e bc fe 45 .E...C.4..n........M...9..Z....E
14f80 18 15 5a 60 e0 93 09 92 68 82 07 52 28 e1 63 14 23 32 e9 a4 82 12 1a 39 e5 04 5e 6a 31 ee a9 5f ..Z`....h..R(.c.#2.....9..^j1.._
14fa0 22 79 a0 95 f0 7e f9 c2 0f 00 46 d5 53 34 7c 17 80 53 e9 1d 0b 89 40 01 a4 62 7a 8f 22 a1 d3 1d "y...~....F.S4|..S....@..bz."...
14fc0 ac f8 1b fe 7d ef 38 12 a6 d8 ab 94 ed 41 8c 71 88 ed 7e 79 b1 94 21 de a8 e2 0e 3c 78 90 20 8c ....}.8......A.q..~y..!....<x...
14fe0 b0 26 f8 7d 95 06 f0 68 e2 80 29 d0 10 02 14 49 90 0a d3 47 ca 32 99 ed 41 64 08 5f 10 53 50 fe .&.}...h..)....I...G.2..Ad._.SP.
15000 6a 41 a1 e3 50 04 4e 4d 39 ce 9b 66 e5 97 b7 fc ef 43 92 01 8c cd 20 82 00 34 20 22 4b 11 01 4a jA..P.NM9..f.....C.......4."K..J
15020 2d 22 a2 00 bb 44 27 83 ff ea 85 0a 38 f0 83 11 d4 41 0c 0a 19 00 14 48 91 97 2c f8 42 04 42 18 -"...D'.....8....A.....H..,.B.B.
15040 46 26 a2 50 1e e3 38 40 0e 4b 88 04 72 26 c7 34 a6 e9 e9 2f 80 93 48 e4 7e 41 b0 88 50 30 4c b5 F&.P..8@.K..r&.4.../..H.~A..P0L.
15060 aa 45 79 f4 50 94 84 39 a5 27 81 f2 cb f9 8e a3 1d 12 1c ee 23 87 90 43 9b 94 a2 02 50 88 60 11 .Ey.P..9.'..........#..C....P.`.
15080 be 68 c0 24 50 d0 09 3c 88 c0 7c 8d e0 c1 22 32 e0 85 2e f8 e2 04 a3 ca e2 29 6a d1 8a 52 f4 c4 .h.$P..<..|..."2.........)j..R..
150a0 28 bf 40 9e d4 f4 14 98 c0 dd 40 0b 3d e9 5a f3 14 00 27 85 05 ac 60 14 09 18 1f 2c 42 ae 94 c4 (.@.......@.=.Z...'...`....,B...
150c0 48 0f e8 b1 d0 b9 04 d6 13 d1 ec 2a 67 68 a0 c4 1a 34 61 84 45 e0 01 0f 46 f8 04 17 ea 90 86 2f H..........*gh...4a.E...F....../
150e0 34 05 0c 68 eb 44 17 46 b0 0a 4a 34 b0 12 62 28 1a 60 4a f2 17 04 08 ce 38 16 d2 c3 c2 ba fe 58 4..h.D.F..J4..b(.`J.....8......X
15100 b9 88 4c 2c 46 20 d8 8e d7 80 36 ac 3b 49 82 13 7a 50 80 f8 b4 10 81 73 e5 20 28 e4 22 41 74 0e ..L,F.....6.;I..zP.....s..(."At.
15120 53 12 7c c9 49 6a 46 c0 01 26 d2 e0 85 09 38 60 04 be c0 83 2f 7a e0 84 24 c8 80 07 35 cc 80 82 S.|.IjF..&....8`..../z..$...5...
15140 84 46 82 43 88 e0 10 14 89 19 00 97 89 af bf e8 e1 5e 11 69 9e 49 1a c1 b4 d1 50 10 22 11 41 00 .F.C.............^.i.I....P.".A.
15160 e8 8e 93 50 8a d4 09 0d 3a e0 c3 10 08 e6 93 05 1a e8 17 8c dc d5 4b 10 f0 0b 15 94 ad 0e 22 38 ...P....:.............K......."8
15180 c2 1c 78 00 0c 25 c4 73 10 0d 18 82 1b 44 90 81 2a a8 22 67 0d 34 c0 15 a4 b8 2e e3 30 0d 73 13 ..x..%.s.....D..*."g.4......0.s.
151a0 13 da 2f de a2 87 cd 69 54 0f 9d 04 da 9c 78 ea 87 f2 20 40 27 7f c9 a6 a9 9e d5 88 30 12 ce 4f ../....iT.....x....@'.......0..O
151c0 2f 32 df 0d 74 32 18 12 b4 80 0a c2 68 c0 15 48 01 85 34 d8 60 08 99 f8 98 2f c4 d0 83 39 88 80 /2..t2......h..H..4.`..../...9..
151e0 01 74 a1 50 07 92 a0 03 38 78 8f 56 98 4b 58 13 63 06 b5 17 49 e2 92 95 39 e2 10 ca e7 fe 13 7c .t.P....8x.V.KX.c...I...9......|
15200 fa 25 93 68 20 e8 12 0e 23 a2 f7 00 a0 11 b5 b4 10 25 6a 61 be 5a 30 4e 27 7a a8 c2 27 1a 00 84 .%.h....#........%ja.Z0N'z..'...
15220 4b 48 01 0a 3c b0 01 f0 76 01 cf 28 9c 02 0b 78 28 0b 79 86 31 01 3f f0 15 66 c6 41 2a aa dc 62 KH..<...v..(...x(.y.1.?..f.A*..b
15240 19 4a 50 08 67 e5 d1 dc 49 9e 52 14 7c 45 06 30 41 b1 50 53 80 72 03 05 80 ce 27 79 c2 8b 24 6a .JP.g...I.R.|E.0A.PS.r....'y..$j
15260 91 ab 89 68 4e 3d 97 ac 1c 03 3a a0 02 5e 0c 43 09 65 d8 43 10 de a0 02 25 1c 00 13 07 88 44 10 ...hN=....:..^.C.e.C....%.....D.
15280 6e 00 04 13 fc ef 17 0b 00 e5 bd 10 b0 81 e6 d1 ea 2d 0c 84 6d 14 9d 0a b3 9e 6c 34 34 31 9b 9a n................-..m.....l441..
152a0 11 ff 22 a2 23 ea e4 30 85 a0 10 79 fe e7 93 e7 f1 b4 32 04 13 81 2f ea f0 03 5c 0e 23 17 9d 70 ..".#..0...y......2.../...\.#..p
152c0 c3 1b 56 74 8a 3f c9 48 0e a3 02 e5 11 09 96 83 0d 00 54 66 b3 aa ad 1e 7c c8 c3 42 6a 2e 3b 4d ..Vt.?.H..........Tf....|..Bj.;M
152e0 ac 0c 09 fe 17 b0 9c 6c c7 24 77 3d 57 6f b9 16 4c c2 c0 0c 28 c1 c4 02 7e 3f f7 8b fe 4c 64 20 .......l.$w=Wo..L...(...~?...Ld.
15300 14 98 00 42 12 3a 81 09 0e a0 22 0a 93 e0 c0 1b cc 77 aa c3 c2 a2 2f 7e 09 e3 10 22 71 d0 98 58 ...B.:...."......w..../~..."q..X
15320 08 0b 97 2c 44 ba 8e 33 19 d0 c4 75 57 d6 dc a2 f7 02 f6 97 17 e9 94 24 7e 6d 0a 60 14 8b d4 1c ...,D..3...uW..........$~m.`....
15340 18 c7 b7 c4 7a cf 61 6b e1 8b 45 60 62 0e 72 c4 83 18 82 f0 08 36 4c 22 0d 6e e8 53 98 14 c0 01 ....z.ak..E`b.r......6L".n.S....
15360 ec b4 12 29 f5 01 1d 03 69 95 2e bc 46 50 45 f8 ca e6 53 48 20 1e c8 d9 e9 2f 16 e1 24 ad d4 03 ...)....i...FPE...SH...../..$...
15380 11 34 b8 00 9f bf e8 25 22 01 f3 39 66 5e f1 0b 91 c8 c2 c7 d8 d8 89 4e 64 42 18 a8 10 83 03 1e .4.....%"..9f^.........NdB......
153a0 00 07 19 2d 51 0a 6e 68 00 0a 32 38 9a 1c f0 e2 06 7a 10 21 98 26 f7 34 98 81 40 22 3a b1 5e 98 ...-Q.nh..28.....z.!.&.4..@":.^.
153c0 de 22 3a 46 c1 ec 7f de cb ed a5 3f 04 d8 88 c4 08 39 f8 02 4a 0e 18 78 c5 86 86 81 07 23 c0 43 .":F.......?.....9..J..x.....#.C
153e0 17 82 10 86 26 b0 22 13 3a 20 03 0f a2 50 88 cf e4 20 0c 17 e0 41 1b 28 01 11 9d fe 16 0d 39 0a ....&.".:....P.......A.(......9.
15400 3d ad c1 74 fa 94 ed 15 22 32 48 a1 dc 94 77 d2 40 3d 99 8f 56 16 92 51 cc 52 12 1a 3f 6c ee 8a =..t...."2H...w.@=..V..Q.R..?l..
15420 72 35 4f c2 48 00 0c 3c e4 82 07 75 50 c2 10 a2 70 83 38 fa 02 0c 3d 90 03 b2 48 c0 80 39 e0 e1 r5O.H..<...uP...p.8...=...H..9..
15440 00 a5 90 c3 2f 61 3b 57 b7 c8 e8 45 4d 7c 4b 0e 9e 62 e1 79 ce d3 ad 3f b1 5c 65 78 f8 17 3b f1 ..../a;W...EM|K..b.y...?.\ex..;.
15460 c8 2f fc 04 1a e8 40 a2 05 3f 50 04 0c 3f 50 85 2f c2 f5 05 21 d8 c0 06 67 f4 44 12 0c c4 0a 3e ./....@..?P..?P./...!...g.D....>
15480 74 a0 13 9a 60 05 03 8e 9d db 9d 1e 27 29 e7 e2 43 0e e4 50 e6 b7 4c 70 c4 51 d6 29 97 01 f3 85 t...`.......')..C..P..Lp.Q.)....
154a0 46 dc 5a 2f 33 2f 62 98 88 69 f5 b7 54 2e 28 3b 3a 97 70 b1 40 91 5a 16 c2 13 61 15 41 10 0a e0 F.Z/3/b..i..T.(;:.p.@.Z...a.A...
154c0 09 0b f0 40 04 61 70 03 10 ee a2 80 1c 74 80 07 da f6 d1 20 d1 97 f6 75 f5 4c 68 70 21 66 06 f5 ...@.ap......t.........u.Lhp!f..
154e0 39 57 5d c2 d6 af 00 6d 1e 4f 2a 43 5f 89 a0 81 13 b6 e1 84 5e 8a c2 cd f2 70 fe c5 04 12 c8 42 9W]....m.O*C_.......^....p.....B
15500 03 38 90 05 0b 48 a0 0a 73 e0 00 10 a2 40 68 29 f8 42 e8 43 28 10 12 05 fd a2 94 0b 0e 7d 7e 59 .8...H..s....@h).B.C(........}~Y
15520 82 9d a4 3d 2b 89 e0 ac f3 b9 1d 8d 20 9f f7 0b 4e e0 33 69 c7 b9 d7 7a 22 21 a5 92 0c 01 5f 59 ...=+...........N.3i...z"!...._Y
15540 82 4c e5 04 91 8b 11 fc 00 e2 12 b0 00 1e 24 f0 03 3c d4 10 13 5a 80 5c 12 32 00 8c 49 54 4e 88 .L............$..<...Z.\.2..ITN.
15560 00 cc a7 da 6b 19 c6 2a cb 15 b5 4e 74 0b 79 22 47 7c 45 bb 15 fa e7 7a 89 1b 28 8f dc 6a a0 ae ....k..*...Nt.y"G|E....z..(..j..
15580 f9 17 2f 71 85 00 cb 82 24 78 12 13 e0 81 20 e0 02 4f c8 02 1e c8 80 14 a0 20 04 98 03 5a 58 05 ../q....$x.......O...........ZX.
155a0 19 c0 a7 c9 71 8b ab 6b b6 59 e1 83 ee 29 22 e3 28 11 5a 81 19 de b3 b7 89 f8 85 63 93 af e9 80 ....q..k.Y...)".(.Z........c....
155c0 1c c8 d0 25 4e 6a 8f f6 e2 89 92 90 03 30 c0 85 11 58 84 4e 50 05 4f 18 01 0e 30 83 58 10 03 06 ...%Nj.......0...X.NP.O...0.X...
155e0 a8 b1 b9 03 a1 4c c0 84 24 88 22 f8 1b 39 bc 7a 0b 0f dc 3a 14 84 19 c1 41 fe 8a e7 ab 32 fa 02 .....L..$."..9.z...:....A....2..
15600 8c e2 90 99 bf 28 3b b9 2a 28 34 c8 19 a2 81 83 49 f8 82 cc 70 20 9f 38 82 01 00 04 3c d8 85 3e .....(;.*(4.....I...p..8....<..>
15620 20 b0 5d e8 04 13 88 82 55 e0 02 3c 08 23 9d 21 05 32 c8 04 a0 28 b4 de d1 b5 dc 12 11 de e1 09 ..].....U..<.#.!.2...(..........
15640 de fb bd b7 70 37 7b 63 af 2a 84 13 f4 58 ac a7 41 9f 17 f9 99 f6 62 18 7f 39 01 ca c0 02 a6 89 ....p7{c.*...X..A.....b..9......
15660 22 12 c0 05 29 10 04 db cb 05 11 e0 80 53 cb 84 24 98 04 53 2a 10 80 1a 06 3c 98 00 19 f1 35 f3 "...)........S..$..S*....<....5.
15680 62 af f2 78 91 91 eb b2 cc 01 31 7d 8a 9c d5 ca c5 23 6a 13 1c 39 0e 5c 43 28 92 38 89 28 32 8a b..x......1}.....#j..9.\C(.8.(2.
156a0 82 c2 11 8a e0 83 46 a0 80 8e 91 80 45 90 00 5f c0 84 26 28 81 49 38 80 24 38 02 1e e0 01 17 24 ......F.....E.._..&(.I8.$8.....$
156c0 01 40 58 84 ee 02 80 2f 30 90 98 19 a2 83 0a 8c c1 88 91 8b 7a 2b 10 0a 38 9d 09 41 9a 7b 2b bf .@X..../0...........z+..8..A.{+.
156e0 10 91 08 b0 90 97 c2 b5 9f 98 88 08 40 0f 9f 38 c6 0c 72 2f 50 d8 81 4c fe d8 36 68 cc 04 4f 88 ............@..8..r/P..L..6h..O.
15700 3d 2c 80 02 15 60 05 c0 22 0d 14 c8 80 58 10 21 66 83 99 3c a3 15 2b fc 20 f8 1b 96 f8 03 1a 0f =,...`.."....X.!f..<..+.........
15720 04 13 cd 99 95 7f 81 2d 3d a8 91 f6 88 82 bc 41 1f c0 4a 8a bb 09 94 ae c9 0c f7 d3 03 61 10 86 .......-=......A..J..........a..
15740 4c d8 84 0e c0 03 86 1b 01 3a 9c 84 4e 68 83 36 e9 b7 49 68 00 31 18 a8 c9 09 b1 b5 2b 2e 14 9c L........:..Nh.6..Ih.1......+...
15760 08 81 d1 9c 84 5a c4 88 10 40 0b 31 8c 7c 6a 13 93 a0 2a 10 f1 83 bd d0 99 56 c0 23 9d b9 a8 9f .....Z...@.1.|j...*......V.#....
15780 58 34 01 cc a6 2a 10 06 06 a8 03 4f a8 83 03 e8 84 58 d8 01 2c e8 04 60 38 81 e9 d0 13 e2 69 00 X4...*.....O.....X..,..`8.....i.
157a0 2f 09 38 2b cc c5 28 8c 37 32 ab c2 ca 58 39 a4 0a b1 88 c8 9b 21 98 4a 12 70 90 18 21 89 d1 c8 /.8+..(.72...X9......!.J.p..!...
157c0 9b e3 38 96 e9 f8 88 f8 50 b9 c3 49 c6 5a 40 a6 fc 60 00 25 10 01 4c 70 02 60 c8 80 17 a0 04 14 ..8.....P..I.Z@..`.%..Lp.`......
157e0 c8 0a 29 f8 c8 c3 40 81 12 e8 93 9b 29 34 60 02 80 e2 c0 b5 ff f9 17 fe 38 61 c7 0f 99 98 41 92 ..)...@.....)4`.........8a....A.
15800 2b bf d0 01 1b 78 1d 3d 88 00 ea 78 9a 37 92 03 4e 98 1a 5d 1a 36 e8 30 89 80 41 03 2a 7a 83 0a +....x.=...x.7..N..].6.0..A.*z..
15820 20 85 29 00 b2 06 90 00 37 28 01 ec a8 00 b2 cb 45 a0 91 01 1b 30 0c 0f 5c 2d 14 0c 47 e8 cb a4 ..).....7(......E....0..\-..G...
15840 51 a1 9c 22 fa 99 c9 8b 08 39 68 05 07 d0 81 55 00 21 f5 f8 cd 18 39 1c c3 08 8a d1 b0 3e 4c b3 Q..".....9h....U.!....9......>L.
15860 8e d0 6b 89 89 e0 03 43 00 05 50 a8 00 2c 88 82 44 98 82 1b 80 1d 04 90 93 44 68 1e a6 f9 85 52 ..k....C..P..,..D........Dh....R
15880 50 82 1b 98 c2 07 6a a2 fa b8 37 84 9b 0f 7b 21 18 cb 43 0e 81 19 82 c6 b3 9b 82 89 08 58 08 23 P.....j...7...{!..C..........X.#
158a0 04 c8 b3 3b 19 96 4f 32 09 ad b4 1e c0 e0 b5 31 a0 85 16 28 82 0a e8 84 26 58 05 89 2a bb 43 c0 ...;..O2.......1...(....&X..*.C.
158c0 82 47 90 02 bf 78 8f 84 7a 9a eb dc c5 bf 48 b9 54 e9 ba 2b 5a 26 0a 3a 89 01 6c 4d 34 88 82 73 .G...x..z.....H.T..+Z&.:..lM4..s
158e0 84 c4 bc f0 09 cd 89 0c a0 41 03 0e 3a 2c 17 20 0c ba 12 28 eb 13 fe 31 c2 6b 83 0a f8 84 e9 52 .........A..:,.....(...1.k.....R
15900 82 4c 78 04 5e 80 83 de 92 91 64 5c 02 7f 32 00 c8 91 91 52 50 ca b5 8b 19 ca 18 0d 05 58 94 4d .Lx.^.....d\..2....RP........X.M
15920 8a ab 13 73 af 84 c9 93 2e 42 0a 11 1b 8f 89 28 4a 9b 59 94 a2 54 0f 99 e9 3a 5d 6a 13 04 18 83 ...s.....B.....(J.Y..T...:]j....
15940 37 10 86 0a c0 05 30 78 80 1b 28 05 03 68 85 23 50 b2 d1 20 13 03 99 a2 c0 80 c4 1a 25 3e fc 7a 7.....0x..(..h.#P...........%>.z
15960 a0 ba bb a4 8b ea 34 7a 1b 1a 3f d0 27 da 5a c1 42 f8 02 58 a8 1c 89 32 1f 34 50 80 c2 08 13 39 ......4z..?.'.Z.B..X...2.4P....9
15980 51 cd 80 c9 81 4a 30 8d 9d d0 4d a8 a1 84 0a 10 86 33 48 00 48 10 86 36 78 83 6a e1 80 0c 50 00 Q....J0...M......3H.H..6x.j...P.
159a0 0d 00 96 46 e8 01 95 33 00 f5 38 02 03 80 93 2d 21 3c 56 51 00 04 48 d6 42 88 22 88 c0 a4 a1 c9 ...F...3..8....-!<VQ..H.B.".....
159c0 15 0b ed a7 a4 18 36 3b b1 99 8d d2 d6 b2 c3 92 1b 40 84 a4 99 41 4e 65 18 44 18 1d 30 21 01 af ......6;.........@...ANe.D..0!..
159e0 c4 05 5a 50 01 5c 80 04 32 a2 82 85 68 84 02 f8 81 67 29 8c 5f fe 20 03 38 18 02 08 00 81 3e 91 ..ZP.\..2...h....g)._...8.....>.
15a00 84 3e 90 82 46 78 82 3e 38 02 34 38 82 5a 3d 04 06 28 8f a7 b1 a6 68 ad 0f bd c4 af a9 01 c7 29 .>..Fx.>8.48.Z=..(....h........)
15a20 83 ad bc 19 15 fa b8 35 a6 6a 20 7b 7c 09 38 30 10 13 b3 10 4b f2 a7 4f 30 04 5c 15 06 43 a0 82 .......5.j.{|.80....K..O0.\..C..
15a40 36 68 81 33 e0 82 55 51 00 03 f0 80 99 2d 85 43 98 04 0f 38 04 1b 30 00 5b 18 02 10 d0 80 39 b8 6h.3..UQ.....-.C...8..0.[.....9.
15a60 01 03 e0 81 18 68 84 40 80 05 95 2b 05 09 20 97 97 08 a6 62 4b 38 4c fb 1f 4a 20 a8 b6 9b 95 e4 .....h.@...+.......bK8L..J......
15a80 43 be de 6c ad e3 48 1a 26 32 ac ca d8 a5 46 00 85 31 38 83 36 60 80 5e b0 84 4f f0 ca 4e a8 03 C..l..H.&2....F..18.6`.^..O..N..
15aa0 62 9c 82 56 a8 85 43 20 81 49 88 01 22 00 04 31 38 84 80 99 03 18 48 d6 4e 80 00 21 e0 85 24 28 b..V..C..I.."..18.....H.N..!..$(
15ac0 28 42 f0 80 e9 50 57 80 62 36 00 0c 8d a7 78 0b c4 fa b5 ed d1 ba f1 80 b9 60 2a 85 ff 11 d2 59 (B...PW.b6....x..........`*....Y
15ae0 cb 24 af 79 1a 1f c9 a2 16 80 04 35 30 04 15 18 83 d3 c1 05 fe 15 00 86 3e c8 09 c2 1b 80 21 38 .$.y.......50...........>.....!8
15b00 04 de 32 01 22 b0 83 1f 48 04 96 e8 00 0d b0 0d 09 f8 80 19 90 82 2b 30 0a 7a 2a 03 92 c4 12 bf ..2."...H.............+0.z*.....
15b20 10 a1 0f a9 b2 c7 03 2c 40 32 1f 39 c0 02 3f 53 b8 fc 62 a6 f7 62 8a 9c 78 8f 40 43 32 93 00 00 .......,@2.9..?S..b..b..x.@C2...
15b40 57 a0 82 17 a8 02 43 b0 82 57 a0 02 4b 80 84 41 90 a9 a6 f9 85 13 f8 88 21 e0 01 0d 00 84 3a 98 W.....C..W..K..A........!.....:.
15b60 82 97 38 02 9d cd 01 0e e8 03 9a 90 00 58 f0 c2 23 90 83 2c e1 09 3f 0c 23 c3 4a 41 c2 61 2a 6b ..8..........X..#..,..?.#.JA.a*k
15b80 22 8f 9f 01 00 ca 28 cd 52 a8 d1 74 d1 44 d0 f9 05 2c 88 80 a2 68 11 5e 03 2a 5c 68 03 45 a8 02 ".....(.R..t.D...,...h.^.*\h.E..
15ba0 31 30 04 61 f8 04 45 78 81 30 d8 04 55 95 02 5e 78 11 c2 93 84 4c 08 83 29 b8 00 56 f0 97 0b f8 10.a..Ex.0..U..^x....L..)..V....
15bc0 80 c3 9a 83 18 c0 bd 4e 98 82 65 72 00 25 08 94 a7 c9 0b 99 81 08 47 1a 1a 3f e9 a7 8b a2 88 3c .......N..er.%........G..?.....<
15be0 68 b5 5e 12 9a e7 93 11 70 ad 05 60 b3 c5 ce 23 81 17 80 fe 84 0a 60 d9 0a 78 03 ec 55 01 11 00 h.^.....p..`...#......`..x..U...
15c00 02 a6 32 00 88 b8 01 5e 18 82 27 68 82 3e b8 81 19 b0 81 5f a8 84 3f 90 00 55 e5 02 11 50 00 5e ..2....^..'h.>....._..?..U...P.^
15c20 20 82 4d a8 8c 46 68 5f 5d ba a4 5a d4 ba 40 9a a0 01 7c 10 48 24 98 1d f5 42 a8 61 14 76 b5 a8 ..M..Fh_]..Z..@...|.H$...B.a.v..
15c40 40 d1 1c 39 a0 a4 14 52 01 43 78 85 a9 a8 82 a9 d8 01 37 f8 08 9f 0d 26 10 88 04 25 90 80 20 60 @..9...R.Cx.......7....&...%...`
15c60 01 22 60 01 05 b8 80 19 18 86 98 60 81 30 c8 e2 0b 98 82 2d 1a d9 23 cd 22 cc 09 38 b7 18 4c 98 ."`........`.0.....-..#."..8..L.
15c80 e3 91 69 0b bb ba 03 33 17 33 8e 59 39 09 6a eb 25 61 a8 02 b0 51 04 43 78 81 10 a0 82 37 50 04 ..i....3.3.Y9.j.%a...Q.Cx....7P.
15ca0 56 90 82 49 20 bc 43 90 93 1b 80 51 4e 30 80 43 48 84 89 f0 17 a7 b0 0d 49 48 84 bc 35 cf a1 c1 V..I..C....QN0.CH.......IH..5...
15cc0 2b 29 d9 11 b7 6b 22 6b ca a6 3e c9 01 4e 08 cd 82 b2 90 10 49 98 57 f4 bf 95 f1 0b 2c 88 22 4c +)...k"k..>..N......I.W.....,."L
15ce0 ab cd 10 6b 81 2a 28 02 43 d0 84 4f 40 82 16 e8 d5 57 fe 00 82 0e 60 80 10 36 00 03 00 81 40 68 ...k.*(.C..O@....W....`..6....@h
15d00 85 9a 18 1a 95 bb 28 3d 78 a6 cc 79 c2 a1 d1 d0 ef d4 ca 83 c3 2f 31 6b 94 cc 01 db 2c e2 48 0a ......(=x..y........./1k....,.H.
15d20 39 2c 8c ba ad 1b 46 83 14 a0 b4 e9 70 3f 34 50 01 2a e8 85 33 f8 84 35 28 d4 d4 40 02 61 48 03 9,....F.....p?4P.*..3..5(..@.aH.
15d40 31 10 82 02 18 e6 29 30 00 29 78 00 14 d8 24 a0 88 08 bd d2 a7 de a9 95 0d a0 8c 40 79 0b 44 60 1.....)0.)x...$............@y.D`
15d60 2a c3 1a 9f 7f d9 32 3d 90 0e 11 d3 2b c5 b0 bc 01 3e ac e6 fb 4d bd f4 43 61 59 2c 43 f8 84 44 *.....2=....+....>...M..CaY,C..D
15d80 16 06 45 38 03 5c ce 5e 4d 88 1f 13 98 03 4c 78 03 09 38 02 06 60 80 47 30 18 11 ca 3f a0 64 b6 ..E8.\.^M.....Lx..8..`.G0...?.d.
15da0 93 a3 88 e7 7b a0 b6 76 0b a0 d1 3f cb ab 1c 31 bc 48 39 6d a0 9c 21 0f 47 7b 53 19 01 9d 1c 38 ....{..v...?...1.H9m..!.G{S....8
15dc0 84 05 aa 13 4d 70 05 5c 10 86 35 38 03 15 e8 05 2a 80 84 57 78 03 0e e0 81 41 50 82 1a 30 81 60 ....Mp.\..58....*..Wx....AP..0.`
15de0 28 9a 63 11 1d 0f c4 27 be 7c 11 6e 86 ad 91 43 0f fe 9b 96 c8 e9 60 a4 44 20 e8 d6 bc 1c 9d c9 (.c....'.|.n...C......`.D.......
15e00 a6 d0 d8 3a a7 c9 2d 11 02 8c 3e f2 89 9e 41 8a af 31 84 77 36 82 16 f0 81 4f f0 dc 43 36 84 2c ...:..-...>...A..1.w6....O..C6.,
15e20 9d a3 20 40 05 0e 6a 2c 47 e2 a9 bf 78 29 e2 5d 44 60 f2 ab 47 f2 8b 1b 30 8e fd 02 b8 0f ed 89 ...@..j,G...x).]D`..G...0.......
15e40 c1 c1 2d 81 ca 22 c6 3d 22 3f da 17 a2 f6 a7 2b a3 82 31 e8 85 2a c0 85 5e 48 12 57 38 03 f6 51 ..-..".="?.....+..1..*..^H.W8..Q
15e60 04 48 10 83 07 38 81 4b 98 93 5f 18 05 39 e0 03 47 50 6d 38 e9 25 fc 3a 2d fd 4e 98 a4 a1 0f 28 .H...8.K.._..9..GPm8.%.:-.N....(
15e80 fb 32 55 1d 15 85 52 9c 94 e0 a9 c6 e8 09 dd 2c a2 2f 43 80 3e 0a ce 33 d3 3f 3d c0 02 ae 39 ac .2U...R........,./C.>..3.?=...9.
15ea0 16 68 81 36 a8 02 45 48 e9 16 40 02 97 9d 2e 1f 00 82 15 55 99 0e a2 84 61 e0 84 0e a2 ed 75 39 .h.6..EH..@........U....a.....u9
15ec0 84 59 06 a0 30 0a 41 e4 10 0f bf d0 bc bd 74 ca df fb 45 3d 61 b6 1f 75 2d 29 29 65 b9 66 e0 08 .Y..0.A.......t...E=a..u-))e.f..
15ee0 10 c6 5c 06 02 23 a8 82 12 55 01 4b 18 e9 5e 30 fe 92 1d fb 82 da 1c 06 50 70 00 20 18 0f 05 40 ..\..#...U.K..^0........Pp.....@
15f00 2d 6b 9e 9c a8 ec 53 a6 09 39 2e 1b 8c fe be e9 5a 09 8c bf f0 03 df 1a 8f 29 03 1a fa 68 93 b6 -k....S..9......Z........)...h..
15f20 16 a8 b2 9b 8e d1 5b 93 2e 53 01 4d a8 02 2a f0 01 23 a0 82 5d a6 82 57 80 04 24 a8 82 17 60 85 ......[..S.M..*..#..]..W..$...`.
15f40 48 30 24 41 00 85 14 d0 9a a7 49 04 01 d5 3f 8a 60 8a 8d bc ab 75 e9 29 e2 53 14 a0 10 8d 0f 0d H0$A......I...?.`....u.).S......
15f60 a3 e0 8c 20 2e 3b 0e ca 08 0a 5e e3 c8 c6 88 84 c6 52 00 a6 ca 9b bd c8 81 57 68 01 15 a8 00 45 .....;....^......R.......Wh....E
15f80 50 0d 43 88 ac 0c 3e 9d 8e 92 83 2f 80 90 4d a0 04 3f c8 15 e8 d9 0e 8f e4 b7 cc 79 65 46 42 60 P.C...>..../..M..?.........yeFB`
15fa0 7c f1 92 4d 07 81 84 52 0c 20 de 25 18 fc 29 d2 de 24 9d fa 85 20 e9 09 e1 fa 97 13 8b 91 f8 38 |..M...R...%..)..$.............8
15fc0 91 46 30 04 1c 10 86 57 80 62 48 48 00 5c fe 04 2a c0 98 36 30 84 21 18 85 36 48 99 21 70 81 e1 .F0....W.bHH.\..*..60.!..6H.!p..
15fe0 22 81 55 40 18 1c 7d 3c 14 54 f4 c3 b8 c8 4a fe 80 4a 62 3b 09 d0 60 c7 36 e1 74 76 23 49 a5 14 ".U@..}<.T....J..Jb;..`.6.tv#I..
16000 43 7f 09 a3 f5 1c 9d 46 58 09 0a 83 83 c8 42 ef a9 38 83 17 30 84 f5 a6 85 6f ef 85 36 68 05 04 C......FX.....B..8..0....o..6h..
16020 69 00 4a 88 80 4f cf 81 2f 60 77 1e f6 c0 01 bc 1b e8 2b 0f 9e 40 ac 64 bc 01 07 2e f6 5f 10 0f i.J..O../`w.......+..@.d....._..
16040 b8 eb 9a 84 69 ca 0b 99 95 c1 d4 3f 9b 69 8a 75 8b a8 9c 28 0a c5 12 0d 94 6d 83 38 3f 12 57 58 ....i......?.i.u...(.....m.8?.WX
16060 03 5c 78 81 5e 00 85 57 78 05 56 4f 82 4c 58 82 08 70 01 52 6d 91 c6 e0 3c 5e 5a 17 bf 0a 1c 5a .\x.^..Wx.VO.LX..p.Rm...<^Z....Z
16080 19 82 74 11 8d 51 88 82 0e 40 01 20 48 04 1c d0 01 10 d9 8b 5e e9 99 c0 08 31 d8 7a 8a 8d 32 6a ..t..Q...@..H.......^....1.z..2j
160a0 eb bd a4 01 ff 82 24 78 09 f6 18 16 34 a0 02 2a 60 82 c5 46 64 24 70 85 0c 56 5b a9 40 e4 15 60 ......$x....4..*`..Fd$p..V[.@..`
160c0 8c 5a ff 88 c9 31 6a 7f c2 a3 1f e5 45 eb 51 11 2c 40 81 07 80 82 4e 40 81 30 10 02 4c 90 00 31 .Z...1j.....E.Q.,@....N@.0..L..1
160e0 b8 81 c9 e2 83 52 c0 02 4a 70 81 a3 46 83 fe b6 10 31 5f d1 8b ab 15 36 15 89 04 53 91 a8 9e c0 .....R..Jp..F....1_....6...S....
16100 a4 c0 40 84 c2 3e e4 5c 7d 85 5e c8 d5 17 98 62 61 b0 aa 0c 87 fd 05 40 c3 30 99 4a 53 19 0f 48 ..@..>.\}.^....ba......@.0.JS..H
16120 fa 85 44 88 02 2c b8 05 1d 58 01 36 c0 82 36 c8 6d 11 48 02 3c 58 85 12 08 83 20 00 02 17 50 82 ..D..,...X.6..6.m.H.<X........P.
16140 55 78 80 0e 70 97 53 58 dd d4 12 98 36 a9 a8 5d 31 10 0d 3d 8c 2e 05 8a 25 c2 90 48 78 9c 43 c0 Ux..p.SX....6..]1..=....%..Hx.C.
16160 01 b0 e1 6d 45 00 85 16 50 04 26 80 84 16 a8 00 48 a0 ea db d6 04 61 a0 85 31 d0 01 1d 70 04 1d ...mE...P.&.....H.....a..1...p..
16180 c0 85 37 00 88 15 11 78 51 fa 35 c4 81 a3 31 86 a8 50 d1 04 e6 cd 04 61 3a 24 1c c0 32 84 03 87 ..7....xQ.5...1..P.....a:$..2...
161a0 28 ad 3a 00 63 e5 a2 51 0f 25 ac 86 34 fa 82 85 d2 a1 8f 24 d0 50 22 51 e8 e5 af 0d 92 7e fd 42 (.:.c..Q.%..4......$.P"Q.....~.B
161c0 93 83 04 4d 12 38 49 dc b8 59 6a c8 af 5a 34 85 bd 52 21 8c ca 99 85 c2 5e b4 38 d3 ab 57 1b 5a ...M.8I..Yj..Z4..R!.....^.8..W.Z
161e0 2a da f8 a8 d2 a6 4a aa 4f 90 54 7c 0a fe c5 15 cc 92 51 71 5a a8 50 61 c8 90 a5 33 2d 84 b5 08 *.....J.O.T|......QqZ.Pa...3-...
16200 82 a5 02 1a 8d ac 2a de 00 63 37 09 25 3f 49 e4 44 a9 c5 eb 81 1f 34 91 28 a1 71 89 a6 10 9a 5f ......*..c7.%?I.D.....4.(.q...._
16220 85 e4 34 d2 99 63 08 09 c2 39 6a 21 20 a1 e0 c6 0d 05 8d 6a 51 ba 81 a6 85 9a 36 2d 2a 20 79 f5 ..4..c...9j!.......jQ.....6-*.y.
16240 09 09 15 43 40 14 9d 79 a3 02 92 22 a2 b4 18 ae a5 d5 02 89 95 16 0c 15 19 c1 d1 42 13 ae 16 bd ...C@..y..."...............B....
16260 70 55 79 d1 66 d5 97 13 91 dc 74 92 22 6a c8 10 14 14 de c0 92 84 25 8a 10 43 7c 2b fc ca 81 46 pUy.f.....t."j........%..C|+...F
16280 a8 cd 21 a5 1a fd c2 09 59 67 a9 ee 2e e4 7c 91 23 87 52 ad 28 94 1a c9 11 02 5f 58 95 2a 15 5e ..!.....Yg....|.#.R.(....._X.*.^
162a0 18 aa 50 f4 13 15 bd 18 52 05 59 55 04 f8 82 53 90 08 23 8c 2b 48 28 62 d5 2b 8a e0 62 d6 27 6f ..P.....R.YU...S..#.+H(b.+..b.'o
162c0 28 42 85 30 a1 40 e5 4a 2b 94 80 91 84 0c 69 44 e1 c7 10 0a e8 f0 45 14 72 24 22 47 2b 3b 64 80 (B.0.@.J+.....iD......E.r$"G+;d.
162e0 c8 2f 8d 48 d2 12 09 43 f0 21 c7 10 8c 8f 71 92 43 21 31 7a 96 03 02 42 1c d2 48 2b 51 34 c2 47 ./.H...C.!....q.C!1z...B..H+Q4.G
16300 23 16 35 42 49 14 39 48 62 48 1c 6f d0 82 c3 27 86 30 81 4b 28 48 a8 61 88 30 0a ad f1 49 0b 55 #.5BI.9HbH.o...'.0.K(H.a.0...I.U
16320 bc f1 42 2f b4 d8 a6 42 15 60 d0 62 08 9a 2a 20 11 ca 19 2a d0 e2 0a 98 ae e0 f0 42 09 b0 c8 a1 ..B/...B.`.b..*....*.......B....
16340 83 03 94 20 30 84 0b 49 28 d0 0a 16 4b 48 42 ca 0a aa 44 41 53 2d 68 48 d2 08 50 68 24 56 0b 4e ....0..I(...KHB...DAS-hH..Ph$V.N
16360 39 50 32 1e 09 08 c8 21 49 2d 11 f0 c1 29 25 43 2c c1 12 1a 5f 0c 81 45 40 00 3b 00 00 00 00 00 9P2....!I-...)%C,..._..E@.;.....
16380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
163a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
163c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
163e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16400 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 74 69 6e 79 2f 63 67 69 2d 62 69 6e 2f 00 00 proxylab-handout/tiny/cgi-bin/..
16420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16460 00 00 00 00 30 30 30 30 37 35 35 00 30 30 30 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000755.0006626.0000144.0000
16480 30 30 30 30 30 30 30 00 31 33 35 36 33 33 31 30 34 35 37 00 30 31 34 36 36 35 00 20 35 00 00 00 0000000.13563310457.014665..5...
164a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
164c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
164e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16500 00 75 73 74 61 72 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
16520 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
16540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
165a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
165c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
165e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16600 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 74 69 6e 79 2f 63 67 69 2d 62 69 6e 2f 61 64 proxylab-handout/tiny/cgi-bin/ad
16620 64 65 72 2e 63 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 der.c...........................
16640 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16660 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000644.0006626.0000144.0000
16680 30 30 30 31 37 35 31 00 31 32 34 32 36 35 30 33 37 30 33 00 30 31 36 31 30 37 00 20 30 00 00 00 0001751.12426503703.016107..0...
166a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
166c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
166e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16700 00 75 73 74 61 72 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
16720 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
16740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
167a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
167c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
167e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16800 2f 2a 0a 20 2a 20 61 64 64 65 72 2e 63 20 2d 20 61 20 6d 69 6e 69 6d 61 6c 20 43 47 49 20 70 72 /*..*.adder.c.-.a.minimal.CGI.pr
16820 6f 67 72 61 6d 20 74 68 61 74 20 61 64 64 73 20 74 77 6f 20 6e 75 6d 62 65 72 73 20 74 6f 67 65 ogram.that.adds.two.numbers.toge
16840 74 68 65 72 0a 20 2a 2f 0a 2f 2a 20 24 62 65 67 69 6e 20 61 64 64 65 72 20 2a 2f 0a 23 69 6e 63 ther..*/./*.$begin.adder.*/.#inc
16860 6c 75 64 65 20 22 63 73 61 70 70 2e 68 22 0a 0a 69 6e 74 20 6d 61 69 6e 28 76 6f 69 64 29 20 7b lude."csapp.h"..int.main(void).{
16880 0a 20 20 20 20 63 68 61 72 20 2a 62 75 66 2c 20 2a 70 3b 0a 20 20 20 20 63 68 61 72 20 61 72 67 .....char.*buf,.*p;.....char.arg
168a0 31 5b 4d 41 58 4c 49 4e 45 5d 2c 20 61 72 67 32 5b 4d 41 58 4c 49 4e 45 5d 2c 20 63 6f 6e 74 65 1[MAXLINE],.arg2[MAXLINE],.conte
168c0 6e 74 5b 4d 41 58 4c 49 4e 45 5d 3b 0a 20 20 20 20 69 6e 74 20 6e 31 3d 30 2c 20 6e 32 3d 30 3b nt[MAXLINE];.....int.n1=0,.n2=0;
168e0 0a 0a 20 20 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 74 77 6f 20 61 72 67 75 6d 65 6e ....../*.Extract.the.two.argumen
16900 74 73 20 2a 2f 0a 20 20 20 20 69 66 20 28 28 62 75 66 20 3d 20 67 65 74 65 6e 76 28 22 51 55 45 ts.*/.....if.((buf.=.getenv("QUE
16920 52 59 5f 53 54 52 49 4e 47 22 29 29 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 70 20 3d 20 73 74 72 RY_STRING")).!=.NULL).{..p.=.str
16940 63 68 72 28 62 75 66 2c 20 27 26 27 29 3b 0a 09 2a 70 20 3d 20 27 5c 30 27 3b 0a 09 73 74 72 63 chr(buf,.'&');..*p.=.'\0';..strc
16960 70 79 28 61 72 67 31 2c 20 62 75 66 29 3b 0a 09 73 74 72 63 70 79 28 61 72 67 32 2c 20 70 2b 31 py(arg1,.buf);..strcpy(arg2,.p+1
16980 29 3b 0a 09 6e 31 20 3d 20 61 74 6f 69 28 61 72 67 31 29 3b 0a 09 6e 32 20 3d 20 61 74 6f 69 28 );..n1.=.atoi(arg1);..n2.=.atoi(
169a0 61 72 67 32 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 74 68 65 20 72 65 arg2);.....}....../*.Make.the.re
169c0 73 70 6f 6e 73 65 20 62 6f 64 79 20 2a 2f 0a 20 20 20 20 73 70 72 69 6e 74 66 28 63 6f 6e 74 65 sponse.body.*/.....sprintf(conte
169e0 6e 74 2c 20 22 57 65 6c 63 6f 6d 65 20 74 6f 20 61 64 64 2e 63 6f 6d 3a 20 22 29 3b 0a 20 20 20 nt,."Welcome.to.add.com:.");....
16a00 20 73 70 72 69 6e 74 66 28 63 6f 6e 74 65 6e 74 2c 20 22 25 73 54 48 45 20 49 6e 74 65 72 6e 65 .sprintf(content,."%sTHE.Interne
16a20 74 20 61 64 64 69 74 69 6f 6e 20 70 6f 72 74 61 6c 2e 5c 72 5c 6e 3c 70 3e 22 2c 20 63 6f 6e 74 t.addition.portal.\r\n<p>",.cont
16a40 65 6e 74 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 63 6f 6e 74 65 6e 74 2c 20 22 25 73 54 68 ent);.....sprintf(content,."%sTh
16a60 65 20 61 6e 73 77 65 72 20 69 73 3a 20 25 64 20 2b 20 25 64 20 3d 20 25 64 5c 72 5c 6e 3c 70 3e e.answer.is:.%d.+.%d.=.%d\r\n<p>
16a80 22 2c 20 0a 09 20 20 20 20 63 6f 6e 74 65 6e 74 2c 20 6e 31 2c 20 6e 32 2c 20 6e 31 20 2b 20 6e ",.......content,.n1,.n2,.n1.+.n
16aa0 32 29 3b 0a 20 20 20 20 73 70 72 69 6e 74 66 28 63 6f 6e 74 65 6e 74 2c 20 22 25 73 54 68 61 6e 2);.....sprintf(content,."%sThan
16ac0 6b 73 20 66 6f 72 20 76 69 73 69 74 69 6e 67 21 5c 72 5c 6e 22 2c 20 63 6f 6e 74 65 6e 74 29 3b ks.for.visiting!\r\n",.content);
16ae0 0a 20 20 0a 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 74 68 65 20 48 54 54 50 20 72 65 73 ......../*.Generate.the.HTTP.res
16b00 70 6f 6e 73 65 20 2a 2f 0a 20 20 20 20 70 72 69 6e 74 66 28 22 43 6f 6e 6e 65 63 74 69 6f 6e 3a ponse.*/.....printf("Connection:
16b20 20 63 6c 6f 73 65 5c 72 5c 6e 22 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 43 6f 6e 74 65 6e .close\r\n");.....printf("Conten
16b40 74 2d 6c 65 6e 67 74 68 3a 20 25 64 5c 72 5c 6e 22 2c 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 63 t-length:.%d\r\n",.(int)strlen(c
16b60 6f 6e 74 65 6e 74 29 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 43 6f 6e 74 65 6e 74 2d 74 79 ontent));.....printf("Content-ty
16b80 70 65 3a 20 74 65 78 74 2f 68 74 6d 6c 5c 72 5c 6e 5c 72 5c 6e 22 29 3b 0a 20 20 20 20 70 72 69 pe:.text/html\r\n\r\n");.....pri
16ba0 6e 74 66 28 22 25 73 22 2c 20 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 20 20 66 66 6c 75 73 68 28 73 ntf("%s",.content);.....fflush(s
16bc0 74 64 6f 75 74 29 3b 0a 0a 20 20 20 20 65 78 69 74 28 30 29 3b 0a 7d 0a 2f 2a 20 24 65 6e 64 20 tdout);......exit(0);.}./*.$end.
16be0 61 64 64 65 72 20 2a 2f 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 adder.*/........................
16c00 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 74 69 6e 79 2f 63 67 69 2d 62 69 6e 2f 4d 61 proxylab-handout/tiny/cgi-bin/Ma
16c20 6b 65 66 69 6c 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 kefile..........................
16c40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16c60 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000644.0006626.0000144.0000
16c80 30 30 30 30 31 37 30 00 30 37 34 37 37 30 33 36 34 34 36 00 30 31 36 33 33 35 00 20 30 00 00 00 0000170.07477036446.016335..0...
16ca0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16cc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16ce0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16d00 00 75 73 74 61 72 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
16d20 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
16d40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16d60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16d80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16da0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16dc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16de0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16e00 43 43 20 3d 20 67 63 63 0a 43 46 4c 41 47 53 20 3d 20 2d 4f 32 20 2d 57 61 6c 6c 20 2d 49 20 2e CC.=.gcc.CFLAGS.=.-O2.-Wall.-I..
16e20 2e 0a 0a 61 6c 6c 3a 20 61 64 64 65 72 0a 0a 61 64 64 65 72 3a 20 61 64 64 65 72 2e 63 0a 09 24 ...all:.adder..adder:.adder.c..$
16e40 28 43 43 29 20 24 28 43 46 4c 41 47 53 29 20 2d 6f 20 61 64 64 65 72 20 61 64 64 65 72 2e 63 0a (CC).$(CFLAGS).-o.adder.adder.c.
16e60 0a 63 6c 65 61 6e 3a 0a 09 72 6d 20 2d 66 20 61 64 64 65 72 20 2a 7e 0a 00 00 00 00 00 00 00 00 .clean:..rm.-f.adder.*~.........
16e80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16ea0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16ec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16ee0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16f00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16f20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16f40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16f60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16f80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16fa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16fc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
16fe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17000 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 74 69 6e 79 2f 52 45 41 44 4d 45 00 00 00 00 proxylab-handout/tiny/README....
17020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17060 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000644.0006626.0000144.0000
17080 30 30 30 32 34 31 31 00 30 37 34 37 37 30 33 36 37 30 31 00 30 31 34 32 33 37 00 20 30 00 00 00 0002411.07477036701.014237..0...
170a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
170c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
170e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17100 00 75 73 74 61 72 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
17120 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
17140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
171a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
171c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
171e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17200 54 69 6e 79 20 57 65 62 20 73 65 72 76 65 72 0a 44 61 76 65 20 4f 27 48 61 6c 6c 61 72 6f 6e 0a Tiny.Web.server.Dave.O'Hallaron.
17220 43 61 72 6e 65 67 69 65 20 4d 65 6c 6c 6f 6e 20 55 6e 69 76 65 72 73 69 74 79 0a 0a 54 68 69 73 Carnegie.Mellon.University..This
17240 20 69 73 20 74 68 65 20 68 6f 6d 65 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20 54 .is.the.home.directory.for.the.T
17260 69 6e 79 20 73 65 72 76 65 72 2c 20 61 20 32 30 30 2d 6c 69 6e 65 20 57 65 62 0a 73 65 72 76 65 iny.server,.a.200-line.Web.serve
17280 72 20 74 68 61 74 20 77 65 20 75 73 65 20 69 6e 20 22 31 35 2d 32 31 33 3a 20 49 6e 74 72 6f 20 r.that.we.use.in."15-213:.Intro.
172a0 74 6f 20 43 6f 6d 70 75 74 65 72 20 53 79 73 74 65 6d 73 22 20 61 74 20 43 61 72 6e 65 67 69 65 to.Computer.Systems".at.Carnegie
172c0 0a 4d 65 6c 6c 6f 6e 20 55 6e 69 76 65 72 73 69 74 79 2e 20 20 54 69 6e 79 20 75 73 65 73 20 74 .Mellon.University...Tiny.uses.t
172e0 68 65 20 47 45 54 20 6d 65 74 68 6f 64 20 74 6f 20 73 65 72 76 65 20 73 74 61 74 69 63 20 63 6f he.GET.method.to.serve.static.co
17300 6e 74 65 6e 74 0a 28 74 65 78 74 2c 20 48 54 4d 4c 2c 20 47 49 46 2c 20 61 6e 64 20 4a 50 47 20 ntent.(text,.HTML,.GIF,.and.JPG.
17320 66 69 6c 65 73 29 20 6f 75 74 20 6f 66 20 2e 2f 20 61 6e 64 20 74 6f 20 73 65 72 76 65 20 64 79 files).out.of../.and.to.serve.dy
17340 6e 61 6d 69 63 0a 63 6f 6e 74 65 6e 74 20 62 79 20 72 75 6e 6e 69 6e 67 20 43 47 49 20 70 72 6f namic.content.by.running.CGI.pro
17360 67 72 61 6d 73 20 6f 75 74 20 6f 66 20 2e 2f 63 67 69 2d 62 69 6e 2e 20 54 68 65 20 64 65 66 61 grams.out.of../cgi-bin..The.defa
17380 75 6c 74 20 0a 70 61 67 65 20 69 73 20 68 6f 6d 65 2e 68 74 6d 6c 20 28 72 61 74 68 65 72 20 74 ult..page.is.home.html.(rather.t
173a0 68 61 6e 20 69 6e 64 65 78 2e 68 74 6d 6c 29 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 76 han.index.html).so.that.we.can.v
173c0 69 65 77 0a 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64 69 72 65 63 74 6f 72 iew.the.contents.of.the.director
173e0 79 20 66 72 6f 6d 20 61 20 62 72 6f 77 73 65 72 2e 0a 0a 54 69 6e 79 20 69 73 20 6e 65 69 74 68 y.from.a.browser...Tiny.is.neith
17400 65 72 20 73 65 63 75 72 65 20 6e 6f 72 20 63 6f 6d 70 6c 65 74 65 2c 20 62 75 74 20 69 74 20 67 er.secure.nor.complete,.but.it.g
17420 69 76 65 73 20 73 74 75 64 65 6e 74 73 20 61 6e 0a 69 64 65 61 20 6f 66 20 68 6f 77 20 61 20 72 ives.students.an.idea.of.how.a.r
17440 65 61 6c 20 57 65 62 20 73 65 72 76 65 72 20 77 6f 72 6b 73 2e 20 55 73 65 20 66 6f 72 20 69 6e eal.Web.server.works..Use.for.in
17460 73 74 72 75 63 74 69 6f 6e 61 6c 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 0a 0a 54 68 65 20 structional.purposes.only...The.
17480 63 6f 64 65 20 63 6f 6d 70 69 6c 65 73 20 61 6e 64 20 72 75 6e 73 20 63 6c 65 61 6e 6c 79 20 75 code.compiles.and.runs.cleanly.u
174a0 73 69 6e 67 20 67 63 63 20 32 2e 39 35 2e 33 20 0a 6f 6e 20 61 20 4c 69 6e 75 78 20 32 2e 32 2e sing.gcc.2.95.3..on.a.Linux.2.2.
174c0 32 30 20 6b 65 72 6e 65 6c 2e 0a 0a 54 6f 20 69 6e 73 74 61 6c 6c 20 54 69 6e 79 3a 0a 20 20 20 20.kernel...To.install.Tiny:....
174e0 54 79 70 65 20 22 74 61 72 20 78 76 66 20 74 69 6e 79 2e 74 61 72 22 20 69 6e 20 61 20 63 6c 65 Type."tar.xvf.tiny.tar".in.a.cle
17500 61 6e 20 64 69 72 65 63 74 6f 72 79 2e 20 0a 0a 54 6f 20 72 75 6e 20 54 69 6e 79 3a 0a 20 20 20 an.directory....To.run.Tiny:....
17520 52 75 6e 20 22 74 69 6e 79 20 3c 70 6f 72 74 3e 22 20 6f 6e 20 74 68 65 20 73 65 72 76 65 72 20 Run."tiny.<port>".on.the.server.
17540 6d 61 63 68 69 6e 65 2c 20 0a 09 65 2e 67 2e 2c 20 22 74 69 6e 79 20 38 30 30 30 22 2e 0a 20 20 machine,...e.g.,."tiny.8000"....
17560 20 50 6f 69 6e 74 20 79 6f 75 72 20 62 72 6f 77 73 65 72 20 61 74 20 54 69 6e 79 3a 20 0a 09 73 .Point.your.browser.at.Tiny:...s
17580 74 61 74 69 63 20 63 6f 6e 74 65 6e 74 3a 20 68 74 74 70 3a 2f 2f 3c 68 6f 73 74 3e 3a 38 30 30 tatic.content:.http://<host>:800
175a0 30 0a 09 64 79 6e 61 6d 69 63 20 63 6f 6e 74 65 6e 74 3a 20 68 74 74 70 3a 2f 2f 3c 68 6f 73 74 0..dynamic.content:.http://<host
175c0 3e 3a 38 30 30 30 2f 63 67 69 2d 62 69 6e 2f 61 64 64 65 72 3f 31 26 32 0a 0a 46 69 6c 65 73 3a >:8000/cgi-bin/adder?1&2..Files:
175e0 0a 20 20 74 69 6e 79 2e 74 61 72 09 09 41 72 63 68 69 76 65 20 6f 66 20 65 76 65 72 79 74 68 69 ...tiny.tar..Archive.of.everythi
17600 6e 67 20 69 6e 20 74 68 69 73 20 64 69 72 65 63 74 6f 72 79 0a 20 20 74 69 6e 79 2e 63 09 09 54 ng.in.this.directory...tiny.c..T
17620 68 65 20 54 69 6e 79 20 73 65 72 76 65 72 0a 20 20 4d 61 6b 65 66 69 6c 65 09 09 4d 61 6b 65 66 he.Tiny.server...Makefile..Makef
17640 69 6c 65 20 66 6f 72 20 74 69 6e 79 2e 63 0a 20 20 68 6f 6d 65 2e 68 74 6d 6c 09 09 54 65 73 74 ile.for.tiny.c...home.html..Test
17660 20 48 54 4d 4c 20 70 61 67 65 0a 20 20 67 6f 64 7a 69 6c 6c 61 2e 67 69 66 09 09 49 6d 61 67 65 .HTML.page...godzilla.gif..Image
17680 20 65 6d 62 65 64 64 65 64 20 69 6e 20 68 6f 6d 65 2e 68 74 6d 6c 0a 20 20 52 45 41 44 4d 45 09 .embedded.in.home.html...README.
176a0 09 54 68 69 73 20 66 69 6c 65 09 0a 20 20 63 67 69 2d 62 69 6e 2f 61 64 64 65 72 2e 63 09 43 47 .This.file....cgi-bin/adder.c.CG
176c0 49 20 70 72 6f 67 72 61 6d 20 74 68 61 74 20 61 64 64 73 20 74 77 6f 20 6e 75 6d 62 65 72 73 0a I.program.that.adds.two.numbers.
176e0 20 20 63 67 69 2d 62 69 6e 2f 4d 61 6b 65 66 69 6c 65 09 4d 61 6b 65 66 69 6c 65 20 66 6f 72 20 ..cgi-bin/Makefile.Makefile.for.
17700 61 64 64 65 72 2e 63 0a 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 adder.c.........................
17720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
177a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
177c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
177e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17800 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 74 69 6e 79 2f 4d 61 6b 65 66 69 6c 65 00 00 proxylab-handout/tiny/Makefile..
17820 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17860 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000644.0006626.0000144.0000
17880 30 30 30 30 35 37 32 00 31 32 33 37 33 32 34 36 34 36 31 00 30 31 35 30 32 32 00 20 30 00 00 00 0000572.12373246461.015022..0...
178a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
178c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
178e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17900 00 75 73 74 61 72 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
17920 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
17940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
179a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
179c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
179e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17a00 43 43 20 3d 20 67 63 63 0a 43 46 4c 41 47 53 20 3d 20 2d 4f 32 20 2d 57 61 6c 6c 20 2d 49 20 2e CC.=.gcc.CFLAGS.=.-O2.-Wall.-I..
17a20 0a 0a 23 20 54 68 69 73 20 66 6c 61 67 20 69 6e 63 6c 75 64 65 73 20 74 68 65 20 50 74 68 72 65 ..#.This.flag.includes.the.Pthre
17a40 61 64 73 20 6c 69 62 72 61 72 79 20 6f 6e 20 61 20 4c 69 6e 75 78 20 62 6f 78 2e 0a 23 20 4f 74 ads.library.on.a.Linux.box..#.Ot
17a60 68 65 72 73 20 73 79 73 74 65 6d 73 20 77 69 6c 6c 20 70 72 6f 62 61 62 6c 79 20 72 65 71 75 69 hers.systems.will.probably.requi
17a80 72 65 20 73 6f 6d 65 74 68 69 6e 67 20 64 69 66 66 65 72 65 6e 74 2e 0a 4c 49 42 20 3d 20 2d 6c re.something.different..LIB.=.-l
17aa0 70 74 68 72 65 61 64 0a 0a 61 6c 6c 3a 20 74 69 6e 79 20 63 67 69 0a 0a 74 69 6e 79 3a 20 74 69 pthread..all:.tiny.cgi..tiny:.ti
17ac0 6e 79 2e 63 20 63 73 61 70 70 2e 6f 0a 09 24 28 43 43 29 20 24 28 43 46 4c 41 47 53 29 20 2d 6f ny.c.csapp.o..$(CC).$(CFLAGS).-o
17ae0 20 74 69 6e 79 20 74 69 6e 79 2e 63 20 63 73 61 70 70 2e 6f 20 24 28 4c 49 42 29 0a 0a 63 73 61 .tiny.tiny.c.csapp.o.$(LIB)..csa
17b00 70 70 2e 6f 3a 20 63 73 61 70 70 2e 63 0a 09 24 28 43 43 29 20 24 28 43 46 4c 41 47 53 29 20 2d pp.o:.csapp.c..$(CC).$(CFLAGS).-
17b20 63 20 63 73 61 70 70 2e 63 0a 0a 63 67 69 3a 0a 09 28 63 64 20 63 67 69 2d 62 69 6e 3b 20 6d 61 c.csapp.c..cgi:..(cd.cgi-bin;.ma
17b40 6b 65 29 0a 0a 63 6c 65 61 6e 3a 0a 09 72 6d 20 2d 66 20 2a 2e 6f 20 74 69 6e 79 20 2a 7e 0a 09 ke)..clean:..rm.-f.*.o.tiny.*~..
17b60 28 63 64 20 63 67 69 2d 62 69 6e 3b 20 6d 61 6b 65 20 63 6c 65 61 6e 29 0a 0a 00 00 00 00 00 00 (cd.cgi-bin;.make.clean)........
17b80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17ba0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17bc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17be0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17c00 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 74 69 6e 79 2f 67 6f 64 7a 69 6c 6c 61 2e 6a proxylab-handout/tiny/godzilla.j
17c20 70 67 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 pg..............................
17c40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17c60 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000644.0006626.0000144.0000
17c80 30 30 32 35 31 35 32 00 30 37 35 31 30 33 36 33 31 31 31 00 30 31 35 36 35 37 00 20 30 00 00 00 0025152.07510363111.015657..0...
17ca0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17cc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17ce0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17d00 00 75 73 74 61 72 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
17d20 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
17d40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17d60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17d80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17da0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17dc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17de0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
17e00 ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00 00 ff fe 00 59 43 52 45 41 54 4f 52 3a ......JFIF.............YCREATOR:
17e20 20 58 56 20 56 65 72 73 69 6f 6e 20 33 2e 31 30 61 20 20 52 65 76 3a 20 31 32 2f 32 39 2f 39 34 .XV.Version.3.10a..Rev:.12/29/94
17e40 20 28 50 4e 47 20 70 61 74 63 68 20 31 2e 32 29 20 20 51 75 61 6c 69 74 79 20 3d 20 39 35 2c 20 .(PNG.patch.1.2)..Quality.=.95,.
17e60 53 6d 6f 6f 74 68 69 6e 67 20 3d 20 33 30 0a ff db 00 43 00 02 01 01 01 01 01 02 01 01 01 02 02 Smoothing.=.30....C.............
17e80 02 02 02 04 03 02 02 02 02 05 04 04 03 04 06 05 06 06 06 05 06 06 06 07 09 08 06 07 09 07 06 06 ................................
17ea0 08 0b 08 09 0a 0a 0a 0a 0a 06 08 0b 0c 0b 0a 0c 09 0a 0a 0a ff db 00 43 01 02 02 02 02 02 02 05 .......................C........
17ec0 03 03 05 0a 07 06 07 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ................................
17ee0 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a ff c0 00 11 08 00 7d ...............................}
17f00 00 64 03 01 22 00 02 11 01 03 11 01 ff c4 00 1f 00 00 01 05 01 01 01 01 01 01 00 00 00 00 00 00 .d.."...........................
17f20 00 00 01 02 03 04 05 06 07 08 09 0a 0b ff c4 00 b5 10 00 02 01 03 03 02 04 03 05 05 04 04 00 00 ................................
17f40 01 7d 01 02 03 00 04 11 05 12 21 31 41 06 13 51 61 07 22 71 14 32 81 91 a1 08 23 42 b1 c1 15 52 .}........!1A..Qa."q.2....#B...R
17f60 d1 f0 24 33 62 72 82 09 0a 16 17 18 19 1a 25 26 27 28 29 2a 34 35 36 37 38 39 3a 43 44 45 46 47 ..$3br........%&'()*456789:CDEFG
17f80 48 49 4a 53 54 55 56 57 58 59 5a 63 64 65 66 67 68 69 6a 73 74 75 76 77 78 79 7a 83 84 85 86 87 HIJSTUVWXYZcdefghijstuvwxyz.....
17fa0 88 89 8a 92 93 94 95 96 97 98 99 9a a2 a3 a4 a5 a6 a7 a8 a9 aa b2 b3 b4 b5 b6 b7 b8 b9 ba c2 c3 ................................
17fc0 c4 c5 c6 c7 c8 c9 ca d2 d3 d4 d5 d6 d7 d8 d9 da e1 e2 e3 e4 e5 e6 e7 e8 e9 ea f1 f2 f3 f4 f5 f6 ................................
17fe0 f7 f8 f9 fa ff c4 00 1f 01 00 03 01 01 01 01 01 01 01 01 01 00 00 00 00 00 00 01 02 03 04 05 06 ................................
18000 07 08 09 0a 0b ff c4 00 b5 11 00 02 01 02 04 04 03 04 07 05 04 04 00 01 02 77 00 01 02 03 11 04 .........................w......
18020 05 21 31 06 12 41 51 07 61 71 13 22 32 81 08 14 42 91 a1 b1 c1 09 23 33 52 f0 15 62 72 d1 0a 16 .!1..AQ.aq."2...B.....#3R..br...
18040 24 34 e1 25 f1 17 18 19 1a 26 27 28 29 2a 35 36 37 38 39 3a 43 44 45 46 47 48 49 4a 53 54 55 56 $4.%.....&'()*56789:CDEFGHIJSTUV
18060 57 58 59 5a 63 64 65 66 67 68 69 6a 73 74 75 76 77 78 79 7a 82 83 84 85 86 87 88 89 8a 92 93 94 WXYZcdefghijstuvwxyz............
18080 95 96 97 98 99 9a a2 a3 a4 a5 a6 a7 a8 a9 aa b2 b3 b4 b5 b6 b7 b8 b9 ba c2 c3 c4 c5 c6 c7 c8 c9 ................................
180a0 ca d2 d3 d4 d5 d6 d7 d8 d9 da e2 e3 e4 e5 e6 e7 e8 e9 ea f2 f3 f4 f5 f6 f7 f8 f9 fa ff da 00 0c ................................
180c0 03 01 00 02 11 03 11 00 3f 00 fa 45 3c 6b e2 a9 6e 34 9b 3d 57 c6 4d 72 a6 d9 af 5a d3 50 b7 6d ........?..E<k..n4.=W.Mr...Z.P.m
180e0 ea cf 20 58 5d 99 77 0e 70 04 6e 33 b0 fd fe d9 d4 d0 f5 cf 18 b6 91 63 24 d2 5c c4 6d 2d 4d ca ...X].w.p.n3...........c$.\.m-M.
18100 4d 65 70 66 84 cb 21 c6 08 27 90 38 27 a2 cb ce 31 c5 73 f6 0c c2 5b 79 2e 75 58 9a 1b 9f f4 a2 Mepf..!..'.8'...1.s...[y.uX.....
18120 75 82 3e 48 91 b2 1d 5f a0 c9 da 44 9c 99 48 21 d4 63 23 63 c2 fa 86 a1 68 f6 d2 be 9b 34 27 cb u.>H..._...D..H!.c#c....h....4'.
18140 69 ee d3 4c b9 47 8d 27 70 5b e6 4d a4 96 75 da 64 4e 88 b8 d8 0e 49 3f b3 c2 9c 3d 9b e5 8a f4 i..L.G.'p[.M..u.dN....I?...=....
18160 d3 bb 7a 6d be bf 26 8f 9d af 28 f3 46 cf de 4e f7 ef b7 ad 96 cd fb cb ef 3a 73 a9 df cb 68 f3 ..zm..&...(.F..N.........:s...h.
18180 5e 5d da 5e 5d 41 64 b0 05 9e e2 58 24 dd 29 56 0e 4f 05 7e f0 3b b3 98 b9 00 e3 15 3d f4 b7 96 ^].^]Ad....X$.)V.O.~.;......=...
181a0 97 52 68 76 fa ba cd 1d 8d b2 5b c5 6f 35 c4 84 6f 91 8f ca 24 71 c9 e9 95 ce 14 0f 33 20 e7 3c .Rhv......[.o5..o...$q......3..<
181c0 77 8b fe 26 78 2b e1 2f 86 ad 3c 57 e3 df 10 d9 c4 b2 db b8 59 6f 60 c6 64 11 c9 2a f1 1a b6 df w..&x+./..<W........Yo`.d..*....
181e0 91 64 58 db 00 93 b4 37 25 45 63 ea 1f 1f 7c 21 73 f0 e9 bc 75 e1 8d 42 4d 46 0d 0b c3 0d a9 0b .dX....7%Ec...|!s...u..BMF......
18200 7f 26 17 2f e7 2e 11 66 2f b6 19 6d c1 7c 18 e3 b8 8e 62 57 7a ed 4c 13 e4 e3 b3 4c bf 2e 5c 95 .&./...f/..m.|....bWz.L....L..\.
18220 1d e4 93 76 5a b7 e8 96 db f9 7c 43 c2 65 98 9c 6c a5 28 45 db 4b bb 68 b6 d3 ce ce dd dd 95 da ...vZ.....|C.e..l.(E.K.h........
18240 dc e5 7f 6b 8f da 77 e3 6f c3 7f 01 ea 2b fb 34 78 c6 df c3 be 27 f0 fe bd 63 a7 cf 16 b9 78 a4 ...k..w.o....+.4x....'...c....x.
18260 5f 42 e3 1e 5d aa ca 3f 7d 1b 99 23 3e 60 25 c6 3e 6c 2b 6e 5f 95 bf 69 df 06 bf 87 7c 5f e1 af _B..]..?}..#>`%.>l+n_..i....|_..
18280 87 de 19 f1 0d e7 89 bc 7b ae ea 62 e7 c4 8a fa b8 9b ed 77 72 34 64 ad b3 2b ca b0 2c 4b 94 0d ........{..b.......wr4d..+..,K..
182a0 21 2a 0c 20 2a e7 20 fb ec de 3c d5 3f 68 b6 b9 f0 0e 99 e0 9d 3b c4 9a 9f c3 4d 2d bc 48 de 21 !*..*.....<.?h.......;....M-.H.!
182c0 d5 35 04 8c 43 2b fd 99 a1 74 fd e1 92 78 d3 cd 91 18 4a a5 7c 98 62 dc 49 38 5f 1c f1 7f 8b f5 .5..C+...t...x....J.|.b.I8_.....
182e0 bf 86 f2 f8 db e2 67 8e 25 b1 d5 2e 74 cd 66 2b 4b 4d 46 7d 11 5d fc d6 89 e5 6b 58 08 89 21 26 ......g.%...t.f+KMF}.]....kX..!&
18300 38 04 31 ba 3a 82 0c d2 ed 5f 90 57 e7 38 cc d2 39 8d 49 d6 5e eb 7b 5e da 25 6d 15 af 76 dd b5 8.1.:...._.W.8..9.I.^.{^.%m..v..
18320 be ab a6 c7 dd 65 d9 66 1f 09 46 3c cb 5b 5d dd 2b 3b 5d 59 6c d2 72 ba 6b 97 45 67 ab b3 3e 7a .....e.f..F<.[].+;]Yl.r.k.Eg..>z
18340 f8 da 9e 23 f8 79 ae 43 e0 af 84 ba b6 b1 7d 6b e2 02 b7 77 fe 1d 6d 55 ee 44 17 12 b0 dd 39 04 ...#.y.C......}k...w..mU.D....9.
18360 28 56 3f ea f2 46 55 09 dc cd bc 62 0f 1e e8 e9 3d 8e 82 be 1a f1 5f 89 a4 b2 31 bb a3 4b 2f 9a (V?..FU....b....=....._...1..K/.
18380 d6 91 19 23 65 5f 23 ee 23 06 dc fb 14 95 76 0b b4 8d d9 1f 54 f8 7f e1 c7 8f bc 09 a1 0d 56 cb ...#e_#.#.....v.....T.........V.
183a0 44 d3 e2 f1 0f 8f b4 85 4b 6b 09 2c 96 7b 86 43 0c 4e b0 43 74 c5 30 a8 8b 1c 0c 92 0f 2e 47 0f D.......Kk.,.{.C.N.Ct.0.......G.
183c0 13 ae e6 5d fe 0b e3 4f 81 df 1e fe 13 f8 9b 54 16 7a 4d cd de a7 ac d8 c9 67 32 d8 5c 2b 26 ed ...]...O.......T.zM......g2.\+&.
183e0 d0 dc 23 02 03 ac e0 c6 51 9f ca ca a9 ca a3 f6 1e 52 a9 29 43 d9 ae f7 e9 6b be dd 34 ec af 7b ..#.....Q........R.)C....k..4..{
18400 75 b3 3b 27 83 a7 0c 45 e5 17 ab 7d 2e af 67 6b 7c ad a2 76 d7 6b 24 cc ff 00 d9 7b 44 f1 7f 88 u.;'...E...}..gk|..v.k$....{D...
18420 be 1a 6b 77 fe 38 f8 c3 a3 f8 3b c3 b2 6a 06 de 5d 7a ee 69 85 f9 9d c3 32 5b 84 85 8c eb 0b 0d ..kw.8....;..j..]z.i....2[......
18440 db a5 2a 50 79 84 73 82 53 a6 f8 5d fb 0a fc 59 f8 83 e0 4b 1f 1d f8 37 50 fb 2e a5 a3 eb b7 16 ..*Py.s.S..]...Y...K...7P.......
18460 c9 6d e2 8d 4c 69 d7 5a 8c 31 ac 32 43 3a 19 5d b6 90 92 46 a0 00 bb 76 0d ac 59 d6 bd 87 c2 3f .m..Li.Z.1.2C:.]...F...v..Y....?
18480 00 fe 08 7e d1 9f 07 74 7d 6f f6 9a f8 97 69 e0 1f 14 de 69 96 da 76 9d a9 5a 68 a3 4e 85 a2 b7 ...~...t}o....i....i..v..Zh.N...
184a0 58 d5 63 9e 42 db a7 9e 58 92 4d b3 95 74 8c 72 54 16 8d 5b 07 c7 df b5 8e 97 f0 ff 00 e0 2f 87 X.c.B...X.M..t.rT..[........../.
184c0 74 4f d9 eb c4 da 77 85 be c7 76 da 06 a7 7b ae 5d 45 7f 35 d0 ce f7 bb 16 a0 4e 4a 4f 85 97 cc tO....w...v...{.]E.5......NJO...
184e0 42 e8 5a 3f 96 46 64 00 69 ec da 9e af 4b d9 6d f7 ed b7 cb 76 67 2a 18 7c 2b 50 a9 14 e4 94 5f B.Z?.Fd.i....K.m....vg*.|+P...._
18500 e3 bc b5 6b d7 ba 6e da a6 cf 2c f1 cf ec 77 f1 d3 51 d5 3e d7 e0 4d 04 ea 1a b4 ba 8c f7 77 ba ...k..n...,...w..Q.>..M.......w.
18520 04 1a ba 6a 4d 1e 18 06 b9 f3 17 72 3c 6c 43 98 98 b6 f2 aa ec 59 95 37 57 d4 9f b2 f7 c4 4f 8e ...jM......r<lC......Y.7W.....O.
18540 1f b0 e7 c6 f9 be 1e fe d1 f6 7e 26 b8 d2 fc 53 6d 67 06 8b 79 ab 4e 81 2c 35 29 9f 6c aa a6 27 ..........~&...Smg..y.N.,5).l..'
18560 74 5f f8 f8 46 95 84 8a 48 ec 49 51 5f 04 a7 ed 3b f1 42 d2 e8 78 b3 fe 13 df 11 cb e2 48 6f 7e t_..F...H.IQ_...;.B..x.......Ho~
18580 d1 a9 78 8b 4c d4 88 75 8e 42 36 ec 38 1e 50 0e 73 e6 29 c1 f3 15 70 b8 cb 3f c5 9f b6 4f ed 1b ..x.L..u.B6.8.P.s.)...p..?...O..
185a0 e3 2b 24 d1 bc 47 f1 47 50 ba b5 b0 bd 17 d6 06 fd cb cd 69 75 95 25 d7 73 e5 25 2c a0 8e ca 41 .+$..G.GP..........iu.%.s.%,...A
185c0 65 da 58 b5 3a 35 e7 85 ab 1a b0 4e e9 d9 ea bc b4 77 bb f5 d5 3d 74 b5 8e 6a d4 e9 55 5e c5 d3 e.X.:5.....N.....w...=t..j..U^..
185e0 f7 6d df 6d b5 5a 7c ef ad dc 4f dd e4 f8 c7 e1 6d 36 e6 e7 40 f0 d7 c6 06 80 69 b7 0d 05 e5 a5 .m.m.Z|...O.....m6..@.....i.....
18600 a5 c2 de 35 bc fc 3b 47 2b 21 f9 24 01 86 51 b0 ca 0a e4 0e 28 af c4 7f 85 1f 1b fe 18 78 33 49 ...5..;G+!.$..Q.....(........x3I
18620 bc d2 fc 75 36 b7 ae de 4b 7a 27 fe d1 b0 f1 84 96 28 fb e2 8d 9b e4 5b 49 77 fe f0 be 1c b0 62 ...u6...Kz'......(.....[Iw.....b
18640 08 05 46 28 af a7 a5 c4 34 1d 34 ea 45 73 75 f7 53 fc cf 12 ae 49 97 c6 6d 39 4b ff 00 01 bf e3 ..F(....4.4.Esu.S....I..m9K.....
18660 74 7e a7 aa 5a 4b a8 43 6b 65 06 a4 b0 0b c6 8a d6 ce fa 04 29 22 f9 64 bc 44 64 00 ef 97 19 6f t~..ZK.Cke..........)".d.Dd....o
18680 93 6b 02 87 71 dc bc 9f c6 7f 88 de 1d f8 2b f0 f2 f7 c7 de 2f 95 a0 86 4b 68 e1 b0 9f 4b 76 0f .k..q.........+...../...Kh...Kv.
186a0 72 41 11 db ec 1c b1 56 95 91 79 05 d0 e4 9d eb 85 ae ea da 34 d2 c0 b3 5b b9 04 10 49 f6 0b 5b rA.....V..y.........4...[...I..[
186c0 3b cb 40 63 9e 37 51 b9 48 61 f2 92 4f cb 19 3b 58 9d c0 e0 62 bc db f6 a9 fd 9d f5 6f da 1a df ;.@c.7Q.Ha..O..;X...b.......o...
186e0 c1 7a 7f 87 1f 4d 8b 3a a4 f6 b6 5a b4 5a 8c a2 58 dd a3 29 0c fb 51 58 bc 46 4f 2d 24 70 99 50 .z...M.:...Z.Z..X..)..QX.FO-$p.P
18700 53 03 6a 9c 7d 7e 73 89 ad 82 ca ea 56 a7 f1 35 64 f6 b5 f4 be 9d 56 fa 5f 53 ce ca f0 b1 c6 e3 S.j.}~s.....V..5d.....V._S......
18720 e9 d0 a8 d7 2b dd db f9 7d e7 a3 e6 b5 f5 b5 d2 5e f6 ab b7 95 78 ef e2 cc 1f 0e 3e 19 58 7e d1 ....+...}.......^....x.....>.X~.
18740 bf 16 96 cf c6 3a 5e b9 2d cd be 85 73 a4 5b 87 99 ee 23 64 55 47 47 9d 85 a1 63 17 9a f2 46 92 .....:^.-...s.[...#dUGG...c...F.
18760 a4 85 8c 79 01 99 9f 07 f6 8f f8 ab 17 88 fc 4d a0 f8 1e ef e0 16 87 a2 6b 3f 11 7e 1c c6 9e 23 ...y...........M........k?.~...#
18780 b8 d0 f4 91 e4 59 5b c1 99 a2 bd b6 8a 22 7c a3 12 c5 2f 9d b8 33 46 a8 a1 49 65 64 1f 48 78 87 .....Y[......"|.../..3F..Ied.Hx.
187a0 f6 7b f1 97 83 3c 21 ac 78 eb c6 5a 76 ab 0e 97 17 83 da 4d 6f 4e b1 b7 82 d6 7f b5 c3 6a b0 dc .{...<!.x..Zv......MoN.......j..
187c0 4a 90 30 68 5d d6 68 23 9d 44 78 5c b9 52 72 36 d7 c8 df 04 f4 6f 89 de 21 f8 ed f0 df c3 bf 01 J.0h].h#.Dx\.Rr6.....o..!.......
187e0 fe 33 ea 1e 3c d0 7c 3d 6b 26 ab 19 9b c3 86 d2 fb 45 b5 37 0c 23 b7 85 e5 dc 0a 3b 13 84 52 d1 .3..<.|=k&.......E.7.#.....;..R.
18800 9f 34 c7 26 f0 76 9f cc 54 e5 ed b9 5d 9f 36 cf 75 65 af 6d 3b ef ad 8f b6 49 c6 73 50 bb 5a 5a .4.&.v..T...].6.ue.m;....I.sP.ZZ
18820 d7 4e d6 69 ad 25 b3 ef 6b ea f4 4d bb fa 2f 81 be 05 fc 4a d0 6f fe 22 7c 74 f0 ae a9 73 e1 8d .N.i.%..k..M../....J.o."|t...s..
18840 23 5b f0 87 87 e0 d2 ec 99 d1 df 55 b6 9f 4e 06 38 b7 ed 22 49 1a 44 07 0c 36 b3 26 5b e6 65 ae #[.........U..N.8.."I.D..6.&[.e.
18860 6b e0 c7 ec e7 e3 1f 18 f8 22 ff 00 c4 52 7c 64 fe df 96 0b d9 2e e1 f0 8a 5f c4 cf 75 34 57 16 k........"...R|d........._..u4W.
18880 f0 88 bc 89 0e 63 66 72 c5 e6 2b bc c6 62 c1 65 2c 87 a3 f8 df 79 fb 30 0f 05 69 73 7c 4c b5 f1 .....cfr..+..b.e,....y.0..is|L..
188a0 66 aa da 54 96 d7 d7 3e 19 b8 51 61 1c d1 19 a7 92 77 f3 62 63 1a 09 63 32 30 8f 70 79 5c 05 4f f..T...>..Qa.....w.bc..c20.py\.O
188c0 2f 62 86 f2 bf d9 c7 e0 04 bf b5 07 ed 0b a9 78 83 e0 36 97 79 e1 0f 06 f8 74 7f 6b ea 97 37 37 /b.............x..6.y....t.k..77
188e0 44 5d c4 d1 b1 65 8a 09 b6 e1 38 f2 d8 b3 13 e5 86 18 69 33 fb cd ea ce 9a 8c 5c ac a4 da e9 a7 D]...e....8.......i3......\.....
18900 6d fa ab ed 6b 68 ef bb 26 6a d5 f9 ad cc ac f5 7a e8 ba b6 d2 7a ea d2 d6 cd b5 b9 ef 9a 1e 9f m...kh..&j......z....z..........
18920 f1 6f e2 a7 c7 7d 5b 50 d3 3c 6b a2 e9 d6 50 db 5a 09 f5 5d 23 4f 81 ae b5 19 e4 92 10 d6 31 1d .o...}[P.<k...P.Z..]#O........1.
18940 ea 0e 0c cd bf 72 93 1a af 28 ad f7 7b f8 b5 2b cf 82 1e 19 f1 06 8d e2 ab 96 7b bb 28 62 8f c2 .....r...(..{..+..........{.(b..
18960 fe 16 d0 74 d3 2d c5 94 2a f1 20 95 88 20 4e ec d1 46 aa 1d d5 a1 05 49 0d bc a0 8b c1 5a 67 c3 ...t.-..*.....N..F.....I.....Zg.
18980 df d9 ef 44 ba f1 36 b5 e2 1d 07 43 f0 be 99 74 20 b5 3a 66 b2 35 0b 98 6e e6 0c e4 5d 87 dc 3c ...D..6....C...t..:f.5..n...]..<
189a0 e0 cc 64 38 6e 55 86 e7 ce 14 f9 0f c4 af da f7 e0 06 b9 e2 2b 9d 67 e2 2f 89 a5 d3 ff 00 b3 a3 ..d8nU..............+.g./.......
189c0 b6 92 de d7 c1 77 a2 fb ed d2 c8 09 91 ee 5a 46 0b 1a bb 48 57 11 0c ee 90 6f 42 14 0a ce ca dc .....w........ZF...HW....oB.....
189e0 db ec f5 eb a6 fd db bd b7 6f 46 db 57 b9 52 9d 08 2e 5a 32 e5 8a 5e ad 6f b6 8e d7 e8 92 d9 5b .........oF.W.R...Z2..^.o......[
18a00 46 dc 8f 9c 7f 6b ff 00 8d fa 9f c7 db 9d 0f 40 4d 3e e3 c3 f6 3a 05 94 b6 fa 34 ba 93 a8 17 11 F....k.........@M>...:....4.....
18a20 85 db b8 c6 63 ff 00 58 e5 5d 72 5d c3 b9 4d c4 e0 b3 7c bb 7d 3d a8 9e ca e5 2e 56 79 6e 59 84 ....c..X.]r]..M...|.}=.....VynY.
18a40 b3 de 6e 8a dc ba b2 f2 64 4c 1c 03 b5 b6 ae 36 fd d0 4e 09 3f 43 78 fe 4f 8a 7f b5 c7 c4 cd 73 ..n.....dL.....6..N.?Cx.O......s
18a60 c1 1f b3 77 c3 7d 4a eb 4f 4d 51 ae a0 b4 d4 74 e8 a1 f2 a3 da 91 84 7c 1d 8b d3 24 03 b4 96 da ...w.}J.OMQ....t.......|...$....
18a80 83 20 67 e6 bf 18 78 7f 5f f0 cf 8b a5 f0 97 88 0c 41 ed 18 22 5a 5b dc 01 12 3a b9 24 31 6c e0 ..g...x._........A.."Z[...:.$1l.
18aa0 64 f0 5b 90 18 1e 40 db 5c 11 85 18 b9 45 3e 97 b7 5e b7 f9 ff 00 97 cc c6 d5 d5 2e 79 41 a4 db d.[...@.\....E>..^..........yA..
18ac0 b3 e8 ef be bb de f7 5a 79 22 ba 5f 26 ad 35 8d 9e b9 36 e3 35 c8 b5 ba 86 c1 77 12 37 80 80 1e .......Zy"._&.5...6.5.....w.7...
18ae0 9b 86 e2 c1 41 0a 40 52 4e 79 1e 89 f0 f3 c1 3f 08 ef bc 15 7f ad f8 83 c6 3e 66 b5 3b 4b 0c 16 ....A.@RNy.....?.........>f.;K..
18b00 17 e8 d1 79 29 18 49 84 b2 33 23 09 41 29 b1 63 8c ac 8e ee 37 15 56 21 b8 0d 37 4b 37 52 69 23 ...y).I..3#.A).c....7.V!..7K7Ri#
18b20 51 b5 8f 4e b4 d4 a5 02 49 a2 2b 24 b6 db 64 3b 91 53 78 24 e0 0d a8 e4 17 c0 d8 41 20 56 cf 86 Q..N....I.+$..d;.Sx$.......A.V..
18b40 2f 7c 21 ab 4f 0c 7a fd a6 b3 75 3b 16 f3 82 28 da c1 24 5d 87 7c 8e 40 01 77 92 d8 38 dc 40 04 /|!.O.z...u;...(..$].|.@.w..8.@.
18b60 12 d5 a7 32 b5 ef 6b 3f 2e ff 00 3f d5 74 f2 15 19 4a 09 c7 6b ab 3b fa ea 95 ba 5e fd f4 7a 5d ...2..k?...?.t...J..k.;....^..z]
18b80 8b 1e af 6f a5 dc 5c 59 6b 3a 54 f2 3a 4c 7c a7 b2 d5 63 8d 4a 60 60 1d a8 c1 d8 74 dc 0f 38 1c ...o..\Yk:T.:L|...c.J``....t..8.
18ba0 02 0d 15 d7 78 f7 e3 1f 8c 7c 6b e2 49 35 4f 18 e9 ba 0a cd 14 31 41 6b 6c d0 23 2d b5 ba 46 a1 ....x....|k.I5O......1Akl.#-..F.
18bc0 22 44 8e 45 48 51 47 dd 8d 14 28 1c 81 cd 15 a4 23 1a 91 e6 95 39 36 fa a4 bf cc 99 61 ab 5f dd "D.EHQG...(.....#....96.....a._.
18be0 a2 9a f3 7a fc f4 3f 6a a6 46 b7 b7 2b 7b 1d cd bc 86 39 6c e3 12 4c ee 8f 74 d8 27 25 54 36 c0 ...z..?j.F..+{....9l..L..t.'%T6.
18c00 33 97 5f 9d 4f dc 04 02 45 2f 1a 7c 2b b9 f8 b7 a7 c7 a2 c7 ad c3 a6 5d db 49 b3 47 d7 ed 64 08 3._.O...E/.|+..........].I.G..d.
18c20 d6 17 59 03 ed eb b0 fc 86 3c 16 52 ac 30 0e 5b 63 e0 89 6c a4 97 4d 96 07 b8 b9 d4 ac 8b 3b 34 ..Y......<.R.0.[c..l..M.......;4
18c40 f7 18 f3 55 67 0d f2 af dd 05 8a e7 e5 e3 f7 5c 97 c6 71 53 45 a1 68 1a c6 83 2e 95 a9 78 a6 cd ...Ug..........\..qSE.h......x..
18c60 2d e4 b6 9a d1 f5 1d 32 63 6b 70 92 dd 02 8b e5 49 bc 05 6e f9 52 04 98 56 04 62 bf 5a c7 c2 15 -......2ckp.....I..n.R..V.b.Z...
18c80 30 95 63 35 a4 a2 ff 00 27 d7 a5 f4 5b bb 5e e7 c3 53 83 f6 f4 f9 1b 4d 49 5b 47 a7 c2 b6 d7 55 0.c5....'...[.^..S.....MI[G....U
18ca0 6d 6d 1b b7 1b dc f9 1b e3 cf ed 81 fb 79 78 67 e1 df 8c 7c 29 f1 03 c5 3a 36 a2 7c 2d 13 68 77 mm...........yxg...|)...:6.|-.hw
18cc0 1a f4 4f 1c b3 8b 2d 45 41 8a 44 3f 72 64 9f cb 46 0e a7 7a b2 0c 60 a2 81 ad ff 00 04 9d f8 83 ..O...-EA.D?rd..F..z..`.........
18ce0 fb 42 fc 1a f8 35 e3 bd 3b e3 8f 87 b5 78 2d bc 1b a4 7d a3 c3 b2 59 f8 7d 1c c6 93 c9 3c d2 4c .B...5..;....x-...}...Y.}....<.L
18d00 b7 4a 3e 62 c6 07 04 3e f4 62 61 c2 e1 76 b7 5f fb 50 a7 82 be 0e f8 a3 4e f8 e5 e0 7f 85 ba cf .J>b...>.ba..v._.P......N.......
18d20 8a 7c 31 e2 cd 01 bc 20 de 06 4b 0f 39 5e e9 5e 32 ef 70 55 99 94 45 00 31 06 d8 5c aa 2a e7 07 .|1.......K.9^.^2.pU..E.1..\.*..
18d40 7a c3 ae 7e d9 ff 00 00 be 12 7c 26 d6 fc 01 f1 27 c2 7e 27 f0 3f 84 9f 41 b3 b2 1e 1b be 89 6e z..~......|&....'.~'.?..A......n
18d60 26 95 2e 95 a4 64 8a 19 ca b3 c5 18 84 8d e4 f9 98 b8 62 18 31 52 bf 91 50 a3 8f 85 79 2a 8d 4a &....d............b.1R..P...y*.J
18d80 1b c7 4d 5a eb a6 aa c9 df 45 7d 2c ad 74 db fd 22 ad 0a 10 c1 ca 50 ba 9b 5e f3 da 2a 57 bb d3 ..MZ.....E},.t..".....P..^..*W..
18da0 7d 53 d3 65 17 ad ed 6b fc 2f f1 cb f6 cc f8 d1 f1 eb c7 b7 de 2e b4 b0 91 34 98 2d e0 b6 86 da }S.e...k./...............4.-....
18dc0 3d 19 97 ed 56 76 d8 29 0d db 44 43 23 37 96 b2 32 ab 85 42 ce 50 82 4e 64 f8 01 f1 fb e2 67 c3 =...Vv.)..DC#7..2..B.P.Nd.....g.
18de0 88 7c 63 ae 69 57 72 d8 c5 e2 6f 0f 32 dc fd be c5 a5 b6 54 55 71 6f 04 ec a3 e4 49 1c fc ac c0 .|c.iWr...o.2......TUqo....I....
18e00 89 24 08 1f 62 92 e2 5f 86 5f b7 b7 c5 7f 83 ff 00 12 f5 cd 5f c1 16 de 19 b3 f0 d7 8b 35 3c 4b .$..b.._._.........._........5<K
18e20 a5 e8 96 ad 6b 67 71 0a 96 2b 6e 13 82 8c c2 40 1b 39 94 10 5b 90 77 37 8e cf a9 de f8 4b c4 5a ....kgq..+n....@.9..[.w7.....K.Z
18e40 9c d7 b0 5d cf 71 0b cf 3c b0 dc 59 c7 34 0d 1b 87 0c 59 5b 2a c7 76 d1 e6 76 6d ac 9f 3a 8a e8 ...].q..<..Y.4....Y[*.v..vm..:..
18e60 8c a9 27 19 de cf f0 e9 af 75 b7 45 74 d2 38 a3 ce ae 9d ec f7 db aa 77 b5 9d ba be af 73 ea 4f ..'......u.Et.8........w.....s.O
18e80 82 3f 0a 7e 32 7e d1 9e 24 4f 03 7e d3 5f b4 1d f7 81 74 9d 52 44 79 e1 f1 3d a8 55 9a 06 08 ab .?.~2~..$O.~._....t.RDy..=.U....
18ea0 24 65 98 6f df b0 10 80 ed 57 18 5c e7 8c cf f8 29 0f ec 39 a7 7e c7 de 38 b9 f0 cf 81 b5 28 b5 $e.o.....W.\....)..9.~..8.....(.
18ec0 27 b6 92 d6 e6 c3 57 9d a1 85 b5 1b 2b 88 d8 99 23 8d 5b 68 0b 30 31 92 3e 50 11 38 1c e7 c4 bc '.....W.....+...#.[h.01.>P.8....
18ee0 15 fb 4a fc 55 d7 fe 1e 5d 7c 23 d4 ef 2c 6d 7c 31 7b a8 a6 aa 6d e5 90 b0 59 23 58 e2 48 d9 b2 ..J.U...]|#..,m|1{...m...Y#X.H..
18f00 0c 08 b8 40 30 41 50 49 6c e1 4d 6a f8 a3 c7 5f 11 7c 69 e1 39 7c 01 77 e2 1b 4b cd 3d 2e 12 ee ...@0APIl.Mj..._.|i.9|.w..K.=...
18f20 c6 da f1 e3 2d 62 c1 52 31 e5 45 83 e4 96 d8 03 88 80 12 22 a3 91 b5 0e 3c fa f0 9b 71 94 65 69 ....-b.R1.E........"....<...q.ei
18f40 5d 37 6e ba 5a cf 4d 9d ff 00 2f 24 7a f8 59 51 74 f9 5d 25 ca e2 d7 4b bb de d2 bb d9 c7 45 b6 ]7n.Z.M.../$z.YQt.]%...K......E.
18f60 b7 6f 7b 9f 48 fe c4 ff 00 b5 8f 8a 3c 19 e2 4f 15 7c 6a f8 97 a2 2a 37 86 be 1c 5c 68 9a c4 36 .o{.H.......<..O.|j...*7...\h..6
18f80 5a 55 bd a5 83 dd 3c f0 9b 68 d5 63 08 8a ec 23 79 19 40 05 4a c8 ca 7e 7c 0f 82 fc 79 e2 9d 4b ZU....<..h.c...#y.@.J..~|...y..K
18fa0 c4 7e 3c be f1 44 aa b6 bb ef e4 9f 75 bd c6 f6 31 b3 9e 73 c0 6c ee 20 b0 da 18 63 38 eb 5e a9 .~<..D......u...1..s.l.....c8.^.
18fc0 f1 33 5d f8 a1 e2 7f 02 5a f8 0b 5f f8 99 f6 2d 12 da 09 e4 93 40 b5 85 55 12 e8 02 03 ce b0 ed .3].....Z.._...-.....@..U.......
18fe0 f3 1c 9c 0f 34 82 57 21 70 54 57 8c 4f a5 5f f8 5e e6 65 d6 74 f3 65 f6 57 16 97 d2 b9 0f 27 cc ....4.W!pTW.O._.^.e.t.e.W.....'.
19000 b8 27 6e f0 18 1c 94 38 38 c6 32 32 46 71 a5 46 18 76 df 57 7e fd db fc de 96 5d 57 74 65 98 e2 .'n....88.22Fq.F.v.W~.....]Wte..
19020 29 e2 26 bd 92 f7 56 9a bb de da 5e dd f6 bd af aa 77 66 97 86 a1 9a 78 12 1d 3b 40 86 e1 a4 f3 ).&...V....^.....wf....x..;@....
19040 5e 21 79 95 32 26 d6 f3 39 63 f7 f6 64 82 39 4d a0 82 73 56 f5 9b 0b b3 a5 4b a9 da 78 82 e4 26 ^!y.2&..9c..d.9M..sV.....K..x..&
19060 a0 89 24 16 f2 db 80 63 75 09 bc 33 02 42 e1 9c 8c e4 92 0e 5f 61 38 ac 0d 23 5e fe c9 48 ee 19 ..$....cu..3.B......_a8..#^..H..
19080 1e fd ac 59 91 24 96 36 19 89 b1 c8 cf 18 5c 87 1f dd 27 2c 0f 51 a2 35 ad 56 f2 2b bb c0 b0 e9 ...Y.$.6......\...',.Q.5.V.+....
190a0 12 43 18 92 08 a0 0c e6 5b 79 01 0d e5 92 08 38 0d b4 e4 85 61 93 cb 1e 7a 1c b7 b7 f5 af ce db .C......[y.....8....a...z.......
190c0 7a f5 e8 79 91 92 8b bb d2 3a 7e 97 ea af 75 7d ba a5 71 da 4d 86 b6 f0 c9 3d a8 75 8a 49 98 c7 z..y.....:~...u}..q.M....=.u.I..
190e0 e7 df a2 39 1d 09 2b bc 63 24 1e 39 c7 a9 eb 45 4d a5 5c df 68 56 ec b6 7a e4 26 0b 89 9e 58 19 ...9..+.c$.9...EM.\.hV..z.&...X.
19100 62 81 f7 26 e2 a0 91 23 06 42 76 fd dc 0c 0c 71 cd 14 d4 f9 95 e3 3b 2f 9f f9 1a 4a d1 93 4a 9b b..&...#.Bv....q......;/...J..J.
19120 7e 6b 9a cf d2 d0 6a de 8c fd d2 d1 ca a4 30 cd e6 9b 08 a3 b8 6d 57 51 78 af cc d1 c5 04 48 5d ~k....j.......0......mWQx.....H]
19140 24 66 c1 66 51 b0 61 d7 26 57 f9 4f a5 79 bf c5 2f 8d 17 9f 0c 3e 1c 78 6f 5d f8 b9 e3 db cf 0f $f.fQ.a.&W.O.y../....>.xo]......
19160 6a 7f 14 75 4b cb 4d 07 c3 77 d6 42 39 6c 0b 46 86 19 2e 4a 2c 6f 12 bb 88 55 d3 cc 59 15 6e cc j..uK.M..w.B9l.F...J,o...U..Y.n.
19180 88 c0 2f cb ed 1e 06 d2 7f b1 2c ae fe 27 df f8 7d e7 d2 ad 7c 41 1b 6a 13 46 d6 f3 6c b5 3b 23 ../.......,..'..}...|A.j.F..l.;#
191a0 20 46 e5 57 cc 75 de 0b 0f 94 a9 64 50 58 6d 3f 3c f8 93 c3 be 1e f8 fb ff 00 05 50 4f 83 7a df .F.W.u.....dPXm?<..........PO.z.
191c0 83 20 ba f0 67 81 e6 92 f7 41 7d 7e ed da eb 5a b9 8c 3d ed cc 56 51 07 db 24 bb e6 45 63 1a 92 ....g....A}~...Z..=..VQ..$..Ec..
191e0 91 db a0 29 bc 0d 9f 67 c4 b8 ff 00 6f 8d 74 29 b5 cb 15 aa ba de ef 77 7b ab 6c 95 fe 4f a7 9f ...)...g....o.t).......w{.l..O..
19200 92 60 a8 53 a3 1a 95 15 e4 dd d5 d6 d1 d1 b6 94 a2 93 72 ba b3 b5 f5 b2 bf 5d 2f 89 9f b4 67 c2 .`.S..............r......]/...g.
19220 0f 82 3f 12 74 1f d9 cf e3 47 8b a2 bf d1 b4 ef 87 b7 fa ae a2 da 26 a2 21 8d e6 99 25 b8 59 e2 ..?.t....G............&.!...%.Y.
19240 50 63 5c b1 f2 8d bc 8a cd 87 c0 2c 18 ab 9f 80 ff 00 e0 a7 fa 17 8f 7e 0f df 68 de 15 ba f8 be Pc\........,...........~..h.....
19260 7c 71 e1 8d 5a d2 eb fb 0e fa d6 fe 39 bc ab 76 95 a5 8e 19 15 c1 91 82 c7 2a b1 7f 95 77 12 8b |q..Z.......9..v.........*...w..
19280 96 81 ab a4 ff 00 82 9f f8 73 46 97 e3 4f 8a 3e 34 78 d3 c3 fa c6 91 a1 68 d7 e3 48 d0 f4 fb 85 .........sF..O.>4x......h..H....
192a0 79 24 ba b8 86 08 df ec fb dd f6 ac 70 b3 47 0f ee c6 55 10 2b 65 9c bd 7c b7 e2 1b 5f 17 fc 71 y$..........p.G...U.+e..|..._..q
192c0 96 e7 c7 bf 11 bc 7f f6 4b 79 ad 02 43 ab 6a 10 85 8f 2a 18 46 81 23 76 31 c6 44 64 12 aa 52 36 ........Ky..C.j...*.F.#v1.Dd..R6
192e0 3b 70 01 04 fc b4 5b 72 bc b5 5d 1a d7 6f 3b ed 63 d0 c4 d3 95 7b c9 da ef 54 b6 b2 6f 9a ed 37 ;p....[r..]..o;.c....{...T..o..7
19300 a4 b5 4a fa 3d 1f a1 ec 7f b1 47 80 7c 07 e2 4f 06 9f 88 fe 36 d2 34 bf 19 5e 59 eb 16 f6 3a 67 ..J.=.....G.|..O....6.4..^Y...:g
19320 83 2e f5 03 6b 7c a9 d6 4b 91 28 90 2c 50 87 64 88 4a e9 2a 6e 68 d4 6d 03 21 7f 69 4f 8d 5f b3 ....k|..K.(.,P.d.J.*nh.m.!.iO._.
19340 c7 c5 9d 5a fd 34 0f 82 89 e0 2b db 07 5d 3e c0 f8 63 52 fb 54 02 65 91 b7 2d ca bb 31 93 f7 78 ...Z.4....+..]>..cR.T.e..-..1..x
19360 4d f1 10 19 c3 4a 06 1c 20 f3 df 05 7c 74 d1 fe 1c 7c 2e b6 f0 af 87 5b 4a d6 75 5d 3b c4 77 b7 M....J......|t...|.....[J.u];.w.
19380 13 b6 a5 00 10 6a 16 93 41 02 14 92 55 9b 7b 28 92 da 32 8a bb 4a 17 df 9f 9c ed f3 ff 00 0a f8 .....j..A...U.{(..2..J..........
193a0 aa c0 eb 76 f7 fe 26 41 05 be a1 61 35 8c eb 6d 26 ed 8c d1 32 24 a5 48 6e 03 6d 72 b8 dc 48 3b ...v..&A...a5..m&...2$.Hn.mr..H;
193c0 42 9c 10 49 55 70 71 4e cb 75 6f d7 fe 1b 4e a6 7f 58 8b e5 4f 75 64 ee b4 d5 7c db b5 bb ef 7b B..IUpqN.uo...N..X..Oud...|....{
193e0 25 b9 a3 e0 cf 12 f8 87 c3 9a 94 83 42 bd b7 d3 65 fb 46 57 2c 84 34 5b c9 d9 b9 c9 56 4e 31 ce %...........B...e.FW,.4[....VN1.
19400 43 64 03 db 1d cf 80 fe 26 78 b5 bc 47 ad 78 c7 c3 7e 2b 32 ea 17 77 6f 2d ed ec ae d1 5d 5c c0 Cd......&x..G.x..~+2..wo-....]\.
19420 c9 27 98 b8 0d c2 11 9f 30 13 92 52 3d ad cd 78 ed b5 ea 9b af ed a8 e7 f3 08 98 db b8 bb de 0c .'......0..R=..x................
19440 2b 82 06 4a 9e 47 2c 31 9c 61 71 b7 9a d5 b3 f1 45 80 d2 2e 62 d4 35 29 e6 10 ea 59 86 28 ed c2 +..J.G,1.aq.....E...b.5)...Y.(..
19460 e5 4a e0 16 20 13 92 33 85 ca f9 7b 58 f3 91 8c 27 19 ca cd ff 00 5a af 57 fe 64 45 a8 47 95 f6 .J.....3...{X...'.....Z.W.dE.G..
19480 ff 00 3f f3 7f 3b 1e 81 f1 0b e2 dd db ea 17 cf e1 af 88 13 43 3e a3 73 1d dc 76 f1 5e 99 da 39 ..?..;..............C>.s..v.^..9
194a0 a3 5c 07 f3 48 dd 92 fc c6 4f ce 83 01 88 27 71 e2 a3 82 f7 c4 3a 88 fb 55 da 4c 6f a0 92 ed ef .\..H....O....'q.....:..U.Lo....
194c0 2f 7e ec 67 0c 0e 41 e8 cd 82 02 8c 96 21 48 ac 43 75 28 bc 96 1b 1d 22 1b 73 15 ca dc a4 f3 b0 /~.g..A......!H.Cu(....".s......
194e0 66 58 d4 72 77 2a 8d dd 54 02 30 ac 47 39 e8 2f 5f c1 73 76 d3 b0 bd b7 bd 9e 69 8c ef 12 44 63 fX.rw*..T.0.G9./_.sv......i...Dc
19500 f9 b0 5d b2 4a 0f 42 c7 80 06 00 04 56 6e 1c 9a bd 1f 9e bf 93 db f2 f9 84 ea ca 50 5c fa af 4f ..].J.B.....Vn.............P\..O
19520 f3 fe b5 ee 8d 5f 10 68 f1 5e e8 d6 57 77 fa e5 b9 be 5b 69 62 9d 51 9b 60 6d ac 52 33 b7 82 48 ....._.h.^..Ww....[ib.Q.`m.R3..H
19540 e7 71 19 cb 80 dd 18 ae 79 d3 3c 4b a1 da 59 ea 4b e1 f3 66 d6 b3 35 ad cc 97 08 5e 3f 35 cf 04 .q......y.<K..Y.K..f..5....^?5..
19560 29 5c 17 c0 c1 5c 1d a0 7a d6 a5 8f 8e 35 5b 76 5d 3f 54 f1 0d a3 5b cd 6f f6 89 6d ad c3 06 12 )\...\..z....5[v]?T...[.o..m....
19580 87 da a3 cd f2 c8 0e 48 0c 1c 16 55 57 27 39 2e 0c b7 32 d9 ea 7a 51 96 2d 2e ea f6 e3 cb 57 f3 .......H...UW'9...2..zQ.-.....W.
195a0 2e 27 28 26 c1 21 94 46 00 21 46 00 01 48 25 95 8e 48 c0 16 95 a3 ca d7 de be f5 fd 5f 41 c6 7c .'(&.!.F.!F..H%..H.........._A.|
195c0 d2 6d 2e df a7 97 5e bb 6a d9 73 45 d4 74 61 a4 41 a7 6b 97 16 41 ec c3 c7 0c d1 db 33 ac d1 b3 .m....^.j.sE.ta.A.k..A......3...
195e0 b4 8a e0 95 27 1f 3e 39 c1 e3 90 0d 15 97 73 71 26 b8 91 dd 68 16 76 b6 76 ea 9b 45 a2 ca ca 61 ....'.>9......sq&...h.v.v..E...a
19600 39 27 69 20 7c dd 72 18 92 70 46 4e 7a 15 d5 4a bc a3 04 b9 7f 15 fe 42 95 2a 35 1f 34 e6 93 d3 9'i.|.r..pFNz..J.......B.*5.4...
19620 ec ae c7 ef df 8b 7e 23 cb 69 63 e1 1f d9 5f c4 1e 04 bd 89 7c 43 e2 bb 69 2f ec ef 34 94 b5 b0 ......~#.ic..._.....|C..i/..4...
19640 9e d9 ae 77 b2 ab cc ab b6 57 31 92 a9 0e e7 21 89 f9 64 75 6a e0 be 34 f8 c7 f6 70 5f 17 59 fe ...w.....W1....!..duj..4...p_.Y.
19660 d9 7e 3d f1 7d 9f c3 7f 8c 3f 09 56 58 f4 7d 2e e3 51 37 31 5f e8 90 de 4d 1c 71 aa 97 db 2b dc .~=.}....?.VX.}..Q71_...M.q...+.
19680 5b 3c d0 f6 71 2b 9f bb b7 9f a5 bf 6b 4d 47 c6 5a 1f 81 74 cf 1e 7c 2c f8 2d 6f e2 6f 13 5e ea [<..q+......kMG.Z..t..|,.-o.o.^.
196a0 16 76 49 a6 49 3c 30 bd ba ca ad 10 bb 89 f7 3f d9 fe 57 c1 28 56 46 0a a3 2a 13 35 f0 e7 fc 15 .vI.I<0........?..W.(VF..*.5....
196c0 57 e0 35 f7 80 3f 64 9f 14 78 b3 50 f1 1d c7 fc 24 7a ec ba 4c 9e 36 f0 de 99 6f 0c ab 64 90 be W.5..?d..x.P....$z..L.6...o..d..
196e0 c9 03 5c b1 39 cc 8c 59 24 1b 76 a2 20 31 1d 8c cb 95 7c 63 c4 62 67 29 fd ab bb 27 6b 37 6e f7 ..\.9..Y$.v..1....|c.bg)...'k7n.
19700 fe b5 57 b6 9d 90 8c a9 e0 94 22 ed 66 f7 d5 b7 a2 b5 bd d8 ad 36 76 76 f9 a3 c3 7f e0 b2 df b5 ..W.......".f........6vv........
19720 d7 c3 7f db 0f 40 f8 6f e1 af 03 6a 7a 1e 95 e1 fb bf 12 dd 4b ac 5d e9 da 9c 57 d7 76 17 65 d2 .....@.o...jz.......K.]...W.v.e.
19740 3b 8f 3e 38 e4 2a b1 e1 3c f8 9c 36 c9 95 94 83 1e c7 cf c3 df 1f fc 6d e1 eb cf 0e e8 3f 0c 3e ;.>8.*..<..6...........m.....?.>
19760 0e dc 09 b4 9f 0a e9 2d 67 aa 6b 36 c8 ca 35 f9 85 dd c4 df 6b 08 e1 5d 55 63 95 55 50 e4 a0 8f .......-g.k6..5.....k..]Uc.UP...
19780 71 0b 9c d7 d7 3e 07 fd 8e 3e 15 6b ff 00 f0 49 bd 7f e3 97 87 a7 81 f5 4b 0d 76 6b 69 7c 57 6d q....>...>.k...I........K.vki|Wm
197a0 03 03 20 4b a6 89 e1 93 1f 38 49 e3 16 3e 52 48 09 59 24 66 ca 87 6c 7e 7f 5a 78 a1 f4 dd 12 4b ...K.....8I..>RH.Y$f..l~.Zx....K
197c0 2f ec a6 7b 86 95 04 99 9c 94 48 37 e4 ae d3 fd e7 2c 0b 1c 8c 38 00 0c 1c a4 9c a9 a7 1d d3 f9 /..{......H7.....,...8..........
197e0 5b 6d 55 fa ee b7 6b 4e ba 1c 55 e9 fb 1a 8e 12 7a b5 7b eb d9 34 b5 be 89 69 a5 bc f6 b2 c8 b7 [mU...kN..U.....z.{..4...i......
19800 96 f6 fd 1e da 4b 87 2b b1 a5 8a 30 71 86 e8 dc af 4c 8c 82 33 f3 60 77 c6 34 fc 3b a2 ea da a2 .....K.+...0q....L..3.`w.4.;....
19820 c9 75 a5 79 b0 47 69 6d e7 24 cc be 67 ef 14 a8 2c a1 47 05 4b 0c 91 f7 43 e3 39 23 34 ad af 26 .u.y.Gim.$..g...,.G.K...C.9#4..&
19840 bc 92 43 2e a8 91 c5 04 21 65 b7 b8 73 89 62 f9 70 a3 3d 70 40 20 1c 0c a7 1c e2 ae e8 77 9a 86 ..C.....!e..s.b.p.=p@........w..
19860 98 ba 83 58 69 d2 4b 15 bc 78 17 78 6d 85 58 80 37 02 39 5e 1f 00 85 c9 3c e4 56 ee 4f 5d 3b 7f ...Xi.K..x.xm.X.7.9^....<.V.O];.
19880 5f 91 94 54 92 e6 bf 7f eb ab ff 00 86 7d 42 ca ee ff 00 5c 75 83 ce 6b f0 ce b1 ac 71 a8 41 1c _..T.........}B....\u..k....q.A.
198a0 cc a5 79 1b 4a ef 38 e0 f2 5b 6e 4e 0e 6a d2 ea 36 ce 96 f6 b2 5f 2c 71 bc be 5c e2 2b 7c 86 6c ..y.J.8..[nN.j..6...._,q..\.+|.l
198c0 9c c8 c7 19 ce 70 c0 f2 dc 60 8c 63 39 f7 72 de d9 6a 4b 61 67 01 64 52 65 86 35 04 c8 09 00 15 .....p...`.c9.r..jKag.dRe.5.....
198e0 66 c0 2c 7a 03 c0 39 1c 11 9e 66 b6 56 d4 4a db c1 e5 5a 79 ac 24 dd 22 63 e6 1c 6e 04 2e 42 f2 f.,z..9...f.V.J...Zy.$."c..n..B.
19900 49 c6 01 f7 23 9c 65 05 25 7d 2d bf a7 7f ea c5 ba d3 8e b7 ff 00 2e ab b9 62 d2 ed ad e4 45 7d I...#.e.%}-..............b....E}
19920 16 59 de ce e0 ac ee ff 00 36 e4 e8 a8 d9 53 c8 e7 27 bf 03 1d 6b 73 49 f1 30 d5 2c 6f 2d 6f 61 .Y.......6....S..'...ksI.0.,o-oa
19940 82 f6 ec 5c bb 24 2b 09 59 12 26 cb 1d a4 0c a8 0c c1 82 f2 14 a3 1c 10 39 e6 f5 16 8e f0 c4 b1 ...\.$+.Y.&.............9.......
19960 d9 49 24 b7 37 05 5a 1b 6b 60 48 38 fb 8a bc 73 ce dd b9 3d 8e 7a 53 66 d5 75 29 22 96 fd 5d 1f .I$.7.Z.k`H8...s...=.zSf.u)"..].
19980 ed 44 db cc 65 84 79 9d 43 6f 52 46 43 13 9f 7c 12 0e 45 38 d3 8b b4 96 8f fa fe ba 19 2a 8a 0e .D..e.y.CoRFC..|..E8.........*..
199a0 4b 5b 7a 9b ce 5e ce fa e5 b4 dd 3a 1d 39 4c 66 78 96 f1 49 da 99 90 30 5d aa 30 84 03 f2 e0 07 K[z..^.....:.9Lfx..I...0].0.....
199c0 eb b7 b0 a9 6d 35 94 b7 cc ba 8d e5 d5 d4 92 c6 d7 09 f6 30 02 29 50 df 31 2b c8 42 46 49 c0 20 ....m5.............0.)P.1+.BFI..
199e0 64 7b 54 30 e9 ba 96 af 6a f2 e9 7a 75 cb c3 0c 92 45 f6 bb ff 00 2d 63 96 11 9f 94 96 ca a9 19 d{T0....j..zu....E....-c........
19a00 24 f2 5b 24 63 04 0a bb 69 a6 98 25 8e 5d 53 c4 56 b6 b1 42 c0 aa 58 a0 92 4f 25 b3 8d a1 70 0f $.[$c...i..%.]S.V..B..X..O%...p.
19a20 a0 c9 07 71 21 c8 eb 58 b5 cb 16 a2 ae ff 00 1b 7e 7f f0 4d 1a 93 6e 73 5a bd fb ef f8 19 ba e5 ...q!..X........~..M..nsZ.......
19a40 f6 b5 2c f1 4d fd 99 2c 05 e1 0c c8 f3 79 44 b1 27 24 af 6c 9c 91 ed 8a 2a fd d7 8c ee 3c 2b 31 ..,.M..,.....yD.'$.l....*....<+1
19a60 d3 6d 6c 64 68 9b f7 91 9b c8 40 93 0d ce 0f a8 f4 3d c7 23 00 80 0a eb 84 12 82 b5 ff 00 0f f3 .mldh.....@......=.#............
19a80 29 d6 85 f5 76 f2 b3 ff 00 33 fa 5a f8 29 a8 78 8f e2 2f c3 4d 17 c4 1e 35 b9 b4 7f 1a f8 7a 3b )...v....3.Z.).x../.M...5.....z;
19aa0 8b df 0e 69 da 69 91 63 6b 20 e2 38 16 68 f7 a6 e7 5d ce 8b 9c 18 d5 99 49 dc 59 9b c2 3f 6a 3f ...i.i.ck..8.h...]......I.Y..?j?
19ac0 da bc e8 3e 11 f8 c5 f0 f7 e2 84 df f0 8f 68 cd f0 bf 51 5d 5a c7 59 b7 59 e4 3a dd ca cd 15 b4 ...>..........h...Q]Z.Y.Y.:.....
19ae0 06 58 f3 1a b4 b1 f9 6c ab f2 e7 03 e5 1b 86 de 77 45 f8 bd f1 83 c2 c2 5d 4f 40 f1 95 a7 f6 7b .X.....l........wE......]O@....{
19b00 69 83 50 9b c3 b7 fa 4c d7 7b dd 64 47 81 47 94 e2 42 e7 0a 99 01 9a 42 57 cd 8b 0a 48 f8 17 f6 i.P....L.{.dG.G..B.....BW...H...
19b20 b0 f8 8b fb 6a 78 a3 42 f1 2a 7e d1 be 15 d6 b4 ad 03 c7 1a c3 6b 93 8b 4d 04 bc 7e 75 ad aa 5b ....jx.B.*~..........k..M..~u..[
19b40 ac 82 39 9d 76 22 fd a2 05 7c 60 0f dd 95 e7 6d 6b 99 e0 96 59 8d 9d 3a e9 a7 76 e2 fa 35 d1 df ..9.v"...|`....mk...Y..:..v..5..
19b60 5f 7a e9 5f 4d 7c 8e bc 2d 6f af d3 53 a6 95 9a 6a 49 74 7a 2d 55 db 69 7c 5b ee ae f5 da 1f f8 _z._M|..-o..S...jItz-U.i|[......
19b80 25 8e a4 de 2a fd 97 3f 69 8f 87 9a f7 89 3e c9 a4 ff 00 c2 04 da ec 11 dd 5f 48 12 6b 8b 71 26 %...*..?i.....>.........._H.k.q&
19ba0 d8 fc bc 98 c9 66 68 c9 dc ac 7e 5d a3 69 6d e3 e1 3b 9b 0b 5d 43 51 27 4a 95 27 92 e4 46 a0 93 .....fh...~].im..;..]CQ'J.'..F..
19bc0 b1 63 62 aa 59 73 9c 0d b9 23 24 9c 0e a4 57 b2 fc 16 b8 f1 bf c0 cf 10 6b 7e 1b 6d 16 eb 55 7d .cb.Ys...#$...W.........k~.m..U}
19be0 7b 49 93 48 be d1 62 52 23 ba 8a e5 51 ed a4 2c 14 ac aa c4 47 3c 4a b9 df b4 36 36 8d c7 cc 75 {I.H..bR#...Q..,....G<J...66...u
19c00 4f 03 eb b2 4f a8 de db 5b 49 22 5b de a5 bc d9 88 96 89 dc 37 ee 59 b6 8f 98 15 2a 54 e0 92 18 O...O...[I"[........7.Y....*T...
19c20 8c e2 b9 29 d7 a3 ed 1a 8c bf cb 7f cb af cc e6 ab 87 ad ec a3 1e 47 a2 f3 de ed b7 db 55 f9 25 ...)..................G......U.%
19c40 b9 97 66 e5 12 da 58 2e a5 b5 2e e6 19 8f 97 bb 8c 0c 1e 33 9e 4e 79 ee b5 6e f1 e4 9e 28 6d 64 ..f...X............3.Ny..n...(md
19c60 26 51 0a 18 cd c4 64 ed 61 90 15 d8 91 8e 32 54 7d 06 00 c6 4c b3 f8 3b 54 80 34 77 7e 1b ba b2 &Q....d.a.....2T}...L..;T.4w~...
19c80 9a 77 f2 62 7b a5 75 cb 26 df 31 31 b3 21 be eb 67 8e 01 14 f4 db 75 24 fa 7d ec 31 46 f2 94 8e .w.b{.u.&.11.!..g.....u$.}.1F...
19ca0 dc 43 03 20 8e 65 00 05 c6 d0 33 8e 36 e0 8f 98 77 ab 73 8b 8b 94 75 5f 27 f9 76 bf 7e 86 2e 9c .C...e....3.6...w.s...u_'.v.~...
19cc0 ad 69 2f cf 4d 7b 7f 5d 0a 10 db 7f 67 5d c7 fd a9 b8 b5 b4 a8 67 b7 1f 2b c9 17 19 50 fb 58 a9 .i/.M{.]....g].......g..+...P.X.
19ce0 c6 00 27 20 67 20 73 52 c9 6e 6d 35 01 3e 99 a5 4d 13 5a cb f6 a4 79 b2 47 94 71 b4 e0 ae 18 72 ..'.g.sR.nm5.>..M.Z...y.G.q....r
19d00 79 e4 36 e5 e9 ce 66 7b 68 2d 9f 79 45 8e 07 8f 75 c7 98 ca c4 46 00 c6 ce 33 9d dd 42 f3 c9 c9 y.6...f{h-.yE...u....F...3..B...
19d20 da 33 56 34 2d 3a ca f2 f2 24 9e f2 47 b7 b0 97 1a a4 e1 04 88 b1 16 00 15 08 7e 60 7d 14 9c 86 .3V4-:...$..G.............~`}...
19d40 18 63 ce 12 9a 71 e6 ff 00 86 fe af f9 99 4a 12 8c ac b5 fe bf e1 99 4e 3b 5b ab f6 16 d1 cd 03 .c...q........J........N;[......
19d60 c4 24 37 0c f0 fc 8c 72 06 54 93 80 0f 38 e4 70 41 c1 20 fc da f6 7e 1d bc d4 a1 b8 1a 45 a1 f2 .$7....r.T...8.pA.....~......E..
19d80 c0 05 e5 bf 60 86 09 01 18 e5 8a aa e4 e0 64 fc b8 63 dc 62 ba dd 77 e2 14 be 23 d0 f4 4b 18 3c ....`.........d..c.b..w...#..K.<
19da0 31 a5 68 ba 77 87 71 3b c5 a4 a2 43 73 73 1b 84 5d cf 2f 2d 33 29 dd b0 b1 77 8f 73 64 71 59 36 1.h.w.q;...Css..]./-3)...w.sdqY6
19dc0 91 eb 5b 92 ef 4e d3 55 a2 67 92 58 63 b9 d8 f0 6c 6e 0b f0 30 36 b0 50 7e f2 93 ce 06 30 72 a9 ..[..N.U.g.Xc...ln..06.P~....0r.
19de0 59 ec 95 ff 00 af eb ef 37 f6 6f 56 b5 5d ed e5 fd 7d dd 36 29 49 79 77 0e 85 6f 3d ec 97 52 5b Y.......7.oV.]...}.6)Iyw..o=..R[
19e00 49 01 b5 2d 15 bb 08 fc ec 99 0c 5f 29 c3 e3 3d 49 e0 91 9e 30 4e 8c f7 9a 40 f0 ef 97 a5 68 76 I..-......._)..=I...0N...@....hv
19e20 56 f7 f6 7e 6c 33 6a 16 77 a3 74 8a 57 08 cc a4 e0 f3 b8 97 5c 07 0c 54 01 d6 b2 27 bb d3 52 ca V..~l3j.w.t.W.......\..T...'..R.
19e40 5b 69 b5 2b b8 e1 6d d7 36 91 40 e4 ac 52 70 18 70 df 29 c0 07 2d 92 4a 80 78 39 12 43 26 a5 7d [i.+..m.6.@..Rp.p.)..-.J.x9.C&.}
19e60 68 a2 0d 31 36 5d 03 6e 2e 25 91 54 b4 b9 56 21 b0 e3 03 23 23 7e 57 a9 00 91 81 10 8a 49 5b 4f h..16].n.%.T..V!...##~W......I[O
19e80 5f eb fa dc a8 f2 d9 b6 9d 9f e9 67 e9 d7 f0 b1 af a1 49 a3 2d 80 b3 f1 4a eb b2 4f 6e c6 34 10 _..........g......I.-...J..On.4.
19ea0 f8 75 2f 56 35 eb b7 7b c8 85 70 c5 be 4c 60 67 39 39 cd 15 85 a9 b6 a5 ad 4c b7 76 9a fa db a0 .u/V5..{..p..L`g99.......L.v....
19ec0 8c 28 b7 f3 19 7c ac 7f 08 0a 4e 07 d7 93 d4 f5 a2 a1 c2 4d eb 52 4b d2 f6 ff 00 d2 4e 59 e1 69 .(...|....N........M.RK.....NY.i
19ee0 4a 6d f3 fe 2b ff 00 91 67 ee 56 95 a1 de ea c4 20 d4 5e f2 4b cd 5d f2 ba 85 9a c7 70 b1 24 4b Jm..+...g.V.......^.K.].....p.$K
19f00 fc 63 2a 24 e0 65 c6 17 03 19 0d cb 7c ef ff 00 05 5b f8 89 e2 9f 87 ba 27 c1 79 7c 26 f6 b6 1a .c*$.e......|....[......'.y|&...
19f20 85 a5 b6 bf 35 e2 5c 3e eb 1b 9b 47 92 dc 7d 99 a2 39 dd 04 82 32 a6 02 30 c1 b8 24 1e 3e ac bb ....5.\>...G..}..9...2..0..$.>..
19f40 b6 86 f6 6b db 54 d5 c3 b5 cd d2 c5 67 f6 8b 67 89 ff 00 72 03 63 91 80 df dd 8c e6 37 0c 5f 1d ...k.T......g..g...r.c......7._.
19f60 6b 03 c7 ff 00 08 fe 07 7c 6b f8 7d ac 69 7f 18 f4 11 35 b5 cc 93 9d 3f 51 57 fb 44 56 b0 c5 cf k.......|k.}.i....5....?QW.DV...
19f80 cc ea 8e e9 03 3a 29 66 50 cd ca aa ed 0d 91 fa af 19 60 6a 63 f2 49 28 af 85 a9 5a db ab 35 6b .....:)fP.........`jc.I(...Z..5k
19fa0 69 e6 db b6 9c b7 b9 e0 70 ce 32 18 6c e2 1e de 76 8c b4 ba f3 77 5f 7b 56 5a dd a9 3b a7 6b 1f i.......p.2.l...v....w_{VZ..;.k.
19fc0 0a 7f c1 38 61 f0 f7 c4 cf 15 f8 ff 00 5d d6 bc 35 2a 68 b6 7e 0f 8b c4 16 32 4c 82 53 6f 77 6b ...8a........]..5*h.~....2L.Sowk
19fe0 79 14 f1 0f 31 01 2d 22 a7 da 40 76 1b a4 24 02 a0 bb a1 c8 d7 f4 ff 00 09 f8 0a cb f6 80 d0 3c y...1.-"..@v..$................<
1a000 33 39 5d 26 3d 43 45 d5 bc 31 6b aa c1 1a b4 92 79 f1 e2 2d a4 b6 66 86 3b b1 b8 65 8c 62 37 07 39]&=CE..1k.....y..-..f.;..e.b7.
1a020 20 90 64 fd a2 fc 55 fb 29 f8 3e ef 54 f8 59 fb 30 d8 6b ba ec ba 86 80 b2 cd a8 59 6a cd 0c 56 ..d...U.).>.T.Y.0.k........Yj..V
1a040 da 98 8e 46 c9 db 0a 79 c6 38 8f 0c 36 a9 eb f2 96 3b 3e 21 d7 2e b5 fb 6d 6b cf d4 ee 19 0b da ...F...y.8..6....;>!....mk......
1a060 f9 6a f7 37 0d 28 97 7c 7d 06 72 41 0a c0 0c e4 a9 00 9c 57 e2 b1 ca 67 5b 13 29 bf 71 34 93 5e .j.7.(.|}.rA.......W...g[.).q4.^
1a080 71 96 9b ed 74 ad a2 bd bb 35 a7 eb 11 cf 30 98 1c 34 69 46 f3 e5 bb 52 56 dd c6 ce f7 8b 6f 56 q...t....5....0..4iF...RV.....oV
1a0a0 9a d5 ef 26 9d de 9f 7e ff 00 c1 4d f4 af 04 78 93 5c f8 9b f1 23 c3 d7 51 db ea 9a 16 b5 e1 9d ...&...~...M...x.\...#..Q.......
1a0c0 72 c2 dc 4f 13 c5 7d 1d dd 8a ad c4 88 88 36 16 de d6 eb 95 38 60 87 72 93 96 1f 26 fe d3 7e 2f r..O..}.......6.....8`.r...&..~/
1a0e0 f0 77 c4 cf 1f c9 f1 73 40 b7 b1 b3 ff 00 84 9a ca d7 53 bf b4 d3 cb 13 69 a8 98 c4 77 5f 29 07 .w.....s@.........S.....i...w_).
1a100 66 e9 d6 49 42 76 59 a2 db c0 af 28 bd d7 bc 4b f6 38 2d 75 4f 10 dd 48 2d ee a4 13 23 cc 58 24 f..IBvY....(...K.8-uO..H-...#.X$
1a120 9b 82 f4 c9 ec 3d f7 64 f7 cd 59 86 f6 e7 4b 82 48 22 b1 b7 17 16 92 99 3e d1 72 a0 3c 59 1c 9c .....=.d..Y...K.H"......>.r.<Y..
1a140 03 92 dc 73 bb 76 c2 06 30 73 5d f8 5c 0b c2 45 25 2b a5 a2 f4 b2 5d ec dd d5 ef d1 3d 11 f3 f9 ...s.v..0s].\..E%+....].....=...
1a160 86 66 b1 35 24 e0 ad 7b 6e d5 d5 b4 dd 2d 34 b5 fa dd 6b 70 b6 9e 59 ee 2e 61 57 59 a6 b8 b3 42 .f.5$..{n....-4...kp..Y..aWY...B
1a180 65 bc 6d be 5b 02 b9 74 66 c6 03 60 1c b6 de 32 b8 39 18 48 13 52 d5 25 92 e0 3b f9 53 c0 d1 03 e.m.[..tf..`...2.9.H.R.%..;.S...
1a1a0 6d 18 11 ee 50 b9 4c 02 31 c0 51 93 8d bb 81 ef cc fa a4 4f 76 f7 c3 64 12 dc db 4a 93 c0 ec b9 m...P.L.1.Q........Ov..d...J....
1a1c0 56 46 65 f9 57 e6 c3 01 c0 03 2d 94 0f 93 90 29 f7 57 f0 da e9 b7 b6 86 e2 1b 75 ba 54 91 16 d1 VFe.W.....-....).W........u.T...
1a1e0 f7 ab fc d9 0a c3 71 39 5c 11 9f 98 92 ab 9c 03 93 df cf ca ef 15 af fc 37 f5 e7 aa f3 3c b7 0b ......q9\...............7....<..
1a200 b6 b6 f5 df 5b 96 6d 75 0b 6f b0 5a df c5 a4 98 a5 12 88 63 bc 9a f8 39 03 8e 19 46 0f 03 0c a7 ....[.mu.o.Z.......c...9...F....
1a220 e5 04 e4 76 38 ab 0e b5 6e 63 b0 90 5c cd 29 b7 92 78 a5 82 57 6f 24 a9 c2 95 ce e0 40 c2 f3 81 ...v8...nc..\.)..x..Wo$.....@...
1a240 c0 da 01 3c d3 ce a3 15 ec a6 5b 89 24 b8 96 e9 23 ff 00 48 b8 b8 20 6e 54 50 cc e5 db 19 f7 3f ...<......[.$...#..H...nTP.....?
1a260 29 01 b8 e3 14 81 a2 ba b8 b7 b5 69 23 44 bf 84 a7 d9 6d df 2a fb 58 05 52 e5 89 1c 80 bf 31 ca )..........i#D....m.*.X.R.....1.
1a280 8c 30 e0 d4 3b 5f 95 ab 3f 5e 9a ff 00 c1 b6 c2 6e f2 bc b4 dd 7a fd f6 ea fa fe 84 b6 da f4 76 .0..;_..?^......n....z.........v
1a2a0 b3 43 70 d7 09 68 d6 d7 be 74 8d 6b 96 7f 28 94 0b b4 86 c0 23 a8 18 04 92 43 12 70 69 2e 57 49 .Cp..h...t.k..(.....#....C.pi.WI
1a2c0 89 e4 4d 3e d6 5b f8 e0 61 70 44 f2 10 ae 09 4e 30 08 25 72 48 f9 70 7b fa 9a 75 8d 85 d2 5b da ..M>.[..apD....N0.%rH.p{..u...[.
1a2e0 5c 5b d8 2d b4 b6 d3 3a dc 5d 49 70 9b 8c 5b 40 0a c8 4e 06 57 77 0c 30 db 8f 07 1c 4c b7 b3 4a \[.-...:.]Ip..[@..N.Ww.0....L..J
1a300 96 b6 f7 57 8d 2c f6 ee 90 49 1a 85 45 f2 49 c0 cb 1c 61 72 00 c9 c6 d0 a3 a8 24 09 72 a7 d1 6b ...W.,...I..E.I...ar......$.r..k
1a320 e5 bf e0 2a 4a 52 6a 1c da 3d 3c 96 da fe 46 6e ab 3a 68 9a 84 91 db dd 59 c2 93 9f 38 24 9f bd ...*JRj..=<...Fn.:h.....Y...8$..
1a340 3c 8f ef 23 e1 ba 60 9e 79 07 3c e4 02 b7 0c fa 0e 81 3c ba 7e a9 e1 62 64 f3 37 82 97 e9 f7 58 <..#..`.y.<.......<.~..bd.7....X
1a360 06 19 c8 3c e0 f6 24 63 1c f5 a2 a5 aa d2 d5 53 6f ee ff 00 26 76 d2 fa c3 a6 ad 56 cb b7 3a 5f ...<..$c.......So...&v.....V..:_
1a380 87 43 f7 57 52 f1 36 a7 24 77 c9 1e a2 0c 50 3c 36 8d 1d e5 9e e3 e7 2b 00 c4 15 e5 f1 19 22 40 .C.WR.6.$w....P<6......+......"@
1a3a0 32 c5 b2 00 3b 4d 36 58 ee ec ef ef 3f e1 1e b2 9e 36 f3 cd bc 77 b6 77 bb 61 40 08 e7 0a 7e 42 2...;M6X....?....6...w.w.a@...~B
1a3c0 40 38 65 e5 10 7c c3 2d 8a c5 d6 a6 ba b2 d0 ef 7c 47 6b 7d 29 16 f3 5e 5c 18 67 08 fb de de 49 @8e..|.-........|Gk})..^\.g....I
1a3e0 02 82 76 8f 94 08 80 4e 37 21 c1 2c f8 15 57 47 f1 26 9b 35 ec da 44 9a 18 13 5b 47 a6 4a 2e e3 ..v....N7!.,..WG.&.5..D...[G.J..
1a400 90 29 79 35 02 77 3b 28 5c 64 12 0b 63 1b f0 01 c0 e2 bf 7f 54 e9 d4 a1 25 1d b5 4d 74 7b 2f 2e .)y5.w;(\d..c.......T...%..Mt{/.
1a420 b6 ef be da 5c fc c6 bd 2a f4 ab 73 db d3 ba 57 71 ba bd f6 69 e9 75 7b 76 67 c1 5f b4 d7 84 a6 ....\...*..s...Wq...i.u{vg._....
1a440 fd 96 be 17 e9 ff 00 0c 2c 74 ed 41 2f af 2f f5 1b bf 11 eb 62 c6 6b 58 2e 03 a0 b5 4b 78 64 74 ........,t.A/./.....b.kX....Kxdt
1a460 5d e0 a3 3c 92 26 58 79 7e 5e 18 33 ca 83 e3 ff 00 12 58 68 f3 e8 fa 46 ab a1 e9 37 52 cf f6 39 ]..<.&Xy~^.3......Xh...F...7R..9
1a480 be d8 75 0b 6d 8a c5 65 76 53 1f 0b b9 0a b8 c3 1e 59 95 86 30 00 1f bc 3e 3a f0 6e 9d a8 59 c5 ..u.m..evS.......Y..0...>:.n..Y.
1a4a0 a5 78 9a d6 cf 59 b3 82 ea 5b 24 b7 d5 ec 96 71 80 ef 97 3b bf 88 e0 e0 e3 29 bb e5 c7 43 ce 78 .x...Y...[$....q...;.....)...C.x
1a4c0 83 f6 70 f8 45 e2 1f 04 4b a2 6a be 03 d1 e7 d1 ed 19 e1 83 4a 9b 4c 8c a4 7e 6d be 65 91 1b 1b ..p.E...K.j.........J.L..~m.e...
1a4e0 92 42 3e 50 ea 46 d1 c8 1b 86 ea f8 6c 57 0a 53 a8 f9 e9 d7 b2 e9 74 df 5d 15 fe 69 e8 97 5f 9f .B>P.F......lW.S......t.]..i.._.
1a500 bf 1e 27 73 ab 28 62 62 f9 ed ad b6 49 68 ad 77 d1 f9 f6 ed a7 e1 47 86 fc 31 e2 3d 56 e0 a6 99 ..'s.(bb....Ih.w......G..1.=V...
1a520 a7 5c cd 34 96 8d 24 d1 e9 70 19 48 28 08 5c 85 e4 73 8e 7a 00 dc 13 d2 bb 6f 85 ff 00 b2 cf c7 .\.4..$..p.H(.\..s.z.....o......
1a540 df 88 7a ca e9 3a 0f c2 1d 7a fe e2 f2 de 44 58 ae ad 9e 21 31 4c 12 fb 99 94 30 52 53 19 c0 52 ..z..:...z....DX...!1L....0RS..R
1a560 57 23 e6 af d9 cf 85 9f 08 be 16 fc 3a 48 bc 21 e0 4f 87 fa 56 8e 12 ee 4d 31 ae 74 fb 6d 8e f1 W#..........:H.!.O..V...M1.t.m..
1a580 a2 ab 1c 92 4b 10 5a 50 c3 2c 58 14 1f 36 0e 07 1f fb 6e df 78 af c3 7f 0d b4 ef 18 69 fe 37 d5 ....K.ZP.,X..6....n.x.......i.7.
1a5a0 2d e1 b0 b7 b8 ba 78 ec 26 58 6e 9c c9 67 2d b2 6d b9 0a 59 18 17 2e cc 06 1f a0 08 7e 6a e2 c7 -.....x.&Xn..g-.m..Y........~j..
1a5c0 f0 d4 72 ec 14 f1 15 a7 7b 2b b4 95 b4 f2 7a bd bd 1e 9b 1d 74 73 8a 33 c4 38 46 37 8a 6b 56 ed ..r.....{+....z.....ts.3.8F7.kV.
1a5e0 d6 cb 4b 3d de 9d 6d 7b 9f 01 fc 32 ff 00 82 4e fe d5 be 31 94 58 78 93 c3 56 1a 0c d6 3a 7c 93 ..K=..m{...2...N...1.Xx..V...:|.
1a600 0b 7d 4b 51 52 67 89 26 55 95 dc 46 c4 e5 19 99 19 00 04 b4 32 a6 3c c8 dc 0f 33 f8 b5 fb 26 7c .}KQRg.&U..F........2.<...3...&|
1a620 59 f8 75 36 9f 71 77 a3 d9 cb 0d e5 ad 8b da 6a 3a 44 a6 48 5f ed 23 f7 50 bb b6 04 53 a8 04 32 Y.u6.qw........j:D.H_.#.P...S..2
1a640 70 c3 03 23 18 27 e8 98 7f 6b 5f 88 fa 27 c5 9d 39 7e 15 f9 5e 1c b4 f8 79 a3 dc de e9 5a 72 ff p..#.'...k_..'..9~..^...y....Zr.
1a660 00 a4 42 6e 64 b5 8d a7 70 24 f9 94 3c c5 a5 00 96 28 5b 82 48 cd 75 5f 0b 34 dd 3f e3 d5 f7 c5 ..Bnd...p$..<....([.H.u_.4.?....
1a680 a7 f8 88 93 35 a5 cd 9d fe a1 16 93 a7 5c 34 16 91 ea 06 ca ea 58 e7 31 72 19 57 ec 91 fe ef 8d ....5........\4......X.1r.W.....
1a6a0 c5 55 8b 7c 80 57 c8 46 1c b5 64 9a 5a 5e fe 49 6f dd 3e bb 2b 9f 41 89 95 38 73 34 b4 57 5e 77 .U.|.W.F..d.Z^.Io.>.+.A..8s4.W^w
1a6c0 56 5f 3b fa 25 e6 b5 3e 0b f1 2e 9b ab 68 73 de 78 7a e6 66 7b ad 3a ed 60 8e d5 ad bc a6 8c 82 V_;.%..>.....hs.xz.f{.:.`.......
1a6e0 55 97 69 e5 72 72 4a ff 00 b4 49 e7 91 44 69 d7 5a 7f 9d 62 93 3c 4c f0 ab 5b dc 44 43 85 66 51 U.i.rrJ...I..Di.Z..b.<L..[.DC.fQ
1a700 b8 46 41 ea 7e 6c 91 c8 38 07 82 4d 75 7e 2a f1 66 a5 e3 3b 37 d7 ae 2d ad 6c e3 68 a2 43 63 65 .FA.~l..8..Mu~*.f..;7..-.l.h.Cce
1a720 0e c8 83 43 1b 22 b8 e7 25 88 4e 49 24 92 c7 04 71 8c 0b a7 b7 d3 2e 2d ee f4 a8 0c 37 22 e0 40 ...C."..%.NI$...q......-....7".@
1a740 b3 f9 84 96 42 80 31 6f 56 21 b1 91 80 31 d3 27 35 93 84 94 b9 2f 76 ba f9 af d3 6f c4 e7 b7 25 ....B.1oV!...1.'5..../v....o...%
1a760 b9 1e 92 db 4b 75 b7 9e de 6f a7 5d 02 d6 d9 f5 0d 46 cd 74 df 0e c8 c2 e2 d0 06 7f 34 88 91 e3 ....Ku...o.].....F.t........4...
1a780 8d 0b c8 72 7f 84 96 62 39 ee 07 4e 35 2d 1e db 50 58 af 75 bd 66 29 52 69 4c 6f 65 6b 6c 14 a3 ...r...b9..N5-..PX.u.f)RiLoekl..
1a7a0 a8 55 0a 48 46 0a 4e 4a 2f 2d b0 8c 90 38 cd dd 3f c2 fa 15 ab 6a 51 5d d9 9b 8f ec f9 1e 18 77 .U.HF.NJ/-...8..?....jQ].......w
1a7c0 39 5d f2 70 0b 36 39 da 39 2a aa 54 82 dc b3 0e 0c c2 6b 01 69 7d 75 a3 69 cb 6b 6f 26 9b 1c b6 9].p.69.9*.T......k.i}u.i.ko&...
1a7e0 d1 b3 6f 92 07 72 a1 c8 70 07 de 19 53 80 01 1d bb d6 74 e3 3c 4d 2e 78 47 e6 dd 9e 9b db 7e 96 ..o..r..p...S.....t.<M.xG.....~.
1a800 3a a8 d4 a7 4e 6e 32 7a 27 af e3 d3 ae d2 d7 fe 18 ce d2 3c 33 e1 cd 62 dd af f5 6d 1f 51 b8 b8 :...Nn2z'..........<3..b...m.Q..
1a820 92 56 32 4c ba 8a 44 58 fa 95 28 4e 7d 4e 79 eb 81 d2 8a ea f4 5f 01 f8 7f c6 16 bf da 8f 61 0d .V2L..DX..(N}Ny......_........a.
1a840 b0 55 8e 35 8a 24 c8 e2 35 dc 72 4e 4e 5b 71 f6 04 28 e0 0a 2a e5 86 8b 93 6d ca fe 52 68 51 ad .U.5.$..5.rNN[q..(..*....m..RhQ.
1a860 5a 11 b7 ff 00 23 fa c4 ff d9 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Z....#..........................
1a880 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a8a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a8c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a8e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a920 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a9a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a9c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1a9e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1aa00 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 70 72 6f 78 79 2e 63 00 00 00 00 00 00 00 00 proxylab-handout/proxy.c........
1aa20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1aa40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1aa60 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000644.0006626.0000144.0000
1aa80 30 30 30 30 36 31 34 00 31 32 36 32 33 34 36 34 34 36 36 00 30 31 33 37 32 36 00 20 30 00 00 00 0000614.12623464466.013726..0...
1aaa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1aac0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1aae0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ab00 00 75 73 74 61 72 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
1ab20 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
1ab40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ab60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ab80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1aba0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1abc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1abe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ac00 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 0a 2f 2a 20 52 65 63 6f 6d 6d 65 6e 64 #include.<stdio.h>../*.Recommend
1ac20 65 64 20 6d 61 78 20 63 61 63 68 65 20 61 6e 64 20 6f 62 6a 65 63 74 20 73 69 7a 65 73 20 2a 2f ed.max.cache.and.object.sizes.*/
1ac40 0a 23 64 65 66 69 6e 65 20 4d 41 58 5f 43 41 43 48 45 5f 53 49 5a 45 20 31 30 34 39 30 30 30 0a .#define.MAX_CACHE_SIZE.1049000.
1ac60 23 64 65 66 69 6e 65 20 4d 41 58 5f 4f 42 4a 45 43 54 5f 53 49 5a 45 20 31 30 32 34 30 30 0a 0a #define.MAX_OBJECT_SIZE.102400..
1ac80 2f 2a 20 59 6f 75 20 77 6f 6e 27 74 20 6c 6f 73 65 20 73 74 79 6c 65 20 70 6f 69 6e 74 73 20 66 /*.You.won't.lose.style.points.f
1aca0 6f 72 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 69 73 20 6c 6f 6e 67 20 6c 69 6e 65 20 69 6e 20 79 or.including.this.long.line.in.y
1acc0 6f 75 72 20 63 6f 64 65 20 2a 2f 0a 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 75 our.code.*/.static.const.char.*u
1ace0 73 65 72 5f 61 67 65 6e 74 5f 68 64 72 20 3d 20 22 55 73 65 72 2d 41 67 65 6e 74 3a 20 4d 6f 7a ser_agent_hdr.=."User-Agent:.Moz
1ad00 69 6c 6c 61 2f 35 2e 30 20 28 58 31 31 3b 20 4c 69 6e 75 78 20 78 38 36 5f 36 34 3b 20 72 76 3a illa/5.0.(X11;.Linux.x86_64;.rv:
1ad20 31 30 2e 30 2e 33 29 20 47 65 63 6b 6f 2f 32 30 31 32 30 33 30 35 20 46 69 72 65 66 6f 78 2f 31 10.0.3).Gecko/20120305.Firefox/1
1ad40 30 2e 30 2e 33 5c 72 5c 6e 22 3b 0a 0a 69 6e 74 20 6d 61 69 6e 28 29 0a 7b 0a 20 20 20 20 70 72 0.0.3\r\n";..int.main().{.....pr
1ad60 69 6e 74 66 28 22 25 73 22 2c 20 75 73 65 72 5f 61 67 65 6e 74 5f 68 64 72 29 3b 0a 20 20 20 20 intf("%s",.user_agent_hdr);.....
1ad80 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 return.0;.}.....................
1ada0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1adc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ade0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ae00 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 70 6f 72 74 2d 66 6f 72 2d 75 73 65 72 2e 70 proxylab-handout/port-for-user.p
1ae20 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 l...............................
1ae40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ae60 00 00 00 00 30 30 30 30 37 35 35 00 30 30 30 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000755.0006626.0000144.0000
1ae80 30 30 30 31 37 37 34 00 31 32 32 35 31 34 30 37 37 30 36 00 30 31 35 34 36 34 00 20 30 00 00 00 0001774.12251407706.015464..0...
1aea0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1aec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1aee0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1af00 00 75 73 74 61 72 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
1af20 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
1af40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1af60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1af80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1afa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1afc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1afe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b000 23 21 20 2f 75 73 72 2f 62 69 6e 2f 70 65 72 6c 20 2d 77 0a 75 73 65 20 73 74 72 69 63 74 3b 0a #!./usr/bin/perl.-w.use.strict;.
1b020 75 73 65 20 44 69 67 65 73 74 3a 3a 4d 44 35 3b 0a 23 0a 23 20 70 6f 72 74 2d 66 6f 72 2d 75 73 use.Digest::MD5;.#.#.port-for-us
1b040 65 72 2e 70 6c 20 2d 20 52 65 74 75 72 6e 20 61 20 70 6f 72 74 20 6e 75 6d 62 65 72 2c 20 70 2c er.pl.-.Return.a.port.number,.p,
1b060 20 66 6f 72 20 61 20 67 69 76 65 6e 20 75 73 65 72 2c 20 77 69 74 68 20 61 0a 23 20 20 20 20 20 .for.a.given.user,.with.a.#.....
1b080 6c 6f 77 20 70 72 6f 62 61 62 69 6c 69 74 79 20 6f 66 20 63 6f 6c 6c 69 73 69 6f 6e 73 2e 20 54 low.probability.of.collisions..T
1b0a0 68 65 20 70 6f 72 74 20 70 20 69 73 20 61 6c 77 61 79 73 20 65 76 65 6e 2c 20 73 6f 20 74 68 61 he.port.p.is.always.even,.so.tha
1b0c0 74 0a 23 20 20 20 20 20 75 73 65 72 73 20 63 61 6e 20 75 73 65 20 70 20 61 6e 64 20 70 2b 31 20 t.#.....users.can.use.p.and.p+1.
1b0e0 66 6f 72 20 74 65 73 74 69 6e 67 20 77 69 74 68 20 70 72 6f 78 79 20 61 6e 64 20 74 68 65 20 54 for.testing.with.proxy.and.the.T
1b100 69 6e 79 20 77 65 62 0a 23 20 20 20 20 20 73 65 72 76 65 72 2e 0a 23 20 20 20 20 20 0a 23 20 20 iny.web.#.....server..#......#..
1b120 20 20 20 75 73 61 67 65 3a 20 2e 2f 70 6f 72 74 2d 66 6f 72 2d 75 73 65 72 2e 70 6c 20 5b 6f 70 ...usage:../port-for-user.pl.[op
1b140 74 69 6f 6e 61 6c 20 75 73 65 72 20 6e 61 6d 65 5d 0a 23 0a 6d 79 20 24 6d 61 78 70 6f 72 74 20 tional.user.name].#.my.$maxport.
1b160 3d 20 36 35 35 33 36 3b 0a 6d 79 20 24 6d 69 6e 70 6f 72 74 20 3d 20 31 30 32 34 3b 0a 0a 0a 23 =.65536;.my.$minport.=.1024;...#
1b180 20 68 61 73 68 6e 61 6d 65 20 2d 20 63 6f 6d 70 75 74 65 20 61 6e 20 65 76 65 6e 20 70 6f 72 74 .hashname.-.compute.an.even.port
1b1a0 20 6e 75 6d 62 65 72 20 66 72 6f 6d 20 61 20 68 61 73 68 20 6f 66 20 74 68 65 20 61 72 67 75 6d .number.from.a.hash.of.the.argum
1b1c0 65 6e 74 0a 73 75 62 20 68 61 73 68 6e 61 6d 65 20 7b 0a 20 20 20 20 6d 79 20 24 6e 61 6d 65 20 ent.sub.hashname.{.....my.$name.
1b1e0 3d 20 73 68 69 66 74 3b 0a 20 20 20 20 6d 79 20 24 70 6f 72 74 3b 0a 20 20 20 20 6d 79 20 24 68 =.shift;.....my.$port;.....my.$h
1b200 61 73 68 20 3d 20 44 69 67 65 73 74 3a 3a 4d 44 35 3a 3a 6d 64 35 5f 68 65 78 28 24 6e 61 6d 65 ash.=.Digest::MD5::md5_hex($name
1b220 29 3b 0a 20 20 20 20 23 20 74 61 6b 65 20 6f 6e 6c 79 20 74 68 65 20 6c 61 73 74 20 33 32 20 62 );.....#.take.only.the.last.32.b
1b240 69 74 73 20 3d 3e 20 6c 61 73 74 20 38 20 68 65 78 20 64 69 67 69 74 73 0a 20 20 20 20 24 68 61 its.=>.last.8.hex.digits.....$ha
1b260 73 68 20 3d 20 73 75 62 73 74 72 28 24 68 61 73 68 2c 20 2d 38 29 3b 0a 20 20 20 20 24 68 61 73 sh.=.substr($hash,.-8);.....$has
1b280 68 20 3d 20 68 65 78 28 24 68 61 73 68 29 3b 0a 20 20 20 20 24 70 6f 72 74 20 3d 20 24 68 61 73 h.=.hex($hash);.....$port.=.$has
1b2a0 68 20 25 20 28 24 6d 61 78 70 6f 72 74 20 2d 20 24 6d 69 6e 70 6f 72 74 29 20 2b 20 24 6d 69 6e h.%.($maxport.-.$minport).+.$min
1b2c0 70 6f 72 74 3b 0a 20 20 20 20 24 70 6f 72 74 20 3d 20 24 70 6f 72 74 20 26 20 30 78 66 66 66 66 port;.....$port.=.$port.&.0xffff
1b2e0 66 66 66 65 3b 0a 20 20 20 20 70 72 69 6e 74 20 22 24 6e 61 6d 65 3a 20 24 70 6f 72 74 5c 6e 22 fffe;.....print."$name:.$port\n"
1b300 3b 0a 7d 0a 0a 0a 23 20 49 66 20 63 61 6c 6c 65 64 20 77 69 74 68 20 6e 6f 20 63 6f 6d 6d 61 6e ;.}...#.If.called.with.no.comman
1b320 64 20 6c 69 6e 65 20 61 72 67 2c 20 74 68 65 6e 20 68 61 73 68 20 74 68 65 20 75 73 65 72 69 64 d.line.arg,.then.hash.the.userid
1b340 2c 20 6f 74 68 65 72 77 69 73 65 0a 23 20 68 61 73 68 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c ,.otherwise.#.hash.the.command.l
1b360 69 6e 65 20 61 72 67 75 6d 65 6e 74 28 73 29 2e 0a 69 66 28 24 23 41 52 47 56 20 3d 3d 20 2d 31 ine.argument(s)..if($#ARGV.==.-1
1b380 29 20 7b 0a 20 20 20 20 6d 79 20 28 24 75 73 65 72 6e 61 6d 65 29 20 3d 20 67 65 74 70 77 75 69 ).{.....my.($username).=.getpwui
1b3a0 64 28 24 3c 29 3b 0a 20 20 20 20 68 61 73 68 6e 61 6d 65 28 24 75 73 65 72 6e 61 6d 65 29 3b 0a d($<);.....hashname($username);.
1b3c0 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 66 6f 72 65 61 63 68 28 40 41 52 47 56 29 20 7b 0a 20 20 }.else.{.....foreach(@ARGV).{...
1b3e0 20 20 20 20 20 20 68 61 73 68 6e 61 6d 65 28 24 5f 29 3b 0a 20 20 20 20 7d 0a 7d 0a 00 00 00 00 ......hashname($_);.....}.}.....
1b400 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 66 72 65 65 2d 70 6f 72 74 2e 73 68 00 00 00 proxylab-handout/free-port.sh...
1b420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b460 00 00 00 00 30 30 30 30 37 30 30 00 30 30 30 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000700.0006626.0000144.0000
1b480 30 30 30 31 30 30 33 00 31 32 32 34 31 30 32 33 32 37 34 00 30 31 34 36 30 32 00 20 30 00 00 00 0001003.12241023274.014602..0...
1b4a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b4c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b4e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b500 00 75 73 74 61 72 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
1b520 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
1b540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b5a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b5c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b5e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b600 23 21 2f 62 69 6e 2f 62 61 73 68 0a 0a 23 0a 23 20 66 72 65 65 2d 70 6f 72 74 2e 73 68 20 2d 20 #!/bin/bash..#.#.free-port.sh.-.
1b620 72 65 74 75 72 6e 73 20 61 6e 20 75 6e 75 73 65 64 20 54 43 50 20 70 6f 72 74 2e 20 0a 23 0a 50 returns.an.unused.TCP.port...#.P
1b640 4f 52 54 5f 53 54 41 52 54 3d 34 35 30 30 0a 50 4f 52 54 5f 4d 41 58 3d 36 35 30 30 30 0a 70 6f ORT_START=4500.PORT_MAX=65000.po
1b660 72 74 3d 24 7b 50 4f 52 54 5f 53 54 41 52 54 7d 0a 0a 77 68 69 6c 65 20 5b 20 54 52 55 45 20 5d rt=${PORT_START}..while.[.TRUE.]
1b680 20 0a 64 6f 0a 20 20 70 6f 72 74 73 69 6e 75 73 65 3d 60 6e 65 74 73 74 61 74 20 2d 2d 6e 75 6d ..do...portsinuse=`netstat.--num
1b6a0 65 72 69 63 2d 70 6f 72 74 73 20 2d 2d 6e 75 6d 65 72 69 63 2d 68 6f 73 74 73 20 2d 61 20 2d 2d eric-ports.--numeric-hosts.-a.--
1b6c0 70 72 6f 74 6f 63 6f 6c 3d 74 63 70 69 70 20 7c 20 67 72 65 70 20 74 63 70 20 7c 20 5c 0a 20 20 protocol=tcpip.|.grep.tcp.|.\...
1b6e0 20 20 63 75 74 20 2d 63 32 31 2d 20 7c 20 63 75 74 20 2d 64 27 3a 27 20 2d 66 32 20 7c 20 63 75 ..cut.-c21-.|.cut.-d':'.-f2.|.cu
1b700 74 20 2d 64 27 20 27 20 2d 66 31 20 7c 20 67 72 65 70 20 2d 45 20 22 5b 30 2d 39 5d 2b 22 20 7c t.-d'.'.-f1.|.grep.-E."[0-9]+".|
1b720 20 75 6e 69 71 20 7c 20 74 72 20 22 5c 6e 22 20 22 20 22 60 0a 0a 20 20 65 63 68 6f 20 22 24 7b .uniq.|.tr."\n"."."`....echo."${
1b740 70 6f 72 74 73 69 6e 75 73 65 7d 22 20 7c 20 67 72 65 70 20 2d 77 71 20 22 24 7b 70 6f 72 74 7d portsinuse}".|.grep.-wq."${port}
1b760 22 0a 20 20 69 66 20 5b 20 22 24 3f 22 20 3d 3d 20 22 30 22 20 5d 3b 20 74 68 65 6e 0a 20 20 20 "...if.[."$?".==."0".];.then....
1b780 20 69 66 20 5b 20 24 70 6f 72 74 20 2d 65 71 20 24 7b 50 4f 52 54 5f 4d 41 58 7d 20 5d 0a 20 20 .if.[.$port.-eq.${PORT_MAX}.]...
1b7a0 20 20 74 68 65 6e 0a 20 20 20 20 20 20 65 78 69 74 20 2d 31 0a 20 20 20 20 66 69 0a 20 20 20 20 ..then.......exit.-1.....fi.....
1b7c0 70 6f 72 74 3d 60 65 78 70 72 20 24 7b 70 6f 72 74 7d 20 2b 20 31 60 0a 20 20 65 6c 73 65 0a 20 port=`expr.${port}.+.1`...else..
1b7e0 20 20 20 65 63 68 6f 20 24 70 6f 72 74 0a 20 20 20 20 65 78 69 74 20 30 0a 20 20 66 69 0a 64 6f ...echo.$port.....exit.0...fi.do
1b800 6e 65 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ne..............................
1b820 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b860 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b880 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b8a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b8c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b8e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b920 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b9a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b9c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1b9e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ba00 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 64 72 69 76 65 72 2e 73 68 00 00 00 00 00 00 proxylab-handout/driver.sh......
1ba20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ba40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ba60 00 00 00 00 30 30 30 30 37 30 30 00 30 30 30 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000700.0006626.0000144.0000
1ba80 30 30 32 34 36 34 32 00 31 32 36 35 36 32 32 31 36 35 33 00 30 31 34 32 32 33 00 20 30 00 00 00 0024642.12656221653.014223..0...
1baa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1bac0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1bae0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1bb00 00 75 73 74 61 72 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
1bb20 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
1bb40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1bb60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1bb80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1bba0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1bbc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1bbe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1bc00 23 21 2f 62 69 6e 2f 62 61 73 68 0a 23 0a 23 20 64 72 69 76 65 72 2e 73 68 20 2d 20 54 68 69 73 #!/bin/bash.#.#.driver.sh.-.This
1bc20 20 69 73 20 61 20 73 69 6d 70 6c 65 20 61 75 74 6f 67 72 61 64 65 72 20 66 6f 72 20 74 68 65 20 .is.a.simple.autograder.for.the.
1bc40 50 72 6f 78 79 20 4c 61 62 2e 20 49 74 20 64 6f 65 73 0a 23 20 20 20 20 20 62 61 73 69 63 20 73 Proxy.Lab..It.does.#.....basic.s
1bc60 61 6e 69 74 79 20 63 68 65 63 6b 73 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 anity.checks.that.determine.whet
1bc80 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 63 6f 64 65 0a 23 20 20 20 20 20 62 65 68 61 76 65 her.or.not.the.code.#.....behave
1bca0 73 20 6c 69 6b 65 20 61 20 63 6f 6e 63 75 72 72 65 6e 74 20 63 61 63 68 69 6e 67 20 70 72 6f 78 s.like.a.concurrent.caching.prox
1bcc0 79 2e 20 0a 23 0a 23 20 20 20 20 20 44 61 76 69 64 20 4f 27 48 61 6c 6c 61 72 6f 6e 2c 20 43 61 y...#.#.....David.O'Hallaron,.Ca
1bce0 72 6e 65 67 69 65 20 4d 65 6c 6c 6f 6e 20 55 6e 69 76 65 72 73 69 74 79 0a 23 20 20 20 20 20 75 rnegie.Mellon.University.#.....u
1bd00 70 64 61 74 65 64 3a 20 32 2f 38 2f 32 30 31 36 0a 23 20 0a 23 20 20 20 20 20 75 73 61 67 65 3a pdated:.2/8/2016.#..#.....usage:
1bd20 20 2e 2f 64 72 69 76 65 72 2e 73 68 0a 23 20 0a 0a 23 20 50 6f 69 6e 74 20 76 61 6c 75 65 73 0a ../driver.sh.#...#.Point.values.
1bd40 4d 41 58 5f 42 41 53 49 43 3d 34 30 0a 4d 41 58 5f 43 4f 4e 43 55 52 52 45 4e 43 59 3d 31 35 0a MAX_BASIC=40.MAX_CONCURRENCY=15.
1bd60 4d 41 58 5f 43 41 43 48 45 3d 31 35 0a 0a 23 20 56 61 72 69 6f 75 73 20 63 6f 6e 73 74 61 6e 74 MAX_CACHE=15..#.Various.constant
1bd80 73 0a 48 4f 4d 45 5f 44 49 52 3d 60 70 77 64 60 0a 50 52 4f 58 59 5f 44 49 52 3d 22 2e 2f 2e 70 s.HOME_DIR=`pwd`.PROXY_DIR="./.p
1bda0 72 6f 78 79 22 0a 4e 4f 50 52 4f 58 59 5f 44 49 52 3d 22 2e 2f 2e 6e 6f 70 72 6f 78 79 22 0a 54 roxy".NOPROXY_DIR="./.noproxy".T
1bdc0 49 4d 45 4f 55 54 3d 35 0a 4d 41 58 5f 52 41 4e 44 3d 36 33 30 30 30 0a 50 4f 52 54 5f 53 54 41 IMEOUT=5.MAX_RAND=63000.PORT_STA
1bde0 52 54 3d 31 30 32 34 0a 50 4f 52 54 5f 4d 41 58 3d 36 35 30 30 30 0a 4d 41 58 5f 50 4f 52 54 5f RT=1024.PORT_MAX=65000.MAX_PORT_
1be00 54 52 49 45 53 3d 31 30 0a 0a 23 20 4c 69 73 74 20 6f 66 20 74 65 78 74 20 61 6e 64 20 62 69 6e TRIES=10..#.List.of.text.and.bin
1be20 61 72 79 20 66 69 6c 65 73 20 66 6f 72 20 74 68 65 20 62 61 73 69 63 20 74 65 73 74 0a 42 41 53 ary.files.for.the.basic.test.BAS
1be40 49 43 5f 4c 49 53 54 3d 22 68 6f 6d 65 2e 68 74 6d 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 IC_LIST="home.html.............c
1be60 73 61 70 70 2e 63 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 69 6e 79 2e 63 0a 20 20 20 20 20 20 sapp.c.............tiny.c.......
1be80 20 20 20 20 20 20 67 6f 64 7a 69 6c 6c 61 2e 6a 70 67 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 ......godzilla.jpg.............t
1bea0 69 6e 79 22 0a 0a 23 20 4c 69 73 74 20 6f 66 20 74 65 78 74 20 66 69 6c 65 73 20 66 6f 72 20 74 iny"..#.List.of.text.files.for.t
1bec0 68 65 20 63 61 63 68 65 20 74 65 73 74 0a 43 41 43 48 45 5f 4c 49 53 54 3d 22 74 69 6e 79 2e 63 he.cache.test.CACHE_LIST="tiny.c
1bee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 6f 6d 65 2e 68 74 6d 6c 0a 20 20 20 20 20 20 20 20 20 .............home.html..........
1bf00 20 20 20 63 73 61 70 70 2e 63 22 0a 0a 23 20 54 68 65 20 66 69 6c 65 20 77 65 20 77 69 6c 6c 20 ...csapp.c"..#.The.file.we.will.
1bf20 66 65 74 63 68 20 66 6f 72 20 76 61 72 69 6f 75 73 20 74 65 73 74 73 0a 46 45 54 43 48 5f 46 49 fetch.for.various.tests.FETCH_FI
1bf40 4c 45 3d 22 68 6f 6d 65 2e 68 74 6d 6c 22 0a 0a 23 23 23 23 23 0a 23 20 48 65 6c 70 65 72 20 66 LE="home.html"..#####.#.Helper.f
1bf60 75 6e 63 74 69 6f 6e 73 0a 23 0a 0a 23 0a 23 20 64 6f 77 6e 6c 6f 61 64 5f 70 72 6f 78 79 20 2d unctions.#..#.#.download_proxy.-
1bf80 20 64 6f 77 6e 6c 6f 61 64 20 61 20 66 69 6c 65 20 66 72 6f 6d 20 74 68 65 20 6f 72 69 67 69 6e .download.a.file.from.the.origin
1bfa0 20 73 65 72 76 65 72 20 76 69 61 20 74 68 65 20 70 72 6f 78 79 0a 23 20 75 73 61 67 65 3a 20 64 .server.via.the.proxy.#.usage:.d
1bfc0 6f 77 6e 6c 6f 61 64 5f 70 72 6f 78 79 20 3c 74 65 73 74 64 69 72 3e 20 3c 66 69 6c 65 6e 61 6d ownload_proxy.<testdir>.<filenam
1bfe0 65 3e 20 3c 6f 72 69 67 69 6e 5f 75 72 6c 3e 20 3c 70 72 6f 78 79 5f 75 72 6c 3e 0a 23 0a 66 75 e>.<origin_url>.<proxy_url>.#.fu
1c000 6e 63 74 69 6f 6e 20 64 6f 77 6e 6c 6f 61 64 5f 70 72 6f 78 79 20 7b 0a 20 20 20 20 63 64 20 24 nction.download_proxy.{.....cd.$
1c020 31 0a 20 20 20 20 63 75 72 6c 20 2d 2d 6d 61 78 2d 74 69 6d 65 20 24 7b 54 49 4d 45 4f 55 54 7d 1.....curl.--max-time.${TIMEOUT}
1c040 20 2d 2d 73 69 6c 65 6e 74 20 2d 2d 70 72 6f 78 79 20 24 34 20 2d 2d 6f 75 74 70 75 74 20 24 32 .--silent.--proxy.$4.--output.$2
1c060 20 24 33 0a 20 20 20 20 28 28 20 24 3f 20 3d 3d 20 32 38 20 29 29 20 26 26 20 65 63 68 6f 20 22 .$3.....((.$?.==.28.)).&&.echo."
1c080 45 72 72 6f 72 3a 20 46 65 74 63 68 20 74 69 6d 65 64 20 6f 75 74 20 61 66 74 65 72 20 24 7b 54 Error:.Fetch.timed.out.after.${T
1c0a0 49 4d 45 4f 55 54 7d 20 73 65 63 6f 6e 64 73 22 0a 20 20 20 20 63 64 20 24 48 4f 4d 45 5f 44 49 IMEOUT}.seconds".....cd.$HOME_DI
1c0c0 52 0a 7d 0a 0a 23 0a 23 20 64 6f 77 6e 6c 6f 61 64 5f 6e 6f 70 72 6f 78 79 20 2d 20 64 6f 77 6e R.}..#.#.download_noproxy.-.down
1c0e0 6c 6f 61 64 20 61 20 66 69 6c 65 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 74 68 65 20 6f 72 load.a.file.directly.from.the.or
1c100 69 67 69 6e 20 73 65 72 76 65 72 0a 23 20 75 73 61 67 65 3a 20 64 6f 77 6e 6c 6f 61 64 5f 6e 6f igin.server.#.usage:.download_no
1c120 70 72 6f 78 79 20 3c 74 65 73 74 64 69 72 3e 20 3c 66 69 6c 65 6e 61 6d 65 3e 20 3c 6f 72 69 67 proxy.<testdir>.<filename>.<orig
1c140 69 6e 5f 75 72 6c 3e 0a 23 0a 66 75 6e 63 74 69 6f 6e 20 64 6f 77 6e 6c 6f 61 64 5f 6e 6f 70 72 in_url>.#.function.download_nopr
1c160 6f 78 79 20 7b 0a 20 20 20 20 63 64 20 24 31 0a 20 20 20 20 63 75 72 6c 20 2d 2d 6d 61 78 2d 74 oxy.{.....cd.$1.....curl.--max-t
1c180 69 6d 65 20 24 7b 54 49 4d 45 4f 55 54 7d 20 2d 2d 73 69 6c 65 6e 74 20 2d 2d 6f 75 74 70 75 74 ime.${TIMEOUT}.--silent.--output
1c1a0 20 24 32 20 24 33 20 0a 20 20 20 20 28 28 20 24 3f 20 3d 3d 20 32 38 20 29 29 20 26 26 20 65 63 .$2.$3......((.$?.==.28.)).&&.ec
1c1c0 68 6f 20 22 45 72 72 6f 72 3a 20 46 65 74 63 68 20 74 69 6d 65 64 20 6f 75 74 20 61 66 74 65 72 ho."Error:.Fetch.timed.out.after
1c1e0 20 24 7b 54 49 4d 45 4f 55 54 7d 20 73 65 63 6f 6e 64 73 22 0a 20 20 20 20 63 64 20 24 48 4f 4d .${TIMEOUT}.seconds".....cd.$HOM
1c200 45 5f 44 49 52 0a 7d 0a 0a 23 0a 23 20 63 6c 65 61 72 5f 64 69 72 73 20 2d 20 43 6c 65 61 72 20 E_DIR.}..#.#.clear_dirs.-.Clear.
1c220 74 68 65 20 64 6f 77 6e 6c 6f 61 64 20 64 69 72 65 63 74 6f 72 69 65 73 0a 23 0a 66 75 6e 63 74 the.download.directories.#.funct
1c240 69 6f 6e 20 63 6c 65 61 72 5f 64 69 72 73 20 7b 0a 20 20 20 20 72 6d 20 2d 72 66 20 24 7b 50 52 ion.clear_dirs.{.....rm.-rf.${PR
1c260 4f 58 59 5f 44 49 52 7d 2f 2a 0a 20 20 20 20 72 6d 20 2d 72 66 20 24 7b 4e 4f 50 52 4f 58 59 5f OXY_DIR}/*.....rm.-rf.${NOPROXY_
1c280 44 49 52 7d 2f 2a 0a 7d 0a 0a 23 0a 23 20 77 61 69 74 5f 66 6f 72 5f 70 6f 72 74 5f 75 73 65 20 DIR}/*.}..#.#.wait_for_port_use.
1c2a0 2d 20 53 70 69 6e 73 20 75 6e 74 69 6c 20 74 68 65 20 54 43 50 20 70 6f 72 74 20 6e 75 6d 62 65 -.Spins.until.the.TCP.port.numbe
1c2c0 72 20 70 61 73 73 65 64 20 61 73 20 61 6e 0a 23 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 69 73 r.passed.as.an.#.....argument.is
1c2e0 20 61 63 74 75 61 6c 6c 79 20 62 65 69 6e 67 20 75 73 65 64 2e 20 54 69 6d 65 73 20 6f 75 74 20 .actually.being.used..Times.out.
1c300 61 66 74 65 72 20 35 20 73 65 63 6f 6e 64 73 2e 0a 23 0a 66 75 6e 63 74 69 6f 6e 20 77 61 69 74 after.5.seconds..#.function.wait
1c320 5f 66 6f 72 5f 70 6f 72 74 5f 75 73 65 28 29 20 7b 0a 20 20 20 20 74 69 6d 65 6f 75 74 5f 63 6f _for_port_use().{.....timeout_co
1c340 75 6e 74 3d 22 30 22 0a 20 20 20 20 70 6f 72 74 73 69 6e 75 73 65 3d 60 6e 65 74 73 74 61 74 20 unt="0".....portsinuse=`netstat.
1c360 2d 2d 6e 75 6d 65 72 69 63 2d 70 6f 72 74 73 20 2d 2d 6e 75 6d 65 72 69 63 2d 68 6f 73 74 73 20 --numeric-ports.--numeric-hosts.
1c380 2d 61 20 2d 2d 70 72 6f 74 6f 63 6f 6c 3d 74 63 70 69 70 20 5c 0a 20 20 20 20 20 20 20 20 7c 20 -a.--protocol=tcpip.\.........|.
1c3a0 67 72 65 70 20 74 63 70 20 7c 20 63 75 74 20 2d 63 32 31 2d 20 7c 20 63 75 74 20 2d 64 27 3a 27 grep.tcp.|.cut.-c21-.|.cut.-d':'
1c3c0 20 2d 66 32 20 7c 20 63 75 74 20 2d 64 27 20 27 20 2d 66 31 20 5c 0a 20 20 20 20 20 20 20 20 7c .-f2.|.cut.-d'.'.-f1.\.........|
1c3e0 20 67 72 65 70 20 2d 45 20 22 5b 30 2d 39 5d 2b 22 20 7c 20 75 6e 69 71 20 7c 20 74 72 20 22 5c .grep.-E."[0-9]+".|.uniq.|.tr."\
1c400 6e 22 20 22 20 22 60 0a 0a 20 20 20 20 65 63 68 6f 20 22 24 7b 70 6f 72 74 73 69 6e 75 73 65 7d n"."."`......echo."${portsinuse}
1c420 22 20 7c 20 67 72 65 70 20 2d 77 71 20 22 24 7b 31 7d 22 0a 20 20 20 20 77 68 69 6c 65 20 5b 20 ".|.grep.-wq."${1}".....while.[.
1c440 22 24 3f 22 20 21 3d 20 22 30 22 20 5d 0a 20 20 20 20 64 6f 0a 20 20 20 20 20 20 20 20 74 69 6d "$?".!=."0".].....do.........tim
1c460 65 6f 75 74 5f 63 6f 75 6e 74 3d 60 65 78 70 72 20 24 7b 74 69 6d 65 6f 75 74 5f 63 6f 75 6e 74 eout_count=`expr.${timeout_count
1c480 7d 20 2b 20 31 60 0a 20 20 20 20 20 20 20 20 69 66 20 5b 20 22 24 7b 74 69 6d 65 6f 75 74 5f 63 }.+.1`.........if.[."${timeout_c
1c4a0 6f 75 6e 74 7d 22 20 3d 3d 20 22 24 7b 4d 41 58 5f 50 4f 52 54 5f 54 52 49 45 53 7d 22 20 5d 3b ount}".==."${MAX_PORT_TRIES}".];
1c4c0 20 74 68 65 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 6b 69 6c 6c 20 2d 41 4c 52 4d 20 24 24 0a .then.............kill.-ALRM.$$.
1c4e0 20 20 20 20 20 20 20 20 66 69 0a 0a 20 20 20 20 20 20 20 20 73 6c 65 65 70 20 31 0a 20 20 20 20 ........fi..........sleep.1.....
1c500 20 20 20 20 70 6f 72 74 73 69 6e 75 73 65 3d 60 6e 65 74 73 74 61 74 20 2d 2d 6e 75 6d 65 72 69 ....portsinuse=`netstat.--numeri
1c520 63 2d 70 6f 72 74 73 20 2d 2d 6e 75 6d 65 72 69 63 2d 68 6f 73 74 73 20 2d 61 20 2d 2d 70 72 6f c-ports.--numeric-hosts.-a.--pro
1c540 74 6f 63 6f 6c 3d 74 63 70 69 70 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 20 67 72 65 70 tocol=tcpip.\.............|.grep
1c560 20 74 63 70 20 7c 20 63 75 74 20 2d 63 32 31 2d 20 7c 20 63 75 74 20 2d 64 27 3a 27 20 2d 66 32 .tcp.|.cut.-c21-.|.cut.-d':'.-f2
1c580 20 7c 20 63 75 74 20 2d 64 27 20 27 20 2d 66 31 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c .|.cut.-d'.'.-f1.\.............|
1c5a0 20 67 72 65 70 20 2d 45 20 22 5b 30 2d 39 5d 2b 22 20 7c 20 75 6e 69 71 20 7c 20 74 72 20 22 5c .grep.-E."[0-9]+".|.uniq.|.tr."\
1c5c0 6e 22 20 22 20 22 60 0a 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 24 7b 70 6f 72 74 73 69 6e 75 n"."."`.........echo."${portsinu
1c5e0 73 65 7d 22 20 7c 20 67 72 65 70 20 2d 77 71 20 22 24 7b 31 7d 22 0a 20 20 20 20 64 6f 6e 65 0a se}".|.grep.-wq."${1}".....done.
1c600 7d 0a 0a 0a 23 0a 23 20 66 72 65 65 5f 70 6f 72 74 20 2d 20 72 65 74 75 72 6e 73 20 61 6e 20 61 }...#.#.free_port.-.returns.an.a
1c620 76 61 69 6c 61 62 6c 65 20 75 6e 75 73 65 64 20 54 43 50 20 70 6f 72 74 20 0a 23 0a 66 75 6e 63 vailable.unused.TCP.port..#.func
1c640 74 69 6f 6e 20 66 72 65 65 5f 70 6f 72 74 20 7b 0a 20 20 20 20 23 20 47 65 6e 65 72 61 74 65 20 tion.free_port.{.....#.Generate.
1c660 61 20 72 61 6e 64 6f 6d 20 70 6f 72 74 20 69 6e 20 74 68 65 20 72 61 6e 67 65 20 5b 50 4f 52 54 a.random.port.in.the.range.[PORT
1c680 5f 53 54 41 52 54 2c 0a 20 20 20 20 23 20 50 4f 52 54 5f 53 54 41 52 54 2b 4d 41 58 5f 52 41 4e _START,.....#.PORT_START+MAX_RAN
1c6a0 44 5d 2e 20 54 68 69 73 20 69 73 20 6e 65 65 64 65 64 20 74 6f 20 61 76 6f 69 64 20 63 6f 6c 6c D]..This.is.needed.to.avoid.coll
1c6c0 69 73 69 6f 6e 73 20 77 68 65 6e 20 6d 61 6e 79 0a 20 20 20 20 23 20 73 74 75 64 65 6e 74 73 20 isions.when.many.....#.students.
1c6e0 61 72 65 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 64 72 69 76 65 72 20 6f 6e 20 74 68 65 20 73 61 are.running.the.driver.on.the.sa
1c700 6d 65 20 6d 61 63 68 69 6e 65 2e 0a 20 20 20 20 70 6f 72 74 3d 24 28 28 28 20 52 41 4e 44 4f 4d me.machine......port=$(((.RANDOM
1c720 20 25 20 24 7b 4d 41 58 5f 52 41 4e 44 7d 29 20 2b 20 24 7b 50 4f 52 54 5f 53 54 41 52 54 7d 29 .%.${MAX_RAND}).+.${PORT_START})
1c740 29 0a 0a 20 20 20 20 77 68 69 6c 65 20 5b 20 54 52 55 45 20 5d 20 0a 20 20 20 20 64 6f 0a 20 20 )......while.[.TRUE.]......do...
1c760 20 20 20 20 20 20 70 6f 72 74 73 69 6e 75 73 65 3d 60 6e 65 74 73 74 61 74 20 2d 2d 6e 75 6d 65 ......portsinuse=`netstat.--nume
1c780 72 69 63 2d 70 6f 72 74 73 20 2d 2d 6e 75 6d 65 72 69 63 2d 68 6f 73 74 73 20 2d 61 20 2d 2d 70 ric-ports.--numeric-hosts.-a.--p
1c7a0 72 6f 74 6f 63 6f 6c 3d 74 63 70 69 70 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 20 67 72 rotocol=tcpip.\.............|.gr
1c7c0 65 70 20 74 63 70 20 7c 20 63 75 74 20 2d 63 32 31 2d 20 7c 20 63 75 74 20 2d 64 27 3a 27 20 2d ep.tcp.|.cut.-c21-.|.cut.-d':'.-
1c7e0 66 32 20 7c 20 63 75 74 20 2d 64 27 20 27 20 2d 66 31 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 f2.|.cut.-d'.'.-f1.\............
1c800 20 7c 20 67 72 65 70 20 2d 45 20 22 5b 30 2d 39 5d 2b 22 20 7c 20 75 6e 69 71 20 7c 20 74 72 20 .|.grep.-E."[0-9]+".|.uniq.|.tr.
1c820 22 5c 6e 22 20 22 20 22 60 0a 0a 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 24 7b 70 6f 72 74 73 "\n"."."`..........echo."${ports
1c840 69 6e 75 73 65 7d 22 20 7c 20 67 72 65 70 20 2d 77 71 20 22 24 7b 70 6f 72 74 7d 22 0a 20 20 20 inuse}".|.grep.-wq."${port}"....
1c860 20 20 20 20 20 69 66 20 5b 20 22 24 3f 22 20 3d 3d 20 22 30 22 20 5d 3b 20 74 68 65 6e 0a 20 20 .....if.[."$?".==."0".];.then...
1c880 20 20 20 20 20 20 20 20 20 20 69 66 20 5b 20 24 70 6f 72 74 20 2d 65 71 20 24 7b 50 4f 52 54 5f ..........if.[.$port.-eq.${PORT_
1c8a0 4d 41 58 7d 20 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6e 0a 20 20 20 20 20 20 20 20 MAX}.].............then.........
1c8c0 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 2d 31 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ........echo."-1"...............
1c8e0 20 20 72 65 74 75 72 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 0a 20 20 20 20 20 20 20 20 ..return.............fi.........
1c900 20 20 20 20 70 6f 72 74 3d 60 65 78 70 72 20 24 7b 70 6f 72 74 7d 20 2b 20 31 60 0a 20 20 20 20 ....port=`expr.${port}.+.1`.....
1c920 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 24 7b 70 6f 72 ....else.............echo."${por
1c940 74 7d 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0a 20 20 20 20 20 20 20 20 66 t}".............return.........f
1c960 69 0a 20 20 20 20 64 6f 6e 65 0a 7d 0a 0a 0a 23 23 23 23 23 23 23 0a 23 20 4d 61 69 6e 20 0a 23 i.....done.}...#######.#.Main..#
1c980 23 23 23 23 23 23 0a 0a 23 23 23 23 23 23 0a 23 20 56 65 72 69 66 79 20 74 68 61 74 20 77 65 20 ######..######.#.Verify.that.we.
1c9a0 68 61 76 65 20 61 6c 6c 20 6f 66 20 74 68 65 20 65 78 70 65 63 74 65 64 20 66 69 6c 65 73 20 77 have.all.of.the.expected.files.w
1c9c0 69 74 68 20 74 68 65 20 72 69 67 68 74 0a 23 20 70 65 72 6d 69 73 73 69 6f 6e 73 0a 23 0a 0a 23 ith.the.right.#.permissions.#..#
1c9e0 20 4b 69 6c 6c 20 61 6e 79 20 73 74 72 61 79 20 70 72 6f 78 69 65 73 20 6f 72 20 74 69 6e 79 20 .Kill.any.stray.proxies.or.tiny.
1ca00 73 65 72 76 65 72 73 20 6f 77 6e 65 64 20 62 79 20 74 68 69 73 20 75 73 65 72 0a 6b 69 6c 6c 61 servers.owned.by.this.user.killa
1ca20 6c 6c 20 2d 71 20 70 72 6f 78 79 20 74 69 6e 79 20 6e 6f 70 2d 73 65 72 76 65 72 2e 70 79 20 32 ll.-q.proxy.tiny.nop-server.py.2
1ca40 3e 20 2f 64 65 76 2f 6e 75 6c 6c 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 77 65 20 68 61 76 65 >./dev/null..#.Make.sure.we.have
1ca60 20 61 20 54 69 6e 79 20 64 69 72 65 63 74 6f 72 79 0a 69 66 20 5b 20 21 20 2d 64 20 2e 2f 74 69 .a.Tiny.directory.if.[.!.-d../ti
1ca80 6e 79 20 5d 0a 74 68 65 6e 20 0a 20 20 20 20 65 63 68 6f 20 22 45 72 72 6f 72 3a 20 2e 2f 74 69 ny.].then......echo."Error:../ti
1caa0 6e 79 20 64 69 72 65 63 74 6f 72 79 20 6e 6f 74 20 66 6f 75 6e 64 2e 22 0a 20 20 20 20 65 78 69 ny.directory.not.found.".....exi
1cac0 74 0a 66 69 0a 0a 23 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 54 69 6e 79 20 65 78 65 63 t.fi..#.If.there.is.no.Tiny.exec
1cae0 75 74 61 62 6c 65 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20 62 75 69 6c 64 20 69 74 0a 69 66 20 utable,.then.try.to.build.it.if.
1cb00 5b 20 21 20 2d 78 20 2e 2f 74 69 6e 79 2f 74 69 6e 79 20 5d 0a 74 68 65 6e 20 0a 20 20 20 20 65 [.!.-x../tiny/tiny.].then......e
1cb20 63 68 6f 20 22 42 75 69 6c 64 69 6e 67 20 74 68 65 20 74 69 6e 79 20 65 78 65 63 75 74 61 62 6c cho."Building.the.tiny.executabl
1cb40 65 2e 22 0a 20 20 20 20 28 63 64 20 2e 2f 74 69 6e 79 3b 20 6d 61 6b 65 29 0a 20 20 20 20 65 63 e.".....(cd../tiny;.make).....ec
1cb60 68 6f 20 22 22 0a 66 69 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 77 65 20 68 61 76 65 20 61 6c ho."".fi..#.Make.sure.we.have.al
1cb80 6c 20 74 68 65 20 54 69 6e 79 20 66 69 6c 65 73 20 77 65 20 6e 65 65 64 0a 69 66 20 5b 20 21 20 l.the.Tiny.files.we.need.if.[.!.
1cba0 2d 78 20 2e 2f 74 69 6e 79 2f 74 69 6e 79 20 5d 0a 74 68 65 6e 20 0a 20 20 20 20 65 63 68 6f 20 -x../tiny/tiny.].then......echo.
1cbc0 22 45 72 72 6f 72 3a 20 2e 2f 74 69 6e 79 2f 74 69 6e 79 20 6e 6f 74 20 66 6f 75 6e 64 20 6f 72 "Error:../tiny/tiny.not.found.or
1cbe0 20 6e 6f 74 20 61 6e 20 65 78 65 63 75 74 61 62 6c 65 20 66 69 6c 65 2e 22 0a 20 20 20 20 65 78 .not.an.executable.file.".....ex
1cc00 69 74 0a 66 69 0a 66 6f 72 20 66 69 6c 65 20 69 6e 20 24 7b 42 41 53 49 43 5f 4c 49 53 54 7d 0a it.fi.for.file.in.${BASIC_LIST}.
1cc20 64 6f 0a 20 20 20 20 69 66 20 5b 20 21 20 2d 65 20 2e 2f 74 69 6e 79 2f 24 7b 66 69 6c 65 7d 20 do.....if.[.!.-e../tiny/${file}.
1cc40 5d 0a 20 20 20 20 74 68 65 6e 0a 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 45 72 72 6f 72 3a 20 ].....then.........echo."Error:.
1cc60 2e 2f 74 69 6e 79 2f 24 7b 66 69 6c 65 7d 20 6e 6f 74 20 66 6f 75 6e 64 2e 22 0a 20 20 20 20 20 ./tiny/${file}.not.found."......
1cc80 20 20 20 65 78 69 74 0a 20 20 20 20 66 69 0a 64 6f 6e 65 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 ...exit.....fi.done..#.Make.sure
1cca0 20 77 65 20 68 61 76 65 20 61 6e 20 65 78 69 73 74 69 6e 67 20 65 78 65 63 75 74 61 62 6c 65 20 .we.have.an.existing.executable.
1ccc0 70 72 6f 78 79 0a 69 66 20 5b 20 21 20 2d 78 20 2e 2f 70 72 6f 78 79 20 5d 0a 74 68 65 6e 20 0a proxy.if.[.!.-x../proxy.].then..
1cce0 20 20 20 20 65 63 68 6f 20 22 45 72 72 6f 72 3a 20 2e 2f 70 72 6f 78 79 20 6e 6f 74 20 66 6f 75 ....echo."Error:../proxy.not.fou
1cd00 6e 64 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78 65 63 75 74 61 62 6c 65 20 66 69 6c 65 2e 20 50 6c nd.or.not.an.executable.file..Pl
1cd20 65 61 73 65 20 72 65 62 75 69 6c 64 20 79 6f 75 72 20 70 72 6f 78 79 20 61 6e 64 20 74 72 79 20 ease.rebuild.your.proxy.and.try.
1cd40 61 67 61 69 6e 2e 22 0a 20 20 20 20 65 78 69 74 0a 66 69 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 again.".....exit.fi..#.Make.sure
1cd60 20 77 65 20 68 61 76 65 20 61 6e 20 65 78 69 73 74 69 6e 67 20 65 78 65 63 75 74 61 62 6c 65 20 .we.have.an.existing.executable.
1cd80 6e 6f 70 2d 73 65 72 76 65 72 2e 70 79 20 66 69 6c 65 0a 69 66 20 5b 20 21 20 2d 78 20 2e 2f 6e nop-server.py.file.if.[.!.-x../n
1cda0 6f 70 2d 73 65 72 76 65 72 2e 70 79 20 5d 0a 74 68 65 6e 20 0a 20 20 20 20 65 63 68 6f 20 22 45 op-server.py.].then......echo."E
1cdc0 72 72 6f 72 3a 20 2e 2f 6e 6f 70 2d 73 65 72 76 65 72 2e 70 79 20 6e 6f 74 20 66 6f 75 6e 64 20 rror:../nop-server.py.not.found.
1cde0 6f 72 20 6e 6f 74 20 61 6e 20 65 78 65 63 75 74 61 62 6c 65 20 66 69 6c 65 2e 22 0a 20 20 20 20 or.not.an.executable.file.".....
1ce00 65 78 69 74 0a 66 69 0a 0a 23 20 43 72 65 61 74 65 20 74 68 65 20 74 65 73 74 20 64 69 72 65 63 exit.fi..#.Create.the.test.direc
1ce20 74 6f 72 69 65 73 20 69 66 20 6e 65 65 64 65 64 0a 69 66 20 5b 20 21 20 2d 64 20 24 7b 50 52 4f tories.if.needed.if.[.!.-d.${PRO
1ce40 58 59 5f 44 49 52 7d 20 5d 0a 74 68 65 6e 0a 20 20 20 20 6d 6b 64 69 72 20 24 7b 50 52 4f 58 59 XY_DIR}.].then.....mkdir.${PROXY
1ce60 5f 44 49 52 7d 0a 66 69 0a 0a 69 66 20 5b 20 21 20 2d 64 20 24 7b 4e 4f 50 52 4f 58 59 5f 44 49 _DIR}.fi..if.[.!.-d.${NOPROXY_DI
1ce80 52 7d 20 5d 0a 74 68 65 6e 0a 20 20 20 20 6d 6b 64 69 72 20 24 7b 4e 4f 50 52 4f 58 59 5f 44 49 R}.].then.....mkdir.${NOPROXY_DI
1cea0 52 7d 0a 66 69 0a 0a 23 20 41 64 64 20 61 20 68 61 6e 64 6c 65 72 20 74 6f 20 67 65 6e 65 72 61 R}.fi..#.Add.a.handler.to.genera
1cec0 74 65 20 61 20 6d 65 61 6e 69 6e 67 66 75 6c 20 74 69 6d 65 6f 75 74 20 6d 65 73 73 61 67 65 0a te.a.meaningful.timeout.message.
1cee0 74 72 61 70 20 27 65 63 68 6f 20 22 54 69 6d 65 6f 75 74 20 77 61 69 74 69 6e 67 20 66 6f 72 20 trap.'echo."Timeout.waiting.for.
1cf00 74 68 65 20 73 65 72 76 65 72 20 74 6f 20 67 72 61 62 20 74 68 65 20 70 6f 72 74 20 72 65 73 65 the.server.to.grab.the.port.rese
1cf20 72 76 65 64 20 66 6f 72 20 69 74 22 3b 20 6b 69 6c 6c 20 24 24 27 20 41 4c 52 4d 0a 0a 23 23 23 rved.for.it";.kill.$$'.ALRM..###
1cf40 23 23 0a 23 20 42 61 73 69 63 0a 23 0a 65 63 68 6f 20 22 2a 2a 2a 20 42 61 73 69 63 20 2a 2a 2a ##.#.Basic.#.echo."***.Basic.***
1cf60 22 0a 0a 23 20 52 75 6e 20 74 68 65 20 54 69 6e 79 20 57 65 62 20 73 65 72 76 65 72 0a 74 69 6e "..#.Run.the.Tiny.Web.server.tin
1cf80 79 5f 70 6f 72 74 3d 24 28 66 72 65 65 5f 70 6f 72 74 29 0a 65 63 68 6f 20 22 53 74 61 72 74 69 y_port=$(free_port).echo."Starti
1cfa0 6e 67 20 74 69 6e 79 20 6f 6e 20 24 7b 74 69 6e 79 5f 70 6f 72 74 7d 22 0a 63 64 20 2e 2f 74 69 ng.tiny.on.${tiny_port}".cd../ti
1cfc0 6e 79 0a 2e 2f 74 69 6e 79 20 24 7b 74 69 6e 79 5f 70 6f 72 74 7d 20 20 20 26 3e 20 2f 64 65 76 ny../tiny.${tiny_port}...&>./dev
1cfe0 2f 6e 75 6c 6c 20 20 26 0a 74 69 6e 79 5f 70 69 64 3d 24 21 0a 63 64 20 24 7b 48 4f 4d 45 5f 44 /null..&.tiny_pid=$!.cd.${HOME_D
1d000 49 52 7d 0a 0a 23 20 57 61 69 74 20 66 6f 72 20 74 69 6e 79 20 74 6f 20 73 74 61 72 74 20 69 6e IR}..#.Wait.for.tiny.to.start.in
1d020 20 65 61 72 6e 65 73 74 0a 77 61 69 74 5f 66 6f 72 5f 70 6f 72 74 5f 75 73 65 20 22 24 7b 74 69 .earnest.wait_for_port_use."${ti
1d040 6e 79 5f 70 6f 72 74 7d 22 0a 0a 23 20 52 75 6e 20 74 68 65 20 70 72 6f 78 79 0a 70 72 6f 78 79 ny_port}"..#.Run.the.proxy.proxy
1d060 5f 70 6f 72 74 3d 24 28 66 72 65 65 5f 70 6f 72 74 29 0a 65 63 68 6f 20 22 53 74 61 72 74 69 6e _port=$(free_port).echo."Startin
1d080 67 20 70 72 6f 78 79 20 6f 6e 20 24 7b 70 72 6f 78 79 5f 70 6f 72 74 7d 22 0a 2e 2f 70 72 6f 78 g.proxy.on.${proxy_port}"../prox
1d0a0 79 20 24 7b 70 72 6f 78 79 5f 70 6f 72 74 7d 20 20 26 3e 20 2f 64 65 76 2f 6e 75 6c 6c 20 26 0a y.${proxy_port}..&>./dev/null.&.
1d0c0 70 72 6f 78 79 5f 70 69 64 3d 24 21 0a 0a 23 20 57 61 69 74 20 66 6f 72 20 74 68 65 20 70 72 6f proxy_pid=$!..#.Wait.for.the.pro
1d0e0 78 79 20 74 6f 20 73 74 61 72 74 20 69 6e 20 65 61 72 6e 65 73 74 0a 77 61 69 74 5f 66 6f 72 5f xy.to.start.in.earnest.wait_for_
1d100 70 6f 72 74 5f 75 73 65 20 22 24 7b 70 72 6f 78 79 5f 70 6f 72 74 7d 22 0a 0a 0a 23 20 4e 6f 77 port_use."${proxy_port}"...#.Now
1d120 20 64 6f 20 74 68 65 20 74 65 73 74 20 62 79 20 66 65 74 63 68 69 6e 67 20 73 6f 6d 65 20 74 65 .do.the.test.by.fetching.some.te
1d140 78 74 20 61 6e 64 20 62 69 6e 61 72 79 20 66 69 6c 65 73 20 64 69 72 65 63 74 6c 79 20 66 72 6f xt.and.binary.files.directly.fro
1d160 6d 0a 23 20 54 69 6e 79 20 61 6e 64 20 76 69 61 20 74 68 65 20 70 72 6f 78 79 2c 20 61 6e 64 20 m.#.Tiny.and.via.the.proxy,.and.
1d180 74 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 73 2e 0a 6e 75 6d 52 then.comparing.the.results..numR
1d1a0 75 6e 3d 30 0a 6e 75 6d 53 75 63 63 65 65 64 65 64 3d 30 0a 66 6f 72 20 66 69 6c 65 20 69 6e 20 un=0.numSucceeded=0.for.file.in.
1d1c0 24 7b 42 41 53 49 43 5f 4c 49 53 54 7d 0a 64 6f 0a 20 20 20 20 6e 75 6d 52 75 6e 3d 60 65 78 70 ${BASIC_LIST}.do.....numRun=`exp
1d1e0 72 20 24 6e 75 6d 52 75 6e 20 2b 20 31 60 0a 20 20 20 20 65 63 68 6f 20 22 24 7b 6e 75 6d 52 75 r.$numRun.+.1`.....echo."${numRu
1d200 6e 7d 3a 20 24 7b 66 69 6c 65 7d 22 0a 20 20 20 20 63 6c 65 61 72 5f 64 69 72 73 0a 0a 20 20 20 n}:.${file}".....clear_dirs.....
1d220 20 23 20 46 65 74 63 68 20 75 73 69 6e 67 20 74 68 65 20 70 72 6f 78 79 0a 20 20 20 20 65 63 68 .#.Fetch.using.the.proxy.....ech
1d240 6f 20 22 20 20 20 46 65 74 63 68 69 6e 67 20 2e 2f 74 69 6e 79 2f 24 7b 66 69 6c 65 7d 20 69 6e o."...Fetching../tiny/${file}.in
1d260 74 6f 20 24 7b 50 52 4f 58 59 5f 44 49 52 7d 20 75 73 69 6e 67 20 74 68 65 20 70 72 6f 78 79 22 to.${PROXY_DIR}.using.the.proxy"
1d280 0a 20 20 20 20 64 6f 77 6e 6c 6f 61 64 5f 70 72 6f 78 79 20 24 50 52 4f 58 59 5f 44 49 52 20 24 .....download_proxy.$PROXY_DIR.$
1d2a0 7b 66 69 6c 65 7d 20 22 68 74 74 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a 24 7b 74 69 6e 79 5f {file}."http://localhost:${tiny_
1d2c0 70 6f 72 74 7d 2f 24 7b 66 69 6c 65 7d 22 20 22 68 74 74 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 port}/${file}"."http://localhost
1d2e0 3a 24 7b 70 72 6f 78 79 5f 70 6f 72 74 7d 22 0a 0a 20 20 20 20 23 20 46 65 74 63 68 20 64 69 72 :${proxy_port}"......#.Fetch.dir
1d300 65 63 74 6c 79 20 66 72 6f 6d 20 54 69 6e 79 0a 20 20 20 20 65 63 68 6f 20 22 20 20 20 46 65 74 ectly.from.Tiny.....echo."...Fet
1d320 63 68 69 6e 67 20 2e 2f 74 69 6e 79 2f 24 7b 66 69 6c 65 7d 20 69 6e 74 6f 20 24 7b 4e 4f 50 52 ching../tiny/${file}.into.${NOPR
1d340 4f 58 59 5f 44 49 52 7d 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 54 69 6e 79 22 0a 20 20 20 OXY_DIR}.directly.from.Tiny"....
1d360 20 64 6f 77 6e 6c 6f 61 64 5f 6e 6f 70 72 6f 78 79 20 24 4e 4f 50 52 4f 58 59 5f 44 49 52 20 24 .download_noproxy.$NOPROXY_DIR.$
1d380 7b 66 69 6c 65 7d 20 22 68 74 74 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a 24 7b 74 69 6e 79 5f {file}."http://localhost:${tiny_
1d3a0 70 6f 72 74 7d 2f 24 7b 66 69 6c 65 7d 22 0a 0a 20 20 20 20 23 20 43 6f 6d 70 61 72 65 20 74 68 port}/${file}"......#.Compare.th
1d3c0 65 20 74 77 6f 20 66 69 6c 65 73 0a 20 20 20 20 65 63 68 6f 20 22 20 20 20 43 6f 6d 70 61 72 69 e.two.files.....echo."...Compari
1d3e0 6e 67 20 74 68 65 20 74 77 6f 20 66 69 6c 65 73 22 0a 20 20 20 20 64 69 66 66 20 2d 71 20 24 7b ng.the.two.files".....diff.-q.${
1d400 50 52 4f 58 59 5f 44 49 52 7d 2f 24 7b 66 69 6c 65 7d 20 24 7b 4e 4f 50 52 4f 58 59 5f 44 49 52 PROXY_DIR}/${file}.${NOPROXY_DIR
1d420 7d 2f 24 7b 66 69 6c 65 7d 20 26 3e 20 2f 64 65 76 2f 6e 75 6c 6c 0a 20 20 20 20 69 66 20 5b 20 }/${file}.&>./dev/null.....if.[.
1d440 24 3f 20 2d 65 71 20 30 20 5d 3b 20 74 68 65 6e 0a 20 20 20 20 20 20 20 20 6e 75 6d 53 75 63 63 $?.-eq.0.];.then.........numSucc
1d460 65 65 64 65 64 3d 60 65 78 70 72 20 24 7b 6e 75 6d 53 75 63 63 65 65 64 65 64 7d 20 2b 20 31 60 eeded=`expr.${numSucceeded}.+.1`
1d480 0a 20 20 20 20 20 20 20 20 65 63 68 6f 20 22 20 20 20 53 75 63 63 65 73 73 3a 20 46 69 6c 65 73 .........echo."...Success:.Files
1d4a0 20 61 72 65 20 69 64 65 6e 74 69 63 61 6c 2e 22 0a 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 .are.identical.".....else.......
1d4c0 20 20 65 63 68 6f 20 22 20 20 20 46 61 69 6c 75 72 65 3a 20 46 69 6c 65 73 20 64 69 66 66 65 72 ..echo."...Failure:.Files.differ
1d4e0 2e 22 0a 20 20 20 20 66 69 0a 64 6f 6e 65 0a 0a 65 63 68 6f 20 22 4b 69 6c 6c 69 6e 67 20 74 69 .".....fi.done..echo."Killing.ti
1d500 6e 79 20 61 6e 64 20 70 72 6f 78 79 22 0a 6b 69 6c 6c 20 24 74 69 6e 79 5f 70 69 64 20 32 3e 20 ny.and.proxy".kill.$tiny_pid.2>.
1d520 2f 64 65 76 2f 6e 75 6c 6c 0a 77 61 69 74 20 24 74 69 6e 79 5f 70 69 64 20 32 3e 20 2f 64 65 76 /dev/null.wait.$tiny_pid.2>./dev
1d540 2f 6e 75 6c 6c 0a 6b 69 6c 6c 20 24 70 72 6f 78 79 5f 70 69 64 20 32 3e 20 2f 64 65 76 2f 6e 75 /null.kill.$proxy_pid.2>./dev/nu
1d560 6c 6c 0a 77 61 69 74 20 24 70 72 6f 78 79 5f 70 69 64 20 32 3e 20 2f 64 65 76 2f 6e 75 6c 6c 0a ll.wait.$proxy_pid.2>./dev/null.
1d580 0a 62 61 73 69 63 53 63 6f 72 65 3d 60 65 78 70 72 20 24 7b 4d 41 58 5f 42 41 53 49 43 7d 20 5c .basicScore=`expr.${MAX_BASIC}.\
1d5a0 2a 20 24 7b 6e 75 6d 53 75 63 63 65 65 64 65 64 7d 20 2f 20 24 7b 6e 75 6d 52 75 6e 7d 60 0a 0a *.${numSucceeded}./.${numRun}`..
1d5c0 65 63 68 6f 20 22 62 61 73 69 63 53 63 6f 72 65 3a 20 24 62 61 73 69 63 53 63 6f 72 65 2f 24 7b echo."basicScore:.$basicScore/${
1d5e0 4d 41 58 5f 42 41 53 49 43 7d 22 0a 0a 0a 23 23 23 23 23 23 0a 23 20 43 6f 6e 63 75 72 72 65 6e MAX_BASIC}"...######.#.Concurren
1d600 63 79 0a 23 0a 0a 65 63 68 6f 20 22 22 0a 65 63 68 6f 20 22 2a 2a 2a 20 43 6f 6e 63 75 72 72 65 cy.#..echo."".echo."***.Concurre
1d620 6e 63 79 20 2a 2a 2a 22 0a 0a 23 20 52 75 6e 20 74 68 65 20 54 69 6e 79 20 57 65 62 20 73 65 72 ncy.***"..#.Run.the.Tiny.Web.ser
1d640 76 65 72 0a 74 69 6e 79 5f 70 6f 72 74 3d 24 28 66 72 65 65 5f 70 6f 72 74 29 0a 65 63 68 6f 20 ver.tiny_port=$(free_port).echo.
1d660 22 53 74 61 72 74 69 6e 67 20 74 69 6e 79 20 6f 6e 20 70 6f 72 74 20 24 7b 74 69 6e 79 5f 70 6f "Starting.tiny.on.port.${tiny_po
1d680 72 74 7d 22 0a 63 64 20 2e 2f 74 69 6e 79 0a 2e 2f 74 69 6e 79 20 24 7b 74 69 6e 79 5f 70 6f 72 rt}".cd../tiny../tiny.${tiny_por
1d6a0 74 7d 20 26 3e 20 2f 64 65 76 2f 6e 75 6c 6c 20 26 0a 74 69 6e 79 5f 70 69 64 3d 24 21 0a 63 64 t}.&>./dev/null.&.tiny_pid=$!.cd
1d6c0 20 24 7b 48 4f 4d 45 5f 44 49 52 7d 0a 0a 23 20 57 61 69 74 20 66 6f 72 20 74 69 6e 79 20 74 6f .${HOME_DIR}..#.Wait.for.tiny.to
1d6e0 20 73 74 61 72 74 20 69 6e 20 65 61 72 6e 65 73 74 0a 77 61 69 74 5f 66 6f 72 5f 70 6f 72 74 5f .start.in.earnest.wait_for_port_
1d700 75 73 65 20 22 24 7b 74 69 6e 79 5f 70 6f 72 74 7d 22 0a 0a 23 20 52 75 6e 20 74 68 65 20 70 72 use."${tiny_port}"..#.Run.the.pr
1d720 6f 78 79 0a 70 72 6f 78 79 5f 70 6f 72 74 3d 24 28 66 72 65 65 5f 70 6f 72 74 29 0a 65 63 68 6f oxy.proxy_port=$(free_port).echo
1d740 20 22 53 74 61 72 74 69 6e 67 20 70 72 6f 78 79 20 6f 6e 20 70 6f 72 74 20 24 7b 70 72 6f 78 79 ."Starting.proxy.on.port.${proxy
1d760 5f 70 6f 72 74 7d 22 0a 2e 2f 70 72 6f 78 79 20 24 7b 70 72 6f 78 79 5f 70 6f 72 74 7d 20 26 3e _port}"../proxy.${proxy_port}.&>
1d780 20 2f 64 65 76 2f 6e 75 6c 6c 20 26 0a 70 72 6f 78 79 5f 70 69 64 3d 24 21 0a 0a 23 20 57 61 69 ./dev/null.&.proxy_pid=$!..#.Wai
1d7a0 74 20 66 6f 72 20 74 68 65 20 70 72 6f 78 79 20 74 6f 20 73 74 61 72 74 20 69 6e 20 65 61 72 6e t.for.the.proxy.to.start.in.earn
1d7c0 65 73 74 0a 77 61 69 74 5f 66 6f 72 5f 70 6f 72 74 5f 75 73 65 20 22 24 7b 70 72 6f 78 79 5f 70 est.wait_for_port_use."${proxy_p
1d7e0 6f 72 74 7d 22 0a 0a 23 20 52 75 6e 20 61 20 73 70 65 63 69 61 6c 20 62 6c 6f 63 6b 69 6e 67 20 ort}"..#.Run.a.special.blocking.
1d800 6e 6f 70 2d 73 65 72 76 65 72 20 74 68 61 74 20 6e 65 76 65 72 20 72 65 73 70 6f 6e 64 73 20 74 nop-server.that.never.responds.t
1d820 6f 20 72 65 71 75 65 73 74 73 0a 6e 6f 70 5f 70 6f 72 74 3d 24 28 66 72 65 65 5f 70 6f 72 74 29 o.requests.nop_port=$(free_port)
1d840 0a 65 63 68 6f 20 22 53 74 61 72 74 69 6e 67 20 74 68 65 20 62 6c 6f 63 6b 69 6e 67 20 4e 4f 50 .echo."Starting.the.blocking.NOP
1d860 20 73 65 72 76 65 72 20 6f 6e 20 70 6f 72 74 20 24 7b 6e 6f 70 5f 70 6f 72 74 7d 22 0a 2e 2f 6e .server.on.port.${nop_port}"../n
1d880 6f 70 2d 73 65 72 76 65 72 2e 70 79 20 24 7b 6e 6f 70 5f 70 6f 72 74 7d 20 26 3e 20 2f 64 65 76 op-server.py.${nop_port}.&>./dev
1d8a0 2f 6e 75 6c 6c 20 26 0a 6e 6f 70 5f 70 69 64 3d 24 21 0a 0a 23 20 57 61 69 74 20 66 6f 72 20 74 /null.&.nop_pid=$!..#.Wait.for.t
1d8c0 68 65 20 6e 6f 70 20 73 65 72 76 65 72 20 74 6f 20 73 74 61 72 74 20 69 6e 20 65 61 72 6e 65 73 he.nop.server.to.start.in.earnes
1d8e0 74 0a 77 61 69 74 5f 66 6f 72 5f 70 6f 72 74 5f 75 73 65 20 22 24 7b 6e 6f 70 5f 70 6f 72 74 7d t.wait_for_port_use."${nop_port}
1d900 22 0a 0a 23 20 54 72 79 20 74 6f 20 66 65 74 63 68 20 61 20 66 69 6c 65 20 66 72 6f 6d 20 74 68 "..#.Try.to.fetch.a.file.from.th
1d920 65 20 62 6c 6f 63 6b 69 6e 67 20 6e 6f 70 2d 73 65 72 76 65 72 20 75 73 69 6e 67 20 74 68 65 20 e.blocking.nop-server.using.the.
1d940 70 72 6f 78 79 0a 63 6c 65 61 72 5f 64 69 72 73 0a 65 63 68 6f 20 22 54 72 79 69 6e 67 20 74 6f proxy.clear_dirs.echo."Trying.to
1d960 20 66 65 74 63 68 20 61 20 66 69 6c 65 20 66 72 6f 6d 20 74 68 65 20 62 6c 6f 63 6b 69 6e 67 20 .fetch.a.file.from.the.blocking.
1d980 6e 6f 70 2d 73 65 72 76 65 72 22 0a 64 6f 77 6e 6c 6f 61 64 5f 70 72 6f 78 79 20 24 50 52 4f 58 nop-server".download_proxy.$PROX
1d9a0 59 5f 44 49 52 20 22 6e 6f 70 2d 66 69 6c 65 2e 74 78 74 22 20 22 68 74 74 70 3a 2f 2f 6c 6f 63 Y_DIR."nop-file.txt"."http://loc
1d9c0 61 6c 68 6f 73 74 3a 24 7b 6e 6f 70 5f 70 6f 72 74 7d 2f 6e 6f 70 2d 66 69 6c 65 2e 74 78 74 22 alhost:${nop_port}/nop-file.txt"
1d9e0 20 22 68 74 74 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a 24 7b 70 72 6f 78 79 5f 70 6f 72 74 7d ."http://localhost:${proxy_port}
1da00 22 20 26 0a 0a 23 20 46 65 74 63 68 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 54 69 6e 79 0a ".&..#.Fetch.directly.from.Tiny.
1da20 65 63 68 6f 20 22 46 65 74 63 68 69 6e 67 20 2e 2f 74 69 6e 79 2f 24 7b 46 45 54 43 48 5f 46 49 echo."Fetching../tiny/${FETCH_FI
1da40 4c 45 7d 20 69 6e 74 6f 20 24 7b 4e 4f 50 52 4f 58 59 5f 44 49 52 7d 20 64 69 72 65 63 74 6c 79 LE}.into.${NOPROXY_DIR}.directly
1da60 20 66 72 6f 6d 20 54 69 6e 79 22 0a 64 6f 77 6e 6c 6f 61 64 5f 6e 6f 70 72 6f 78 79 20 24 4e 4f .from.Tiny".download_noproxy.$NO
1da80 50 52 4f 58 59 5f 44 49 52 20 24 7b 46 45 54 43 48 5f 46 49 4c 45 7d 20 22 68 74 74 70 3a 2f 2f PROXY_DIR.${FETCH_FILE}."http://
1daa0 6c 6f 63 61 6c 68 6f 73 74 3a 24 7b 74 69 6e 79 5f 70 6f 72 74 7d 2f 24 7b 46 45 54 43 48 5f 46 localhost:${tiny_port}/${FETCH_F
1dac0 49 4c 45 7d 22 0a 0a 23 20 46 65 74 63 68 20 75 73 69 6e 67 20 74 68 65 20 70 72 6f 78 79 0a 65 ILE}"..#.Fetch.using.the.proxy.e
1dae0 63 68 6f 20 22 46 65 74 63 68 69 6e 67 20 2e 2f 74 69 6e 79 2f 24 7b 46 45 54 43 48 5f 46 49 4c cho."Fetching../tiny/${FETCH_FIL
1db00 45 7d 20 69 6e 74 6f 20 24 7b 50 52 4f 58 59 5f 44 49 52 7d 20 75 73 69 6e 67 20 74 68 65 20 70 E}.into.${PROXY_DIR}.using.the.p
1db20 72 6f 78 79 22 0a 64 6f 77 6e 6c 6f 61 64 5f 70 72 6f 78 79 20 24 50 52 4f 58 59 5f 44 49 52 20 roxy".download_proxy.$PROXY_DIR.
1db40 24 7b 46 45 54 43 48 5f 46 49 4c 45 7d 20 22 68 74 74 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a ${FETCH_FILE}."http://localhost:
1db60 24 7b 74 69 6e 79 5f 70 6f 72 74 7d 2f 24 7b 46 45 54 43 48 5f 46 49 4c 45 7d 22 20 22 68 74 74 ${tiny_port}/${FETCH_FILE}"."htt
1db80 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a 24 7b 70 72 6f 78 79 5f 70 6f 72 74 7d 22 0a 0a 23 20 p://localhost:${proxy_port}"..#.
1dba0 53 65 65 20 69 66 20 74 68 65 20 70 72 6f 78 79 20 66 65 74 63 68 20 73 75 63 63 65 65 64 65 64 See.if.the.proxy.fetch.succeeded
1dbc0 0a 65 63 68 6f 20 22 43 68 65 63 6b 69 6e 67 20 77 68 65 74 68 65 72 20 74 68 65 20 70 72 6f 78 .echo."Checking.whether.the.prox
1dbe0 79 20 66 65 74 63 68 20 73 75 63 63 65 65 64 65 64 22 0a 64 69 66 66 20 2d 71 20 24 7b 50 52 4f y.fetch.succeeded".diff.-q.${PRO
1dc00 58 59 5f 44 49 52 7d 2f 24 7b 46 45 54 43 48 5f 46 49 4c 45 7d 20 24 7b 4e 4f 50 52 4f 58 59 5f XY_DIR}/${FETCH_FILE}.${NOPROXY_
1dc20 44 49 52 7d 2f 24 7b 46 45 54 43 48 5f 46 49 4c 45 7d 20 26 3e 20 2f 64 65 76 2f 6e 75 6c 6c 0a DIR}/${FETCH_FILE}.&>./dev/null.
1dc40 69 66 20 5b 20 24 3f 20 2d 65 71 20 30 20 5d 3b 20 74 68 65 6e 0a 20 20 20 20 63 6f 6e 63 75 72 if.[.$?.-eq.0.];.then.....concur
1dc60 72 65 6e 63 79 53 63 6f 72 65 3d 24 7b 4d 41 58 5f 43 4f 4e 43 55 52 52 45 4e 43 59 7d 0a 20 20 rencyScore=${MAX_CONCURRENCY}...
1dc80 20 20 65 63 68 6f 20 22 53 75 63 63 65 73 73 3a 20 57 61 73 20 61 62 6c 65 20 74 6f 20 66 65 74 ..echo."Success:.Was.able.to.fet
1dca0 63 68 20 74 69 6e 79 2f 24 7b 46 45 54 43 48 5f 46 49 4c 45 7d 20 66 72 6f 6d 20 74 68 65 20 70 ch.tiny/${FETCH_FILE}.from.the.p
1dcc0 72 6f 78 79 2e 22 0a 65 6c 73 65 0a 20 20 20 20 63 6f 6e 63 75 72 72 65 6e 63 79 53 63 6f 72 65 roxy.".else.....concurrencyScore
1dce0 3d 30 0a 20 20 20 20 65 63 68 6f 20 22 46 61 69 6c 75 72 65 3a 20 57 61 73 20 6e 6f 74 20 61 62 =0.....echo."Failure:.Was.not.ab
1dd00 6c 65 20 74 6f 20 66 65 74 63 68 20 74 69 6e 79 2f 24 7b 46 45 54 43 48 5f 46 49 4c 45 7d 20 66 le.to.fetch.tiny/${FETCH_FILE}.f
1dd20 72 6f 6d 20 74 68 65 20 70 72 6f 78 79 2e 22 0a 66 69 0a 0a 23 20 43 6c 65 61 6e 20 75 70 0a 65 rom.the.proxy.".fi..#.Clean.up.e
1dd40 63 68 6f 20 22 4b 69 6c 6c 69 6e 67 20 74 69 6e 79 2c 20 70 72 6f 78 79 2c 20 61 6e 64 20 6e 6f cho."Killing.tiny,.proxy,.and.no
1dd60 70 2d 73 65 72 76 65 72 22 0a 6b 69 6c 6c 20 24 74 69 6e 79 5f 70 69 64 20 32 3e 20 2f 64 65 76 p-server".kill.$tiny_pid.2>./dev
1dd80 2f 6e 75 6c 6c 0a 77 61 69 74 20 24 74 69 6e 79 5f 70 69 64 20 32 3e 20 2f 64 65 76 2f 6e 75 6c /null.wait.$tiny_pid.2>./dev/nul
1dda0 6c 0a 6b 69 6c 6c 20 24 70 72 6f 78 79 5f 70 69 64 20 32 3e 20 2f 64 65 76 2f 6e 75 6c 6c 0a 77 l.kill.$proxy_pid.2>./dev/null.w
1ddc0 61 69 74 20 24 70 72 6f 78 79 5f 70 69 64 20 32 3e 20 2f 64 65 76 2f 6e 75 6c 6c 0a 6b 69 6c 6c ait.$proxy_pid.2>./dev/null.kill
1dde0 20 24 6e 6f 70 5f 70 69 64 20 32 3e 20 2f 64 65 76 2f 6e 75 6c 6c 0a 77 61 69 74 20 24 6e 6f 70 .$nop_pid.2>./dev/null.wait.$nop
1de00 5f 70 69 64 20 32 3e 20 2f 64 65 76 2f 6e 75 6c 6c 0a 0a 65 63 68 6f 20 22 63 6f 6e 63 75 72 72 _pid.2>./dev/null..echo."concurr
1de20 65 6e 63 79 53 63 6f 72 65 3a 20 24 63 6f 6e 63 75 72 72 65 6e 63 79 53 63 6f 72 65 2f 24 7b 4d encyScore:.$concurrencyScore/${M
1de40 41 58 5f 43 4f 4e 43 55 52 52 45 4e 43 59 7d 22 0a 0a 23 23 23 23 23 0a 23 20 43 61 63 68 69 6e AX_CONCURRENCY}"..#####.#.Cachin
1de60 67 0a 23 0a 65 63 68 6f 20 22 22 0a 65 63 68 6f 20 22 2a 2a 2a 20 43 61 63 68 65 20 2a 2a 2a 22 g.#.echo."".echo."***.Cache.***"
1de80 0a 0a 23 20 52 75 6e 20 74 68 65 20 54 69 6e 79 20 57 65 62 20 73 65 72 76 65 72 0a 74 69 6e 79 ..#.Run.the.Tiny.Web.server.tiny
1dea0 5f 70 6f 72 74 3d 24 28 66 72 65 65 5f 70 6f 72 74 29 0a 65 63 68 6f 20 22 53 74 61 72 74 69 6e _port=$(free_port).echo."Startin
1dec0 67 20 74 69 6e 79 20 6f 6e 20 70 6f 72 74 20 24 7b 74 69 6e 79 5f 70 6f 72 74 7d 22 0a 63 64 20 g.tiny.on.port.${tiny_port}".cd.
1dee0 2e 2f 74 69 6e 79 0a 2e 2f 74 69 6e 79 20 24 7b 74 69 6e 79 5f 70 6f 72 74 7d 20 26 3e 20 2f 64 ./tiny../tiny.${tiny_port}.&>./d
1df00 65 76 2f 6e 75 6c 6c 20 26 0a 74 69 6e 79 5f 70 69 64 3d 24 21 0a 63 64 20 24 7b 48 4f 4d 45 5f ev/null.&.tiny_pid=$!.cd.${HOME_
1df20 44 49 52 7d 0a 0a 23 20 57 61 69 74 20 66 6f 72 20 74 69 6e 79 20 74 6f 20 73 74 61 72 74 20 69 DIR}..#.Wait.for.tiny.to.start.i
1df40 6e 20 65 61 72 6e 65 73 74 0a 77 61 69 74 5f 66 6f 72 5f 70 6f 72 74 5f 75 73 65 20 22 24 7b 74 n.earnest.wait_for_port_use."${t
1df60 69 6e 79 5f 70 6f 72 74 7d 22 0a 0a 23 20 52 75 6e 20 74 68 65 20 70 72 6f 78 79 0a 70 72 6f 78 iny_port}"..#.Run.the.proxy.prox
1df80 79 5f 70 6f 72 74 3d 24 28 66 72 65 65 5f 70 6f 72 74 29 0a 65 63 68 6f 20 22 53 74 61 72 74 69 y_port=$(free_port).echo."Starti
1dfa0 6e 67 20 70 72 6f 78 79 20 6f 6e 20 70 6f 72 74 20 24 7b 70 72 6f 78 79 5f 70 6f 72 74 7d 22 0a ng.proxy.on.port.${proxy_port}".
1dfc0 2e 2f 70 72 6f 78 79 20 24 7b 70 72 6f 78 79 5f 70 6f 72 74 7d 20 26 3e 20 2f 64 65 76 2f 6e 75 ./proxy.${proxy_port}.&>./dev/nu
1dfe0 6c 6c 20 26 0a 70 72 6f 78 79 5f 70 69 64 3d 24 21 0a 0a 23 20 57 61 69 74 20 66 6f 72 20 74 68 ll.&.proxy_pid=$!..#.Wait.for.th
1e000 65 20 70 72 6f 78 79 20 74 6f 20 73 74 61 72 74 20 69 6e 20 65 61 72 6e 65 73 74 0a 77 61 69 74 e.proxy.to.start.in.earnest.wait
1e020 5f 66 6f 72 5f 70 6f 72 74 5f 75 73 65 20 22 24 7b 70 72 6f 78 79 5f 70 6f 72 74 7d 22 0a 0a 23 _for_port_use."${proxy_port}"..#
1e040 20 46 65 74 63 68 20 73 6f 6d 65 20 66 69 6c 65 73 20 66 72 6f 6d 20 74 69 6e 79 20 75 73 69 6e .Fetch.some.files.from.tiny.usin
1e060 67 20 74 68 65 20 70 72 6f 78 79 0a 63 6c 65 61 72 5f 64 69 72 73 0a 66 6f 72 20 66 69 6c 65 20 g.the.proxy.clear_dirs.for.file.
1e080 69 6e 20 24 7b 43 41 43 48 45 5f 4c 49 53 54 7d 0a 64 6f 0a 20 20 20 20 65 63 68 6f 20 22 46 65 in.${CACHE_LIST}.do.....echo."Fe
1e0a0 74 63 68 69 6e 67 20 2e 2f 74 69 6e 79 2f 24 7b 66 69 6c 65 7d 20 69 6e 74 6f 20 24 7b 50 52 4f tching../tiny/${file}.into.${PRO
1e0c0 58 59 5f 44 49 52 7d 20 75 73 69 6e 67 20 74 68 65 20 70 72 6f 78 79 22 0a 20 20 20 20 64 6f 77 XY_DIR}.using.the.proxy".....dow
1e0e0 6e 6c 6f 61 64 5f 70 72 6f 78 79 20 24 50 52 4f 58 59 5f 44 49 52 20 24 7b 66 69 6c 65 7d 20 22 nload_proxy.$PROXY_DIR.${file}."
1e100 68 74 74 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a 24 7b 74 69 6e 79 5f 70 6f 72 74 7d 2f 24 7b http://localhost:${tiny_port}/${
1e120 66 69 6c 65 7d 22 20 22 68 74 74 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a 24 7b 70 72 6f 78 79 file}"."http://localhost:${proxy
1e140 5f 70 6f 72 74 7d 22 0a 64 6f 6e 65 0a 0a 23 20 4b 69 6c 6c 20 54 69 6e 79 0a 65 63 68 6f 20 22 _port}".done..#.Kill.Tiny.echo."
1e160 4b 69 6c 6c 69 6e 67 20 74 69 6e 79 22 0a 6b 69 6c 6c 20 24 74 69 6e 79 5f 70 69 64 20 32 3e 20 Killing.tiny".kill.$tiny_pid.2>.
1e180 2f 64 65 76 2f 6e 75 6c 6c 0a 77 61 69 74 20 24 74 69 6e 79 5f 70 69 64 20 32 3e 20 2f 64 65 76 /dev/null.wait.$tiny_pid.2>./dev
1e1a0 2f 6e 75 6c 6c 0a 0a 23 20 4e 6f 77 20 74 72 79 20 74 6f 20 66 65 74 63 68 20 61 20 63 61 63 68 /null..#.Now.try.to.fetch.a.cach
1e1c0 65 64 20 63 6f 70 79 20 6f 66 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 65 74 63 68 65 64 20 66 69 ed.copy.of.one.of.the.fetched.fi
1e1e0 6c 65 73 2e 0a 65 63 68 6f 20 22 46 65 74 63 68 69 6e 67 20 61 20 63 61 63 68 65 64 20 63 6f 70 les..echo."Fetching.a.cached.cop
1e200 79 20 6f 66 20 2e 2f 74 69 6e 79 2f 24 7b 46 45 54 43 48 5f 46 49 4c 45 7d 20 69 6e 74 6f 20 24 y.of../tiny/${FETCH_FILE}.into.$
1e220 7b 4e 4f 50 52 4f 58 59 5f 44 49 52 7d 22 0a 64 6f 77 6e 6c 6f 61 64 5f 70 72 6f 78 79 20 24 4e {NOPROXY_DIR}".download_proxy.$N
1e240 4f 50 52 4f 58 59 5f 44 49 52 20 24 7b 46 45 54 43 48 5f 46 49 4c 45 7d 20 22 68 74 74 70 3a 2f OPROXY_DIR.${FETCH_FILE}."http:/
1e260 2f 6c 6f 63 61 6c 68 6f 73 74 3a 24 7b 74 69 6e 79 5f 70 6f 72 74 7d 2f 24 7b 46 45 54 43 48 5f /localhost:${tiny_port}/${FETCH_
1e280 46 49 4c 45 7d 22 20 22 68 74 74 70 3a 2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a 24 7b 70 72 6f 78 79 FILE}"."http://localhost:${proxy
1e2a0 5f 70 6f 72 74 7d 22 0a 0a 23 20 53 65 65 20 69 66 20 74 68 65 20 70 72 6f 78 79 20 66 65 74 63 _port}"..#.See.if.the.proxy.fetc
1e2c0 68 20 73 75 63 63 65 65 64 65 64 20 62 79 20 63 6f 6d 70 61 72 69 6e 67 20 69 74 20 77 69 74 68 h.succeeded.by.comparing.it.with
1e2e0 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 23 20 66 69 6c 65 20 69 6e 20 74 68 65 20 74 69 6e 79 .the.original.#.file.in.the.tiny
1e300 20 64 69 72 65 63 74 6f 72 79 0a 64 69 66 66 20 2d 71 20 2e 2f 74 69 6e 79 2f 24 7b 46 45 54 43 .directory.diff.-q../tiny/${FETC
1e320 48 5f 46 49 4c 45 7d 20 24 7b 4e 4f 50 52 4f 58 59 5f 44 49 52 7d 2f 24 7b 46 45 54 43 48 5f 46 H_FILE}.${NOPROXY_DIR}/${FETCH_F
1e340 49 4c 45 7d 20 20 26 3e 20 2f 64 65 76 2f 6e 75 6c 6c 0a 69 66 20 5b 20 24 3f 20 2d 65 71 20 30 ILE}..&>./dev/null.if.[.$?.-eq.0
1e360 20 5d 3b 20 74 68 65 6e 0a 20 20 20 20 63 61 63 68 65 53 63 6f 72 65 3d 24 7b 4d 41 58 5f 43 41 .];.then.....cacheScore=${MAX_CA
1e380 43 48 45 7d 0a 20 20 20 20 65 63 68 6f 20 22 53 75 63 63 65 73 73 3a 20 57 61 73 20 61 62 6c 65 CHE}.....echo."Success:.Was.able
1e3a0 20 74 6f 20 66 65 74 63 68 20 74 69 6e 79 2f 24 7b 46 45 54 43 48 5f 46 49 4c 45 7d 20 66 72 6f .to.fetch.tiny/${FETCH_FILE}.fro
1e3c0 6d 20 74 68 65 20 63 61 63 68 65 2e 22 0a 65 6c 73 65 0a 20 20 20 20 63 61 63 68 65 53 63 6f 72 m.the.cache.".else.....cacheScor
1e3e0 65 3d 30 0a 20 20 20 20 65 63 68 6f 20 22 46 61 69 6c 75 72 65 3a 20 57 61 73 20 6e 6f 74 20 61 e=0.....echo."Failure:.Was.not.a
1e400 62 6c 65 20 74 6f 20 66 65 74 63 68 20 74 69 6e 79 2f 24 7b 46 45 54 43 48 5f 46 49 4c 45 7d 20 ble.to.fetch.tiny/${FETCH_FILE}.
1e420 66 72 6f 6d 20 74 68 65 20 70 72 6f 78 79 20 63 61 63 68 65 2e 22 0a 66 69 0a 0a 23 20 4b 69 6c from.the.proxy.cache.".fi..#.Kil
1e440 6c 20 74 68 65 20 70 72 6f 78 79 0a 65 63 68 6f 20 22 4b 69 6c 6c 69 6e 67 20 70 72 6f 78 79 22 l.the.proxy.echo."Killing.proxy"
1e460 0a 6b 69 6c 6c 20 24 70 72 6f 78 79 5f 70 69 64 20 32 3e 20 2f 64 65 76 2f 6e 75 6c 6c 0a 77 61 .kill.$proxy_pid.2>./dev/null.wa
1e480 69 74 20 24 70 72 6f 78 79 5f 70 69 64 20 32 3e 20 2f 64 65 76 2f 6e 75 6c 6c 0a 0a 65 63 68 6f it.$proxy_pid.2>./dev/null..echo
1e4a0 20 22 63 61 63 68 65 53 63 6f 72 65 3a 20 24 63 61 63 68 65 53 63 6f 72 65 2f 24 7b 4d 41 58 5f ."cacheScore:.$cacheScore/${MAX_
1e4c0 43 41 43 48 45 7d 22 0a 0a 23 20 45 6d 69 74 20 74 68 65 20 74 6f 74 61 6c 20 73 63 6f 72 65 0a CACHE}"..#.Emit.the.total.score.
1e4e0 74 6f 74 61 6c 53 63 6f 72 65 3d 60 65 78 70 72 20 24 7b 62 61 73 69 63 53 63 6f 72 65 7d 20 2b totalScore=`expr.${basicScore}.+
1e500 20 24 7b 63 61 63 68 65 53 63 6f 72 65 7d 20 2b 20 24 7b 63 6f 6e 63 75 72 72 65 6e 63 79 53 63 .${cacheScore}.+.${concurrencySc
1e520 6f 72 65 7d 60 0a 6d 61 78 53 63 6f 72 65 3d 60 65 78 70 72 20 24 7b 4d 41 58 5f 42 41 53 49 43 ore}`.maxScore=`expr.${MAX_BASIC
1e540 7d 20 2b 20 24 7b 4d 41 58 5f 43 41 43 48 45 7d 20 2b 20 24 7b 4d 41 58 5f 43 4f 4e 43 55 52 52 }.+.${MAX_CACHE}.+.${MAX_CONCURR
1e560 45 4e 43 59 7d 60 0a 65 63 68 6f 20 22 22 0a 65 63 68 6f 20 22 74 6f 74 61 6c 53 63 6f 72 65 3a ENCY}`.echo."".echo."totalScore:
1e580 20 24 7b 74 6f 74 61 6c 53 63 6f 72 65 7d 2f 24 7b 6d 61 78 53 63 6f 72 65 7d 22 0a 65 78 69 74 .${totalScore}/${maxScore}".exit
1e5a0 0a 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1e5c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1e5e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1e600 70 72 6f 78 79 6c 61 62 2d 68 61 6e 64 6f 75 74 2f 6e 6f 70 2d 73 65 72 76 65 72 2e 70 79 00 00 proxylab-handout/nop-server.py..
1e620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1e640 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1e660 00 00 00 00 30 30 30 30 37 30 30 00 30 30 30 36 36 32 36 00 30 30 30 30 31 34 34 00 30 30 30 30 ....0000700.0006626.0000144.0000
1e680 30 30 30 31 30 31 36 00 31 32 32 34 34 37 30 34 30 36 33 00 30 31 35 30 32 36 00 20 30 00 00 00 0001016.12244704063.015026..0...
1e6a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1e6c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1e6e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1e700 00 75 73 74 61 72 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .ustar..........................
1e720 00 00 00 00 00 00 00 00 00 75 73 65 72 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .........users..................
1e740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1e760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1e780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1e7a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1e7c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1e7e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1e800 23 21 2f 75 73 72 2f 62 69 6e 2f 70 79 74 68 6f 6e 0a 0a 23 20 6e 6f 70 2d 73 65 72 76 65 72 2e #!/usr/bin/python..#.nop-server.
1e820 70 79 20 2d 20 54 68 69 73 20 69 73 20 61 20 73 65 72 76 65 72 20 74 68 61 74 20 77 65 20 75 73 py.-.This.is.a.server.that.we.us
1e840 65 20 74 6f 20 63 72 65 61 74 65 20 68 65 61 64 2d 6f 66 2d 6c 69 6e 65 0a 23 20 20 20 20 20 20 e.to.create.head-of-line.#......
1e860 20 20 20 20 20 20 20 20 20 20 20 62 6c 6f 63 6b 69 6e 67 20 66 6f 72 20 74 68 65 20 63 6f 6e 63 ...........blocking.for.the.conc
1e880 75 72 72 65 6e 63 79 20 74 65 73 74 2e 20 49 74 20 61 63 63 65 70 74 73 20 61 0a 23 20 20 20 20 urrency.test..It.accepts.a.#....
1e8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 .............connection,.and.the
1e8c0 6e 20 73 70 69 6e 73 20 66 6f 72 65 76 65 72 2e 0a 23 0a 23 20 75 73 61 67 65 3a 20 6e 6f 70 2d n.spins.forever..#.#.usage:.nop-
1e8e0 73 65 72 76 65 72 2e 70 79 20 3c 70 6f 72 74 3e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 server.py.<port>................
1e900 0a 23 0a 69 6d 70 6f 72 74 20 73 6f 63 6b 65 74 0a 69 6d 70 6f 72 74 20 73 79 73 0a 0a 23 63 72 .#.import.socket.import.sys..#cr
1e920 65 61 74 65 20 61 6e 20 49 4e 45 54 2c 20 53 54 52 45 41 4d 69 6e 67 20 73 6f 63 6b 65 74 0a 73 eate.an.INET,.STREAMing.socket.s
1e940 65 72 76 65 72 73 6f 63 6b 65 74 20 3d 20 73 6f 63 6b 65 74 2e 73 6f 63 6b 65 74 28 73 6f 63 6b erversocket.=.socket.socket(sock
1e960 65 74 2e 41 46 5f 49 4e 45 54 2c 20 73 6f 63 6b 65 74 2e 53 4f 43 4b 5f 53 54 52 45 41 4d 29 0a et.AF_INET,.socket.SOCK_STREAM).
1e980 73 65 72 76 65 72 73 6f 63 6b 65 74 2e 62 69 6e 64 28 28 27 27 2c 20 69 6e 74 28 73 79 73 2e 61 serversocket.bind(('',.int(sys.a
1e9a0 72 67 76 5b 31 5d 29 29 29 0a 73 65 72 76 65 72 73 6f 63 6b 65 74 2e 6c 69 73 74 65 6e 28 35 29 rgv[1]))).serversocket.listen(5)
1e9c0 0a 0a 77 68 69 6c 65 20 31 3a 0a 20 20 63 68 61 6e 6e 65 6c 2c 20 64 65 74 61 69 6c 73 20 3d 20 ..while.1:...channel,.details.=.
1e9e0 73 65 72 76 65 72 73 6f 63 6b 65 74 2e 61 63 63 65 70 74 28 29 0a 20 20 77 68 69 6c 65 20 31 3a serversocket.accept()...while.1:
1ea00 0a 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .....continue...................
1ea20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ea40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ea60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ea80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1eaa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1eac0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1eae0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1eb00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1eb20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1eb40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1eb60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1eb80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1eba0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ebc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ebe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ec00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ec20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ec40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ec60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ec80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1eca0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ecc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ece0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ed00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ed20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ed40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ed60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ed80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1eda0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1edc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ede0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ee00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ee20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ee40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ee60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ee80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1eea0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1eec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1eee0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ef00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ef20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ef40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ef60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ef80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1efa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1efc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1efe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f0a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f0c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f0e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f1a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f1c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f1e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f2a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f2c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f2e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f3a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f3c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f3e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f4a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f4c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f4e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f5a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f5c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f5e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f640 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f680 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f6a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f6c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f6e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f7a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f7c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f7e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f820 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f840 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f860 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f880 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f8a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f8c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f8e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f900 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f920 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f940 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f960 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f980 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f9a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f9c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1f9e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fa00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fa20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fa40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fa60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fa80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1faa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fac0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fae0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fb00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fb20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fb40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fb60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fb80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fba0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fbc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fbe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fc00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fc20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fc40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fc60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fc80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fca0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fcc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fce0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fd00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fd20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fd40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fd60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fd80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fda0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fdc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fde0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fe00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fe20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fe40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fe60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fe80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fea0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fec0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1fee0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ff00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ff20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ff40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ff60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ff80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ffa0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ffc0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
1ffe0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
200a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
200c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
200e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20140 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
201a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
201c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
201e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
202a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
202c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
202e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20320 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20340 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20360 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20380 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
203a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
203c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
203e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20420 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
204a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
204c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
204e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20520 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20540 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20560 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20580 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
205a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
205c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
205e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20620 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20640 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20660 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20680 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
206a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
206c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
206e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20740 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20760 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
20780 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
207a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
207c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................
207e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................................