ofs | hex dump | ascii |
---|
0000 | 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 01 00 00 00 01 00 08 06 00 00 00 5c 72 a8 | .PNG........IHDR.............\r. |
0020 | 66 00 00 00 06 62 4b 47 44 00 ff 00 ff 00 ff a0 bd a7 93 00 00 00 09 70 48 59 73 00 00 0e c3 00 | f....bKGD..............pHYs..... |
0040 | 00 0e c3 01 c7 6f a8 64 00 00 00 07 74 49 4d 45 07 e0 06 09 13 13 34 76 e3 a3 06 00 00 20 00 49 | .....o.d....tIME......4v.......I |
0060 | 44 41 54 78 da ec bd 69 94 5d e7 59 26 fa 7c d3 9e ce 50 55 a7 06 cd 52 55 69 b4 64 c9 83 64 9b | DATx...i.].Y&.|...PU...RUi.d..d. |
0080 | 28 b6 93 38 b1 89 21 40 47 31 61 c8 8d 3b ac 40 e8 0b 84 6e ba ef 5d b9 eb 76 37 69 58 ac 06 3a | (..8..!@G1a..;.@...n..]..v7iX..: |
00a0 | ac 6e 20 74 26 9a d0 04 72 49 c7 40 80 0c 24 74 4c 70 70 06 0f b2 3c c4 92 27 a9 4a b6 64 4b aa | .n.t&...rI.@..$tLpp...<..'.J.dK. |
00c0 | e1 9c aa 3a 67 9f bd f7 37 dd 1f fb 7c bb 4e 95 25 8f 72 82 9d fd 7a 9d 55 52 e9 c8 a5 b3 f7 7e | ...:g...7...|.N.%.r...z.UR.....~ |
00e0 | de ef 1d 9e f7 79 81 d2 4a 2b ad b4 d2 4a 2b ad b4 d2 4a 2b ad b4 d2 4a 2b ad b4 d2 4a 2b ad b4 | .....y..J+...J+...J+...J+...J+.. |
0100 | d2 4a 2b ad b4 d2 4a 2b ad b4 d2 4a 2b ad b4 d2 4a 2b ad b4 d2 4a 2b ad b4 d2 4a 2b ad b4 d2 4a | .J+...J+...J+...J+...J+...J+...J |
0120 | 2b ad b4 d2 5e 8b 46 ae be fa 6a 5e 5e 86 d7 d8 4d 2d 2f 41 69 2f c0 d8 35 d7 5c 3e e9 79 d1 a5 | +...^.F...j^^...M-/Ai/..5.\>.y.. |
0140 | 46 9a 6f 49 63 e6 00 d0 bb ef be 3b 2d 2f cd ab fc c6 96 97 a0 b4 e7 7b 46 ae be fc f2 9d dc 0f | F.oIc......;-/.........{F....... |
0160 | 7e c2 5a fc 58 26 b3 ab bb ed ce 91 28 0c 3b 63 f5 3a 7f 66 66 46 97 97 a8 74 00 a5 bd 46 9f 8f | ~.Z.X&......(.;c.:.ffF...t...F.. |
0180 | bd 7b 77 6e f3 7c ef 1d 20 f8 f1 2c 53 7b b2 2c 1b a3 8c 6f 27 94 de d5 4d d3 85 91 d1 51 6f 76 | .{wn.|.....,S{.,...o'...M....Qov |
01a0 | 76 b6 74 02 a5 03 28 ed b5 f6 6c ec dc b9 73 9b e7 89 43 20 e4 1d 4a 99 5d 52 ea 0a a5 2c ac 54 | v.t...(...l...s...C...J.]R...,.T |
01c0 | 2a 83 61 18 ee 18 1e 19 b9 c7 18 d3 de bc 79 73 78 ea d4 29 05 c0 96 97 ad 74 00 a5 bd 16 c0 3f | *.a...........ysx..).....t.....? |
01e0 | 3e be 4d 84 fe 21 4a c8 2d c6 d8 dd c6 20 e0 5c 90 28 8a 58 18 86 61 14 45 83 8d 46 63 fb e6 cd | >.M..!J.-......\.(.X..a.E..Fc... |
0200 | 9b 0f 67 59 46 f6 ed db 17 1d 3b 76 ac 5b 3a 81 d2 01 94 f6 2a 7f 26 c6 c7 c7 b7 89 40 1c 22 84 | ..gYF.....;v.[:.....*.&.....@.". |
0220 | de 42 40 76 13 c2 02 21 3c 84 61 88 28 8a 48 14 45 6c 70 70 30 1c 1e 1e 1e ac d5 6a db 82 20 98 | .B@v...!<.a.(.H.Elpp0......j.... |
0240 | 1e 18 18 d8 70 dd 75 d7 c9 6f 7d eb 5b 4b a5 13 28 1d 40 69 af 66 f0 33 76 88 10 72 0b 65 6c 37 | ....p.u..o}.[K..(.@i.f.3v..r.el7 |
0260 | a5 3c f0 3c 0f 41 10 20 08 02 44 51 84 c1 c1 41 d2 68 34 58 a5 52 09 39 e7 83 94 d2 4b 7c df 6f | .<.<.A....DQ...A.h4X.R.9....K|.o |
0280 | f8 be ef 5f 75 d5 55 ad d2 09 94 0e a0 b4 ef a1 7d f0 83 a0 63 33 bb f9 b5 9b 37 d3 c3 cf 3c 63 | ..._u.U.........}...c3....7...<c |
02a0 | 5f 0c f8 03 c1 0e 81 d2 5b 28 a5 bb 39 17 81 ef fb 70 af 30 0c 31 30 30 80 46 a3 81 5a ad 46 18 | _.......[(..9....p.0.100.F..Z.F. |
02c0 | 63 4c 4a 19 02 18 e5 9c ef 55 4a 55 b2 2c 4b f6 ec d9 d3 3c 72 e4 48 e9 04 4a 07 50 da 77 db de | cLJ......UJU.,K....<r.H..J.P.w.. |
02e0 | ff fe b7 7a 03 c9 81 ca da c9 4d 21 5b 17 d1 75 13 03 ea e8 d1 53 cf fb 1c ec dd b9 73 5b 10 fa | ...z......M![..u.....S......s[.. |
0300 | 87 2c 21 b7 10 42 76 73 ce 03 df f7 11 04 01 dc 57 07 fe 4a a5 02 ce 39 a4 94 44 4a c9 38 e7 a1 | .,!..Bvs........W..J...9..DJ.8.. |
0320 | b5 36 ca b2 6c 93 94 d2 67 8c 75 f7 ed db 57 3a 81 d2 01 94 f6 dd b4 2f fe cf df 20 dd b6 f5 0d | .6..l...g.u...W:......./........ |
0340 | e5 be a1 88 95 d6 29 97 b0 e3 eb 07 71 f4 f8 33 17 06 ff de bd db 44 e0 1d 02 ec 2d c6 60 37 a5 | ......).....q..3......D....-.`7. |
0360 | 34 f0 fc 00 41 18 22 e8 03 ff e0 e0 20 aa d5 2a 38 e7 50 4a 21 4d 53 50 4a 09 a5 94 a6 69 4a a5 | 4...A."........*8.PJ!MSPJ....iJ. |
0380 | 94 9e 31 66 23 21 a4 74 02 af 12 2b 99 80 af 11 bb ed 77 7f 89 3c 3c 35 1f 5a 02 0a 8b 6e dc 8d | ..1f#!.t...+......w..<<5.Z...n.. |
03a0 | cd 87 3e f1 d7 05 f0 5e 7f f9 46 f2 8d fb 4f d9 f3 82 5f b0 43 d6 d8 5b 94 52 bb 8d b1 81 e7 79 | ..>....^..F...O..._.C..[.R.....y |
03c0 | 08 a3 08 61 18 22 08 02 d4 eb 75 0c 0e 0e 16 27 bf 31 06 59 96 01 00 84 10 90 52 42 29 05 ad 35 | ...a."....u....'.1.Y......RB)..5 |
03e0 | 08 21 96 10 d2 b6 d6 de 4e 29 fd 5c 1c c7 77 7c f2 93 9f 7c 0a 80 29 ef 52 e9 00 4a 7b 05 ec ff | .!......N).\..w|...|..).R..J{... |
0400 | fb ad 9f 22 0f 1d 9f ab 48 cd 40 18 ef 7c e8 0f 3f 7f de 13 f7 cd 57 6d 21 b7 df 73 d2 fd 19 dd | ..."....H.@..|..?.....Wm!..s.... |
0420 | bb 77 e7 76 c1 c2 43 16 cb e0 17 9e 87 a8 0f fc ee e4 8f a2 08 9c 73 68 ad 21 a5 84 31 a6 f8 bd | .w.v..C...............sh.!..1... |
0440 | 52 0a d6 2e ff 48 42 88 a5 94 b6 29 a5 b7 03 f8 9c 94 f2 8e 8f 7c e4 23 a5 13 28 53 80 d2 2e b6 | R....HB....).........|.#..(S.... |
0460 | bd ef 6d fb c3 99 d9 73 6b 32 a5 90 65 e9 c2 ef 7e ea f6 0b 86 db 6b bc 84 9d 6a 69 00 20 bb 76 | ..m....sk2..e...~.....k...ji...v |
0480 | ed da ee 71 f1 0e 63 cd 2d 4a e9 dd c6 98 c0 f3 3d 54 2a 55 44 51 84 28 8a 8a 93 df 81 5f 29 55 | ...q..c.-J......=T*UDQ.(....._)U |
04a0 | 80 9f 31 06 63 cc 0a f0 13 42 40 29 75 69 81 c7 18 db 48 08 f1 29 a5 dd ad 5b b7 36 1f 7a e8 a1 | ..1.c....B@)ui....H..)...[.6.z.. |
04c0 | 32 1d 28 1d 40 69 17 cb fe f1 c3 3f 41 5a 9d 78 00 84 ad 81 b5 cf fc de 67 ee 52 17 7a ef 5b 0f | 2.(.@i.....?AZ.x........g.R.z.[. |
04e0 | ee a2 41 ad 56 1b d9 10 61 68 68 cb 66 c1 d8 db f3 93 5f ef d1 da 04 9e e7 17 e0 77 d5 fe a1 a1 | ..A.V...ahh.f....._........w.... |
0500 | a1 22 ec 77 27 7d 3f f8 b5 d6 ab 4f 7e 50 4a c1 18 03 63 8c 50 4a 3d a5 d4 c6 24 49 fc 38 8e bb | .".w'}?....O~PJ...c.PJ=...$I.8.. |
0520 | 63 63 63 cd e9 e9 e9 d2 09 94 0e a0 b4 97 6b 1f 7c df fe e8 cc cc c2 0e 0b 72 05 b1 e6 84 d5 aa | ccc...........k.|........r...... |
0540 | 75 e7 43 17 6e f9 6d dd 38 34 c6 18 9d ec 76 c5 25 d6 90 37 1b 8b 77 28 a5 f7 6a 63 02 3f 08 50 | u.C.n.m.84....v.%..7..w(..jc.?.P |
0560 | ad 56 51 a9 54 10 45 51 01 7e 57 f0 eb 0f fb 19 63 b0 d6 3e 0b fc 00 0a f0 73 ce 21 84 80 d6 9a | .VQ.T.EQ.~W.....c..>.....s.!.... |
0580 | 74 bb 5d af d9 6c 6e 5c 58 58 f0 93 24 e9 8e 8c 8c 34 cf 9c 39 53 3a 81 d2 01 94 f6 52 ed e3 ef | t.]..ln\XX..$....4..9S:.....R... |
05a0 | 7b 5b e4 55 fc ad 9e f0 0e 32 8b 67 28 b1 8f 7f f0 7f de 93 5d e8 fd d7 5d b1 a5 66 c0 fe c5 5c | {[.U.....2.g(.......]...]..f...\ |
05c0 | c7 dc 1a 27 e4 47 b4 25 d7 6a 63 76 18 63 03 cf f7 51 ab d5 8a b0 bf 56 ab ad 38 f9 8d 31 45 91 | ...'.G.%.jcv.c...Q.....V..8..1E. |
05e0 | 8f b1 fc 71 39 1f f8 57 9d fe d0 5a 23 4d 53 b4 5a 2d b2 b0 b0 e0 b5 db ed 8d 59 96 f9 89 4c e2 | ...q9..W...Z#MS.Z-........Y...L. |
0600 | 4a 58 69 b6 5a ad c5 f2 4e 96 0e a0 b4 17 69 33 ff f8 ab e4 e9 38 1e a6 94 be 99 c0 ce 73 ab be | JXi.Z...N.....i3.....8.......s.. |
0620 | a5 b5 ee fc fd bd a7 ce 7b a2 ae 1b 8e 44 b5 5a 7b 6f 57 91 ff bb 93 92 6b 34 c8 26 0b 34 8c 85 | ........{....D.Z{oW.....k4.&.4.. |
0640 | f0 fb c0 1f 86 21 ea f5 3a 06 06 06 9e 55 f0 d3 5a 9f 17 fc ab 73 ff 7e f0 c7 71 8c 85 85 05 2c | .....!..:....U..Z....s.~..q...., |
0660 | 2d 2d 21 8e 63 92 65 99 48 92 ee b0 ca b2 98 52 36 df 68 34 5a f3 f3 f3 71 79 47 bf b7 56 2a bc | --!.c.e.H......R6.h4Z...qyG..V*. |
0680 | bc 8a ec d4 df fd 5f e4 7f df f5 f8 5a 2d f5 0f 01 66 8a a8 f4 ee 38 49 db ff ee 63 df ba 50 75 | ......_.....Z-...f....8I...c..Pu |
06a0 | 9d 0d 0e ad df 9e 68 be 5f 19 33 91 d7 e7 18 08 a5 a0 94 15 21 7f 18 86 a8 d5 6a a8 d5 6a 08 82 | ......h._.3.........!.....j..j.. |
06c0 | 00 94 52 28 a5 fa 5b 7b 2b c2 7e f7 5a 7d fa bb bf d7 ed 76 b1 b0 b0 80 c5 c5 45 24 49 82 34 4d | ..R(..[{+.~.Z}.....v......E$I.4M |
06e0 | 91 a6 89 55 4a c5 94 32 29 04 55 c6 40 ec de bd 9b 1d 3d 7a b4 1c 25 2e 1d 40 69 cf 67 c7 3e f3 | ...UJ..2).U.@.....=z..%..@i.g.>. |
0700 | 5e f2 95 6f 3e b2 86 52 71 13 81 7d 54 c6 ed 7b 9b 0b ed f4 03 7f 78 d7 85 72 69 7a c9 25 97 ec | ^..o>..Rq..}T..{......x..riz.%.. |
0720 | 0c 02 ef bd d6 e8 9b 20 35 61 94 40 78 3e 08 21 08 82 00 61 18 16 e0 af d7 eb 08 c3 b0 38 c1 dd | ........5a.@x>.!...a.........8.. |
0740 | 8b 52 0a 00 45 b5 df 5a 0b 63 cc 0a e0 73 ce 41 08 81 d6 1a dd 6e 17 ad 56 0b 0b 0b 0b 48 92 04 | .R..E..Z.c...s.A.....n..V....H.. |
0760 | 49 92 20 cb 32 ad 94 3a 47 08 b9 9d 52 fa d7 9c b3 27 94 32 f3 0f 3d f4 50 d9 16 fc 1e 5b c9 03 | I...2..:G...R....'.2..=.P....[.. |
0780 | 78 55 e4 fc fb a3 b4 52 9f a4 94 1d a0 94 3c a2 a4 3a f2 cb bf fb b5 e7 94 e3 da bb 77 ef 3a ce | xU.....R......<..:..........w.:. |
07a0 | e9 bf 82 c5 cf 2a a5 d6 1a 63 a9 e7 79 f0 83 00 8c b1 a2 cf ef c0 ef c2 7e 57 dd 37 c6 80 90 fc | .....*...c..y...........~W.7.... |
07c0 | f1 70 80 37 c6 c0 18 03 6b 2d 08 21 60 8c 41 08 01 42 48 71 f2 37 9b 4d b4 5a 2d c4 71 8c 2c cb | .p.7....k-.!`.A..BHq.7.M.Z-.q.,. |
07e0 | 90 a6 a9 95 52 2e 30 46 bf 2c b8 f8 04 65 ec 21 a5 54 eb c1 07 1f 54 e5 9d 2d 23 80 d2 9e 0f fc | ....R.0F.,...e.!.T....T..-#..... |
0800 | 1f 7c 5b 64 92 6c 92 5b 7b a5 d1 e6 58 96 ca fb ff cd ef df f1 bc 5a 7c 82 b1 4d d6 da 1b 94 52 | .|[d.l.[{...X.........Z|..M....R |
0820 | 6b 8c b1 54 f4 d8 7d 9e e7 cd 31 c6 bc 20 08 6a ab 4f fe d5 e0 ef 0f f5 fb 43 7f 42 08 84 10 10 | k..T..}...1....j.O.......C.B.... |
0840 | 42 80 31 06 29 e5 b3 c0 ef 42 7f a5 54 42 29 39 42 29 fd 2b ca c8 63 c6 98 12 fc a5 03 28 ed b9 | B.1.)....B..TB)9B).+..c......(.. |
0860 | ec 8f 7f ed ed d7 a9 cc 7c 22 8d db bb 3a b3 0b 50 a0 38 71 ea 1c 1e 99 9e 41 2a ad fe 81 bd 63 | ........|"...:..P.8q.....A*....c |
0880 | c7 98 65 1f b5 19 fb 4b 3d 4f ce dd 35 fb 54 91 06 6c de bc 8d 55 ab 76 53 9a c6 ef 30 96 ec 25 | ..e....K=O..5.T..l...U.vS...0..% |
08a0 | 84 30 e1 e5 b3 fc be ef 83 73 3e 1c 04 01 2a 95 8a ac d7 eb 22 0c c3 e2 e4 77 2f 77 f2 af 06 3f | .0.......s>...*....."....w/w...? |
08c0 | b0 dc ea f3 3c af 28 14 26 49 82 85 85 05 2c 2c 2c 14 e0 4f 92 04 4a 29 49 29 3d c1 18 bd 9d 52 | ....<.(.&I....,,,..O..J)I)=....R |
08e0 | f2 80 b5 6a e6 fe fb bf 53 82 ff 9f 91 95 5d 80 7f 66 f6 fb bf 72 c3 0f 32 c6 ff 88 c2 6c b3 46 | ...j....S.....]..f...r..2....l.F |
0900 | c1 0f 03 b4 db 31 5a ad 25 a4 99 44 92 66 14 96 8c 70 c1 b7 52 8f a6 4a 64 53 a7 e7 3a 1d 00 d8 | .....1Z.%..D.f...p..R..JdS..:... |
0920 | b1 77 1f 8d 7c 3a e1 fb c1 cf 53 4a df ad b4 19 65 5c 14 13 7d 42 08 84 61 88 91 91 11 8c 8c 8c | .w..|:....SJ....e\..}B..a....... |
0940 | 30 21 44 c6 39 67 2e af 77 a1 7e 91 1f f6 1c 41 ff 57 07 7e 21 04 8c 31 e8 76 bb 98 9f 9f c7 fc | 0!D.9g..w.~....A.W.~!..1.v...... |
0960 | fc 3c 3a 9d ce 0a f0 73 ce 4e 72 c6 fe 9a 31 f6 39 4a ed f1 23 47 be 53 aa 08 97 0e a0 b4 0b d9 | .<:....s.Nr...1.9J..#G.S........ |
0980 | 9f fe e7 43 6f 54 5a ff 0f 95 a6 e3 4a 29 18 c2 31 33 bb 88 b9 56 0b 00 81 60 04 52 29 74 53 49 | ...CoTZ.....J)..13...V...`.R)tSI |
09a0 | ac 25 c3 8c f3 89 4a 18 26 93 1b 06 8f 9f 78 ba 95 ac ad 57 37 08 5f fc 3c 2c 6e 95 ca ac 07 50 | .%....J.&.....x....W7._.<,n....P |
09c0 | 14 fa 9c a8 c7 d0 d0 10 86 87 87 51 ad 56 e1 79 1e cb b2 4c 19 63 a8 cb ed fb 01 ef 7e ed 5e 94 | ...........Q.V.y...L.c......~.^. |
09e0 | 52 08 21 8a 88 a1 db ed 62 6e 6e 0e f3 f3 f3 2b 4f 7e ad 8c f0 c4 59 4f 88 2f 72 ce 3e 4b 88 39 | R.!.....bnn....+O~....YO./r.>K.9 |
0a00 | 76 e4 c8 77 ba e5 1d 2e 1d 40 69 17 b0 bf f9 e8 cf bd 99 31 fe 47 b0 7a 42 4b 85 44 59 3c 31 7d | v..w.....@i........1.G.zBK.DY<1} |
0a20 | 16 4f 4c 9f 83 d2 06 be 47 e0 09 0a 8f e7 05 b7 24 93 84 52 d6 f0 02 6f 9c 0b d1 a9 57 47 52 c2 | .OL.....G.......$..R...o....WGR. |
0a40 | bd 77 01 78 4f 92 c9 0d 46 5b 84 3d 72 8f 53 f3 19 1c 1c 44 a3 d1 40 10 04 45 d5 5e 4a 49 b5 d6 | .w.xO...F[.=r.S....D..@..E.^JI.. |
0a60 | ca 5a 4b 57 ff 9b 1c e8 9d 03 60 8c 81 52 5a 54 fb 1d f8 57 9d fc 46 78 a2 e5 fb fe 57 85 e0 9f | .ZKW......`..RZT...W..Fx....W... |
0a80 | 26 c4 1e 39 7c f8 c1 b2 df 5f 3a 80 d2 2e 64 9f fd af b7 de 04 6a ff d0 18 39 a1 64 8a 54 6a 4c | &..9|...._:...d......j...9.d.TjL |
0aa0 | 3d 35 8b 47 8e 9f 43 3b 4e 01 58 04 1e 85 2f 28 38 27 e0 2c 07 61 2a 15 b1 84 0e 6b cb 77 66 86 | =5.G..C;N.X.../(8'.,.a*....k.wf. |
0ac0 | 5c 23 2d de 2a 33 b9 5e 1b 83 b0 37 cc e3 da 7d 83 83 83 18 1e 1e 2e c0 ef e6 f9 7b fc 7e 6a ad | \#-.*3.^...7...}...........{.~j. |
0ae0 | 95 e7 7b 1e fa 7b fc 00 20 a5 44 1c c7 98 9f 9f 47 b3 d9 5c 0d 7e cd 39 9f f5 84 77 87 10 e2 cf | ..{..{....D.....G..\.~.9...w.... |
0b00 | ac c5 b7 3b 9d 6e 67 66 66 a6 bc c9 65 11 b0 b4 f3 d9 67 3e f4 ae eb 95 54 1f 57 99 1a d7 3a 45 | ...;.ngff...e.....g>....T.W...:E |
0b20 | 9a 6a 2c 34 db 58 5c e8 80 51 80 31 02 c0 22 53 1a be 21 60 94 22 f4 39 06 6b 01 a4 49 d0 8e 13 | .j,4.X\..Q.1.."S..!`.".9.k..I... |
0b40 | 9a 12 ba 2d 51 7c dc 80 89 3c ec 5f 06 7f 3f b7 3f 08 02 00 28 68 ba 4a a9 7e a0 0b 00 0a 00 ef | ...-Q|...<._..?.?...(h.J.~...... |
0b60 | 4f 05 dc 0b 40 d1 ea 6b b5 5a 2b aa fd 49 92 58 29 65 c2 18 7b 9c 73 fe 8f 94 d3 bf b5 d6 de db | O...@..k.Z+..I.X)e..{.s......... |
0b80 | e9 74 96 8e 1e 3d 5a 72 fe 4b 07 50 da 79 c3 fe 0f bf e7 a6 34 53 1f 97 69 3a 9e 76 3b 50 06 98 | .t...=Zr.K.P.y......4S..i:.v;P.. |
0ba0 | 6f 2e 62 76 7e 09 9c 52 54 42 01 4e 01 9f 13 c0 5a 68 6d 40 08 03 25 14 9e 10 f0 7d 60 be 6b d0 | o.bv~..RTB.N....Zhm@..%....}`.k. |
0bc0 | 91 16 86 80 73 4e 6d 18 45 a4 56 ab ad 20 f9 0c 0d 0d 21 0c c3 e2 e4 cf b2 6c 05 f8 fb f2 7e 0e | ....sNm.E.V.......!......l....~. |
0be0 | c0 5a 6b 89 0b f9 39 e7 c5 c9 df 0f 7e 77 f2 a7 69 6a a5 52 0b 8c b1 fb 39 e7 b7 51 4a bf 6e b5 | .Zk...9.....~w..ij.R....9..QJ.n. |
0c00 | 3d de 49 3b 49 09 fe d2 01 94 76 01 fb d2 47 6e 7d 8b 35 f6 e3 d2 aa 71 95 25 50 86 e0 ec d9 26 | =.I;I.....v...Gn}.5....q.%P....& |
0c20 | 9e 39 3b 0f 6b 81 24 d3 90 ca 40 59 0b 63 97 19 77 9c 51 48 05 a4 da 60 49 0a 24 16 b0 84 12 ce | .9;.k.$...@Y.c..w.QH...`I.$..... |
0c40 | 3d 54 ab 15 54 2a 95 22 e7 af d7 eb a8 d7 eb f0 3c 0f 84 90 62 b0 47 eb 0b b3 6f 1d f8 5d 9f 9f | =T..T*."........<...b.G...o..].. |
0c60 | 52 0a 29 25 92 24 39 2f f8 b5 d6 2d c1 f9 9d 9c f3 3f 23 84 7c 9b 10 72 e6 c8 91 23 59 79 87 4b | R.)%.$9/...-.....?#.|..r...#Yy.K |
0c80 | 07 50 da 05 ec 2f fe eb 8f bf 41 4a f5 09 02 3d ae 55 02 4a 80 d9 99 26 a6 9f 9c 41 92 29 68 6b | .P.../....AJ...=.U.J...&...A.)hk |
0ca0 | d0 cd 34 e2 24 9f bf 27 00 a2 28 3f a5 8d 25 48 14 c1 ec 12 30 df 26 90 1a a0 94 23 08 fc a2 d7 | ..4.$..'..(?..%H....0.&....#.... |
0cc0 | ef 18 7e 8e db 6f ad 85 94 b2 18 e9 5d 4d ea 01 50 f4 ff 9d a3 e9 71 06 20 a5 74 53 7d 45 d8 9f | ..~..o......]M..P.....q...tS}E.. |
0ce0 | 73 fb 53 18 63 da 9e e7 7d 53 08 f1 09 42 c8 dd 5a eb b9 23 47 8e 94 dc fe d2 01 94 76 21 fb f4 | s.S.c...}S...B..Z..#G.......v!.. |
0d00 | 6f fc f0 0f aa 4c 7d 0c 54 8d 5b a3 a1 95 41 73 7e 11 67 cf 34 21 a5 42 2a 15 ba a9 46 aa 34 b4 | o....L}.T.[...As~.g.4!.B*...F.4. |
0d20 | b1 b0 16 e8 66 1a 8b 1d 05 4a 18 34 b1 38 d3 54 38 b3 60 d0 55 04 94 09 78 7e 50 00 d6 f7 fd 62 | ....f....J.4.8.T8.`.U...x~P....b |
0d40 | aa cf 15 fc fa 19 7e ab f9 fc ce 09 b8 42 9f 10 39 6f c0 69 fd b9 3e 7f b3 d9 5c 91 f3 1b a3 17 | ......~......B..9o.i..>...\..... |
0d60 | 85 ef ff 3d 13 de 27 84 60 f7 1a 65 16 ef bd f7 de 92 db 5f 3a 80 d2 2e 64 5f f9 f0 4f bc 69 29 | ...=..'.`..e......._:...d_..O.i) |
0d80 | 4e 3f 26 95 1a cf 32 05 03 8a b9 d9 25 9c 3e 35 0b a3 34 3c 4e 10 67 80 b6 39 8e 18 01 34 01 8c | N?&...2.....%.>5..4<N.g..9...4.. |
0da0 | 01 16 da 0a 4b a9 45 a2 28 e6 3b 16 5d 49 c0 b8 e8 71 fa f3 3e bf e7 79 2b c0 4f 29 5d c1 f0 73 | ....K.E.(.;.]I...q..>..y+.O)]..s |
0dc0 | 80 ef ff 75 ff 18 2f e7 bc 00 bf 1b e9 9d 9b 9b c3 dc dc 5c 11 f6 77 bb 5d 6b 8c 5a f0 3c ef cb | ...u../............\..w.]k.Z.<.. |
0de0 | 1e e7 ff dd f7 bc fb 32 6b bb f7 dc fd ed 32 df 2f 1d 40 69 17 b2 23 9f 7d ff 9b 92 6e fc 47 80 | .......2k.....2./.@i..#.}...n.G. |
0e00 | 19 5f 58 4c 11 4b 83 33 e7 9a 78 fa e9 79 18 65 c1 18 10 71 06 4b 2c 8c 35 c8 64 1e fa 1b 0b c4 | ._XL.K.3..x..y.e...q.K,.5.d..... |
0e20 | 99 41 27 33 68 2f 19 c4 92 40 81 c1 f3 02 54 2a 55 54 ab 95 02 b8 23 23 23 18 1d 1d 85 ef fb 2b | .A'3h/...@....T*UT....###......+ |
0e40 | 4e fa 7e 86 9f 3b e9 5d c8 ef c0 ef 1c 88 03 7f a7 d3 c1 ec ec 2c e6 e6 e6 d0 6e b7 d1 ed 26 e8 | N.~..;.].............,....n...&. |
0e60 | 76 63 28 29 53 df 63 0f 04 82 fc 39 e3 ea 01 40 76 ef f9 e6 dd 25 f8 4b 07 50 da 85 ec f0 6d bf | vc()S.c....9...@v....%.K.P....m. |
0e80 | b2 c7 5a f2 3b 42 f0 09 8f e7 f9 f6 99 b3 4d 9c 3c 3d 0f 29 35 04 25 10 9c c1 63 14 9c 7b 60 8c | ..Z.;B........M.<=.)5.%...c..{`. |
0ea0 | 20 8e 35 a4 d4 c8 14 d0 05 41 3b 51 58 4c 2d b4 a5 f0 82 5c bc b3 5e af c3 f7 3d f8 be 8f a1 a1 | ..5......A;QXL-....\..^...=..... |
0ec0 | 21 8c 8e 8e a2 52 a9 c0 5a 5b 54 fa fb 19 7e ae 97 bf 9a dd c7 39 7f 16 f8 67 66 66 7a e0 ef a0 | !....R..Z[T...~......9...gffz... |
0ee0 | db 4d 7a b9 7f 62 39 b5 67 04 63 9f 15 0c df 08 38 6d df 7e 67 09 fe d2 01 94 76 41 7b e4 b6 9f | .Mz..b9.g.c.....8m.~g.....vA{... |
0f00 | 23 89 b1 59 22 e5 e1 2c 4d 27 bb 89 1e 48 3a 09 49 e2 bc f8 47 00 80 58 00 16 94 12 f8 9c 82 73 | #..Y"..,M'...H:.I...G..X.......s |
0f20 | 1f 3e d7 68 2d 49 c4 52 a3 23 81 44 33 58 58 78 be 8f 5a b5 8a 81 81 3a a2 68 a5 6e bf 6b f5 65 | .>.h-I.R.#.D3XXx..Z....:.h.n.k.e |
0f40 | 59 86 24 49 60 8c 29 40 ef 42 fe fe e2 5f 3f b7 df 0d f6 38 f0 cf ce ce a2 dd 6e 23 8e bb e8 76 | Y.$I`.)@.B..._?....8......n#...v |
0f60 | bb 48 d3 c4 18 95 c5 cc 63 b7 51 ab ff 26 10 76 fe f6 3b 8f 94 e0 7f 95 5b c9 04 7c 85 ed 0f 6e | .H......c.Q..&.v..;.....[..|...n |
0f80 | bb 0f 97 ef 1c 4c 05 37 b1 51 ba da 4d ec ba b8 2b 43 a3 15 81 31 00 2c 1c f5 9e 52 02 ce 18 38 | .....L.7.Q..M...+C...1.,...R...8 |
0fa0 | a7 30 20 68 27 16 67 97 34 e6 ba 80 b4 14 dc f3 51 ad 56 0b d9 ae de a2 ce 15 e0 77 85 bb 34 4d | .0.h'.g.4.......Q.V........w..4M |
0fc0 | 57 9c fc 94 d2 22 25 70 0e a0 ff e4 37 c6 14 61 ff 32 f8 63 74 bb 5d 24 49 02 ad a4 61 c4 fc 79 | W...."%p....7..a.2.ct.]$I...a..y |
0fe0 | 14 d0 df 1b ac f8 27 bf f6 ed 63 25 f8 4b 07 50 da f3 99 3d f3 df 48 3c db ae 77 62 99 a5 49 76 | ......'...c%.K.P...=..H<..wb..Iv |
1000 | 57 9c 20 50 da 4e 5a d8 50 50 43 28 31 30 bd 6a 3f 2c 00 42 a0 2d c1 42 d7 e2 54 53 e2 cc a2 46 | W..P.NZ.PPC(10.j?,.B.-.B..TS...F |
1020 | aa 08 b8 10 88 aa 35 d4 aa b9 74 77 a5 52 c1 d0 d0 10 1a 8d 46 01 7e b7 b1 47 4a b9 02 e4 ae 9f | ......5...tw.R......F.~..GJ..... |
1040 | ef a2 00 00 2b 4e 7e 37 d8 d3 9f f3 f7 83 df 28 a9 05 d5 5f a8 fa f8 8f 15 1f c7 ef 3c 32 55 82 | ....+N~7.......(..._........<2U. |
1060 | bf 74 00 a5 3d 2f f8 f5 a7 c8 83 7f ff f0 88 52 6a 2d 8c 7a fc 47 7e e5 2f 9e fe 17 6f b8 e4 01 | .t..=/.........Rj-.z.G~./...o... |
1080 | ad cc 66 63 d5 76 c1 e0 79 0c 30 c6 c2 f4 08 3f 99 34 58 e8 18 3c 39 9b e1 d4 bc 44 37 03 b8 e8 | ..fc.v..y.0....?.4X..<9....D7... |
10a0 | e5 fc b5 6a c1 ed 1f 1e 1e c6 c8 c8 08 aa d5 ea 79 c5 3c 00 14 c5 41 cf f3 56 a4 02 8e e8 b3 7a | ...j............y.<...A..V.....z |
10c0 | aa ef bc e0 37 2a f1 b9 fd ec 60 84 0f d6 02 3c fe 8d 07 9f 2e c1 5f 3a 80 d2 9e 17 fc 9d 3f 23 | ....7*....`....<......_:......?# |
10e0 | 0f 7f e5 81 51 95 a9 75 c4 ea 47 ae ff d9 4f 49 00 68 6c 7e a4 d3 10 63 8f 50 4a 85 f0 fc 09 10 | ....Q..u..G...OI.hl~...c.PJ..... |
1100 | 1a 69 ad 88 52 16 49 66 d1 ea 68 9c 9c cd f0 d4 9c 44 2c 01 cf 5f 16 ec ac 54 72 a6 5f a3 d1 58 | .i..R.If..h......D,.._...Tr._..X |
1120 | 21 dd ed 4e ff fe aa 3f 21 a4 58 eb ed de e3 d2 01 ce 79 01 fe 24 49 d0 6c 36 8b 56 5f b7 db 45 | !..N...?!.X.......y..$I.l6.V_..E |
1140 | b7 37 dc 63 8d 5a aa 78 f8 f4 48 9d fe c6 70 8d 3e f1 d5 7b 4f 97 e0 2f 1d 40 69 cf 67 5f fa bd | .7.c.Z.x..H...p.>..{O../.@i.g_.. |
1160 | f7 fb f3 d3 a7 b7 18 a3 d7 58 ab 1f b9 ea 5d 9f 28 a8 b1 47 1e 84 bd fe e0 d0 5c e4 45 d3 82 7b | .........X....].(..G......\.E..{ |
1180 | 15 65 ed 64 26 4d 94 49 8d 66 2c 31 3d 93 e1 a9 79 89 ae 66 88 a2 2a ea f5 01 54 2a 11 c2 30 c2 | .e.d&M.I.f,1=...y..f..*...T*..0. |
11a0 | d0 50 3e d1 37 38 38 88 a0 a7 ed e7 c6 7a fb d5 7b 8c 31 f0 bc bc 3b e0 79 5e f1 be 7e c2 8f 03 | .P>.788......z..{.1...;.y^..~... |
11c0 | ff 4a 7a 6f 17 71 dc 45 92 74 61 8d ea 44 1e 3e ba 66 80 ff e6 d7 ef 3b f9 d4 e3 4f 2d 94 37 b6 | .Jzo.q.E.ta..D.>.f.....;...O-.7. |
11e0 | 74 00 a5 3d ef c9 ff c1 0f d2 e6 64 bb c1 20 36 53 82 27 8c ce da 7f f8 57 f7 ad 78 cf ed df 3e | t..=.......d...6S.'.....W..x...> |
1200 | 8b a1 6d 4f ce 8e f1 f5 53 99 b2 61 37 33 e3 cd 8e 8a 9e 9c 91 e4 c9 b9 0c 89 66 a8 d7 07 0a a0 | ..mO....S..a73............f..... |
1220 | 87 61 88 d1 d1 11 8c 8d 8d a1 56 ab 15 73 f9 00 56 ec e6 73 df 77 27 bc 03 bf 9b e9 77 d6 af de | .a........V..s..V..s.w'.....w... |
1240 | eb c0 ef 5a 7d 49 92 c0 68 15 57 72 f0 ff e7 af dd 3b 35 5b de d5 d2 01 94 f6 02 ed 96 7f 73 90 | ...Z}I..h.Wr.....;5[..........s. |
1260 | 70 16 8c 52 4a 62 62 d5 99 03 3f fd d1 f3 86 cd 0f 3e 60 f1 77 df 3e 39 73 fd be d1 27 9e 5e 50 | p..RJbb...?......>`.w.>9s...'.^P |
1280 | 63 27 cf a5 3b 4f 9c 4d 44 57 51 52 ad d6 31 38 38 54 8c f3 8e 8c e4 e0 77 f9 be cb f5 fb 75 fa | c'..;O.MDWQR..188T......w.....u. |
12a0 | 1d c8 fb 15 7b dd 69 df af f1 b7 7a a4 d7 85 fd 71 9c 7f d5 4a ca d0 c3 a7 46 eb ec d7 ee 38 3c | ....{.i....z....q...J....F....8< |
12c0 | dd 2c ef e8 6b db 68 79 09 2e ae ed 7d fb 6f 1a 0a db 84 4e 4f 25 dd f4 f9 72 66 f2 a1 cf cf b4 | .,..k.hy....}.o....NO%...rf..... |
12e0 | ee 79 2c 69 9d 38 9b a2 2b 09 a9 54 96 7b fc 2e df 77 91 40 ff 64 5e b7 db 5d 31 dc d3 bf a6 bb | .y,i.8..+..T.{...w.@.d^..]1..... |
1300 | ff b4 77 79 bf 73 0e 59 96 ad 00 7f 1c c7 68 b7 f3 af 5a 49 1d 72 7b db 48 85 fe fa d7 ef 9b 9e | ..wy.s.Y......h...ZI.r{.H....... |
1320 | 2b ef 66 e9 00 4a 7b 09 76 e9 db 7f ab 25 65 26 5f f7 9e 4f 3c a7 03 d8 b5 63 ab 58 37 e8 ef 5a | +.f..J{.v....%e&_..O<....c.X7..Z |
1340 | ec 66 97 a4 0a 22 aa 54 8a 09 3e 21 04 aa d5 6a 21 ec 61 ad 2d 80 9f 24 49 31 dd e7 36 f8 b8 5f | .f...".T..>!...j!.a.-..$I1..6.._ |
1360 | af 1e fc 71 21 7f 9a a6 58 5c 5c c4 dc dc 5c 1f f8 3b 79 d5 bf d3 81 92 19 86 2a b4 3b be ae 36 | ...q!...X\\...\..;y.......*.;..6 |
1380 | 1d 54 84 d9 74 55 58 ee 8c 28 1d 40 69 2f d5 be 79 d7 f4 73 82 ff 86 03 e3 c4 aa b4 d6 ed 76 27 | .T..tUX..(.@i/..y..s..........v' |
13a0 | b5 d6 23 41 18 b2 a0 a7 dc eb 79 1e aa d5 2a 6a b5 1a 3c cf 2b 42 f7 fe 59 7e 77 ea 67 59 86 2c | ..#A......y...*j..<.+B..Y~w.gY., |
13c0 | cb 0a d0 f7 6f ed 71 69 80 52 0a 71 1c a3 d9 6c a2 d9 6c a2 dd 6e a3 d3 e9 60 69 a9 8d 76 7b 09 | ....o.qi.R.q...l..l..n...`i..v{. |
13e0 | 52 a6 18 f0 0d 46 6a 34 12 0c 6f f7 3c ef 9d 3b e9 c6 51 bc a3 5c 1c 53 d6 00 4a 7b 49 f6 e5 bb | R....Fj4..o.<..;..Q..\.S..J{I... |
1400 | 9f b8 e0 9f bd e5 c0 16 72 7a 5e 0e 75 a5 7d 13 65 e2 d6 30 ac 1c f0 3d cf 67 9c 23 0c f3 d0 7f | ........rz^.u.}.e..0...=.g.#.... |
A..^....8F.w@.a......H....PF!8.. |
1660 | a9 0e 0b ce e0 fb 02 d6 02 99 54 04 84 36 28 e3 93 96 d3 44 8c 0d 9f 38 18 cd c4 f7 95 fc c0 d2 | ..........T..6(....D...8........ |
1680 | 01 94 f6 c2 6d e7 9e cb 06 3c 2e de 6b ad fd 69 ad cd 0e 10 4a 2e 04 fe fe 5e be 03 bf 0b f5 5d | ....m....<..k..i....J....^.....] |
16a0 | be ef c0 ef a6 fd 56 cf f3 bb 93 df bd 3c a6 b0 65 58 60 73 c3 83 47 08 a4 d4 30 26 17 21 f1 04 | ......V......<..eX`s..G...0&.!.. |
16c0 | 87 27 38 04 63 a0 8c 81 33 0a df 17 f0 3d 0e 6d 34 d2 54 52 10 da a0 94 4d 1a ca 92 b3 bc 36 5d | .'8.c...3....=.m4.TR....M.....6] |
16e0 | 5d 6f 3a 67 4f 27 e5 8d 2d 1d 40 69 cf 67 57 5d b5 7f 90 11 fb af ad 35 3f 25 a5 da 2d 95 2a 04 | ]o:gO'..-.@i.gW].......5?%..-.*. |
1700 | 3d 2a 3d f2 4f 14 45 c5 de bd 7e 8a 6f 3f f0 fb c5 3b 3d cf 43 a5 52 29 b4 00 92 24 29 0a 7e 71 | =*=.O.E...~.o?...;=.C.R)...$).~q |
1720 | 1c 23 e9 76 11 77 f3 d3 bf 22 34 b6 8e 79 58 37 c8 61 8c 45 9a aa 7c 04 d9 e4 d1 84 c7 73 07 40 | .#.v.w..."4..yX7.a.E..|......s.@ |
1740 | 59 ff cf 60 f0 04 47 18 78 b0 b0 48 33 45 8c 45 c3 82 8e 1b c2 13 6a e8 89 27 6d 2b c6 52 79 7f | Y..`..G.x..H3E.E......j..'m+.Ry. |
1760 | 4b 07 50 da 05 af ef de bd 7b 77 58 8b 5b 8d 51 87 a4 d4 3b b4 36 dc f3 bc c2 01 54 ab 55 b7 a9 | K.P......{wX.[.Q...;.6.....T.U.. |
1780 | b7 20 f7 9c af e7 df 1f fa f7 f7 f9 95 52 58 5a 5a c2 d9 b3 67 57 14 fc 3a 71 8c 6e 37 46 dd 37 | .............RXZZ...gW..:q.n7F.7 |
17a0 | b8 64 bd c0 68 9d 23 93 06 dd 44 41 6a 0b d8 9e 1c 99 25 a0 84 40 08 06 c1 05 18 65 bd 8e 03 81 | .d..h.#...DAj.....%..@.....e.... |
17c0 | e7 31 44 be 87 30 f0 a1 94 46 27 4e 49 aa ec 30 63 7c 22 f0 6a e9 96 e1 35 27 c2 c1 66 3c 73 a6 | .1D..0...F'NI..0c|".j...5'..f<s. |
17e0 | 5c 05 50 3a 80 d2 ce 03 fe 9d db 84 f0 0e 59 8b 5b b4 d6 bb 8d 31 81 10 02 51 14 21 0c 43 44 51 | \.P:..........Y.[....1...Q.!.CDQ |
1800 | 04 b7 c6 cb 0d f9 f4 6f ed e9 af f4 bb 08 60 b5 80 67 1c c7 98 99 99 c1 cc cc 4c de df ef 85 fc | ....
errorstream<<"RecursiveDelete: Failed to recurse to "
<<fullpath<<std::endl;
return false;
}
}
infostream<<"RecursiveDelete: Deleting directory "<<path<<std::endl;
//bool did = RemoveDirectory(path.c_str();
bool did = true;
if(!did){
errorstream<<"Failed to recursively delete directory "
<<path<<std::endl;
return false;
}
}
return true;
}
bool DeleteSingleFileOrEmptyDirectory(const std::string &path)
{
DWORD attr = GetFileAttributes(path.c_str());
bool is_directory = (attr != INVALID_FILE_ATTRIBUTES &&
(attr & FILE_ATTRIBUTE_DIRECTORY));
if(!is_directory)
{
bool did = DeleteFile(path.c_str());
return did;
}
else
{
bool did = RemoveDirectory(path.c_str());
return did;
}
}
std::string TempPath()
{
DWORD bufsize = GetTempPath(0, NULL);
if(bufsize == 0){
errorstream<<"GetTempPath failed, error = "<<GetLastError()<<std::endl;
return "";
}
std::vector<char> buf(bufsize);
DWORD len = GetTempPath(bufsize, &buf[0]);
if(len == 0 || len > bufsize){
errorstream<<"GetTempPath failed, error = "<<GetLastError()<<std::endl;
return "";
}
return std:: 77 59 c6 2b 46 d2 ed 5a 63 e4 63 91 8f df b9 7a c7 c0 9f 37 06 ab | .....\w...wY.+F..Zc.c....z...7.. |
1b80 | 8c 7b c1 04 28 ad 58 ab f3 08 1e 0c 40 5e 4f c8 99 7e 1c 94 e4 ad 3e ce f3 22 a0 ef 0b 50 96 bf | .{..(.X.....@^O..~....>.."...P.. |
1ba0 | 9b 50 57 7c ec 75 22 ac 73 03 04 16 16 4a 99 7c 7e 80 e4 2d 44 a9 14 92 4c 12 0b 36 2c 02 6f bb | .PW|.u".s....J.|~..-D...L..6,.o. |
1bc0 | f0 c4 e2 9e ed 1b 8e 37 1e 1b 4b 4e a2 ec 0e 94 0e e0 35 6c 6f b8 fe da 01 df f3 de 4b 08 79 97 | .......7..KN......5lo.......K.y. |
1be0 | 31 d8 a7 b4 e1 41 90 cf f4 bb d0 7f 60 60 00 8d 46 a3 60 fa 9d 0f fc ee f4 77 a0 77 df 73 62 1e | 1....A......``..F.`......w.w.sb. |
1c00 | ab c1 df ed 26 48 93 ae b4 5a 3d 5e 0b c9 47 37 34 f8 6d 6b 86 bc e3 b5 7a 75 8a 79 7e 95 73 31 | ....&H...Z=^..G74.mk....zu.y~.s1 |
1c20 | c9 29 0b 19 b1 c4 15 12 85 e0 f0 05 07 e3 b9 33 c8 69 c0 24 af fa 33 0a ca 28 fa 25 40 f2 65 25 | .).............3.i.$..3..(.%@.e% |
1c40 | 3d 2a 32 00 ad 0d 94 36 d0 c6 c2 d8 fc bb 84 e6 0e 23 17 27 51 b0 96 0c 30 ca b6 52 c6 65 65 07 | =*2....6.........#.'Q...0..R.ee. |
1c60 | 3d b1 e5 9a f5 f1 e3 0f 9c 2e 1f 94 d2 01 bc f6 ec ba 6b 0f 0e 12 42 7f 59 1b f3 93 52 a9 4b 52 | =.................k...B.Y...R.KR |
1c80 | a9 e0 fb 7e c1 d0 f3 3c 0f 03 03 03 45 d8 ef 2a f8 17 02 bf 73 00 9c f3 67 85 fd f3 f3 f3 7d e0 | ...~...<....E..*....s...g.....}. |
1ca0 | ef 22 49 92 b6 d5 f2 f1 7a 44 ff 6c e3 b0 f8 f4 e6 51 6f f6 63 7f fb b8 7d f7 db 4f ce 76 db 13 | ."I.....zD.l.....Qo.c...}..O.v.. |
1cc0 | 53 4c 78 91 10 7c 82 31 12 71 6a 49 de 09 c8 2b fc ae cf 4f 7b 27 7c 9e e7 13 50 4a 56 70 0f ac | SLx..|.1.qjI...+...O{'|...PJVp.. |
1ce0 | 2360 | f8 f0 e1 97 f5 c0 9f bd 17 b8 61 56 cf 86 fb 46 a7 b8 f0 23 ce c5 24 21 24 72 d5 7e dd 23 fe c0 | ..........aV...F...#..$!$r.~.#.. |
2380 | f6 c6 92 7b ce cb 9a 3c 3d 58 1e 0d a6 3d ef 80 5e 41 93 80 31 0a 0b da 73 20 04 94 02 8c e4 fc | ...{...<=X...=..^A..1...s....... |
23a0 | 02 c1 28 02 9f 81 20 df 53 a8 ad 89 38 63 5b 19 a7 ba 4a c5 89 23 1b cf c4 78 e2 85 29 0b 8d 8e | ..(.....S...8c[...J..#...x..)... |
23c0 | 8d 12 6b ad 35 c6 e8 f9 b2 06 50 3a 80 17 63 d7 ed 5d fb 19 99 b4 c7 5a f3 b3 98 99 6b b2 4e 1c | ..k.5.....P:..c..].....Z....k.N. |
23e0 | 0f 72 86 dd 91 cf ae b5 5a be b5 1b 77 ae 8f bb c9 c1 58 f1 1b 33 4d f6 2b 63 c7 8c 31 08 7b f2 | .r......Z...w.....X..3M.+c..1.{. |
2400 | 5d 4e 7e bb 9f e1 e7 48 3e fd 0c 3f 00 2b 26 fa fa e7 f9 fb 73 7e 17 f6 77 3a 6d 64 99 74 64 20 | ]N~....H>..?.+&.....s~..w:md.td. |
2420 | 13 45 d1 d3 f9 c9 4f 3e d5 6a b5 0e 3f fa e8 a3 72 72 72 92 1d 3d 7a f4 65 85 bc 1f ff 95 eb c8 | .E....O>.j..?...rrr..=z.e....... |
2440 | 2f 7d e1 01 7b e3 75 6b 67 03 11 4e 33 26 aa 20 74 d2 5a 1b 5a ab 89 b5 79 4a 60 7b 6d c0 82 29 | /}..{.ukg..N3&..t.Z.Z...yJ`{m..) |
2460 | 08 0a 80 f4 d8 8b 14 9c e7 82 22 84 62 79 d2 90 e6 b3 01 a0 2b a5 cc 28 08 04 23 b9 26 81 c8 a9 | ..........".by......+..(..#.&... |
2480 | d0 69 a6 28 21 74 98 50 3e c1 99 48 2f c3 da 13 a3 97 36 e2 e3 2f a0 3b b0 61 c3 7a 50 4a 71 f4 | .i.(!t.P>..H/.....6../.;.a.zPJq. |
24a0 | e8 31 53 42 b8 74 00 2f d8 3e f4 8b 6f bc 4a 30 fb fe 50 58 5f 50 8b a4 9b c0 18 8b 46 dd 23 63 | .1SB.t./.>..o.J0..PX_P......F.#c |
24c
if (IsDir(path)) {
bool did = (rmdir(path.c_str()) == 0);
if (!did)
errorstream << "rmdir errno: " << errno << ": " << strerror(errno)
<< std::endl;
return did;
}
bool did = (unlink(path.c_str()) == 0);
if (!did)
errorstream << "unlink errno: " << errno << ": " << strerror(errno)
<< std::endl;
return did;
}
std::string TempPath()
{
/*
Should the environment variables TMPDIR, TMP and TEMP
and the macro P_tmpdir (if defined by stdio.h) be checked
before falling back on /tmp?
Probably not, because this function is intended to be
compatible with lua's os.tmpname which under the default
configuration hardcodes mkstemp("/tmp/lua_XXXXXX").
*/
#ifdef __ANDROID__
return DIR_DELIM "sdcard" DIR_DELIM PROJECT_NAME DIR_DELIM "tmp";
#else
return DIR_DELIM "tmp";
#endif
}
#endif
void GetRecursiveDirs(std::vector<std::string> &dirs, const std::string &dir)
{
static const std::set<char> chars_to_ignore = { '_', '.' };
if (dir.empty() || !IsDir(dir))
return;
dirs.push_back(dir);
fs::GetRecursiveSubPaths(dir, dirs, false, chars_to_ignore);
}
std::vector<std::string> GetRecursiveDirs(const std::string &dir)
{
std::vector<std::string> result;
GetRecursiveDirs(result, dir);
return result;
}
void GetRecursiveSubPaths(const std::string &path,
std::vector<std::string> &dst,
bool list_files,
const std::set<char> &ignore)
{
std::vector<DirListNode> content = GetDirListing(path);
for (const auto &n : content) {
std::string fullpath = path + DIR_DELIM + n.name;
if (ignore.count(n.name[0]))
continue;
if (list_files || n.dir)
dst.push_back(fullpath);
if (n.dir)
GetRecursiveSubPaths(fullpath, dst, list_files, ignore);
}
}
bool DeletePaths(const std::vector<std::string> &paths)
{
bool success = true;
// Go backwards to succesfully delete the output of GetRecursiveSubPaths
for(int i=paths.size()-1; i>=0; i--){
const std::string &path = paths[i];
bool did = DeleteSingleFileOrEmptyDirectory(path);
if(!did){
errorstream<<"Failed to delete "<<path<<std::endl;
success = false;
}
}
return success;
}
bool RecursiveDeleteContent(const std::string &path)
{
infostream<<"Removing content of \""<<path<<"\""<<std::endl;
std::vector<DirListNode> list = GetDirListing(path);
for (const DirListNode &dln : list) {
if(trim(dln.name) == "." || trim(dln.n 5a 05 f8 17 17 17 a1 4d 8e 69 ce 97 c7 7f b5 d6 30 d6 80 31 4a 06 2a 5e | .i.E..h.Z......M.i......0..1J.*^ |
2c40 | 73 74 30 fc fb cb 77 ad 3f 76 df 43 c7 5f 30 bb ed 83 6f 78 03 1f fd e1 f1 f0 3d e3 27 f5 6d 47 | st0...w.?v.C._0...ox......=.'.mG |
2c60 | 2f be 13 58 78 06 38 b0 b7 39 0b 3d 36 a5 65 1a 65 5a 4d 12 20 f2 78 3e ec 63 cc ea e1 21 92 0b | /..Xx.8..9.=6.e.eZM...x>.c...!.. |
2c80 | 85 f4 52 7e ce 19 18 a7 60 9c 16 bc 08 e1 71 04 a1 80 e0 ac 10 19 59 49 9a 5a
errorstream << "Removing \"" << childpath << "\" failed" << std::endl;
return false;
}
}
return true;
}
bool CreateAllDirs(const std::string &path)
{
std::vector<std::string> tocreate;
std::string basepath = path;
while(!PathExists(basepath))
{
tocreate.push_back(basepath);
basepath = RemoveLastPathComponent(basepath);
if(basepath.empty())
break;
}
for(int i=tocreate.size()-1;i>=0;i--)
if(!CreateDir(tocreate[i]))
return false;
return true;
}
bool CopyFileContents(const std::string &source, const std::string &target)
{
FILE *sourcefile = fopen(source.c_str(), "rb");
if(sourcefile == NULL){
errorstream<<source<<": can't open for reading: "
<<strerror(errno)<<std::endl;
return false;
}
FILE *targetfile = fopen(target.c_str(), "wb");
if(targetfile == NULL){
errorstream<<target<<": can't open for writing: "
<<strerror(errno)<<std::endl;
fclose(sourcefile);
return false;
}
size_t total = 0;
bool retval = true;
bool done = false;
char readbuffer[BUFSIZ];
while(!done){
size_t readbytes = fread(readbuffer, 1,
sizeof(readbuffer), sourcefile);
total += readbytes;
if(ferror(sourcefile)){
errorstream<<source<<": IO error: "
<<strerror(errno)<<std::endl;
retval = false;
done = true;
}
if(readbytes > 0){
fwrite(readbuffer, 1, readbytes, targetfile);
}
if(feof(sourcefile) || ferror(sourcefile)){
// flush destination file to catch write errors
// (e.g. disk full)
fflush(targetfile);
done = true;
}
if(ferror(targetfile)){
errorstream<<target<<": IO error: "
<<strerror(errno)<<std::endl;
retval = false;
done = true;
}
}
infostream<<"copied "<<total<<" bytes from "
<<source<<" to "<<target<<std::endl;
fclose(sourcefile);
fclose(targetfile);
return retval;
}
bool CopyDir(const std::string &source, const std::string &target)
{
if(PathExists(source)){
if(!PathExists(target)){
fs::CreateAllDirs(target);
}
bool retval = true;
std::vector<DirListNode> content = fs::GetDirListing(source);
for (const auto &dln : content) {
std::string sourcechild = source + DIR_DELIM + dln.name;
std::string targetchild = target + DIR_DELIM + dln.name;
if(dln.dir){
if(!fs::CopyDir(sourcechild, targetchild)){
retval = false;
}
}
else {
if(!fs::CopyFileContents(sourcechild, targetchild)){
retval = false;
}
}
}
return retval;
}
return false;
}
bool PathStartsWith(const std::string &path, const std::string &prefix)
{
size_t pathsize = path.size();
size_t pathpos = 0;
size_t prefixsize = prefix.size();
size_t prefixpos = 0;
for(;;){
bool delim1 = pathpos == pathsize
|| IsDirDelimiter(path[pathpos]);
bool delim2 = prefixpos == prefixsize
|| IsDirDelimiter(prefix[prefixpos]);
if(delim1 != delim2)
return false;
if(delim1){
while(pathpos < pathsize &&
IsDirDelimiter(path[pathpos]))
++pathpos;
while(prefixpos < prefixsize &&
IsDirDelimiter(prefix[prefixpos]))
++prefixpos;
if(prefixpos == prefixsize)
return true;
if(pathpos == pathsize)
return false;
}
else{
size_t len = 0;
do{
char pathchar = path[pathpos+len];
char prefixchar = prefix[prefixpos+len];
if(FILESYS_CASE_INSENSITIVE){
pathchar = tolower(pathchar);
prefixchar = tolower(prefixchar);
}
if(pathchar != prefixchar)
return false;
++len;
} while(pathpos+len < pathsize
&& !IsDirDelimiter(path[pathpos+len])
&& prefixpos+len < prefixsize
&& !IsDirDelimiter(
prefix[prefixpos+len]));
pathpos += len;
prefixpos += len;
}
}
}
std::string RemoveLastPathComponent(const std::string &path,
std::string *removed, int count)
{
if(removed)
*removed = "";
size_t remaining = path.size();
for(int i = 0; i < count; ++i){
// strip a dir delimiter
while(remaining != 0 && IsDirDelimiter(path[remaining-1]))
remaining--;
// strip a path component
size_t component_end = remaining;
while(remaining != 0 && !IsDirDelimiter(path[remaining-1]))
remaining--;
size_t component_start = remaining;
// strip a dir delimiter
while(remaining != 0 && IsDirDelimiter(path[remaining-1]))
remaining--;
if(removed){
std::string component = path.substr(component_start,
component_end - component_start);
if(i)
*removed = component + DIR_DELIM + *removed;
else
*removed = component;
}
}
return path.substr(0, remaining);
}
std::string RemoveRelativePathComponents(std::string path)
{
size_t pos = path.size();
size_t dotdot_count = 0;
while (pos != 0) {
size_t component_with_delim_end = pos;
// skip a dir delimiter
while (pos != 0 && IsDirDelimiter(path[pos-1]))
pos--;
// strip a path component
size_t component_end = pos;
while (pos != 0 && !IsDirDelimiter(path[pos-1]))
pos--;
size_t component_start = pos;
std::string component = path.substr(component_start,
component_end - component_start);
bool remove_this_component = false;
if (component == ".") {
remove_this_component = true;
} else if (component == "..") {
remove_this_component = true;
dotdot_count += 1;
} else if (dotdot_count != 0) {
remove_this_component = true;
dotdot_count -= 1;
}
if (remove_this_component) {
while (pos != 0 && IsDirDelimiter(path[pos-1]))
pos--;
if (component_start == 0) {
// We need to remove the delemiter too
path = path.substr(component_with_delim_end, std::string::npos);
} else {
path = path.substr(0, pos) + DIR_DELIM +
path.substr(component_with_delim_end, std::string::npos);
}
if (pos > 0)
pos++;
}
}
if (dotdot_count > 0)
return "";
// remove trailing dir delimiters
pos = path.siz f6 a5 44 dc a8 89 fd 69 29 d5 81 34 cd 86 01 82 4a a5 | ..#.=.......Nf..D....i)..4....J. |
3e20 | b2 22 e7 ef 3f f9 fb c1 ef 00 de af 26 ed be d7 ff 67 8b 8b 8b 38 73 e6 0c 99 9d 9d 65 8b 8b 8b | ."..?.......&....g...8s.....e... |
3e40 | d5 67 9e 79 26 c8 b2 ec 76 00 18 1a 1a f2 66 67 67 d3 97 e3 04 be ab 0e e0 de 8f bf 4f fc d4 fe | .g.y&...v.....fgg...........O... |
3e60 | 2a fd 93 3b 5e fc 42 c7 b7 5c b1 9e 64 1a 5b 3a 92 fe 7a 5b 92 5b 64 0f fc 41 18 ae f0 b8 6e 4
std::string AbsolutePath(const std::string &path)
{
#ifdef _WIN32
char *abs_path = _fullpath(NULL, path.c_str(), MAX_PATH);
#else
char *abs_path = realpath(path.c_str(), NULL);
#endif
if (!abs_path) return "";
std::string abs_path_str(abs_path);
free(abs_path);
return abs_path_str;
}
const char *GetFilenameFromPath(const char *path)
{
const char *filename = strrchr(path, DIR_DELIM_CHAR);
return filename ? filename + 1 : path;
}
bool safeWriteToFile(const std::string &path, const std::string &content)
{
std::string tmp_file = path + ".~mt";
// Write to a tmp file
std::ofstream os(tmp_file.c_str(), std::ios::binary);
if (!os.good())
return false;
os << content;
os.flush();
os.close();
if (os.fail()) {
// Remove the temporary file because writing it failed and it's useless.
remove(tmp_file.c_str());
return false;
}
bool rename_success = false;
// Move the finished temporary file over the real file
#ifdef _WIN32
// When creating the file, it can cause Windows Search indexer, virus scanners and other apps
// to query the file. This can make the move file call below fail.
// We retry up to 5 times, with a 1ms sleep between, before we consider the whole operation failed
int number_attempts = 0;
while (number_attempts < 5) {
rename_success = MoveFileEx(tmp_file.c_str(), path.c_str(),
MOVEFILE_REPLACE_EXISTING | MOVEFILE_WRITE_THROUGH);
if (rename_success)
break;
sleep_ms(1);
++number_attempts;
}
#else
// On POSIX compliant systems rename() is specified to be able to swap the
// file in place of the destination file, making this a truly error-proof
// transaction.
rename_success = rename(tmp_file.c_str(), path.c_str()) == 0;
#endif
if (!rename_success) {
warningstream << "Failed to write to file: " << path.c_str() << std::endl;
// Remove the temporary file because moving it over the target file
// failed.
remove(tmp_file.c_str());
return false;
}
return true;
}
bool Rename(const std::string &from, const std::string &to)
{
return rename(from.c_str(), to.c_str()) == 0;
}
} // namespace fs
|