From cd1e7abf528703b05b545f811c7257cf54ca8c8c Mon Sep 17 00:00:00 2001 From: SXKDZ Date: Sat, 14 Apr 2018 15:24:19 +0800 Subject: [PATCH] fix small glitch --- Book/Index.css | 7214 ++++++++++++++++++++++---------------------- Book/Index.html | 166 +- Book/Index.outline | 2 +- Book/bg13.png | Bin 4829 -> 4816 bytes Book/bg17.png | Bin 5474 -> 5462 bytes Book/bg1d.png | Bin 4794 -> 4781 bytes Book/bg20.png | Bin 1107 -> 1075 bytes Book/bg27.png | Bin 5652 -> 5644 bytes Book/bg28.png | Bin 4018 -> 3958 bytes Book/bg2d.png | Bin 5424 -> 5415 bytes Book/bg2e.png | Bin 5565 -> 5552 bytes Book/bg33.png | Bin 5654 -> 5645 bytes Book/bg36.png | Bin 3421 -> 3407 bytes Book/bg4f.png | Bin 5157 -> 5142 bytes Book/bg61.png | Bin 5666 -> 5654 bytes Book/f1.woff | Bin 4756 -> 4756 bytes Book/f10.woff | Bin 6048 -> 6044 bytes Book/f11.woff | Bin 5208 -> 5208 bytes Book/f12.woff | Bin 1248 -> 1248 bytes Book/f13.woff | Bin 4004 -> 4008 bytes Book/f14.woff | Bin 6972 -> 6972 bytes Book/f15.woff | Bin 2264 -> 2264 bytes Book/f16.woff | Bin 1392 -> 1392 bytes Book/f17.woff | Bin 1784 -> 1780 bytes Book/f18.woff | Bin 1192 -> 1192 bytes Book/f19.woff | Bin 3136 -> 3136 bytes Book/f1a.woff | Bin 1196 -> 1200 bytes Book/f1b.woff | Bin 1480 -> 1476 bytes Book/f1c.woff | Bin 1264 -> 1264 bytes Book/f1d.woff | Bin 1648 -> 1644 bytes Book/f1e.woff | Bin 1208 -> 1204 bytes Book/f1f.woff | Bin 3556 -> 3556 bytes Book/f2.woff | Bin 98020 -> 98020 bytes Book/f3.woff | Bin 3148 -> 3148 bytes Book/f4.woff | Bin 2436 -> 2436 bytes Book/f5.woff | Bin 224264 -> 224264 bytes Book/f6.woff | Bin 122504 -> 122500 bytes Book/f7.woff | Bin 7928 -> 7928 bytes Book/f8.woff | Bin 6072 -> 6072 bytes Book/f9.woff | Bin 3024 -> 3024 bytes Book/fa.woff | Bin 8628 -> 8628 bytes Book/fb.woff | Bin 1148 -> 1148 bytes Book/fc.woff | Bin 4376 -> 4376 bytes Book/fd.woff | Bin 1704 -> 1704 bytes Book/fe.woff | Bin 1928 -> 1928 bytes Book/ff.woff | Bin 1928 -> 1928 bytes 46 files changed, 3680 insertions(+), 3702 deletions(-) diff --git a/Book/Index.css b/Book/Index.css index bbd7a0d..cbcc215 100644 --- a/Book/Index.css +++ b/Book/Index.css @@ -231,2323 +231,2312 @@ .y119{bottom:80.265000px;} .ydc{bottom:82.500000px;} .y27b{bottom:84.122000px;} -.y7af{bottom:84.379000px;} +.y7a4{bottom:84.379000px;} .yba{bottom:85.151000px;} .y9a{bottom:88.259000px;} .y3f{bottom:88.438000px;} .y67{bottom:88.611000px;} -.y4b0{bottom:88.915000px;} +.y4a9{bottom:88.915000px;} .yb9{bottom:88.960000px;} -.y655{bottom:90.096000px;} +.y64a{bottom:90.096000px;} .yf8{bottom:91.522000px;} .y9b{bottom:95.500000px;} .y118{bottom:96.524000px;} -.y88d{bottom:96.767000px;} +.y882{bottom:96.767000px;} .ydb{bottom:98.302000px;} -.y81b{bottom:98.500000px;} -.y7f1{bottom:99.000000px;} +.y810{bottom:98.500000px;} +.y7e6{bottom:99.000000px;} .y139{bottom:99.073000px;} .y27a{bottom:100.381000px;} -.y2f6{bottom:100.500000px;} -.y88c{bottom:100.576000px;} -.y7ae{bottom:100.638000px;} -.y29d{bottom:101.000000px;} +.y2f3{bottom:100.500000px;} +.y881{bottom:100.576000px;} +.y7a3{bottom:100.638000px;} +.y29a{bottom:101.000000px;} .y123{bottom:102.111000px;} -.y5dd{bottom:102.500000px;} -.y349{bottom:103.500000px;} -.y67f{bottom:104.000000px;} +.y5d6{bottom:102.500000px;} +.y347{bottom:103.500000px;} +.y674{bottom:104.000000px;} .y99{bottom:104.518000px;} -.y5c2{bottom:104.731000px;} -.y5aa{bottom:104.741000px;} +.y5bb{bottom:104.731000px;} +.y5a3{bottom:104.741000px;} .y3e{bottom:104.875000px;} -.y4af{bottom:105.174000px;} +.y4a8{bottom:105.174000px;} .y66{bottom:105.222000px;} -.y654{bottom:106.355000px;} -.y6c9{bottom:106.617000px;} -.y838{bottom:106.910000px;} -.y804{bottom:107.019000px;} +.y649{bottom:106.355000px;} +.y6be{bottom:106.617000px;} +.y82d{bottom:106.910000px;} +.y7f9{bottom:107.019000px;} .yf7{bottom:107.781000px;} .yb8{bottom:108.026000px;} -.y88b{bottom:108.384000px;} +.y880{bottom:108.384000px;} .y11a{bottom:108.500000px;} -.y30b{bottom:108.597000px;} -.y81a{bottom:108.890000px;} -.y2b1{bottom:109.430000px;} +.y308{bottom:108.597000px;} +.y80f{bottom:108.890000px;} +.y2ae{bottom:109.430000px;} .y1bc{bottom:109.995000px;} -.y4cb{bottom:110.000000px;} -.y5dc{bottom:110.083000px;} +.y4c4{bottom:110.000000px;} +.y5d5{bottom:110.083000px;} .y13a{bottom:110.500000px;} -.y5f5{bottom:110.549000px;} -.y487{bottom:111.057000px;} +.y5ee{bottom:110.549000px;} +.y480{bottom:111.057000px;} .yda{bottom:111.452000px;} -.y363{bottom:111.516000px;} +.y361{bottom:111.516000px;} .y296{bottom:111.914000px;} -.y656{bottom:112.000000px;} -.y88a{bottom:112.193000px;} -.y697{bottom:112.400000px;} +.y64b{bottom:112.000000px;} +.y87f{bottom:112.193000px;} +.y68c{bottom:112.400000px;} .y117{bottom:112.783000px;} -.y8be{bottom:113.302000px;} +.y8b3{bottom:113.302000px;} .y1d5{bottom:113.500000px;} -.y67e{bottom:113.523000px;} -.y177{bottom:115.000000px;} +.y673{bottom:113.523000px;} .yd9{bottom:115.261000px;} -.y43c{bottom:115.871000px;} -.y52a{bottom:116.000000px;} -.y71b{bottom:116.227000px;} -.y3eb{bottom:117.227000px;} -.y39d{bottom:117.369000px;} -.y4e3{bottom:118.028000px;} +.y177{bottom:115.500000px;} +.y523{bottom:116.000000px;} +.y710{bottom:116.227000px;} +.y436{bottom:116.231000px;} +.y3e8{bottom:117.227000px;} +.y4dc{bottom:118.028000px;} +.y39a{bottom:118.061000px;} .y156{bottom:118.960000px;} .y235{bottom:119.000000px;} -.y889{bottom:120.000000px;} -.y666{bottom:120.150000px;} -.y57c{bottom:120.556000px;} +.y87e{bottom:120.000000px;} +.y65b{bottom:120.150000px;} +.y575{bottom:120.556000px;} .y98{bottom:120.777000px;} -.y5c1{bottom:120.990000px;} -.y5a9{bottom:121.000000px;} -.y77a{bottom:121.003000px;} +.y5ba{bottom:120.990000px;} +.y5a2{bottom:121.000000px;} +.y76f{bottom:121.003000px;} .y3d{bottom:121.313000px;} -.y74b{bottom:121.456000px;} -.y705{bottom:121.616000px;} +.y740{bottom:121.456000px;} +.y6fa{bottom:121.616000px;} .y1f2{bottom:121.767000px;} .y65{bottom:121.833000px;} -.y6c8{bottom:122.876000px;} -.y837{bottom:123.169000px;} -.y18e{bottom:123.500000px;} -.y888{bottom:123.809000px;} +.y6bd{bottom:122.876000px;} +.y82c{bottom:123.169000px;} +.y18e{bottom:123.651000px;} +.y87d{bottom:123.809000px;} .yf6{bottom:124.040000px;} -.y53c{bottom:124.095000px;} +.y535{bottom:124.095000px;} .yb7{bottom:124.285000px;} -.y63b{bottom:124.340000px;} -.y735{bottom:124.389000px;} -.y30a{bottom:124.856000px;} -.y819{bottom:126.145000px;} +.y630{bottom:124.340000px;} +.y72a{bottom:124.389000px;} +.y307{bottom:124.856000px;} +.y80e{bottom:126.145000px;} .y1bb{bottom:126.254000px;} -.y5db{bottom:126.342000px;} +.y5d4{bottom:126.342000px;} .y24a{bottom:126.616000px;} -.y486{bottom:127.316000px;} -.y7c6{bottom:127.402000px;} +.y47f{bottom:127.316000px;} +.y7bb{bottom:127.402000px;} .y279{bottom:127.454000px;} -.y794{bottom:127.500000px;} -.y30c{bottom:128.000000px;} -.y60a{bottom:128.301000px;} -.y698{bottom:128.500000px;} +.y789{bottom:127.500000px;} +.y309{bottom:128.000000px;} +.y603{bottom:128.301000px;} +.y68d{bottom:128.500000px;} .y21a{bottom:129.042000px;} -.y8bd{bottom:129.561000px;} +.y8b2{bottom:129.561000px;} .y1a6{bottom:129.813000px;} -.y49d{bottom:131.161000px;} -.y3cc{bottom:131.591000px;} -.y887{bottom:131.617000px;} -.y43b{bottom:132.130000px;} -.y71a{bottom:132.486000px;} +.y496{bottom:131.161000px;} +.y3c9{bottom:131.591000px;} +.y87c{bottom:131.617000px;} +.y70f{bottom:132.486000px;} +.y435{bottom:132.490000px;} .y76{bottom:132.976000px;} -.y60b{bottom:133.000000px;} -.y653{bottom:133.428000px;} -.y39c{bottom:133.628000px;} +.y648{bottom:133.428000px;} +.y604{bottom:133.500000px;} +.y399{bottom:134.320000px;} .y155{bottom:135.219000px;} -.y886{bottom:135.426000px;} -.y7ad{bottom:135.772000px;} +.y87b{bottom:135.426000px;} +.y7a2{bottom:135.772000px;} .y116{bottom:136.141000px;} -.y31c{bottom:136.284000px;} -.y49e{bottom:136.500000px;} -.y6b3{bottom:136.755000px;} +.y319{bottom:136.284000px;} +.y497{bottom:136.500000px;} +.y6a8{bottom:136.755000px;} .y138{bottom:136.760000px;} -.y57b{bottom:136.815000px;} -.y372{bottom:136.849000px;} -.y2cb{bottom:137.002000px;} +.y574{bottom:136.815000px;} +.y370{bottom:136.849000px;} +.y2c8{bottom:137.002000px;} .y234{bottom:137.021000px;} .y176{bottom:137.036000px;} -.y5c0{bottom:137.249000px;} -.y779{bottom:137.262000px;} -.y454{bottom:137.666000px;} -.y74a{bottom:137.715000px;} +.y5b9{bottom:137.249000px;} +.y76e{bottom:137.262000px;} +.y44e{bottom:137.666000px;} +.y73f{bottom:137.715000px;} .y3c{bottom:137.751000px;} -.y836{bottom:139.428000px;} -.y803{bottom:139.537000px;} +.y82b{bottom:139.428000px;} +.y7f8{bottom:139.537000px;} .yf5{bottom:140.299000px;} -.y63a{bottom:140.599000px;} -.y622{bottom:141.087000px;} -.y2b0{bottom:141.948000px;} -.y260{bottom:142.269000px;} +.y62f{bottom:140.599000px;} +.y617{bottom:141.575000px;} +.y2ad{bottom:141.948000px;} .y1ba{bottom:142.513000px;} +.y260{bottom:142.862000px;} .y249{bottom:142.875000px;} -.y5f4{bottom:143.067000px;} -.y885{bottom:143.233000px;} -.y362{bottom:144.034000px;} +.y5ed{bottom:143.067000px;} +.y87a{bottom:143.233000px;} +.y360{bottom:144.034000px;} .y1f{bottom:144.582000px;} -.y696{bottom:144.918000px;} -.y4ae{bottom:144.929000px;} -.y50b{bottom:144.941000px;} +.y68b{bottom:144.918000px;} +.y4a7{bottom:144.929000px;} +.y504{bottom:144.941000px;} .y295{bottom:144.942000px;} -.y6f0{bottom:145.135000px;} -.y404{bottom:145.301000px;} -.y8bc{bottom:145.820000px;} -.y67d{bottom:146.041000px;} +.y6e5{bottom:145.135000px;} +.y329{bottom:145.301000px;} +.y8b1{bottom:145.820000px;} +.y672{bottom:146.041000px;} .y1a5{bottom:146.072000px;} -.y6c7{bottom:146.188000px;} -.y53d{bottom:147.000000px;} -.y719{bottom:148.745000px;} +.y6bc{bottom:146.188000px;} +.y536{bottom:147.000000px;} +.y70e{bottom:148.745000px;} .y64{bottom:149.587000px;} .y97{bottom:149.595000px;} -.y39b{bottom:149.887000px;} -.y32c{bottom:150.430000px;} -.y39e{bottom:152.000000px;} +.y398{bottom:150.579000px;} +.y39b{bottom:152.000000px;} .y115{bottom:152.400000px;} -.y665{bottom:152.668000px;} +.y65a{bottom:152.668000px;} .y137{bottom:153.019000px;} -.y57a{bottom:153.074000px;} -.y371{bottom:153.108000px;} -.y2c9{bottom:153.261000px;} +.y573{bottom:153.074000px;} +.y36f{bottom:153.108000px;} +.y2c6{bottom:153.261000px;} .y175{bottom:153.295000px;} -.y5be{bottom:153.507000px;} -.y5bf{bottom:153.508000px;} -.y84c{bottom:153.569000px;} -.y309{bottom:153.819000px;} -.y749{bottom:153.974000px;} -.y5da{bottom:154.038000px;} -.y704{bottom:154.134000px;} +.y5b7{bottom:153.507000px;} +.y5b8{bottom:153.508000px;} +.y841{bottom:153.569000px;} +.y306{bottom:153.819000px;} +.y73e{bottom:153.974000px;} +.y5d3{bottom:154.038000px;} +.y6f9{bottom:154.134000px;} .y3b{bottom:154.188000px;} .y1f1{bottom:154.285000px;} -.y793{bottom:154.328000px;} -.y54c{bottom:155.054000px;} -.y835{bottom:155.687000px;} -.y18d{bottom:156.018000px;} -.y2f3{bottom:156.289000px;} -.y884{bottom:156.384000px;} -.y53b{bottom:156.613000px;} -.y639{bottom:156.858000px;} -.y734{bottom:156.906000px;} -.y387{bottom:157.090000px;} -.y2ca{bottom:157.220000px;} -.y5a8{bottom:157.479000px;} +.y788{bottom:154.298000px;} +.y545{bottom:155.054000px;} +.y82a{bottom:155.687000px;} +.y18d{bottom:156.169000px;} +.y2f0{bottom:156.289000px;} +.y879{bottom:156.384000px;} +.y534{bottom:156.613000px;} +.y62e{bottom:156.858000px;} +.y729{bottom:156.906000px;} +.y2c7{bottom:157.220000px;} +.y385{bottom:157.321000px;} +.y5a1{bottom:157.479000px;} .y154{bottom:157.570000px;} .y219{bottom:157.827000px;} .y248{bottom:159.134000px;} -.y43a{bottom:159.204000px;} -.y485{bottom:159.834000px;} -.y7c5{bottom:159.920000px;} -.y883{bottom:160.193000px;} -.y3b3{bottom:160.389000px;} -.y3ea{bottom:160.777000px;} +.y434{bottom:159.563000px;} +.y47e{bottom:159.834000px;} +.y7ba{bottom:159.920000px;} +.y878{bottom:160.193000px;} +.y3b0{bottom:160.389000px;} +.y3e7{bottom:160.777000px;} .y1e{bottom:160.841000px;} -.y778{bottom:161.012000px;} -.y50a{bottom:161.200000px;} +.y76d{bottom:161.012000px;} +.y503{bottom:161.200000px;} .y294{bottom:161.201000px;} -.y6ef{bottom:161.394000px;} -.y5f7{bottom:161.500000px;} -.y403{bottom:161.560000px;} -.y6b2{bottom:161.661000px;} -.y8bb{bottom:162.079000px;} -.y2f5{bottom:162.135000px;} -.y67c{bottom:162.300000px;} +.y6e4{bottom:161.394000px;} +.y5f0{bottom:161.500000px;} +.y3fe{bottom:161.560000px;} +.y6a7{bottom:161.661000px;} +.y8b0{bottom:162.079000px;} +.y2f2{bottom:162.135000px;} +.y671{bottom:162.300000px;} .y1a4{bottom:162.331000px;} -.y2f4{bottom:163.772000px;} -.y764{bottom:163.855000px;} -.y718{bottom:165.014000px;} +.y2f1{bottom:163.772000px;} +.y759{bottom:163.855000px;} +.y70d{bottom:165.014000px;} .y278{bottom:165.167000px;} -.y6dd{bottom:165.473000px;} +.y6d2{bottom:165.473000px;} .yb6{bottom:165.825000px;} .y63{bottom:166.198000px;} -.y802{bottom:166.207000px;} -.y49c{bottom:166.238000px;} -.y2cc{bottom:166.500000px;} -.y4e2{bottom:166.804000px;} +.y7f7{bottom:166.207000px;} +.y495{bottom:166.238000px;} +.y2c9{bottom:166.500000px;} +.y4db{bottom:166.804000px;} .yf4{bottom:167.372000px;} -.y818{bottom:167.604000px;} -.y882{bottom:168.000000px;} +.y80d{bottom:167.604000px;} +.y877{bottom:168.000000px;} .y1b9{bottom:168.194000px;} -.y7ac{bottom:168.290000px;} -.y31b{bottom:168.802000px;} -.y41f{bottom:169.093000px;} -.y3cb{bottom:169.189000px;} -.y579{bottom:169.333000px;} -.y2c8{bottom:169.520000px;} +.y7a1{bottom:168.290000px;} +.y318{bottom:168.802000px;} +.y419{bottom:169.093000px;} +.y3c8{bottom:169.189000px;} +.y572{bottom:169.333000px;} +.y2c5{bottom:169.520000px;} .y174{bottom:169.554000px;} .y233{bottom:169.609000px;} -.y609{bottom:169.972000px;} +.y602{bottom:169.972000px;} .y1f0{bottom:170.544000px;} -.y792{bottom:170.587000px;} +.y787{bottom:170.557000px;} .y3a{bottom:170.626000px;} -.y453{bottom:170.856000px;} -.y652{bottom:170.958000px;} -.y748{bottom:171.008000px;} -.y2af{bottom:171.028000px;} -.y2f2{bottom:171.152000px;} -.y8e5{bottom:171.615000px;} -.y881{bottom:171.809000px;} -.y834{bottom:171.946000px;} -.y733{bottom:173.165000px;} -.y621{bottom:173.604000px;} +.y44d{bottom:170.856000px;} +.y647{bottom:170.958000px;} +.y73d{bottom:171.008000px;} +.y2ac{bottom:171.028000px;} +.y2ef{bottom:171.152000px;} +.y8da{bottom:171.615000px;} +.y876{bottom:171.809000px;} +.y829{bottom:171.946000px;} +.y728{bottom:173.165000px;} .y153{bottom:173.829000px;} -.y5f3{bottom:173.982000px;} -.y484{bottom:176.093000px;} -.y7c4{bottom:176.179000px;} -.y361{bottom:176.552000px;} -.y695{bottom:176.969000px;} -.y3e9{bottom:177.036000px;} +.y5ec{bottom:173.982000px;} +.y616{bottom:174.093000px;} +.y47d{bottom:176.093000px;} +.y7b9{bottom:176.179000px;} +.y35f{bottom:176.552000px;} +.y68a{bottom:176.969000px;} +.y3e6{bottom:177.036000px;} .y1d{bottom:177.100000px;} .y293{bottom:177.460000px;} -.y6c6{bottom:177.766000px;} -.y46c{bottom:177.819000px;} -.y6b1{bottom:177.920000px;} -.y8ba{bottom:178.338000px;} -.y866{bottom:178.500000px;} +.y6bb{bottom:177.766000px;} +.y328{bottom:177.819000px;} +.y6a6{bottom:177.920000px;} +.y8af{bottom:178.338000px;} +.y85b{bottom:178.500000px;} .y1a3{bottom:178.590000px;} -.y703{bottom:179.141000px;} +.y6f8{bottom:179.141000px;} .y124{bottom:179.500000px;} -.y25f{bottom:180.105000px;} -.y763{bottom:180.114000px;} -.y1d4{bottom:180.486000px;} -.y308{bottom:180.938000px;} +.y758{bottom:180.114000px;} +.y1d4{bottom:180.657000px;} +.y305{bottom:180.938000px;} +.y25f{bottom:181.290000px;} .y277{bottom:181.426000px;} -.y801{bottom:182.466000px;} +.y7f6{bottom:182.466000px;} .y62{bottom:182.809000px;} -.y32b{bottom:182.948000px;} -.y4e1{bottom:183.063000px;} +.y4da{bottom:183.063000px;} .y114{bottom:183.089000px;} -.y53a{bottom:183.972000px;} +.y533{bottom:183.972000px;} .y1b8{bottom:184.453000px;} -.y7ab{bottom:184.549000px;} -.y664{bottom:185.186000px;} -.y3ca{bottom:185.448000px;} -.y370{bottom:185.651000px;} +.y7a0{bottom:184.549000px;} +.y659{bottom:185.186000px;} +.y3c7{bottom:185.448000px;} +.y36e{bottom:185.651000px;} .y173{bottom:185.813000px;} .y1ef{bottom:186.803000px;} .y39{bottom:187.063000px;} -.y452{bottom:187.115000px;} -.y650{bottom:187.217000px;} -.y747{bottom:187.267000px;} -.y2ae{bottom:187.287000px;} -.y880{bottom:187.336000px;} -.y402{bottom:187.416000px;} -.y54b{bottom:187.572000px;} -.y39a{bottom:187.601000px;} -.y399{bottom:187.602000px;} +.y44c{bottom:187.115000px;} +.y645{bottom:187.217000px;} +.y73c{bottom:187.267000px;} +.y2ab{bottom:187.287000px;} +.y3fd{bottom:187.332000px;} +.y875{bottom:187.336000px;} +.y544{bottom:187.572000px;} .y136{bottom:187.659000px;} -.y8e4{bottom:187.874000px;} -.y833{bottom:188.205000px;} +.y8d9{bottom:187.874000px;} +.y828{bottom:188.205000px;} .y247{bottom:188.518000px;} -.y509{bottom:188.616000px;} -.y2f1{bottom:189.210000px;} -.y638{bottom:189.376000px;} -.y5bd{bottom:189.461000px;} -.y18c{bottom:189.768000px;} -.y620{bottom:189.863000px;} -.y5a7{bottom:189.997000px;} -.y651{bottom:191.176000px;} -.y483{bottom:192.352000px;} +.y502{bottom:188.616000px;} +.y18c{bottom:188.687000px;} +.y397{bottom:188.985000px;} +.y2ee{bottom:189.210000px;} +.y62d{bottom:189.376000px;} +.y5b6{bottom:189.461000px;} +.y5a0{bottom:189.997000px;} +.y615{bottom:190.352000px;} +.y646{bottom:191.176000px;} +.y47c{bottom:192.352000px;} .y96{bottom:192.706000px;} -.y3b2{bottom:192.907000px;} -.y31a{bottom:193.237000px;} -.y3e8{bottom:193.295000px;} -.y386{bottom:193.573000px;} -.y4ad{bottom:193.706000px;} +.y3af{bottom:192.907000px;} +.y317{bottom:193.237000px;} +.y3e5{bottom:193.295000px;} +.y4a6{bottom:193.706000px;} .y292{bottom:193.719000px;} -.y6c5{bottom:194.025000px;} -.y51b{bottom:194.078000px;} -.y6b0{bottom:194.179000px;} -.y777{bottom:194.321000px;} -.y405{bottom:194.500000px;} -.y67b{bottom:194.540000px;} +.y6ba{bottom:194.025000px;} +.y384{bottom:194.034000px;} +.y514{bottom:194.078000px;} +.y6a5{bottom:194.179000px;} +.y76c{bottom:194.321000px;} +.y3ff{bottom:194.500000px;} +.y670{bottom:194.540000px;} .y1a2{bottom:194.849000px;} .y218{bottom:195.047000px;} -.y702{bottom:195.400000px;} -.y762{bottom:196.373000px;} -.y1d3{bottom:196.745000px;} -.y439{bottom:197.091000px;} +.y6f7{bottom:195.400000px;} +.y757{bottom:196.373000px;} +.y1d3{bottom:196.916000px;} +.y433{bottom:197.507000px;} .y276{bottom:197.685000px;} -.y578{bottom:197.710000px;} -.y905{bottom:197.987000px;} +.y571{bottom:197.710000px;} +.y8fa{bottom:197.987000px;} .yb5{bottom:198.718000px;} -.y4e0{bottom:199.322000px;} +.y4d9{bottom:199.322000px;} .y113{bottom:199.348000px;} .y61{bottom:199.420000px;} -.y817{bottom:200.122000px;} -.y539{bottom:200.231000px;} +.y80c{bottom:200.122000px;} +.y532{bottom:200.231000px;} .y1b6{bottom:200.711000px;} .y1b7{bottom:200.712000px;} -.y731{bottom:200.945000px;} -.y732{bottom:200.946000px;} -.y6dc{bottom:201.242000px;} -.y663{bottom:201.445000px;} -.y717{bottom:201.544000px;} -.y791{bottom:201.699000px;} -.y84b{bottom:201.989000px;} -.y2c7{bottom:202.046000px;} +.y726{bottom:200.945000px;} +.y727{bottom:200.946000px;} +.y6d1{bottom:201.242000px;} +.y658{bottom:201.445000px;} +.y70c{bottom:201.544000px;} +.y786{bottom:201.665000px;} +.y840{bottom:201.989000px;} +.y2c4{bottom:202.046000px;} .y172{bottom:202.072000px;} -.y5d9{bottom:202.113000px;} +.y5d2{bottom:202.113000px;} .y232{bottom:202.127000px;} -.y6ee{bottom:202.223000px;} -.y608{bottom:202.489000px;} -.y46b{bottom:202.500000px;} -.y41e{bottom:202.559000px;} -.y7db{bottom:202.932000px;} -.y451{bottom:203.374000px;} -.y8b9{bottom:203.381000px;} -.y64f{bottom:203.476000px;} +.y6e3{bottom:202.223000px;} +.y601{bottom:202.489000px;} +.y465{bottom:202.500000px;} +.y418{bottom:202.559000px;} +.y7d0{bottom:202.932000px;} +.y44b{bottom:203.374000px;} +.y8ae{bottom:203.381000px;} +.y644{bottom:203.476000px;} .y38{bottom:203.501000px;} -.y2ac{bottom:203.546000px;} -.y54a{bottom:203.831000px;} +.y2a9{bottom:203.546000px;} +.y543{bottom:203.831000px;} .y135{bottom:203.918000px;} -.y8e3{bottom:204.133000px;} -.y832{bottom:204.464000px;} +.y8d8{bottom:204.133000px;} +.y827{bottom:204.464000px;} .y152{bottom:204.530000px;} .yf3{bottom:205.095000px;} -.y2f0{bottom:205.469000px;} -.y637{bottom:205.635000px;} -.y61f{bottom:206.122000px;} -.y5a6{bottom:206.256000px;} -.y7c3{bottom:206.802000px;} -.y2ad{bottom:207.505000px;} +.y2ed{bottom:205.469000px;} +.y62c{bottom:205.635000px;} +.y59f{bottom:206.256000px;} +.y614{bottom:206.611000px;} +.y7b8{bottom:206.802000px;} +.y2aa{bottom:207.505000px;} .y95{bottom:208.965000px;} -.y360{bottom:209.070000px;} -.y3b1{bottom:209.166000px;} -.y4ac{bottom:209.965000px;} -.y6c4{bottom:210.284000px;} -.y4ca{bottom:210.337000px;} -.y6af{bottom:210.438000px;} -.y3e7{bottom:210.528000px;} -.y67a{bottom:210.799000px;} +.y35e{bottom:209.070000px;} +.y3ae{bottom:209.166000px;} +.y4a5{bottom:209.965000px;} +.y6b9{bottom:210.284000px;} +.y4c3{bottom:210.337000px;} +.y6a4{bottom:210.438000px;} +.y3e4{bottom:210.528000px;} +.y327{bottom:210.668000px;} +.y66f{bottom:210.799000px;} .y1a1{bottom:211.108000px;} -.y7aa{bottom:211.121000px;} -.y3b4{bottom:211.500000px;} +.y79f{bottom:211.121000px;} +.y3b1{bottom:211.500000px;} .y1ee{bottom:211.664000px;} -.y5f2{bottom:212.531000px;} -.y25e{bottom:212.623000px;} -.y761{bottom:212.632000px;} -.y1d2{bottom:213.004000px;} +.y5eb{bottom:212.531000px;} +.y756{bottom:212.632000px;} +.y1d2{bottom:213.175000px;} +.y25e{bottom:213.808000px;} .y275{bottom:213.944000px;} -.y904{bottom:214.255000px;} -.y87f{bottom:214.292000px;} -.y591{bottom:214.438000px;} -.y401{bottom:214.490000px;} +.y8f9{bottom:214.255000px;} +.y874{bottom:214.292000px;} +.y3fc{bottom:214.406000px;} +.y58a{bottom:214.438000px;} .yb4{bottom:214.977000px;} -.y49b{bottom:215.015000px;} -.y32a{bottom:215.116000px;} -.y4df{bottom:215.581000px;} +.y494{bottom:215.015000px;} +.y4d8{bottom:215.581000px;} .y112{bottom:215.607000px;} .y60{bottom:216.031000px;} -.y538{bottom:216.490000px;} +.y531{bottom:216.490000px;} .y1b5{bottom:216.970000px;} -.y730{bottom:217.204000px;} -.y694{bottom:217.370000px;} -.y800{bottom:217.485000px;} -.y662{bottom:217.704000px;} -.y790{bottom:217.958000px;} -.y36f{bottom:218.169000px;} -.y84a{bottom:218.248000px;} -.y4f5{bottom:218.331000px;} -.y607{bottom:218.748000px;} -.y46a{bottom:218.759000px;} -.y7da{bottom:219.191000px;} -.y3c9{bottom:219.527000px;} -.y450{bottom:219.633000px;} -.y8b8{bottom:219.640000px;} -.y64e{bottom:219.735000px;} -.y2ab{bottom:219.805000px;} -.y319{bottom:220.310000px;} -.y577{bottom:221.022000px;} -.y51a{bottom:221.052000px;} -.y2ee{bottom:221.128000px;} -.y385{bottom:221.408000px;} -.y5bc{bottom:221.978000px;} -.y18b{bottom:222.286000px;} -.y61e{bottom:222.381000px;} -.y5a5{bottom:222.515000px;} +.y725{bottom:217.204000px;} +.y689{bottom:217.370000px;} +.y7f5{bottom:217.485000px;} +.y657{bottom:217.704000px;} +.y785{bottom:217.924000px;} +.y36d{bottom:218.169000px;} +.y83f{bottom:218.248000px;} +.y4ee{bottom:218.331000px;} +.y600{bottom:218.748000px;} +.y464{bottom:218.759000px;} +.y7cf{bottom:219.191000px;} +.y3c6{bottom:219.527000px;} +.y44a{bottom:219.633000px;} +.y8ad{bottom:219.640000px;} +.y643{bottom:219.735000px;} +.y2a8{bottom:219.805000px;} +.y316{bottom:220.310000px;} +.y570{bottom:221.022000px;} +.y513{bottom:221.052000px;} +.y2eb{bottom:221.128000px;} +.y18b{bottom:221.205000px;} +.y5b5{bottom:221.978000px;} +.y383{bottom:222.099000px;} +.y59e{bottom:222.515000px;} +.y613{bottom:222.870000px;} .y27c{bottom:223.000000px;} -.y7c2{bottom:223.061000px;} +.y7b7{bottom:223.061000px;} .yd7{bottom:223.134000px;} -.y765{bottom:223.500000px;} -.y482{bottom:224.870000px;} +.y75a{bottom:223.500000px;} +.y47b{bottom:224.870000px;} .y246{bottom:224.997000px;} .y157{bottom:225.000000px;} .y94{bottom:225.224000px;} -.y3b0{bottom:225.425000px;} -.y4ab{bottom:226.224000px;} +.y3ad{bottom:225.425000px;} +.y4a4{bottom:226.224000px;} .y230{bottom:226.365000px;} -.y6c3{bottom:226.543000px;} -.y4c9{bottom:226.596000px;} -.y6ae{bottom:226.697000px;} +.y6b8{bottom:226.543000px;} +.y4c2{bottom:226.596000px;} +.y6a3{bottom:226.697000px;} .y151{bottom:226.711000px;} -.y679{bottom:227.058000px;} +.y326{bottom:226.927000px;} +.y66e{bottom:227.058000px;} .yd8{bottom:227.093000px;} -.y8c5{bottom:227.115000px;} -.y307{bottom:227.314000px;} +.y8ba{bottom:227.115000px;} +.y304{bottom:227.314000px;} .y1a0{bottom:227.367000px;} -.y7a9{bottom:227.380000px;} -.y4f6{bottom:227.500000px;} +.y79e{bottom:227.380000px;} +.y4ef{bottom:227.500000px;} .y217{bottom:227.564000px;} -.y746{bottom:227.617000px;} +.y73b{bottom:227.617000px;} .y1ed{bottom:227.923000px;} -.y2ef{bottom:228.611000px;} -.y25d{bottom:228.882000px;} -.y760{bottom:228.891000px;} -.y1d1{bottom:229.263000px;} -.y8e2{bottom:229.968000px;} +.y2ec{bottom:228.611000px;} +.y755{bottom:228.891000px;} +.y1d1{bottom:229.434000px;} +.y8d7{bottom:229.968000px;} +.y25d{bottom:230.067000px;} .y1c{bottom:230.167000px;} .y274{bottom:230.203000px;} .y231{bottom:230.324000px;} -.y549{bottom:230.474000px;} -.y903{bottom:230.514000px;} -.y87d{bottom:230.551000px;} -.y590{bottom:230.697000px;} +.y542{bottom:230.474000px;} +.y8f8{bottom:230.514000px;} +.y872{bottom:230.551000px;} +.y589{bottom:230.697000px;} .y37{bottom:230.967000px;} .y291{bottom:231.080000px;} .yb3{bottom:231.236000px;} -.y49a{bottom:231.274000px;} -.y329{bottom:231.375000px;} -.y4de{bottom:231.840000px;} +.y493{bottom:231.274000px;} +.y4d7{bottom:231.840000px;} .y111{bottom:231.866000px;} -.y776{bottom:231.928000px;} +.y76b{bottom:231.928000px;} .y5f{bottom:232.642000px;} -.y537{bottom:232.749000px;} -.y438{bottom:233.010000px;} +.y530{bottom:232.749000px;} .y171{bottom:233.279000px;} -.y72f{bottom:233.463000px;} -.y693{bottom:233.629000px;} -.y6db{bottom:233.760000px;} -.y815{bottom:233.947000px;} -.y661{bottom:233.963000px;} -.y716{bottom:234.062000px;} -.y78f{bottom:234.217000px;} -.y87e{bottom:234.510000px;} -.y2c6{bottom:234.564000px;} -.y348{bottom:234.590000px;} -.y5d8{bottom:234.630000px;} -.y6ed{bottom:234.741000px;} -.y469{bottom:235.018000px;} -.y41d{bottom:235.077000px;} -.y508{bottom:235.866000px;} -.y44f{bottom:235.892000px;} -.y8b7{bottom:235.899000px;} -.y2ed{bottom:235.991000px;} -.y55e{bottom:236.205000px;} -.y398{bottom:236.378000px;} +.y724{bottom:233.463000px;} +.y688{bottom:233.629000px;} +.y6d0{bottom:233.760000px;} +.y432{bottom:233.785000px;} +.y80a{bottom:233.947000px;} +.y656{bottom:233.963000px;} +.y70b{bottom:234.062000px;} +.y784{bottom:234.183000px;} +.y873{bottom:234.510000px;} +.y2c3{bottom:234.564000px;} +.y346{bottom:234.590000px;} +.y5d1{bottom:234.630000px;} +.y6e2{bottom:234.741000px;} +.y463{bottom:235.018000px;} +.y417{bottom:235.077000px;} +.y501{bottom:235.866000px;} +.y449{bottom:235.892000px;} +.y8ac{bottom:235.899000px;} +.y2ea{bottom:235.991000px;} +.y557{bottom:236.205000px;} .y134{bottom:236.436000px;} -.y831{bottom:236.982000px;} -.y384{bottom:237.667000px;} -.y816{bottom:237.906000px;} -.y636{bottom:238.153000px;} -.y61d{bottom:238.640000px;} -.y7c1{bottom:239.320000px;} +.y826{bottom:236.982000px;} +.y396{bottom:237.762000px;} +.y80b{bottom:237.906000px;} +.y62b{bottom:238.153000px;} +.y382{bottom:238.358000px;} +.y612{bottom:239.129000px;} +.y7b6{bottom:239.320000px;} .yf2{bottom:239.965000px;} -.y35f{bottom:240.109000px;} -.y481{bottom:241.129000px;} +.y35d{bottom:240.109000px;} +.y47a{bottom:241.129000px;} .y93{bottom:241.483000px;} -.y36e{bottom:242.406000px;} +.y36c{bottom:242.406000px;} .y22e{bottom:242.624000px;} -.y4c8{bottom:242.855000px;} -.y6ad{bottom:242.956000px;} -.y678{bottom:243.317000px;} -.y3d3{bottom:243.500000px;} -.y7a8{bottom:243.639000px;} +.y4c1{bottom:242.855000px;} +.y6a2{bottom:242.956000px;} +.y66d{bottom:243.317000px;} +.y3d0{bottom:243.500000px;} +.y79d{bottom:243.639000px;} .y216{bottom:243.823000px;} .y1ec{bottom:244.182000px;} -.y2ec{bottom:244.870000px;} -.y701{bottom:245.016000px;} -.y5f1{bottom:245.049000px;} -.y25c{bottom:245.141000px;} -.y75f{bottom:245.150000px;} -.y8e0{bottom:246.226000px;} -.y8e1{bottom:246.227000px;} +.y2e9{bottom:244.870000px;} +.y6f6{bottom:245.016000px;} +.y5ea{bottom:245.049000px;} +.y754{bottom:245.150000px;} +.y8d5{bottom:246.226000px;} +.y8d6{bottom:246.227000px;} +.y25c{bottom:246.326000px;} .y1b{bottom:246.426000px;} .y273{bottom:246.462000px;} .y22f{bottom:246.583000px;} -.y87c{bottom:246.810000px;} -.y58f{bottom:246.956000px;} +.y871{bottom:246.810000px;} +.y588{bottom:246.956000px;} .y36{bottom:247.404000px;} -.y606{bottom:248.048000px;} -.y4dd{bottom:248.099000px;} -.y536{bottom:249.008000px;} -.y18a{bottom:249.134000px;} +.y5ff{bottom:248.048000px;} +.y4d6{bottom:248.099000px;} +.y18a{bottom:248.204000px;} +.y52f{bottom:249.008000px;} .y5e{bottom:249.252000px;} -.y5bb{bottom:249.497000px;} +.y5b4{bottom:249.497000px;} .y170{bottom:249.538000px;} -.y692{bottom:249.888000px;} -.y7ff{bottom:250.003000px;} -.y6da{bottom:250.019000px;} -.y7d9{bottom:250.144000px;} -.y660{bottom:250.222000px;} +.y687{bottom:249.888000px;} +.y7f4{bottom:250.003000px;} +.y6cf{bottom:250.019000px;} +.y7ce{bottom:250.144000px;} +.y655{bottom:250.222000px;} .y1b4{bottom:250.285000px;} -.y5a3{bottom:250.645000px;} -.y849{bottom:250.766000px;} -.y2c5{bottom:250.823000px;} -.y910{bottom:250.849000px;} -.y5d7{bottom:250.889000px;} -.y468{bottom:251.277000px;} -.y3e6{bottom:251.880000px;} -.y400{bottom:251.995000px;} -.y3c8{bottom:252.044000px;} -.y507{bottom:252.125000px;} -.y44e{bottom:252.151000px;} -.y8b6{bottom:252.158000px;} -.y55d{bottom:252.464000px;} -.y397{bottom:252.637000px;} +.y59c{bottom:250.645000px;} +.y83e{bottom:250.766000px;} +.y2c2{bottom:250.823000px;} +.y905{bottom:250.849000px;} +.y5d0{bottom:250.889000px;} +.y462{bottom:251.277000px;} +.y3e3{bottom:251.880000px;} +.y3fb{bottom:251.898000px;} +.y3c5{bottom:252.044000px;} +.y500{bottom:252.125000px;} +.y448{bottom:252.151000px;} +.y8ab{bottom:252.158000px;} +.y556{bottom:252.464000px;} .y133{bottom:252.695000px;} -.y576{bottom:252.919000px;} -.y64d{bottom:253.382000px;} -.y6c2{bottom:253.616000px;} +.y56f{bottom:252.919000px;} +.y642{bottom:253.382000px;} +.y6b7{bottom:253.616000px;} .y150{bottom:253.784000px;} +.y395{bottom:254.021000px;} .y19f{bottom:254.440000px;} -.y5a4{bottom:254.604000px;} +.y59d{bottom:254.604000px;} .y110{bottom:255.224000px;} -.y519{bottom:255.356000px;} +.y512{bottom:255.356000px;} .yf1{bottom:256.224000px;} -.y35e{bottom:256.368000px;} -.y3af{bottom:256.602000px;} -.y902{bottom:256.886000px;} -.y2aa{bottom:257.235000px;} +.y35c{bottom:256.368000px;} +.y3ac{bottom:256.602000px;} +.y8f7{bottom:256.886000px;} +.y2a7{bottom:257.235000px;} +.y783{bottom:257.495000px;} .y245{bottom:257.515000px;} -.y78e{bottom:257.529000px;} -.y318{bottom:257.544000px;} +.y315{bottom:257.544000px;} .y92{bottom:258.639000px;} -.y36d{bottom:258.665000px;} -.y4aa{bottom:258.742000px;} -.y4c7{bottom:259.114000px;} -.y6ac{bottom:259.215000px;} +.y36b{bottom:258.665000px;} +.y4a3{bottom:258.742000px;} +.y4c0{bottom:259.114000px;} +.y6a1{bottom:259.215000px;} .yd6{bottom:259.613000px;} -.y306{bottom:259.831000px;} -.y7a7{bottom:259.898000px;} -.y745{bottom:260.135000px;} +.y303{bottom:259.831000px;} +.y79c{bottom:259.898000px;} +.y73a{bottom:260.135000px;} .y1eb{bottom:260.441000px;} -.y72e{bottom:260.537000px;} -.y85d{bottom:260.755000px;} -.y2eb{bottom:261.129000px;} -.y75e{bottom:261.409000px;} -.y4f4{bottom:261.595000px;} -.y715{bottom:262.158000px;} -.y8df{bottom:262.485000px;} +.y723{bottom:260.537000px;} +.y852{bottom:260.755000px;} +.y2e8{bottom:261.129000px;} +.y753{bottom:261.409000px;} +.y4ed{bottom:261.595000px;} +.y70a{bottom:262.158000px;} +.y8d4{bottom:262.485000px;} .y1a{bottom:262.685000px;} -.y87b{bottom:263.069000px;} -.y58e{bottom:263.215000px;} -.y830{bottom:263.415000px;} +.y870{bottom:263.069000px;} +.y587{bottom:263.215000px;} +.y825{bottom:263.415000px;} .y290{bottom:263.598000px;} -.y499{bottom:263.792000px;} +.y492{bottom:263.792000px;} .y35{bottom:263.842000px;} -.y605{bottom:264.307000px;} -.y775{bottom:264.446000px;} +.y5fe{bottom:264.307000px;} +.y76a{bottom:264.446000px;} +.y189{bottom:264.463000px;} .yb2{bottom:264.511000px;} -.y383{bottom:264.741000px;} -.y548{bottom:264.751000px;} -.y1d0{bottom:264.804000px;} -.y189{bottom:265.393000px;} -.y437{bottom:265.528000px;} +.y541{bottom:264.751000px;} +.y1d0{bottom:265.145000px;} +.y381{bottom:265.522000px;} .y16f{bottom:265.797000px;} .y5d{bottom:265.863000px;} -.y7fe{bottom:266.262000px;} -.y7d8{bottom:266.403000px;} -.y65f{bottom:266.481000px;} -.y61c{bottom:266.774000px;} -.y5a2{bottom:266.904000px;} -.y848{bottom:267.025000px;} -.y2c4{bottom:267.082000px;} -.y347{bottom:267.108000px;} -.y5d6{bottom:267.148000px;} -.y6ec{bottom:267.221000px;} -.y467{bottom:267.536000px;} -.y41c{bottom:267.595000px;} -.y677{bottom:267.831000px;} -.y3ff{bottom:268.254000px;} -.y3c7{bottom:268.303000px;} -.y8b5{bottom:268.417000px;} -.y575{bottom:269.178000px;} -.y64c{bottom:269.641000px;} -.y480{bottom:270.635000px;} -.y635{bottom:270.671000px;} -.y328{bottom:271.178000px;} +.y7f3{bottom:266.262000px;} +.y431{bottom:266.303000px;} +.y7cd{bottom:266.403000px;} +.y654{bottom:266.481000px;} +.y59b{bottom:266.904000px;} +.y83d{bottom:267.025000px;} +.y2c1{bottom:267.082000px;} +.y345{bottom:267.108000px;} +.y5cf{bottom:267.148000px;} +.y6e1{bottom:267.221000px;} +.y325{bottom:267.410000px;} +.y461{bottom:267.536000px;} +.y416{bottom:267.595000px;} +.y611{bottom:267.752000px;} +.y66c{bottom:267.831000px;} +.y3fa{bottom:268.157000px;} +.y3c4{bottom:268.303000px;} +.y8aa{bottom:268.417000px;} +.y56e{bottom:269.178000px;} +.y641{bottom:269.641000px;} +.y479{bottom:270.635000px;} +.y62a{bottom:270.671000px;} .y10f{bottom:271.483000px;} .y215{bottom:272.481000px;} .yf0{bottom:272.483000px;} .y261{bottom:273.000000px;} .y244{bottom:273.774000px;} -.y25b{bottom:274.542000px;} .y91{bottom:274.898000px;} -.y5f0{bottom:274.994000px;} +.y5e9{bottom:274.994000px;} .y22d{bottom:275.211000px;} -.y4c6{bottom:275.373000px;} -.y814{bottom:275.406000px;} -.y55c{bottom:275.776000px;} +.y4bf{bottom:275.373000px;} +.y809{bottom:275.406000px;} +.y555{bottom:275.776000px;} .yd5{bottom:275.872000px;} .y1b2{bottom:275.966000px;} -.y7a6{bottom:276.157000px;} +.y79b{bottom:276.157000px;} +.y25b{bottom:276.320000px;} .y1ea{bottom:276.700000px;} -.y44d{bottom:276.991000px;} -.y2ea{bottom:277.388000px;} -.y32d{bottom:277.500000px;} -.y75d{bottom:277.668000px;} -.y4f3{bottom:277.854000px;} -.y714{bottom:278.417000px;} -.y6d9{bottom:278.456000px;} +.y447{bottom:276.991000px;} +.y2e7{bottom:277.388000px;} +.y752{bottom:277.668000px;} +.y4ec{bottom:277.854000px;} +.y709{bottom:278.417000px;} +.y6ce{bottom:278.456000px;} .y19{bottom:278.944000px;} -.y879{bottom:279.328000px;} +.y86e{bottom:279.328000px;} .y28f{bottom:279.857000px;} .y1b3{bottom:279.925000px;} -.y4dc{bottom:280.617000px;} +.y4d5{bottom:280.617000px;} +.y188{bottom:280.722000px;} .yb1{bottom:280.770000px;} .y272{bottom:281.273000px;} -.y188{bottom:281.652000px;} -.y7c0{bottom:282.172000px;} -.y691{bottom:282.405000px;} +.y7b5{bottom:282.172000px;} +.y686{bottom:282.405000px;} .y75{bottom:282.474000px;} -.y7fd{bottom:282.521000px;} -.y7d7{bottom:282.662000px;} -.y65e{bottom:282.740000px;} -.y61b{bottom:283.033000px;} -.y901{bottom:283.258000px;} -.y87a{bottom:283.287000px;} -.y346{bottom:283.367000px;} -.y5d5{bottom:283.407000px;} -.y41b{bottom:283.854000px;} -.y3e5{bottom:284.398000px;} -.y3fe{bottom:284.513000px;} -.y3c6{bottom:284.562000px;} -.y506{bottom:284.643000px;} -.y8b4{bottom:284.676000px;} -.y535{bottom:284.844000px;} -.y396{bottom:285.155000px;} +.y32a{bottom:282.500000px;} +.y7f2{bottom:282.521000px;} +.y7cc{bottom:282.662000px;} +.y653{bottom:282.740000px;} +.y8f6{bottom:283.258000px;} +.y86f{bottom:283.287000px;} +.y344{bottom:283.367000px;} +.y5ce{bottom:283.407000px;} +.y415{bottom:283.854000px;} +.y610{bottom:284.011000px;} +.y3e2{bottom:284.398000px;} +.y3f9{bottom:284.416000px;} +.y3c3{bottom:284.562000px;} +.y4ff{bottom:284.643000px;} +.y8a9{bottom:284.676000px;} +.y52e{bottom:284.844000px;} .y132{bottom:285.213000px;} -.y5ba{bottom:285.450000px;} -.y339{bottom:285.691000px;} -.y6ab{bottom:286.288000px;} -.y47f{bottom:286.894000px;} -.y634{bottom:286.930000px;} -.y85c{bottom:287.004000px;} +.y5b3{bottom:285.450000px;} +.y6a0{bottom:286.288000px;} +.y394{bottom:286.539000px;} +.y478{bottom:286.894000px;} +.y629{bottom:286.930000px;} +.y851{bottom:287.004000px;} .y10e{bottom:287.742000px;} -.y8de{bottom:288.320000px;} +.y8d3{bottom:288.320000px;} .y16e{bottom:288.655000px;} .y214{bottom:288.740000px;} .yef{bottom:288.742000px;} -.y78d{bottom:289.120000px;} -.y317{bottom:289.310000px;} -.y2a9{bottom:289.753000px;} +.y782{bottom:289.081000px;} +.y314{bottom:289.310000px;} +.y2a6{bottom:289.753000px;} +.y337{bottom:290.633000px;} .y14f{bottom:290.850000px;} -.y6c1{bottom:291.152000px;} +.y6b6{bottom:291.152000px;} .y90{bottom:291.157000px;} -.y36c{bottom:291.208000px;} -.y5ef{bottom:291.253000px;} -.y4a9{bottom:291.260000px;} +.y36a{bottom:291.208000px;} +.y5e8{bottom:291.253000px;} +.y4a2{bottom:291.260000px;} .y34{bottom:291.307000px;} -.y89f{bottom:291.632000px;} -.y2e9{bottom:292.011000px;} +.y894{bottom:291.632000px;} +.y2e6{bottom:292.011000px;} .yd4{bottom:292.131000px;} -.y744{bottom:292.178000px;} +.y739{bottom:292.178000px;} .y1b1{bottom:292.225000px;} -.y305{bottom:292.349000px;} -.y7a5{bottom:292.416000px;} +.y302{bottom:292.349000px;} +.y79a{bottom:292.416000px;} .y18f{bottom:292.500000px;} .y1e9{bottom:292.959000px;} -.y44c{bottom:293.250000px;} +.y446{bottom:293.250000px;} .y5c{bottom:293.618000px;} -.y2e8{bottom:293.647000px;} -.y700{bottom:293.793000px;} -.y4f2{bottom:294.113000px;} -.y713{bottom:294.686000px;} -.y6d8{bottom:294.715000px;} +.y2e5{bottom:293.647000px;} +.y6f5{bottom:293.793000px;} +.y4eb{bottom:294.113000px;} +.y708{bottom:294.686000px;} +.y6cd{bottom:294.715000px;} .y18{bottom:295.203000px;} -.y878{bottom:295.587000px;} -.y35d{bottom:295.885000px;} +.y86d{bottom:295.587000px;} +.y35b{bottom:295.885000px;} .y28e{bottom:296.116000px;} -.y3ae{bottom:296.213000px;} -.y498{bottom:296.310000px;} -.y4db{bottom:296.876000px;} -.y774{bottom:296.964000px;} +.y3ab{bottom:296.213000px;} +.y491{bottom:296.310000px;} +.y4d4{bottom:296.876000px;} +.y769{bottom:296.964000px;} .yb0{bottom:297.029000px;} -.y547{bottom:297.269000px;} -.y1cf{bottom:297.322000px;} -.y2c3{bottom:298.117000px;} -.y82f{bottom:298.325000px;} -.y690{bottom:298.664000px;} +.y540{bottom:297.269000px;} +.y1cf{bottom:297.662000px;} +.y2c0{bottom:298.117000px;} +.y824{bottom:298.325000px;} +.y685{bottom:298.664000px;} +.y430{bottom:298.821000px;} .y74{bottom:299.085000px;} -.y58d{bottom:299.171000px;} -.y900{bottom:299.525000px;} -.y5d4{bottom:299.666000px;} -.y436{bottom:299.956000px;} -.y41a{bottom:300.113000px;} -.y3e4{bottom:300.657000px;} -.y466{bottom:300.780000px;} -.y505{bottom:300.902000px;} -.y8b3{bottom:300.935000px;} +.y586{bottom:299.171000px;} +.y8f5{bottom:299.525000px;} +.y5cd{bottom:299.666000px;} +.y324{bottom:299.928000px;} +.y414{bottom:300.113000px;} +.y3e1{bottom:300.657000px;} +.y460{bottom:300.780000px;} +.y4fe{bottom:300.902000px;} +.y8a8{bottom:300.935000px;} .y131{bottom:301.472000px;} -.y604{bottom:301.999000px;} -.y64b{bottom:302.159000px;} +.y5fd{bottom:301.999000px;} +.y640{bottom:302.159000px;} .y243{bottom:302.619000px;} -.y382{bottom:302.721000px;} .y203{bottom:303.094000px;} -.y633{bottom:303.189000px;} -.y85b{bottom:303.263000px;} -.y5a1{bottom:303.383000px;} -.y327{bottom:303.696000px;} +.y628{bottom:303.189000px;} +.y850{bottom:303.263000px;} +.y59a{bottom:303.383000px;} +.y380{bottom:303.766000px;} .y19e{bottom:303.902000px;} -.y518{bottom:304.133000px;} -.y8dd{bottom:304.579000px;} -.y574{bottom:304.886000px;} +.y511{bottom:304.133000px;} +.y8d2{bottom:304.579000px;} +.y56d{bottom:304.886000px;} .y16d{bottom:304.914000px;} .yee{bottom:305.000000px;} -.y78c{bottom:305.379000px;} -.y7f0{bottom:305.446000px;} -.y2a8{bottom:306.012000px;} -.y65d{bottom:306.196000px;} -.y4c4{bottom:306.669000px;} -.y72d{bottom:306.722000px;} +.y781{bottom:305.340000px;} +.y7e5{bottom:305.446000px;} +.y2a5{bottom:306.012000px;} +.y652{bottom:306.196000px;} +.y4bd{bottom:306.669000px;} +.y722{bottom:306.722000px;} .y14e{bottom:307.109000px;} .y8f{bottom:307.416000px;} -.y55b{bottom:307.472000px;} +.y554{bottom:307.472000px;} .y22c{bottom:307.729000px;} .y33{bottom:307.745000px;} -.y89e{bottom:307.891000px;} -.y813{bottom:307.924000px;} -.y6eb{bottom:308.050000px;} -.y847{bottom:308.114000px;} +.y893{bottom:307.891000px;} +.y808{bottom:307.924000px;} +.y6e0{bottom:308.050000px;} +.y83c{bottom:308.114000px;} .yd3{bottom:308.390000px;} -.y743{bottom:308.437000px;} -.y7a4{bottom:308.675000px;} +.y738{bottom:308.437000px;} +.y799{bottom:308.675000px;} .y1e8{bottom:309.218000px;} -.y44b{bottom:309.509000px;} -.y6ff{bottom:310.052000px;} -.y345{bottom:310.179000px;} -.y7fc{bottom:310.209000px;} +.y445{bottom:309.509000px;} +.y6f4{bottom:310.052000px;} +.y343{bottom:310.179000px;} +.y7f1{bottom:310.209000px;} .y5b{bottom:310.229000px;} -.y4c5{bottom:310.628000px;} -.y712{bottom:310.945000px;} -.y90f{bottom:311.361000px;} +.y4be{bottom:310.628000px;} +.y707{bottom:310.945000px;} +.y904{bottom:311.361000px;} .y17{bottom:311.462000px;} -.y676{bottom:311.651000px;} -.y877{bottom:311.846000px;} -.y25a{bottom:312.377000px;} -.y75c{bottom:312.836000px;} -.y2e5{bottom:312.899000px;} -.y1ce{bottom:313.581000px;} +.y66b{bottom:311.651000px;} +.y86c{bottom:311.846000px;} +.y751{bottom:312.836000px;} +.y2e2{bottom:312.899000px;} .y271{bottom:313.791000px;} -.y82e{bottom:314.584000px;} -.y7bf{bottom:314.690000px;} +.y1ce{bottom:313.921000px;} +.y823{bottom:314.584000px;} +.y7b4{bottom:314.690000px;} +.y25a{bottom:314.748000px;} .y10d{bottom:314.815000px;} -.y7d6{bottom:315.409000px;} -.y8ff{bottom:315.793000px;} -.y419{bottom:316.372000px;} -.y865{bottom:316.514000px;} -.y187{bottom:316.893000px;} -.y3e3{bottom:316.916000px;} -.y465{bottom:317.039000px;} -.y3c5{bottom:317.080000px;} -.y504{bottom:317.161000px;} -.y8b2{bottom:317.194000px;} -.y534{bottom:317.362000px;} -.y395{bottom:317.673000px;} +.y7cb{bottom:315.409000px;} +.y8f4{bottom:315.793000px;} +.y187{bottom:316.114000px;} +.y413{bottom:316.372000px;} +.y85a{bottom:316.514000px;} +.y3e0{bottom:316.916000px;} +.y45f{bottom:317.039000px;} +.y3c2{bottom:317.080000px;} +.y4fd{bottom:317.161000px;} +.y8a7{bottom:317.194000px;} +.y52d{bottom:317.362000px;} .y130{bottom:317.731000px;} -.y5b9{bottom:317.968000px;} -.y3fd{bottom:318.004000px;} -.y6d7{bottom:318.027000px;} -.y338{bottom:318.209000px;} -.y64a{bottom:318.418000px;} +.y3f8{bottom:317.822000px;} +.y5b2{bottom:317.968000px;} +.y6cc{bottom:318.027000px;} +.y63f{bottom:318.418000px;} .y242{bottom:318.878000px;} -.y381{bottom:318.980000px;} -.y632{bottom:319.448000px;} -.y85a{bottom:319.522000px;} -.y61a{bottom:319.602000px;} +.y393{bottom:319.057000px;} +.y627{bottom:319.448000px;} +.y84f{bottom:319.522000px;} +.y37f{bottom:320.025000px;} .y19d{bottom:320.161000px;} -.y2e6{bottom:320.382000px;} -.y517{bottom:320.392000px;} -.y8dc{bottom:320.838000px;} -.y573{bottom:321.145000px;} +.y2e3{bottom:320.382000px;} +.y510{bottom:320.392000px;} +.y8d1{bottom:320.838000px;} +.y60f{bottom:321.068000px;} +.y56c{bottom:321.145000px;} .y16c{bottom:321.173000px;} -.y78b{bottom:321.638000px;} -.y7ef{bottom:321.705000px;} -.y316{bottom:321.828000px;} -.y65c{bottom:322.455000px;} -.y4c3{bottom:322.928000px;} -.y72c{bottom:322.981000px;} -.y6aa{bottom:323.596000px;} -.y36b{bottom:323.726000px;} -.y47e{bottom:323.730000px;} -.y55a{bottom:323.731000px;} -.y4a8{bottom:323.778000px;} -.y89d{bottom:324.150000px;} +.y780{bottom:321.599000px;} +.y7e4{bottom:321.705000px;} +.y313{bottom:321.828000px;} +.y651{bottom:322.455000px;} +.y4bc{bottom:322.928000px;} +.y721{bottom:322.981000px;} +.y336{bottom:323.151000px;} +.y69f{bottom:323.596000px;} +.y369{bottom:323.726000px;} +.y477{bottom:323.730000px;} +.y553{bottom:323.731000px;} +.y4a1{bottom:323.778000px;} +.y892{bottom:324.150000px;} .y32{bottom:324.183000px;} -.y546{bottom:324.215000px;} -.y846{bottom:324.373000px;} +.y53f{bottom:324.215000px;} +.y83b{bottom:324.373000px;} .y8e{bottom:324.573000px;} .yd2{bottom:324.649000px;} -.y6c0{bottom:324.835000px;} -.y304{bottom:324.867000px;} -.y2e7{bottom:324.887000px;} +.y6b5{bottom:324.835000px;} +.y301{bottom:324.867000px;} +.y2e4{bottom:324.887000px;} .y28d{bottom:325.044000px;} .y213{bottom:325.323000px;} .y1b0{bottom:325.540000px;} -.y8c4{bottom:325.978000px;} -.y7fb{bottom:326.468000px;} +.y8b9{bottom:325.978000px;} +.y7f0{bottom:326.468000px;} .y5a{bottom:326.840000px;} -.y35c{bottom:326.966000px;} -.y711{bottom:327.204000px;} +.y35a{bottom:326.966000px;} +.y706{bottom:327.204000px;} .y16{bottom:327.721000px;} -.y2e4{bottom:327.762000px;} -.y875{bottom:328.105000px;} -.y3ad{bottom:328.731000px;} -.y497{bottom:328.828000px;} -.y75b{bottom:329.095000px;} -.y5d3{bottom:329.314000px;} -.y4da{bottom:329.394000px;} -.y4f1{bottom:329.468000px;} -.y773{bottom:329.482000px;} -.y5ee{bottom:329.802000px;} +.y2e1{bottom:327.762000px;} +.y86a{bottom:328.105000px;} +.y3aa{bottom:328.731000px;} +.y490{bottom:328.828000px;} +.y750{bottom:329.095000px;} +.y5cc{bottom:329.314000px;} +.y4d3{bottom:329.394000px;} +.y4ea{bottom:329.468000px;} +.y768{bottom:329.482000px;} +.y5e7{bottom:329.802000px;} .y270{bottom:330.050000px;} .yaf{bottom:330.303000px;} -.y2c2{bottom:330.635000px;} -.y82d{bottom:330.843000px;} -.y7be{bottom:330.949000px;} -.y68f{bottom:331.182000px;} +.y2bf{bottom:330.635000px;} +.y822{bottom:330.843000px;} +.y7b3{bottom:330.949000px;} +.y684{bottom:331.182000px;} +.y42f{bottom:331.339000px;} .y1f3{bottom:331.500000px;} .yed{bottom:331.521000px;} -.y58c{bottom:331.689000px;} +.y585{bottom:331.689000px;} .y22b{bottom:331.882000px;} -.y8fe{bottom:332.060000px;} -.y876{bottom:332.064000px;} -.y435{bottom:332.474000px;} -.y418{bottom:332.630000px;} -.y864{bottom:332.773000px;} -.y3e2{bottom:333.175000px;} -.y503{bottom:333.420000px;} -.y8b1{bottom:333.453000px;} -.y533{bottom:333.621000px;} +.y8f3{bottom:332.060000px;} +.y86b{bottom:332.064000px;} +.y412{bottom:332.630000px;} +.y859{bottom:332.773000px;} +.y323{bottom:332.777000px;} +.y3df{bottom:333.175000px;} +.y4fc{bottom:333.420000px;} +.y8a6{bottom:333.453000px;} +.y52c{bottom:333.621000px;} .y12f{bottom:333.990000px;} -.y5b8{bottom:334.227000px;} -.y603{bottom:334.517000px;} -.y649{bottom:334.677000px;} +.y5b1{bottom:334.227000px;} +.y5fc{bottom:334.517000px;} +.y63e{bottom:334.677000px;} .y241{bottom:335.137000px;} -.y380{bottom:335.240000px;} -.y859{bottom:335.781000px;} -.y2a7{bottom:335.807000px;} -.y326{bottom:335.864000px;} -.y5a0{bottom:335.901000px;} +.y84e{bottom:335.781000px;} +.y2a4{bottom:335.807000px;} +.y599{bottom:335.901000px;} +.y37e{bottom:336.330000px;} .y19c{bottom:336.420000px;} -.y90e{bottom:336.513000px;} -.y44a{bottom:336.582000px;} -.y516{bottom:336.651000px;} -.y8db{bottom:337.097000px;} -.y572{bottom:337.404000px;} +.y903{bottom:336.513000px;} +.y444{bottom:336.582000px;} +.y50f{bottom:336.651000px;} +.y8d0{bottom:337.097000px;} +.y56b{bottom:337.404000px;} .y14d{bottom:337.810000px;} -.y7ee{bottom:337.964000px;} -.y315{bottom:338.087000px;} -.y65b{bottom:338.714000px;} -.y72b{bottom:339.240000px;} +.y7e3{bottom:337.964000px;} +.y312{bottom:338.087000px;} +.y650{bottom:338.714000px;} +.y720{bottom:339.240000px;} .y202{bottom:339.574000px;} -.y4c2{bottom:339.821000px;} -.y7a3{bottom:340.003000px;} -.y4a7{bottom:340.037000px;} -.y89c{bottom:340.409000px;} -.y6ea{bottom:340.568000px;} +.y4bb{bottom:339.821000px;} +.y798{bottom:340.003000px;} +.y4a0{bottom:340.037000px;} +.y891{bottom:340.409000px;} +.y6df{bottom:340.568000px;} .y31{bottom:340.620000px;} .y8d{bottom:340.832000px;} .yd1{bottom:340.908000px;} -.y6bf{bottom:341.094000px;} +.y6b4{bottom:341.094000px;} .y212{bottom:341.582000px;} -.y1cd{bottom:341.790000px;} .y1af{bottom:341.799000px;} -.y812{bottom:342.052000px;} -.y8c3{bottom:342.237000px;} -.y6fe{bottom:342.570000px;} +.y807{bottom:342.052000px;} +.y8b8{bottom:342.237000px;} +.y1cd{bottom:342.301000px;} +.y6f3{bottom:342.570000px;} .y1e7{bottom:342.726000px;} -.y845{bottom:343.020000px;} -.y35b{bottom:343.225000px;} +.y83a{bottom:343.020000px;} +.y359{bottom:343.225000px;} .y59{bottom:343.450000px;} .y15{bottom:343.980000px;} -.y675{bottom:344.169000px;} -.y259{bottom:344.895000px;} -.y3ac{bottom:344.990000px;} -.y344{bottom:345.297000px;} -.y5d2{bottom:345.573000px;} -.y4f0{bottom:345.727000px;} -.y2e3{bottom:345.821000px;} +.y66a{bottom:344.169000px;} +.y3a9{bottom:344.990000px;} +.y342{bottom:345.297000px;} +.y5cb{bottom:345.573000px;} +.y4e9{bottom:345.727000px;} +.y2e0{bottom:345.821000px;} .yae{bottom:346.562000px;} -.y2c1{bottom:346.894000px;} -.y82c{bottom:347.102000px;} -.y631{bottom:347.179000px;} -.y6a9{bottom:347.568000px;} +.y2be{bottom:346.894000px;} +.y821{bottom:347.102000px;} +.y626{bottom:347.179000px;} +.y259{bottom:347.266000px;} +.y69e{bottom:347.568000px;} .yec{bottom:347.780000px;} -.y36a{bottom:347.919000px;} -.y7d5{bottom:347.927000px;} +.y368{bottom:347.919000px;} +.y7ca{bottom:347.927000px;} .y22a{bottom:348.141000px;} -.y8fd{bottom:348.328000px;} -.y742{bottom:348.787000px;} -.y863{bottom:349.032000px;} -.y186{bottom:349.411000px;} -.y3e1{bottom:349.434000px;} -.y464{bottom:349.557000px;} -.y3c4{bottom:349.598000px;} -.y502{bottom:349.679000px;} -.y8b0{bottom:349.712000px;} -.y532{bottom:349.880000px;} -.y394{bottom:350.191000px;} +.y8f2{bottom:348.328000px;} +.y186{bottom:348.632000px;} +.y737{bottom:348.787000px;} +.y858{bottom:349.032000px;} +.y3de{bottom:349.434000px;} +.y45e{bottom:349.557000px;} +.y3c1{bottom:349.598000px;} +.y4fb{bottom:349.679000px;} +.y8a5{bottom:349.712000px;} +.y52b{bottom:349.880000px;} .y12e{bottom:350.249000px;} -.y5b7{bottom:350.486000px;} -.y3fc{bottom:350.522000px;} -.y710{bottom:350.535000px;} -.y559{bottom:350.804000px;} -.y37f{bottom:351.499000px;} +.y3f7{bottom:350.340000px;} +.y5b0{bottom:350.486000px;} +.y705{bottom:350.535000px;} +.y552{bottom:350.804000px;} +.y392{bottom:351.575000px;} .y10c{bottom:351.880000px;} -.y858{bottom:352.040000px;} -.y619{bottom:352.119000px;} -.y59f{bottom:352.160000px;} +.y84d{bottom:352.040000px;} +.y598{bottom:352.160000px;} .y16b{bottom:352.380000px;} -.y90d{bottom:352.772000px;} -.y515{bottom:352.910000px;} -.y337{bottom:353.198000px;} -.y7fa{bottom:353.222000px;} -.y8da{bottom:353.356000px;} -.y571{bottom:353.663000px;} +.y37d{bottom:352.589000px;} +.y902{bottom:352.772000px;} +.y50e{bottom:352.910000px;} +.y7ef{bottom:353.222000px;} +.y8cf{bottom:353.356000px;} +.y60e{bottom:353.586000px;} +.y56a{bottom:353.663000px;} .y14c{bottom:354.069000px;} -.y874{bottom:355.061000px;} -.y78a{bottom:355.400000px;} -.y496{bottom:355.556000px;} -.y4c1{bottom:356.080000px;} -.y47d{bottom:356.248000px;} -.y7a2{bottom:356.262000px;} +.y869{bottom:355.061000px;} +.y77f{bottom:355.332000px;} +.y48f{bottom:355.556000px;} +.y335{bottom:355.669000px;} +.y4ba{bottom:356.080000px;} +.y476{bottom:356.248000px;} +.y797{bottom:356.262000px;} .y26f{bottom:356.469000px;} .y30{bottom:357.058000px;} .yd0{bottom:357.167000px;} -.y6be{bottom:357.353000px;} -.y303{bottom:357.385000px;} +.y6b3{bottom:357.353000px;} +.y300{bottom:357.385000px;} .y211{bottom:357.841000px;} -.y1cc{bottom:358.049000px;} -.y6d6{bottom:358.198000px;} -.y545{bottom:358.492000px;} -.y8c2{bottom:358.496000px;} -.y844{bottom:359.279000px;} -.y35a{bottom:359.484000px;} -.y772{bottom:359.758000px;} +.y6cb{bottom:358.198000px;} +.y53e{bottom:358.492000px;} +.y8b7{bottom:358.496000px;} +.y1cc{bottom:358.560000px;} +.y839{bottom:359.279000px;} +.y358{bottom:359.484000px;} +.y767{bottom:359.758000px;} +.y42e{bottom:359.983000px;} .y58{bottom:360.061000px;} .y14{bottom:360.239000px;} -.y58b{bottom:360.313000px;} -.y674{bottom:360.428000px;} -.y434{bottom:360.759000px;} -.y258{bottom:361.154000px;} -.y75a{bottom:361.613000px;} -.y7bd{bottom:361.658000px;} -.y5d1{bottom:361.832000px;} -.y4d9{bottom:361.912000px;} -.y4ef{bottom:361.986000px;} -.y2e2{bottom:362.080000px;} -.y5ed{bottom:362.320000px;} +.y584{bottom:360.313000px;} +.y669{bottom:360.428000px;} +.y74f{bottom:361.613000px;} +.y7b2{bottom:361.658000px;} +.y5ca{bottom:361.832000px;} +.y4d2{bottom:361.912000px;} +.y4e8{bottom:361.986000px;} +.y2df{bottom:362.080000px;} +.y5e6{bottom:362.320000px;} .y28c{bottom:362.405000px;} -.y2c0{bottom:363.153000px;} -.y2a6{bottom:363.250000px;} -.y82b{bottom:363.361000px;} -.y68e{bottom:363.700000px;} -.y602{bottom:363.732000px;} -.y6a8{bottom:363.827000px;} -.y369{bottom:364.178000px;} -.y7d4{bottom:364.186000px;} -.y8fc{bottom:364.595000px;} -.y417{bottom:365.148000px;} -.y862{bottom:365.291000px;} -.y3e0{bottom:365.693000px;} -.y3c3{bottom:365.857000px;} -.y501{bottom:365.938000px;} -.y8af{bottom:365.971000px;} -.y7ed{bottom:366.178000px;} +.y2bd{bottom:363.153000px;} +.y2a3{bottom:363.250000px;} +.y820{bottom:363.361000px;} +.y258{bottom:363.525000px;} +.y683{bottom:363.700000px;} +.y5fb{bottom:363.732000px;} +.y69d{bottom:363.827000px;} +.y367{bottom:364.178000px;} +.y7c9{bottom:364.186000px;} +.y8f1{bottom:364.595000px;} +.y411{bottom:365.148000px;} +.y857{bottom:365.291000px;} +.y3dd{bottom:365.693000px;} +.y3c0{bottom:365.857000px;} +.y4fa{bottom:365.938000px;} +.y8a4{bottom:365.971000px;} +.y7e2{bottom:366.178000px;} .y12d{bottom:366.508000px;} -.y5b6{bottom:366.745000px;} +.y3f6{bottom:366.599000px;} +.y5af{bottom:366.745000px;} .y1ae{bottom:366.764000px;} -.y3fb{bottom:366.781000px;} -.y648{bottom:367.195000px;} +.y63d{bottom:367.195000px;} .y10b{bottom:368.139000px;} -.y857{bottom:368.299000px;} -.y618{bottom:368.378000px;} -.y59e{bottom:368.419000px;} +.y84c{bottom:368.299000px;} +.y597{bottom:368.419000px;} .y16a{bottom:368.639000px;} -.y7f9{bottom:369.481000px;} -.y8d9{bottom:369.615000px;} -.y570{bottom:369.922000px;} -.y314{bottom:370.605000px;} -.y4a6{bottom:371.316000px;} +.y7ee{bottom:369.481000px;} +.y8ce{bottom:369.615000px;} +.y60d{bottom:369.845000px;} +.y569{bottom:369.922000px;} +.y311{bottom:370.605000px;} +.y49f{bottom:371.316000px;} .y240{bottom:371.616000px;} -.y72a{bottom:371.758000px;} -.y495{bottom:371.815000px;} +.y71f{bottom:371.758000px;} +.y48e{bottom:371.815000px;} .yad{bottom:371.842000px;} -.y343{bottom:371.896000px;} +.y341{bottom:371.896000px;} .y201{bottom:372.092000px;} .y26e{bottom:372.728000px;} .y19b{bottom:372.899000px;} -.y89b{bottom:372.927000px;} -.y6e9{bottom:373.086000px;} +.y890{bottom:372.927000px;} +.y6de{bottom:373.086000px;} +.y322{bottom:373.260000px;} .ycf{bottom:373.426000px;} .y2f{bottom:373.495000px;} .y8c{bottom:373.535000px;} -.y6bd{bottom:373.612000px;} +.y6b2{bottom:373.612000px;} .y210{bottom:374.100000px;} -.y1cb{bottom:374.308000px;} -.y8c1{bottom:374.755000px;} -.y6fd{bottom:375.088000px;} +.y8b6{bottom:374.755000px;} +.y1cb{bottom:374.819000px;} +.y6f2{bottom:375.088000px;} .y1e6{bottom:375.244000px;} -.y325{bottom:375.666000px;} -.y185{bottom:376.217000px;} +.y185{bottom:375.589000px;} +.y42d{bottom:376.242000px;} .y14b{bottom:376.250000px;} -.y3ab{bottom:376.253000px;} +.y3a8{bottom:376.253000px;} .y13{bottom:376.498000px;} .y57{bottom:376.672000px;} -.y433{bottom:377.018000px;} -.y531{bottom:377.281000px;} -.y2df{bottom:377.739000px;} -.y759{bottom:377.872000px;} -.y7bc{bottom:377.917000px;} -.y90c{bottom:377.925000px;} -.y5d0{bottom:378.091000px;} -.y4ee{bottom:378.245000px;} -.y82a{bottom:379.620000px;} -.y6a7{bottom:380.086000px;} -.y368{bottom:380.437000px;} -.y8fb{bottom:380.863000px;} -.y741{bottom:381.305000px;} +.y52a{bottom:377.281000px;} +.y2dc{bottom:377.739000px;} +.y74e{bottom:377.872000px;} +.y7b1{bottom:377.917000px;} +.y901{bottom:377.925000px;} +.y5c9{bottom:378.091000px;} +.y4e7{bottom:378.245000px;} +.y81f{bottom:379.620000px;} +.y69c{bottom:380.086000px;} +.y366{bottom:380.437000px;} +.y8f0{bottom:380.863000px;} +.y736{bottom:381.305000px;} .y229{bottom:381.390000px;} -.y416{bottom:381.407000px;} -.y861{bottom:381.550000px;} -.y3df{bottom:381.952000px;} -.y872{bottom:382.017000px;} -.y463{bottom:382.074000px;} -.y462{bottom:382.075000px;} -.y3c2{bottom:382.116000px;} -.y449{bottom:382.305000px;} -.y7eb{bottom:382.437000px;} -.y70f{bottom:382.611000px;} +.y410{bottom:381.407000px;} +.y856{bottom:381.550000px;} +.y3dc{bottom:381.952000px;} +.y867{bottom:382.017000px;} +.y45d{bottom:382.074000px;} +.y45c{bottom:382.075000px;} +.y3bf{bottom:382.116000px;} +.y443{bottom:382.305000px;} +.y7e0{bottom:382.437000px;} +.y704{bottom:382.611000px;} .yeb{bottom:382.650000px;} .y1ad{bottom:383.023000px;} -.y630{bottom:383.260000px;} -.y647{bottom:383.454000px;} -.y811{bottom:383.511000px;} -.y359{bottom:383.977000px;} -.y856{bottom:384.558000px;} -.y617{bottom:384.637000px;} +.y625{bottom:383.260000px;} +.y63c{bottom:383.454000px;} +.y806{bottom:383.511000px;} +.y357{bottom:383.977000px;} +.y391{bottom:384.093000px;} +.y84b{bottom:384.558000px;} .y169{bottom:384.898000px;} -.y2e0{bottom:385.222000px;} -.y514{bottom:385.428000px;} -.y47c{bottom:385.451000px;} -.y336{bottom:385.716000px;} -.y7f8{bottom:385.740000px;} -.y873{bottom:385.976000px;} -.y393{bottom:386.168000px;} -.y7ec{bottom:386.396000px;} -.y2bf{bottom:387.159000px;} -.y789{bottom:387.673000px;} -.y37e{bottom:387.981000px;} -.y729{bottom:388.017000px;} -.y494{bottom:388.074000px;} -.y342{bottom:388.155000px;} -.y7d3{bottom:388.328000px;} -.y558{bottom:388.457000px;} +.y2dd{bottom:385.222000px;} +.y50d{bottom:385.428000px;} +.y475{bottom:385.451000px;} +.y7ed{bottom:385.740000px;} +.y868{bottom:385.976000px;} +.y60c{bottom:386.104000px;} +.y7e1{bottom:386.396000px;} +.y2bc{bottom:387.159000px;} +.y77e{bottom:387.850000px;} +.y71e{bottom:388.017000px;} +.y48d{bottom:388.074000px;} +.y340{bottom:388.155000px;} +.y334{bottom:388.187000px;} +.y7c8{bottom:388.328000px;} +.y551{bottom:388.457000px;} .y26d{bottom:388.987000px;} .y19a{bottom:389.158000px;} -.y89a{bottom:389.186000px;} +.y88f{bottom:389.186000px;} +.y37c{bottom:389.302000px;} .yce{bottom:389.685000px;} -.y2e1{bottom:389.726000px;} +.y2de{bottom:389.726000px;} .y8b{bottom:389.794000px;} -.y6bc{bottom:389.871000px;} -.y302{bottom:389.903000px;} +.y6b1{bottom:389.871000px;} +.y2ff{bottom:389.903000px;} .y2e{bottom:389.933000px;} .y20f{bottom:390.359000px;} -.y6d5{bottom:390.716000px;} -.y843{bottom:390.995000px;} -.y544{bottom:391.010000px;} -.y8ae{bottom:391.014000px;} -.y7a1{bottom:391.396000px;} +.y6ca{bottom:390.716000px;} +.y838{bottom:390.995000px;} +.y53d{bottom:391.010000px;} +.y8a3{bottom:391.014000px;} +.y796{bottom:391.396000px;} .y1e5{bottom:391.503000px;} -.y673{bottom:391.650000px;} -.y184{bottom:392.476000px;} -.y3aa{bottom:392.512000px;} -.y2de{bottom:392.602000px;} +.y668{bottom:391.650000px;} +.y184{bottom:391.848000px;} +.y42c{bottom:392.501000px;} +.y3a7{bottom:392.512000px;} +.y2db{bottom:392.602000px;} .y12{bottom:392.757000px;} -.y5ec{bottom:393.235000px;} -.y432{bottom:393.277000px;} +.y5e5{bottom:393.235000px;} .y73{bottom:393.283000px;} -.y758{bottom:394.131000px;} -.y5b5{bottom:394.349000px;} -.y4d8{bottom:394.430000px;} -.y4ed{bottom:394.504000px;} -.y7bb{bottom:394.708000px;} +.y74d{bottom:394.131000px;} +.y5ae{bottom:394.349000px;} +.y4d1{bottom:394.430000px;} +.y4e6{bottom:394.504000px;} +.y7b0{bottom:394.708000px;} .y28b{bottom:394.923000px;} -.y8d8{bottom:395.449000px;} -.y4c0{bottom:395.725000px;} -.y68d{bottom:395.751000px;} -.y829{bottom:395.879000px;} -.y500{bottom:395.968000px;} -.y58a{bottom:396.269000px;} -.y6a6{bottom:396.345000px;} -.y59d{bottom:396.549000px;} -.y8fa{bottom:397.130000px;} -.y257{bottom:397.228000px;} -.y771{bottom:397.365000px;} -.y740{bottom:397.564000px;} +.y8cd{bottom:395.449000px;} +.y4b9{bottom:395.725000px;} +.y682{bottom:395.751000px;} +.y81e{bottom:395.879000px;} +.y4f9{bottom:395.968000px;} +.y257{bottom:396.043000px;} +.y583{bottom:396.269000px;} +.y69b{bottom:396.345000px;} +.y596{bottom:396.549000px;} +.y8ef{bottom:397.130000px;} +.y766{bottom:397.365000px;} +.y735{bottom:397.564000px;} .y228{bottom:397.649000px;} -.y415{bottom:397.666000px;} -.y3de{bottom:398.211000px;} -.y871{bottom:398.276000px;} -.y461{bottom:398.333000px;} -.y7ea{bottom:398.696000px;} -.y3fa{bottom:398.781000px;} +.y40f{bottom:397.666000px;} +.y3db{bottom:398.211000px;} +.y866{bottom:398.276000px;} +.y45b{bottom:398.333000px;} +.y7df{bottom:398.696000px;} .y10a{bottom:398.828000px;} -.y70e{bottom:398.870000px;} +.y703{bottom:398.870000px;} .yea{bottom:398.909000px;} .y12c{bottom:399.026000px;} +.y3f5{bottom:399.117000px;} .y1ac{bottom:399.282000px;} .y2{bottom:399.637000px;} -.y646{bottom:399.713000px;} -.y810{bottom:399.770000px;} +.y63b{bottom:399.713000px;} +.y805{bottom:399.770000px;} .y200{bottom:401.240000px;} -.y601{bottom:401.424000px;} -.y2dd{bottom:401.481000px;} -.y7f7{bottom:401.999000px;} -.y2a5{bottom:402.312000px;} -.y56f{bottom:402.440000px;} -.y90b{bottom:403.077000px;} -.y313{bottom:403.123000px;} -.y2be{bottom:403.418000px;} +.y5fa{bottom:401.424000px;} +.y2da{bottom:401.481000px;} +.y7ec{bottom:401.999000px;} +.y2a2{bottom:402.312000px;} +.y568{bottom:402.440000px;} +.y900{bottom:403.077000px;} +.y310{bottom:403.123000px;} +.y2bb{bottom:403.418000px;} .y23f{bottom:404.134000px;} -.y530{bottom:404.355000px;} +.y529{bottom:404.355000px;} .y56{bottom:404.427000px;} -.y7d2{bottom:404.587000px;} -.y557{bottom:404.716000px;} +.y7c7{bottom:404.587000px;} +.y550{bottom:404.716000px;} .y199{bottom:405.417000px;} -.y899{bottom:405.445000px;} -.y6e8{bottom:405.604000px;} +.y88e{bottom:405.445000px;} +.y6dd{bottom:405.604000px;} +.y321{bottom:405.778000px;} .ycd{bottom:405.944000px;} .y8a{bottom:406.053000px;} .y2d{bottom:406.371000px;} .y20e{bottom:406.618000px;} .y14a{bottom:406.951000px;} -.y8ad{bottom:407.273000px;} -.y6fc{bottom:407.606000px;} -.y672{bottom:407.909000px;} -.y324{bottom:408.184000px;} +.y8a2{bottom:407.273000px;} +.y6f1{bottom:407.606000px;} +.y667{bottom:407.909000px;} .y168{bottom:408.470000px;} -.y860{bottom:408.623000px;} +.y855{bottom:408.623000px;} .y11{bottom:409.016000px;} .yac{bottom:409.649000px;} -.y1ca{bottom:409.849000px;} .y72{bottom:409.894000px;} -.y5eb{bottom:409.908000px;} -.y5b4{bottom:410.608000px;} -.y4ec{bottom:410.763000px;} -.y855{bottom:410.808000px;} -.y7ba{bottom:410.967000px;} -.y4a5{bottom:411.072000px;} -.y8d7{bottom:411.708000px;} -.y4bf{bottom:411.984000px;} -.y68c{bottom:412.010000px;} -.y367{bottom:412.217000px;} -.y6a5{bottom:412.604000px;} -.y788{bottom:413.257000px;} -.y335{bottom:413.846000px;} +.y5e4{bottom:409.908000px;} +.y1ca{bottom:410.530000px;} +.y5ad{bottom:410.608000px;} +.y4e5{bottom:410.763000px;} +.y84a{bottom:410.808000px;} +.y7af{bottom:410.967000px;} +.y49e{bottom:411.072000px;} +.y8cc{bottom:411.708000px;} +.y4b8{bottom:411.984000px;} +.y681{bottom:412.010000px;} +.y365{bottom:412.217000px;} +.y69a{bottom:412.604000px;} +.y77d{bottom:413.404000px;} .y227{bottom:413.908000px;} -.y86f{bottom:414.535000px;} -.y3c1{bottom:414.634000px;} -.y448{bottom:414.823000px;} -.y7e9{bottom:414.955000px;} +.y864{bottom:414.535000px;} +.y3be{bottom:414.634000px;} +.y442{bottom:414.823000px;} +.y7de{bottom:414.955000px;} .y109{bottom:415.087000px;} -.y493{bottom:415.147000px;} +.y48c{bottom:415.147000px;} .ye9{bottom:415.168000px;} -.y6bb{bottom:415.205000px;} -.y341{bottom:415.228000px;} +.y6b0{bottom:415.205000px;} +.y33f{bottom:415.228000px;} .y12b{bottom:415.285000px;} .y1ab{bottom:415.541000px;} -.y62f{bottom:415.778000px;} -.y728{bottom:415.797000px;} -.y80f{bottom:416.029000px;} -.y5cf{bottom:416.173000px;} -.y616{bottom:417.155000px;} +.y624{bottom:415.778000px;} +.y71d{bottom:415.797000px;} +.y804{bottom:416.029000px;} +.y5c8{bottom:416.173000px;} +.y333{bottom:416.316000px;} +.y332{bottom:416.317000px;} .y1ff{bottom:417.499000px;} -.y2dc{bottom:417.740000px;} -.y513{bottom:417.946000px;} -.y543{bottom:417.956000px;} -.y529{bottom:418.120000px;} -.y870{bottom:418.494000px;} -.y56e{bottom:418.699000px;} -.y6d4{bottom:419.153000px;} -.y312{bottom:419.382000px;} -.y358{bottom:419.469000px;} -.y183{bottom:419.549000px;} -.y37d{bottom:420.499000px;} -.y7d1{bottom:420.846000px;} +.y2d9{bottom:417.740000px;} +.y50c{bottom:417.946000px;} +.y53c{bottom:417.956000px;} +.y522{bottom:418.120000px;} +.y865{bottom:418.494000px;} +.y60b{bottom:418.622000px;} +.y567{bottom:418.699000px;} +.y183{bottom:418.921000px;} +.y6c9{bottom:419.153000px;} +.y30f{bottom:419.382000px;} +.y356{bottom:419.469000px;} +.y7c6{bottom:420.846000px;} .y55{bottom:421.037000px;} -.y898{bottom:421.704000px;} -.y757{bottom:421.967000px;} +.y88d{bottom:421.704000px;} +.y37b{bottom:421.820000px;} +.y74c{bottom:421.967000px;} .ycc{bottom:422.203000px;} -.y47b{bottom:422.288000px;} +.y474{bottom:422.288000px;} .y89{bottom:422.312000px;} -.y301{bottom:422.421000px;} -.y414{bottom:422.783000px;} +.y2fe{bottom:422.421000px;} +.y40e{bottom:422.783000px;} .y20d{bottom:422.877000px;} .y149{bottom:423.210000px;} -.y8f9{bottom:423.502000px;} -.y8ac{bottom:423.532000px;} +.y8ee{bottom:423.502000px;} +.y8a1{bottom:423.532000px;} .y26c{bottom:423.798000px;} -.y7a0{bottom:423.914000px;} +.y795{bottom:423.914000px;} .y1e4{bottom:424.021000px;} -.y671{bottom:424.168000px;} +.y666{bottom:424.168000px;} .y10{bottom:425.275000px;} .yaa{bottom:425.908000px;} -.y5ea{bottom:426.167000px;} +.y5e3{bottom:426.167000px;} .y71{bottom:426.505000px;} -.y4d7{bottom:426.948000px;} -.y4eb{bottom:427.022000px;} -.y854{bottom:427.067000px;} +.y4d0{bottom:426.948000px;} +.y4e4{bottom:427.022000px;} +.y849{bottom:427.067000px;} .y28a{bottom:427.441000px;} -.y8d6{bottom:427.967000px;} -.y90a{bottom:428.229000px;} -.y68b{bottom:428.269000px;} -.y828{bottom:428.397000px;} -.y7f6{bottom:428.753000px;} -.y589{bottom:428.787000px;} -.y6a4{bottom:428.863000px;} -.y431{bottom:429.195000px;} -.y787{bottom:429.515000px;} -.y73f{bottom:429.565000px;} -.y256{bottom:429.746000px;} +.y8cb{bottom:427.967000px;} +.y8ff{bottom:428.229000px;} +.y680{bottom:428.269000px;} +.y81d{bottom:428.397000px;} +.y256{bottom:428.561000px;} +.y7eb{bottom:428.753000px;} +.y42b{bottom:428.779000px;} +.y582{bottom:428.787000px;} +.y699{bottom:428.863000px;} +.y734{bottom:429.565000px;} +.y77c{bottom:429.663000px;} .yab{bottom:429.866000px;} -.y770{bottom:429.883000px;} +.y765{bottom:429.883000px;} .y226{bottom:430.167000px;} -.y2bd{bottom:430.491000px;} -.y3dd{bottom:430.729000px;} -.y86e{bottom:430.794000px;} -.y460{bottom:430.851000px;} -.y447{bottom:431.082000px;} -.y7e8{bottom:431.214000px;} -.y3f9{bottom:431.299000px;} +.y2ba{bottom:430.491000px;} +.y3da{bottom:430.729000px;} +.y863{bottom:430.794000px;} +.y45a{bottom:430.851000px;} +.y441{bottom:431.082000px;} +.y7dd{bottom:431.214000px;} .ye8{bottom:431.427000px;} -.y3a9{bottom:432.123000px;} +.y3f4{bottom:431.635000px;} +.y3a6{bottom:432.123000px;} .y23e{bottom:432.178000px;} -.y645{bottom:432.231000px;} -.y59c{bottom:433.028000px;} -.y4ff{bottom:433.329000px;} +.y63a{bottom:432.231000px;} +.y390{bottom:432.870000px;} +.y595{bottom:433.028000px;} +.y4f8{bottom:433.329000px;} .y198{bottom:433.462000px;} .y2c{bottom:433.836000px;} -.y600{bottom:433.942000px;} -.y542{bottom:434.215000px;} -.y528{bottom:434.379000px;} -.y392{bottom:434.945000px;} -.y56d{bottom:434.958000px;} -.y70d{bottom:435.400000px;} -.y70c{bottom:435.401000px;} -.y65a{bottom:435.641000px;} -.y357{bottom:435.728000px;} -.y37c{bottom:436.758000px;} -.y7d0{bottom:437.105000px;} +.y5f9{bottom:433.942000px;} +.y53b{bottom:434.215000px;} +.y521{bottom:434.379000px;} +.y566{bottom:434.958000px;} +.y702{bottom:435.400000px;} +.y701{bottom:435.401000px;} +.y64f{bottom:435.641000px;} +.y355{bottom:435.728000px;} +.y7c5{bottom:437.105000px;} .y54{bottom:437.648000px;} -.y5b3{bottom:437.681000px;} -.y756{bottom:438.226000px;} +.y5ac{bottom:437.681000px;} +.y37a{bottom:438.079000px;} +.y74b{bottom:438.226000px;} +.y320{bottom:438.296000px;} .ycb{bottom:438.462000px;} -.y47a{bottom:438.547000px;} +.y473{bottom:438.547000px;} .y88{bottom:438.571000px;} -.y413{bottom:439.042000px;} -.y6e7{bottom:439.102000px;} -.y2a4{bottom:439.106000px;} +.y40d{bottom:439.042000px;} +.y6dc{bottom:439.102000px;} +.y2a1{bottom:439.106000px;} .y20c{bottom:439.136000px;} -.y556{bottom:439.147000px;} +.y54f{bottom:439.147000px;} .y167{bottom:439.677000px;} -.y8f8{bottom:439.770000px;} -.y8ab{bottom:439.791000px;} -.y6fb{bottom:440.124000px;} -.y323{bottom:440.702000px;} +.y8ed{bottom:439.770000px;} +.y8a0{bottom:439.791000px;} +.y6f0{bottom:440.124000px;} .yf{bottom:441.534000px;} .ya9{bottom:442.167000px;} -.y52f{bottom:442.229000px;} -.y1c9{bottom:442.367000px;} -.y842{bottom:442.629000px;} -.y5e9{bottom:442.840000px;} +.y528{bottom:442.229000px;} +.y837{bottom:442.629000px;} +.y5e2{bottom:442.840000px;} +.y1c9{bottom:443.048000px;} .y70{bottom:443.116000px;} -.y853{bottom:443.326000px;} -.y8d5{bottom:444.226000px;} -.y4be{bottom:444.502000px;} -.y897{bottom:444.606000px;} -.y7f5{bottom:445.012000px;} -.y6a3{bottom:445.122000px;} -.y786{bottom:445.774000px;} -.y255{bottom:446.005000px;} -.y76f{bottom:446.142000px;} +.y848{bottom:443.326000px;} +.y8ca{bottom:444.226000px;} +.y4b7{bottom:444.502000px;} +.y88c{bottom:444.606000px;} +.y255{bottom:444.820000px;} +.y7ea{bottom:445.012000px;} +.y698{bottom:445.122000px;} +.y77b{bottom:445.922000px;} +.y764{bottom:446.142000px;} .y148{bottom:446.276000px;} .y225{bottom:446.426000px;} -.y85f{bottom:446.599000px;} -.y86c{bottom:447.053000px;} -.y3c0{bottom:447.152000px;} -.y7e7{bottom:447.473000px;} -.y3f8{bottom:447.558000px;} +.y854{bottom:446.599000px;} +.y861{bottom:447.053000px;} +.y3bd{bottom:447.152000px;} +.y7dc{bottom:447.473000px;} .y108{bottom:447.605000px;} .y12a{bottom:447.803000px;} -.y62e{bottom:448.296000px;} +.y3f3{bottom:447.894000px;} +.y623{bottom:448.296000px;} .y23d{bottom:448.437000px;} -.y80e{bottom:448.547000px;} -.y670{bottom:448.682000px;} -.y5ce{bottom:448.691000px;} +.y803{bottom:448.547000px;} +.y665{bottom:448.682000px;} +.y5c7{bottom:448.691000px;} .y1aa{bottom:448.856000px;} -.y6ba{bottom:448.888000px;} -.y615{bottom:449.673000px;} +.y6af{bottom:448.888000px;} +.y38f{bottom:449.129000px;} .y197{bottom:449.721000px;} -.y7b9{bottom:450.110000px;} +.y7ae{bottom:450.110000px;} .y2b{bottom:450.274000px;} -.y334{bottom:450.325000px;} -.y512{bottom:450.464000px;} -.y79f{bottom:450.570000px;} -.y86d{bottom:451.012000px;} -.y391{bottom:451.204000px;} -.y56c{bottom:451.217000px;} -.y311{bottom:451.900000px;} -.y727{bottom:451.927000px;} -.y2db{bottom:452.439000px;} -.y356{bottom:452.594000px;} -.y492{bottom:452.903000px;} -.y340{bottom:452.990000px;} -.y7cf{bottom:453.364000px;} -.y909{bottom:453.381000px;} +.y50b{bottom:450.464000px;} +.y794{bottom:450.570000px;} +.y862{bottom:451.012000px;} +.y60a{bottom:451.140000px;} +.y565{bottom:451.217000px;} +.y30e{bottom:451.900000px;} +.y71c{bottom:451.927000px;} +.y2d8{bottom:452.439000px;} +.y354{bottom:452.594000px;} +.y331{bottom:452.796000px;} +.y48b{bottom:452.903000px;} +.y33e{bottom:452.990000px;} +.y7c4{bottom:453.364000px;} +.y8fe{bottom:453.381000px;} .y1fe{bottom:453.978000px;} -.y4ea{bottom:454.027000px;} +.y4e3{bottom:454.027000px;} .y53{bottom:454.259000px;} -.y755{bottom:454.485000px;} +.y74a{bottom:454.485000px;} .yca{bottom:454.721000px;} -.y479{bottom:454.806000px;} +.y472{bottom:454.806000px;} .y87{bottom:454.830000px;} -.y6d3{bottom:454.922000px;} -.y300{bottom:454.939000px;} -.y2a3{bottom:455.365000px;} +.y6c8{bottom:454.922000px;} +.y2fd{bottom:454.939000px;} +.y2a0{bottom:455.365000px;} .y20b{bottom:455.395000px;} .y166{bottom:455.936000px;} -.y8f7{bottom:456.029000px;} -.y8aa{bottom:456.050000px;} +.y8ec{bottom:456.029000px;} +.y89f{bottom:456.050000px;} .y26b{bottom:456.316000px;} .y1e3{bottom:456.539000px;} -.y182{bottom:457.330000px;} -.y588{bottom:457.412000px;} -.y644{bottom:457.528000px;} +.y182{bottom:456.725000px;} +.y581{bottom:457.412000px;} +.y639{bottom:457.528000px;} .ye{bottom:457.793000px;} .ye7{bottom:457.948000px;} .ya8{bottom:458.426000px;} -.y52e{bottom:458.488000px;} -.y1c8{bottom:458.626000px;} -.y5e8{bottom:459.099000px;} -.y4d6{bottom:459.466000px;} -.y4a4{bottom:459.849000px;} +.y527{bottom:458.488000px;} +.y5e1{bottom:459.099000px;} +.y1c8{bottom:459.307000px;} +.y4cf{bottom:459.466000px;} +.y49d{bottom:459.849000px;} .y289{bottom:459.959000px;} -.y8d4{bottom:460.485000px;} -.y4bd{bottom:460.761000px;} -.y841{bottom:461.277000px;} -.y541{bottom:461.288000px;} -.y6a2{bottom:461.381000px;} -.y430{bottom:461.713000px;} -.y76e{bottom:462.401000px;} -.y51c{bottom:462.500000px;} +.y8c9{bottom:460.485000px;} +.y4b6{bottom:460.761000px;} +.y836{bottom:461.277000px;} +.y53a{bottom:461.288000px;} +.y42a{bottom:461.297000px;} +.y697{bottom:461.381000px;} +.y763{bottom:462.401000px;} +.y515{bottom:462.500000px;} .y147{bottom:462.535000px;} .y224{bottom:462.685000px;} -.y5ff{bottom:463.156000px;} -.y86b{bottom:463.312000px;} -.y45f{bottom:463.369000px;} -.y3bf{bottom:463.411000px;} -.y446{bottom:463.600000px;} -.y3dc{bottom:463.604000px;} -.y7e6{bottom:463.732000px;} +.y5f8{bottom:463.156000px;} +.y860{bottom:463.312000px;} +.y459{bottom:463.369000px;} +.y3bc{bottom:463.411000px;} +.y440{bottom:463.600000px;} +.y3d9{bottom:463.604000px;} +.y7db{bottom:463.732000px;} .y129{bottom:464.062000px;} -.y3a8{bottom:464.403000px;} +.y3a5{bottom:464.403000px;} .y1a9{bottom:465.115000px;} -.y59b{bottom:465.546000px;} -.y614{bottom:465.932000px;} +.y594{bottom:465.546000px;} .y2a{bottom:466.711000px;} -.y2bc{bottom:467.845000px;} -.y70b{bottom:467.918000px;} -.y659{bottom:468.158000px;} -.y68a{bottom:468.670000px;} -.y2da{bottom:468.698000px;} -.y355{bottom:468.853000px;} -.y491{bottom:469.162000px;} -.y33f{bottom:469.249000px;} -.y73e{bottom:469.915000px;} -.y852{bottom:470.399000px;} -.y527{bottom:470.858000px;} +.y609{bottom:467.399000px;} +.y2b9{bottom:467.845000px;} +.y700{bottom:467.918000px;} +.y64e{bottom:468.158000px;} +.y67f{bottom:468.670000px;} +.y2d7{bottom:468.698000px;} +.y353{bottom:468.853000px;} +.y48a{bottom:469.162000px;} +.y33d{bottom:469.249000px;} +.y733{bottom:469.915000px;} +.y847{bottom:470.399000px;} +.y379{bottom:470.597000px;} +.y31f{bottom:470.814000px;} +.y520{bottom:470.858000px;} .y52{bottom:470.870000px;} .yc9{bottom:470.980000px;} .y86{bottom:471.089000px;} -.y2a2{bottom:471.624000px;} -.y555{bottom:471.665000px;} -.y896{bottom:471.680000px;} -.y37b{bottom:471.750000px;} -.y7f4{bottom:472.086000px;} +.y29f{bottom:471.624000px;} +.y54e{bottom:471.665000px;} +.y88b{bottom:471.680000px;} +.y7e9{bottom:472.086000px;} .y165{bottom:472.195000px;} -.y8f6{bottom:472.288000px;} -.y8a9{bottom:472.309000px;} -.y412{bottom:472.508000px;} -.y3f7{bottom:472.571000px;} -.y6fa{bottom:472.642000px;} +.y8eb{bottom:472.288000px;} +.y89e{bottom:472.309000px;} +.y40c{bottom:472.508000px;} +.y6ef{bottom:472.642000px;} .y1e2{bottom:472.798000px;} -.y322{bottom:473.220000px;} -.y181{bottom:473.589000px;} -.y587{bottom:473.671000px;} +.y3f2{bottom:472.824000px;} +.y181{bottom:472.984000px;} +.y580{bottom:473.671000px;} .yd{bottom:474.052000px;} .ye6{bottom:474.207000px;} .ya7{bottom:474.685000px;} -.y85e{bottom:475.000000px;} -.y5e7{bottom:475.358000px;} -.y254{bottom:475.491000px;} -.y5b2{bottom:475.574000px;} -.y4a3{bottom:476.108000px;} -.y8d3{bottom:476.744000px;} -.y4bc{bottom:477.020000px;} +.y254{bottom:474.899000px;} +.y853{bottom:475.000000px;} +.y5e0{bottom:475.358000px;} +.y5ab{bottom:475.574000px;} +.y49c{bottom:476.108000px;} +.y8c8{bottom:476.744000px;} +.y4b5{bottom:477.020000px;} .y20a{bottom:477.131000px;} -.y840{bottom:477.536000px;} -.y5cd{bottom:478.210000px;} -.y56b{bottom:478.449000px;} -.y908{bottom:478.533000px;} +.y835{bottom:477.536000px;} +.y5c6{bottom:478.210000px;} +.y564{bottom:478.449000px;} +.y8fd{bottom:478.533000px;} .y146{bottom:478.794000px;} -.y785{bottom:479.537000px;} -.y86a{bottom:479.571000px;} -.y45e{bottom:479.628000px;} -.y3be{bottom:479.670000px;} -.y445{bottom:479.859000px;} -.y3db{bottom:479.863000px;} -.y6e6{bottom:479.931000px;} +.y85f{bottom:479.571000px;} +.y458{bottom:479.628000px;} +.y77a{bottom:479.655000px;} +.y3bb{bottom:479.670000px;} +.y43f{bottom:479.859000px;} +.y3d8{bottom:479.863000px;} +.y6db{bottom:479.931000px;} .y107{bottom:480.123000px;} -.y3a7{bottom:480.662000px;} -.y62d{bottom:480.814000px;} -.y6b9{bottom:481.406000px;} -.y59a{bottom:481.805000px;} -.y4fe{bottom:482.106000px;} -.y80d{bottom:482.372000px;} -.y7b8{bottom:482.628000px;} +.y3a4{bottom:480.662000px;} +.y622{bottom:480.814000px;} +.y6ae{bottom:481.406000px;} +.y38e{bottom:481.647000px;} +.y593{bottom:481.805000px;} +.y4f7{bottom:482.106000px;} +.y802{bottom:482.372000px;} +.y7ad{bottom:482.628000px;} .y1{bottom:482.804000px;} -.y333{bottom:482.843000px;} -.y511{bottom:482.982000px;} -.y42c{bottom:483.083000px;} +.y50a{bottom:482.982000px;} +.y426{bottom:483.083000px;} .y29{bottom:483.149000px;} -.y478{bottom:483.294000px;} -.y390{bottom:483.722000px;} -.y2bb{bottom:484.104000px;} -.y66f{bottom:484.237000px;} -.y310{bottom:484.417000px;} +.y471{bottom:483.294000px;} +.y2b8{bottom:484.104000px;} +.y664{bottom:484.237000px;} +.y30d{bottom:484.417000px;} .y223{bottom:484.421000px;} -.y726{bottom:484.444000px;} +.y71b{bottom:484.444000px;} .y23c{bottom:484.917000px;} -.y2d9{bottom:484.957000px;} -.y354{bottom:485.112000px;} -.y6a1{bottom:485.353000px;} -.y79e{bottom:485.704000px;} -.y7ce{bottom:486.111000px;} +.y2d6{bottom:484.957000px;} +.y352{bottom:485.112000px;} +.y330{bottom:485.314000px;} +.y696{bottom:485.353000px;} +.y793{bottom:485.704000px;} +.y7c3{bottom:486.111000px;} .y196{bottom:486.200000px;} .y1fd{bottom:486.496000px;} -.y5fe{bottom:486.939000px;} -.y526{bottom:487.117000px;} +.y5f7{bottom:486.939000px;} +.y31e{bottom:487.073000px;} +.y51f{bottom:487.117000px;} .yc8{bottom:487.239000px;} -.y6d2{bottom:487.439000px;} -.y2ff{bottom:487.457000px;} +.y6c7{bottom:487.439000px;} +.y2fc{bottom:487.457000px;} .y51{bottom:487.481000px;} -.y2a1{bottom:487.883000px;} -.y554{bottom:487.924000px;} +.y29e{bottom:487.883000px;} +.y54d{bottom:487.924000px;} .y164{bottom:488.454000px;} -.y8f5{bottom:488.555000px;} -.y8a8{bottom:488.568000px;} -.y3f6{bottom:488.830000px;} +.y8ea{bottom:488.555000px;} +.y89d{bottom:488.568000px;} .y26a{bottom:488.834000px;} -.y4e9{bottom:489.381000px;} -.y321{bottom:489.479000px;} -.y754{bottom:489.653000px;} -.y827{bottom:489.741000px;} -.y180{bottom:489.848000px;} +.y3f1{bottom:489.083000px;} +.y180{bottom:489.243000px;} +.y4e2{bottom:489.381000px;} +.y749{bottom:489.653000px;} +.y81c{bottom:489.741000px;} .y128{bottom:490.226000px;} -.y42f{bottom:490.301000px;} +.y429{bottom:490.244000px;} .yc{bottom:490.311000px;} .ye5{bottom:490.466000px;} .y1a8{bottom:490.796000px;} .ya6{bottom:490.944000px;} -.y643{bottom:491.175000px;} -.y253{bottom:491.750000px;} -.y5b1{bottom:491.833000px;} -.y7e5{bottom:491.946000px;} -.y4d5{bottom:491.984000px;} +.y253{bottom:491.158000px;} +.y638{bottom:491.175000px;} +.y1c7{bottom:491.825000px;} +.y5aa{bottom:491.833000px;} +.y7da{bottom:491.946000px;} +.y4ce{bottom:491.984000px;} .y288{bottom:492.477000px;} -.y1c7{bottom:492.676000px;} -.y4bb{bottom:493.279000px;} -.y613{bottom:494.066000px;} -.y52d{bottom:494.324000px;} -.y5cc{bottom:494.469000px;} -.y56a{bottom:494.708000px;} -.y907{bottom:494.792000px;} -.y76d{bottom:494.919000px;} +.y4b4{bottom:493.279000px;} +.y526{bottom:494.324000px;} +.y5c5{bottom:494.469000px;} +.y563{bottom:494.708000px;} +.y8fc{bottom:494.792000px;} +.y762{bottom:494.919000px;} .y145{bottom:495.053000px;} -.y869{bottom:495.830000px;} -.y45d{bottom:495.887000px;} -.y490{bottom:495.974000px;} +.y85e{bottom:495.830000px;} +.y457{bottom:495.887000px;} +.y489{bottom:495.974000px;} +.y608{bottom:496.022000px;} .y106{bottom:496.382000px;} -.y586{bottom:496.983000px;} -.y62c{bottom:497.073000px;} -.y70a{bottom:497.117000px;} -.y6f9{bottom:497.649000px;} -.y6b8{bottom:497.665000px;} -.y599{bottom:498.064000px;} -.y4fd{bottom:498.365000px;} -.y80c{bottom:498.631000px;} -.y7b7{bottom:498.887000px;} -.y540{bottom:498.917000px;} -.y510{bottom:499.241000px;} -.y42b{bottom:499.342000px;} +.y57f{bottom:496.983000px;} +.y621{bottom:497.073000px;} +.y6ff{bottom:497.117000px;} +.y6ee{bottom:497.649000px;} +.y6ad{bottom:497.665000px;} +.y592{bottom:498.064000px;} +.y4f6{bottom:498.365000px;} +.y801{bottom:498.631000px;} +.y7ac{bottom:498.887000px;} +.y539{bottom:498.917000px;} +.y509{bottom:499.241000px;} +.y425{bottom:499.342000px;} .y28{bottom:499.587000px;} -.y476{bottom:499.624000px;} -.y66e{bottom:500.496000px;} -.y30f{bottom:500.676000px;} -.y689{bottom:501.187000px;} -.y6a0{bottom:501.612000px;} -.y73d{bottom:502.433000px;} +.y46f{bottom:499.624000px;} +.y663{bottom:500.496000px;} +.y30c{bottom:500.676000px;} +.y67e{bottom:501.187000px;} +.y695{bottom:501.612000px;} +.y732{bottom:502.433000px;} .y195{bottom:502.459000px;} -.y8d2{bottom:502.579000px;} +.y8c7{bottom:502.579000px;} .y1fc{bottom:502.755000px;} -.y525{bottom:503.376000px;} +.y378{bottom:503.115000px;} +.y51e{bottom:503.376000px;} .yc7{bottom:503.498000px;} -.y477{bottom:503.583000px;} +.y470{bottom:503.583000px;} .y85{bottom:503.791000px;} .y6f{bottom:504.092000px;} -.y2a0{bottom:504.142000px;} -.y553{bottom:504.183000px;} -.y33e{bottom:504.185000px;} -.y37a{bottom:504.268000px;} -.y444{bottom:504.657000px;} +.y29d{bottom:504.142000px;} +.y54c{bottom:504.183000px;} +.y33c{bottom:504.185000px;} +.y43e{bottom:504.657000px;} .y163{bottom:504.713000px;} -.y8f4{bottom:504.823000px;} -.y8a7{bottom:504.827000px;} -.y411{bottom:505.026000px;} +.y8e9{bottom:504.823000px;} +.y89c{bottom:504.827000px;} +.y40b{bottom:505.026000px;} .y1e1{bottom:505.316000px;} -.y826{bottom:506.000000px;} +.y81b{bottom:506.000000px;} .y127{bottom:506.485000px;} +.y428{bottom:506.503000px;} .y209{bottom:506.514000px;} -.y42e{bottom:506.560000px;} .yb{bottom:506.570000px;} .ya5{bottom:507.203000px;} -.y642{bottom:507.434000px;} -.y851{bottom:508.065000px;} -.y7e4{bottom:508.205000px;} -.y4d4{bottom:508.243000px;} -.y4a2{bottom:508.625000px;} -.y3da{bottom:508.831000px;} -.y3a6{bottom:508.953000px;} -.y4ba{bottom:509.538000px;} -.y7f3{bottom:509.831000px;} -.y612{bottom:510.343000px;} -.y7cd{bottom:510.680000px;} -.y5cb{bottom:510.728000px;} -.y569{bottom:510.967000px;} -.y784{bottom:512.055000px;} -.y867{bottom:512.089000px;} -.y725{bottom:512.139000px;} -.y3bd{bottom:512.188000px;} -.y48f{bottom:512.233000px;} -.y6e5{bottom:512.449000px;} +.y637{bottom:507.434000px;} +.y846{bottom:508.065000px;} +.y7d9{bottom:508.205000px;} +.y4cd{bottom:508.243000px;} +.y49b{bottom:508.625000px;} +.y3d7{bottom:508.831000px;} +.y3a3{bottom:508.953000px;} +.y4b3{bottom:509.538000px;} +.y7e8{bottom:509.831000px;} +.y7c2{bottom:510.680000px;} +.y5c4{bottom:510.728000px;} +.y562{bottom:510.967000px;} +.y85c{bottom:512.089000px;} +.y71a{bottom:512.139000px;} +.y779{bottom:512.173000px;} +.y3ba{bottom:512.188000px;} +.y488{bottom:512.233000px;} +.y607{bottom:512.396000px;} +.y6da{bottom:512.449000px;} .y222{bottom:512.961000px;} -.y5e6{bottom:513.907000px;} -.y6f8{bottom:513.908000px;} -.y6b7{bottom:513.924000px;} -.y4fc{bottom:514.624000px;} -.y53f{bottom:515.176000px;} +.y5df{bottom:513.907000px;} +.y6ed{bottom:513.908000px;} +.y6ac{bottom:513.924000px;} +.y38d{bottom:514.165000px;} +.y4f5{bottom:514.624000px;} +.y538{bottom:515.176000px;} .y50{bottom:515.235000px;} -.y2fe{bottom:515.705000px;} -.y475{bottom:515.883000px;} -.y868{bottom:516.048000px;} -.y38f{bottom:516.240000px;} -.y2ba{bottom:516.629000px;} -.y658{bottom:516.935000px;} -.y895{bottom:516.985000px;} +.y2fb{bottom:515.705000px;} +.y46e{bottom:515.883000px;} +.y85d{bottom:516.048000px;} +.y2b7{bottom:516.629000px;} +.y64d{bottom:516.935000px;} +.y88a{bottom:516.985000px;} .y23b{bottom:517.434000px;} -.y688{bottom:517.446000px;} -.y2d8{bottom:517.475000px;} +.y67d{bottom:517.446000px;} +.y2d5{bottom:517.475000px;} .ye4{bottom:517.539000px;} -.y332{bottom:517.832000px;} +.y32f{bottom:517.832000px;} .y1a7{bottom:517.869000px;} -.y69f{bottom:517.871000px;} -.y79d{bottom:518.222000px;} +.y694{bottom:517.871000px;} +.y792{bottom:518.222000px;} .y194{bottom:518.718000px;} .y105{bottom:518.764000px;} -.y8d1{bottom:518.838000px;} +.y8c6{bottom:518.838000px;} +.y31d{bottom:519.079000px;} +.y377{bottom:519.374000px;} .yc6{bottom:519.757000px;} -.y6d1{bottom:519.957000px;} +.y6c6{bottom:519.957000px;} .y84{bottom:520.050000px;} -.y5fd{bottom:520.345000px;} -.y29f{bottom:520.401000px;} -.y552{bottom:520.442000px;} -.y33d{bottom:520.444000px;} -.y379{bottom:520.527000px;} +.y5f6{bottom:520.345000px;} +.y29c{bottom:520.401000px;} +.y54b{bottom:520.442000px;} +.y33b{bottom:520.444000px;} .y6e{bottom:520.703000px;} -.y320{bottom:520.804000px;} -.y443{bottom:520.916000px;} +.y43d{bottom:520.916000px;} .y162{bottom:520.972000px;} -.y8c0{bottom:521.086000px;} -.y8f3{bottom:521.090000px;} -.y410{bottom:521.285000px;} +.y8b5{bottom:521.086000px;} +.y8e8{bottom:521.090000px;} +.y40a{bottom:521.285000px;} .y269{bottom:521.352000px;} -.y45c{bottom:521.800000px;} +.y456{bottom:521.800000px;} .y0{bottom:521.947000px;} -.y753{bottom:522.171000px;} -.y824{bottom:522.258000px;} -.y825{bottom:522.259000px;} -.y3f5{bottom:522.321000px;} +.y748{bottom:522.171000px;} +.y819{bottom:522.258000px;} +.y81a{bottom:522.259000px;} +.y3f0{bottom:522.489000px;} .y126{bottom:522.744000px;} .y208{bottom:522.773000px;} -.y906{bottom:522.786000px;} +.y8fb{bottom:522.786000px;} .ya{bottom:522.829000px;} -.y850{bottom:524.324000px;} -.y4d3{bottom:524.502000px;} -.y353{bottom:524.628000px;} -.y62b{bottom:524.804000px;} +.y845{bottom:524.324000px;} +.y1c6{bottom:524.343000px;} +.y4cc{bottom:524.502000px;} +.y351{bottom:524.628000px;} +.y17f{bottom:524.635000px;} +.y620{bottom:524.804000px;} .y287{bottom:524.995000px;} -.y17f{bottom:525.088000px;} -.y1c6{bottom:525.194000px;} -.y50f{bottom:525.197000px;} +.y508{bottom:525.197000px;} .y144{bottom:525.753000px;} -.y83f{bottom:525.956000px;} -.y611{bottom:526.602000px;} -.y52c{bottom:526.842000px;} -.y598{bottom:526.909000px;} +.y834{bottom:525.956000px;} +.y525{bottom:526.842000px;} +.y591{bottom:526.909000px;} .y27{bottom:527.052000px;} -.y76c{bottom:527.437000px;} -.y420{bottom:527.500000px;} -.y5b0{bottom:527.786000px;} -.y724{bottom:528.398000px;} -.y48e{bottom:528.492000px;} -.y6e4{bottom:528.708000px;} -.y66d{bottom:528.771000px;} -.y585{bottom:528.918000px;} +.y761{bottom:527.437000px;} +.y41a{bottom:527.500000px;} +.y5a9{bottom:527.786000px;} +.y719{bottom:528.398000px;} +.y487{bottom:528.492000px;} +.y606{bottom:528.655000px;} +.y6d9{bottom:528.708000px;} +.y662{bottom:528.771000px;} +.y57e{bottom:528.918000px;} .y252{bottom:528.950000px;} .y221{bottom:529.220000px;} -.y7b6{bottom:529.681000px;} -.y8a6{bottom:529.870000px;} -.y4fb{bottom:530.883000px;} -.y7e3{bottom:531.517000px;} +.y7ab{bottom:529.681000px;} +.y89b{bottom:529.870000px;} +.y4f4{bottom:530.883000px;} +.y7d8{bottom:531.517000px;} .y4f{bottom:531.846000px;} .ya4{bottom:532.482000px;} -.y30e{bottom:533.194000px;} -.y894{bottom:533.244000px;} -.y42d{bottom:533.633000px;} -.y709{bottom:533.647000px;} +.y30b{bottom:533.194000px;} +.y889{bottom:533.244000px;} +.y427{bottom:533.576000px;} +.y6fe{bottom:533.647000px;} .y23a{bottom:533.693000px;} -.y2d7{bottom:533.734000px;} -.y69e{bottom:534.130000px;} -.y568{bottom:534.278000px;} -.y73c{bottom:534.349000px;} +.y2d4{bottom:533.734000px;} +.y693{bottom:534.130000px;} +.y561{bottom:534.278000px;} +.y731{bottom:534.349000px;} .y104{bottom:535.023000px;} -.y8d0{bottom:535.097000px;} +.y8c5{bottom:535.097000px;} .y1fb{bottom:535.273000px;} -.y42a{bottom:535.821000px;} -.y524{bottom:535.894000px;} +.y31c{bottom:535.338000px;} +.y424{bottom:535.821000px;} +.y51d{bottom:535.894000px;} .yc5{bottom:536.016000px;} .y83{bottom:536.309000px;} -.y5fc{bottom:536.604000px;} -.y33c{bottom:536.703000px;} -.y31f{bottom:537.063000px;} -.y442{bottom:537.175000px;} +.y5f5{bottom:536.604000px;} +.y33a{bottom:536.703000px;} +.y43c{bottom:537.175000px;} .y6d{bottom:537.313000px;} -.y8bf{bottom:537.345000px;} -.y8f2{bottom:537.358000px;} -.y40f{bottom:537.544000px;} -.y783{bottom:537.639000px;} +.y8b4{bottom:537.345000px;} +.y8e7{bottom:537.358000px;} +.y409{bottom:537.544000px;} +.y778{bottom:537.728000px;} .y1e0{bottom:537.834000px;} -.y45b{bottom:538.059000px;} -.y4e8{bottom:538.158000px;} -.y5ca{bottom:538.425000px;} -.y823{bottom:538.517000px;} +.y455{bottom:538.059000px;} +.y4e1{bottom:538.158000px;} +.y5c3{bottom:538.425000px;} +.y818{bottom:538.517000px;} .y125{bottom:539.003000px;} -.y6b6{bottom:539.045000px;} +.y6ab{bottom:539.045000px;} .y9{bottom:539.088000px;} -.y641{bottom:539.952000px;} -.y80b{bottom:540.090000px;} -.y84f{bottom:540.583000px;} -.y4d2{bottom:540.761000px;} -.y4a1{bottom:541.143000px;} -.y50e{bottom:541.456000px;} -.y4b9{bottom:541.853000px;} -.y29e{bottom:542.137000px;} -.y83e{bottom:542.215000px;} -.y610{bottom:542.861000px;} -.y52b{bottom:543.101000px;} -.y597{bottom:543.168000px;} +.y636{bottom:539.952000px;} +.y800{bottom:540.090000px;} +.y844{bottom:540.583000px;} +.y4cb{bottom:540.761000px;} +.y49a{bottom:541.143000px;} +.y507{bottom:541.456000px;} +.y4b2{bottom:541.853000px;} +.y29b{bottom:542.137000px;} +.y833{bottom:542.215000px;} +.y524{bottom:543.101000px;} +.y590{bottom:543.168000px;} .y26{bottom:543.490000px;} .y161{bottom:543.702000px;} -.y7cc{bottom:544.035000px;} -.y3bc{bottom:544.706000px;} -.y48d{bottom:544.751000px;} -.y7f2{bottom:544.851000px;} -.y79c{bottom:545.006000px;} -.y584{bottom:545.177000px;} +.y7c1{bottom:544.035000px;} +.y3b9{bottom:544.706000px;} +.y486{bottom:544.751000px;} +.y7e7{bottom:544.851000px;} +.y605{bottom:544.914000px;} +.y791{bottom:545.006000px;} +.y57d{bottom:545.177000px;} .y251{bottom:545.209000px;} .y220{bottom:545.479000px;} -.y7b5{bottom:545.940000px;} -.y8a5{bottom:546.129000px;} -.y5e5{bottom:546.425000px;} -.y4fa{bottom:547.142000px;} -.y6f7{bottom:547.265000px;} -.y917{bottom:547.564000px;} +.y7aa{bottom:545.940000px;} +.y89a{bottom:546.129000px;} +.y5de{bottom:546.425000px;} +.y38c{bottom:546.683000px;} +.y4f3{bottom:547.142000px;} +.y6ec{bottom:547.265000px;} +.y90c{bottom:547.564000px;} +.y376{bottom:547.738000px;} .y193{bottom:547.866000px;} .y143{bottom:547.892000px;} .y4e{bottom:548.457000px;} -.y378{bottom:548.660000px;} -.y38e{bottom:548.758000px;} -.y752{bottom:548.905000px;} -.y2b9{bottom:549.147000px;} -.y687{bottom:549.370000px;} -.y53e{bottom:549.453000px;} -.y893{bottom:549.503000px;} +.y747{bottom:548.905000px;} +.y2b6{bottom:549.147000px;} +.y67c{bottom:549.370000px;} +.y537{bottom:549.453000px;} +.y888{bottom:549.503000px;} .y207{bottom:549.846000px;} -.y2d6{bottom:549.993000px;} -.y331{bottom:550.350000px;} -.y3a5{bottom:550.512000px;} -.y73a{bottom:550.608000px;} +.y2d3{bottom:549.993000px;} +.y32e{bottom:550.350000px;} +.y3a2{bottom:550.512000px;} +.y72f{bottom:550.608000px;} .y103{bottom:551.282000px;} -.y8cf{bottom:551.356000px;} -.y523{bottom:552.153000px;} +.y8c4{bottom:551.356000px;} +.y1c5{bottom:551.704000px;} +.y51c{bottom:552.153000px;} .yc4{bottom:552.275000px;} -.y2fd{bottom:552.302000px;} -.y3d9{bottom:552.380000px;} -.y1c5{bottom:552.385000px;} -.y6d0{bottom:552.475000px;} -.y474{bottom:552.720000px;} -.y551{bottom:552.960000px;} -.y33b{bottom:552.962000px;} -.y441{bottom:553.434000px;} +.y2fa{bottom:552.302000px;} +.y3d6{bottom:552.380000px;} +.y6c5{bottom:552.475000px;} +.y46d{bottom:552.720000px;} +.y54a{bottom:552.960000px;} +.y339{bottom:552.962000px;} +.y43b{bottom:553.434000px;} .y82{bottom:553.466000px;} -.y8f1{bottom:553.625000px;} -.y40e{bottom:553.802000px;} +.y8e6{bottom:553.625000px;} +.y408{bottom:553.802000px;} .y268{bottom:553.870000px;} -.y782{bottom:553.898000px;} .y6c{bottom:553.924000px;} +.y777{bottom:553.987000px;} .y1df{bottom:554.093000px;} -.y4e7{bottom:554.417000px;} -.y73b{bottom:554.567000px;} -.y822{bottom:554.776000px;} -.y3f4{bottom:554.839000px;} +.y4e0{bottom:554.417000px;} +.y730{bottom:554.567000px;} +.y817{bottom:554.776000px;} +.y3ef{bottom:555.007000px;} .ye3{bottom:555.262000px;} -.y6b5{bottom:555.304000px;} +.y6aa{bottom:555.304000px;} .y8{bottom:555.347000px;} -.y352{bottom:555.795000px;} -.y640{bottom:556.210000px;} -.y80a{bottom:556.349000px;} -.y76b{bottom:556.610000px;} -.y84e{bottom:556.842000px;} -.y4d1{bottom:557.020000px;} +.y350{bottom:555.795000px;} +.y635{bottom:556.210000px;} +.y7ff{bottom:556.349000px;} +.y760{bottom:556.610000px;} +.y843{bottom:556.842000px;} +.y4ca{bottom:557.020000px;} +.y17e{bottom:557.153000px;} .y286{bottom:557.513000px;} -.y17e{bottom:557.606000px;} -.y4b8{bottom:558.112000px;} -.y83d{bottom:558.474000px;} -.y596{bottom:559.427000px;} +.y4b1{bottom:558.112000px;} +.y832{bottom:558.474000px;} +.y58f{bottom:559.427000px;} .y25{bottom:559.927000px;} .y160{bottom:559.961000px;} -.y7cb{bottom:560.294000px;} -.y5af{bottom:560.304000px;} -.y62a{bottom:560.885000px;} -.y3bb{bottom:560.965000px;} -.y48c{bottom:561.010000px;} -.y6e3{bottom:561.188000px;} -.y69d{bottom:561.203000px;} -.y79b{bottom:561.265000px;} -.y583{bottom:561.436000px;} +.y7c0{bottom:560.294000px;} +.y5a8{bottom:560.304000px;} +.y61f{bottom:560.885000px;} +.y3b8{bottom:560.965000px;} +.y485{bottom:561.010000px;} +.y6d8{bottom:561.188000px;} +.y692{bottom:561.203000px;} +.y790{bottom:561.265000px;} +.y57c{bottom:561.436000px;} .y250{bottom:561.468000px;} .y239{bottom:561.738000px;} -.y8a4{bottom:562.388000px;} -.y5e4{bottom:562.684000px;} -.y4f9{bottom:563.401000px;} -.y7e2{bottom:563.535000px;} -.y916{bottom:563.823000px;} +.y899{bottom:562.388000px;} +.y5dd{bottom:562.684000px;} +.y4f2{bottom:563.401000px;} +.y7d7{bottom:563.535000px;} +.y90b{bottom:563.823000px;} +.y31b{bottom:563.968000px;} .y192{bottom:564.125000px;} -.y5fb{bottom:564.148000px;} -.y723{bottom:564.528000px;} -.y50d{bottom:564.767000px;} +.y5f4{bottom:564.148000px;} +.y718{bottom:564.528000px;} +.y506{bottom:564.767000px;} .y4d{bottom:565.068000px;} -.y45a{bottom:565.132000px;} -.y751{bottom:565.164000px;} -.y31e{bottom:565.428000px;} -.y686{bottom:565.629000px;} -.y30d{bottom:565.712000px;} -.y708{bottom:566.165000px;} -.y566{bottom:566.175000px;} -.y3a4{bottom:566.771000px;} -.y8ce{bottom:567.615000px;} +.y454{bottom:565.132000px;} +.y746{bottom:565.164000px;} +.y67b{bottom:565.629000px;} +.y30a{bottom:565.712000px;} +.y6fd{bottom:566.165000px;} +.y55f{bottom:566.175000px;} +.y3a1{bottom:566.771000px;} +.y8c3{bottom:567.615000px;} .y1fa{bottom:567.791000px;} -.y429{bottom:568.339000px;} -.y522{bottom:568.412000px;} -.y3d8{bottom:568.639000px;} -.y1c4{bottom:568.644000px;} -.y473{bottom:568.979000px;} +.y1c4{bottom:567.963000px;} +.y423{bottom:568.339000px;} +.y51b{bottom:568.412000px;} +.y3d5{bottom:568.639000px;} +.y46c{bottom:568.979000px;} .y81{bottom:569.725000px;} -.y8f0{bottom:569.893000px;} -.y40d{bottom:570.061000px;} -.y567{bottom:570.134000px;} -.y781{bottom:570.157000px;} -.y66c{bottom:570.284000px;} +.y8e5{bottom:569.893000px;} +.y407{bottom:570.061000px;} +.y560{bottom:570.134000px;} +.y776{bottom:570.246000px;} +.y661{bottom:570.284000px;} .ya3{bottom:570.289000px;} .y6b{bottom:570.535000px;} -.y821{bottom:571.035000px;} -.y3f3{bottom:571.098000px;} +.y816{bottom:571.035000px;} +.y3ee{bottom:571.266000px;} .ye1{bottom:571.520000px;} .ye2{bottom:571.521000px;} -.y6b4{bottom:571.563000px;} +.y6a9{bottom:571.563000px;} .y7{bottom:571.606000px;} -.y351{bottom:572.054000px;} +.y34f{bottom:572.054000px;} .y21f{bottom:572.552000px;} -.y809{bottom:572.608000px;} -.y76a{bottom:572.869000px;} -.y84d{bottom:573.101000px;} -.y4a0{bottom:573.661000px;} +.y7fe{bottom:572.608000px;} +.y75f{bottom:572.869000px;} +.y842{bottom:573.101000px;} +.y499{bottom:573.661000px;} .y285{bottom:573.772000px;} -.y2b8{bottom:574.038000px;} -.y2b7{bottom:574.039000px;} -.y33a{bottom:574.698000px;} -.y83c{bottom:574.733000px;} +.y2b5{bottom:574.038000px;} +.y2b4{bottom:574.039000px;} +.y338{bottom:574.698000px;} +.y831{bottom:574.733000px;} .y142{bottom:574.965000px;} -.y29c{bottom:575.539000px;} -.y595{bottom:575.686000px;} +.y58e{bottom:575.686000px;} .y15f{bottom:576.220000px;} .y24{bottom:576.365000px;} -.y2d5{bottom:576.386000px;} -.y7ca{bottom:576.553000px;} -.y629{bottom:577.144000px;} -.y3ba{bottom:577.224000px;} -.y48b{bottom:577.269000px;} +.y2d2{bottom:576.386000px;} +.y7bf{bottom:576.553000px;} +.y38b{bottom:576.655000px;} +.y61e{bottom:577.144000px;} +.y3b7{bottom:577.224000px;} +.y484{bottom:577.269000px;} .y24f{bottom:577.727000px;} .y238{bottom:577.997000px;} -.y38d{bottom:578.038000px;} -.y5c9{bottom:578.234000px;} -.y6e2{bottom:578.317000px;} -.y330{bottom:578.479000px;} -.y8a3{bottom:578.647000px;} +.y299{bottom:578.010000px;} +.y5c2{bottom:578.234000px;} +.y6d7{bottom:578.317000px;} +.y32d{bottom:578.479000px;} +.y898{bottom:578.647000px;} .y1de{bottom:579.124000px;} -.y60f{bottom:579.429000px;} -.y6f6{bottom:579.783000px;} -.y7e1{bottom:579.794000px;} -.y550{bottom:580.059000px;} -.y915{bottom:580.082000px;} -.y7b4{bottom:580.527000px;} -.y6cf{bottom:580.913000px;} -.y750{bottom:581.423000px;} +.y6eb{bottom:579.783000px;} +.y7d6{bottom:579.794000px;} +.y549{bottom:580.059000px;} +.y90a{bottom:580.082000px;} +.y7a9{bottom:580.527000px;} +.y6c4{bottom:580.913000px;} +.y745{bottom:581.423000px;} .y4c{bottom:581.679000px;} -.y366{bottom:581.946000px;} +.y364{bottom:581.946000px;} .y102{bottom:581.971000px;} -.y892{bottom:582.021000px;} -.y3a3{bottom:583.030000px;} +.y887{bottom:582.021000px;} +.y3a0{bottom:583.030000px;} .y1f9{bottom:584.050000px;} -.y17d{bottom:584.412000px;} -.y428{bottom:584.598000px;} -.y521{bottom:584.671000px;} +.y17d{bottom:584.110000px;} +.y375{bottom:584.451000px;} +.y422{bottom:584.598000px;} +.y51a{bottom:584.671000px;} .yc3{bottom:584.793000px;} -.y2fc{bottom:584.820000px;} -.y377{bottom:585.143000px;} -.y3d7{bottom:585.873000px;} +.y2f9{bottom:584.820000px;} +.y3d4{bottom:585.873000px;} .y80{bottom:585.984000px;} -.y8ef{bottom:586.160000px;} +.y8e4{bottom:586.160000px;} .y267{bottom:586.388000px;} -.y66b{bottom:586.543000px;} +.y660{bottom:586.543000px;} .ya2{bottom:586.548000px;} -.y440{bottom:586.623000px;} -.y4e6{bottom:586.935000px;} -.y820{bottom:587.294000px;} +.y43a{bottom:586.623000px;} +.y4df{bottom:586.935000px;} +.y815{bottom:587.294000px;} .y191{bottom:587.436000px;} -.y5ae{bottom:587.737000px;} +.y5a7{bottom:587.737000px;} .ydf{bottom:587.779000px;} .y206{bottom:587.822000px;} .y6{bottom:587.865000px;} -.y63f{bottom:588.728000px;} -.y350{bottom:588.921000px;} -.y685{bottom:590.465000px;} -.y739{bottom:590.958000px;} -.y83b{bottom:590.992000px;} +.y634{bottom:588.728000px;} +.y34e{bottom:588.921000px;} +.y67a{bottom:590.465000px;} +.y72e{bottom:590.958000px;} +.y830{bottom:590.992000px;} .ye0{bottom:591.738000px;} -.y29b{bottom:591.798000px;} .y15e{bottom:592.479000px;} -.y2d4{bottom:592.645000px;} -.y5e3{bottom:592.713000px;} +.y2d1{bottom:592.645000px;} +.y5dc{bottom:592.713000px;} .y23{bottom:592.803000px;} -.y7c9{bottom:592.812000px;} -.y8cd{bottom:593.449000px;} +.y7be{bottom:592.812000px;} +.y38a{bottom:592.914000px;} +.y8c2{bottom:593.449000px;} .y24e{bottom:593.986000px;} -.y4d0{bottom:594.016000px;} -.y707{bottom:594.218000px;} -.y38c{bottom:594.297000px;} -.y5c8{bottom:594.493000px;} -.y8a2{bottom:594.906000px;} -.y40c{bottom:595.178000px;} +.y4c9{bottom:594.016000px;} +.y6fc{bottom:594.218000px;} +.y298{bottom:594.269000px;} +.y5c1{bottom:594.493000px;} +.y897{bottom:594.906000px;} +.y406{bottom:595.178000px;} .y1dd{bottom:595.383000px;} -.y4f8{bottom:595.919000px;} -.y54f{bottom:596.318000px;} -.y914{bottom:596.341000px;} -.y79a{bottom:596.399000px;} -.y50c{bottom:596.443000px;} -.y7b3{bottom:596.786000px;} -.y722{bottom:597.046000px;} -.y6ce{bottom:597.172000px;} -.y3f2{bottom:597.258000px;} -.y472{bottom:597.382000px;} -.y582{bottom:597.392000px;} -.y74e{bottom:597.681000px;} -.y74f{bottom:597.682000px;} -.y4b7{bottom:597.757000px;} -.y365{bottom:598.205000px;} -.y657{bottom:598.230000px;} -.y891{bottom:598.280000px;} +.y4f1{bottom:595.919000px;} +.y548{bottom:596.318000px;} +.y909{bottom:596.341000px;} +.y78f{bottom:596.399000px;} +.y505{bottom:596.443000px;} +.y7a8{bottom:596.786000px;} +.y717{bottom:597.046000px;} +.y6c3{bottom:597.172000px;} +.y3ed{bottom:597.342000px;} +.y46b{bottom:597.382000px;} +.y57b{bottom:597.392000px;} +.y743{bottom:597.681000px;} +.y744{bottom:597.682000px;} +.y4b0{bottom:597.757000px;} +.y363{bottom:598.205000px;} +.y64c{bottom:598.230000px;} +.y886{bottom:598.280000px;} .y4b{bottom:598.290000px;} -.y69c{bottom:598.511000px;} -.y17c{bottom:600.671000px;} -.y427{bottom:600.857000px;} -.y520{bottom:600.930000px;} -.y565{bottom:601.884000px;} -.y3d6{bottom:602.132000px;} +.y691{bottom:598.511000px;} +.y17c{bottom:600.369000px;} +.y421{bottom:600.857000px;} +.y519{bottom:600.930000px;} +.y55e{bottom:601.884000px;} +.y3d3{bottom:602.132000px;} .y7f{bottom:602.243000px;} -.y8ee{bottom:602.428000px;} +.y8e3{bottom:602.428000px;} .y266{bottom:602.647000px;} -.y594{bottom:602.759000px;} -.y66a{bottom:602.802000px;} -.y3b9{bottom:602.868000px;} +.y58d{bottom:602.759000px;} +.y65f{bottom:602.802000px;} +.y3b6{bottom:602.868000px;} .y284{bottom:603.499000px;} -.y5fa{bottom:603.511000px;} -.y780{bottom:603.920000px;} -.y5ac{bottom:603.996000px;} +.y5f3{bottom:603.511000px;} +.y1c3{bottom:603.674000px;} +.y775{bottom:603.979000px;} +.y5a5{bottom:603.996000px;} .yde{bottom:604.038000px;} .y205{bottom:604.081000px;} .y5{bottom:604.124000px;} -.y1c3{bottom:604.185000px;} -.y49f{bottom:604.940000px;} -.y63e{bottom:604.987000px;} +.y498{bottom:604.940000px;} +.y633{bottom:604.987000px;} .y237{bottom:605.070000px;} -.y808{bottom:605.126000px;} -.y34f{bottom:605.180000px;} -.y2b6{bottom:606.564000px;} -.y31d{bottom:607.205000px;} -.y8a0{bottom:607.500000px;} -.y5ad{bottom:607.955000px;} -.y29a{bottom:608.057000px;} +.y7fd{bottom:605.126000px;} +.y34d{bottom:605.180000px;} +.y31a{bottom:606.524000px;} +.y2b3{bottom:606.564000px;} +.y895{bottom:607.500000px;} +.y5a6{bottom:607.955000px;} .y15d{bottom:608.738000px;} -.y2d3{bottom:608.904000px;} -.y5e2{bottom:608.972000px;} -.y7c8{bottom:609.071000px;} +.y2d0{bottom:608.904000px;} +.y5db{bottom:608.972000px;} +.y7bd{bottom:609.071000px;} .y22{bottom:609.240000px;} -.y628{bottom:609.662000px;} -.y8cc{bottom:609.708000px;} +.y61d{bottom:609.662000px;} +.y8c1{bottom:609.708000px;} .y24d{bottom:610.245000px;} -.y4cf{bottom:610.275000px;} -.y769{bottom:610.476000px;} -.y706{bottom:610.477000px;} +.y4c8{bottom:610.275000px;} +.y75e{bottom:610.476000px;} +.y6fb{bottom:610.477000px;} .y21e{bottom:610.528000px;} -.y5c7{bottom:610.752000px;} -.y459{bottom:610.863000px;} -.y8a1{bottom:611.165000px;} -.y40b{bottom:611.437000px;} +.y5c0{bottom:610.752000px;} +.y453{bottom:610.863000px;} +.y896{bottom:611.165000px;} +.y405{bottom:611.437000px;} .y1dc{bottom:611.642000px;} -.y60e{bottom:611.947000px;} .y140{bottom:612.031000px;} .y141{bottom:612.032000px;} -.y4f7{bottom:612.178000px;} -.y6f5{bottom:612.301000px;} -.y54e{bottom:612.577000px;} +.y4f0{bottom:612.178000px;} +.y6ea{bottom:612.301000px;} +.y547{bottom:612.577000px;} .y122{bottom:612.587000px;} -.y913{bottom:612.600000px;} -.y7b2{bottom:613.045000px;} +.y908{bottom:612.600000px;} +.y7a7{bottom:613.045000px;} .y1f8{bottom:613.198000px;} -.y3f0{bottom:613.516000px;} -.y3f1{bottom:613.517000px;} -.y74d{bottom:613.940000px;} -.y2fb{bottom:614.086000px;} -.y364{bottom:614.464000px;} +.y3ec{bottom:613.601000px;} +.y742{bottom:613.940000px;} +.y2f8{bottom:614.086000px;} +.y362{bottom:614.464000px;} .y101{bottom:614.489000px;} -.y69b{bottom:614.770000px;} +.y690{bottom:614.770000px;} .y4a{bottom:614.901000px;} -.y32f{bottom:614.959000px;} +.y32c{bottom:614.959000px;} .ya1{bottom:615.588000px;} -.y7e0{bottom:616.273000px;} -.y17b{bottom:616.930000px;} -.y426{bottom:617.116000px;} -.y51f{bottom:617.188000px;} +.y7d5{bottom:616.273000px;} +.y17b{bottom:616.628000px;} +.y374{bottom:616.969000px;} +.y420{bottom:617.116000px;} +.y518{bottom:617.188000px;} .yc2{bottom:617.311000px;} -.y376{bottom:617.661000px;} -.y564{bottom:618.143000px;} -.y3d5{bottom:618.391000px;} +.y55d{bottom:618.143000px;} +.y3d2{bottom:618.391000px;} .y7e{bottom:618.502000px;} -.y8ed{bottom:618.687000px;} -.y668{bottom:619.061000px;} -.y3b8{bottom:619.127000px;} -.y43f{bottom:619.141000px;} -.y6e1{bottom:619.146000px;} -.y4e5{bottom:619.453000px;} +.y8e2{bottom:618.687000px;} +.y65d{bottom:619.061000px;} +.y3b5{bottom:619.127000px;} +.y439{bottom:619.141000px;} +.y6d6{bottom:619.146000px;} +.y4de{bottom:619.453000px;} .y283{bottom:619.758000px;} -.y5f9{bottom:619.770000px;} -.y81f{bottom:619.812000px;} -.y5ab{bottom:620.255000px;} +.y5f2{bottom:619.770000px;} +.y814{bottom:619.812000px;} +.y1c2{bottom:619.933000px;} +.y5a4{bottom:620.255000px;} .ydd{bottom:620.297000px;} .y204{bottom:620.340000px;} .y4{bottom:620.383000px;} -.y1c2{bottom:620.444000px;} -.y63d{bottom:621.246000px;} -.y807{bottom:621.385000px;} -.y3a2{bottom:622.642000px;} -.y2b5{bottom:622.823000px;} -.y669{bottom:623.019000px;} -.y738{bottom:623.476000px;} -.y83a{bottom:623.509000px;} -.y2d2{bottom:625.163000px;} -.y5e1{bottom:625.231000px;} -.y627{bottom:625.921000px;} -.y8cb{bottom:625.967000px;} -.y4ce{bottom:626.534000px;} +.y632{bottom:621.246000px;} +.y7fc{bottom:621.385000px;} +.y39f{bottom:622.642000px;} +.y2b2{bottom:622.823000px;} +.y65e{bottom:623.019000px;} +.y72d{bottom:623.476000px;} +.y82f{bottom:623.509000px;} +.y2cf{bottom:625.163000px;} +.y5da{bottom:625.231000px;} +.y61c{bottom:625.921000px;} +.y8c0{bottom:625.967000px;} +.y4c7{bottom:626.534000px;} .y21d{bottom:626.787000px;} -.y40a{bottom:627.696000px;} +.y404{bottom:627.696000px;} .y1db{bottom:627.901000px;} -.y60d{bottom:628.206000px;} .y13f{bottom:628.290000px;} .y7c{bottom:628.650000px;} -.y54d{bottom:628.836000px;} +.y546{bottom:628.836000px;} .y121{bottom:628.846000px;} -.y912{bottom:628.859000px;} -.y799{bottom:628.917000px;} +.y907{bottom:628.859000px;} +.y78e{bottom:628.917000px;} .y265{bottom:629.109000px;} .y1f7{bottom:629.457000px;} -.y721{bottom:629.563000px;} -.y3ee{bottom:629.775000px;} -.y3ef{bottom:629.776000px;} -.y581{bottom:629.910000px;} -.y74c{bottom:630.199000px;} -.y4b6{bottom:630.275000px;} +.y716{bottom:629.563000px;} +.y3eb{bottom:629.860000px;} +.y57a{bottom:629.910000px;} +.y741{bottom:630.199000px;} +.y4af{bottom:630.275000px;} .y100{bottom:630.748000px;} -.y7c7{bottom:630.807000px;} -.y69a{bottom:631.029000px;} +.y7bc{bottom:630.807000px;} +.y68f{bottom:631.029000px;} +.y389{bottom:631.320000px;} .y6a{bottom:631.511000px;} .y24c{bottom:631.981000px;} -.y38b{bottom:632.012000px;} -.y6cd{bottom:632.940000px;} -.y425{bottom:633.375000px;} -.y51e{bottom:633.447000px;} -.y471{bottom:634.219000px;} -.y563{bottom:634.402000px;} -.y8ec{bottom:634.954000px;} -.y684{bottom:635.233000px;} -.y3b7{bottom:635.386000px;} -.y81e{bottom:636.071000px;} -.y77f{bottom:636.438000px;} -.y297{bottom:636.500000px;} -.y3d2{bottom:637.467000px;} -.y2b4{bottom:639.082000px;} -.y768{bottom:639.607000px;} +.y6c2{bottom:632.940000px;} +.y41f{bottom:633.375000px;} +.y517{bottom:633.447000px;} +.y46a{bottom:634.219000px;} +.y55c{bottom:634.402000px;} +.y8e1{bottom:634.954000px;} +.y679{bottom:635.233000px;} +.y3b4{bottom:635.386000px;} +.y813{bottom:636.071000px;} +.y774{bottom:636.497000px;} +.y3cf{bottom:637.467000px;} +.y297{bottom:639.000000px;} +.y2b1{bottom:639.082000px;} +.y75d{bottom:639.607000px;} .y15c{bottom:639.945000px;} -.y593{bottom:640.735000px;} -.y8ca{bottom:642.226000px;} +.y58c{bottom:640.735000px;} +.y8bf{bottom:642.226000px;} .y49{bottom:642.655000px;} .y190{bottom:643.046000px;} -.y458{bottom:643.381000px;} +.y452{bottom:643.381000px;} .y282{bottom:643.413000px;} -.y43e{bottom:644.024000px;} -.y60c{bottom:644.465000px;} -.y299{bottom:644.536000px;} -.y34e{bottom:644.696000px;} -.y6f4{bottom:644.819000px;} +.y438{bottom:644.024000px;} +.y34c{bottom:644.696000px;} +.y6e9{bottom:644.819000px;} .y120{bottom:645.105000px;} -.y911{bottom:645.118000px;} -.y798{bottom:645.176000px;} +.y906{bottom:645.118000px;} +.y78d{bottom:645.176000px;} +.y373{bottom:645.333000px;} .y264{bottom:645.368000px;} -.y375{bottom:645.794000px;} -.y720{bottom:645.822000px;} -.y3ed{bottom:646.034000px;} -.y580{bottom:646.169000px;} +.y715{bottom:645.822000px;} +.y3ea{bottom:646.119000px;} +.y579{bottom:646.169000px;} .yc1{bottom:646.458000px;} -.y4b5{bottom:646.534000px;} +.y4ae{bottom:646.534000px;} .yff{bottom:647.007000px;} -.y699{bottom:647.288000px;} -.y32e{bottom:647.477000px;} -.y1c1{bottom:647.635000px;} +.y68e{bottom:647.288000px;} +.y1c1{bottom:647.295000px;} +.y32b{bottom:647.477000px;} .y69{bottom:648.122000px;} -.y7df{bottom:648.791000px;} -.y5c6{bottom:648.834000px;} -.y424{bottom:649.634000px;} -.y51d{bottom:649.706000px;} -.y562{bottom:650.661000px;} -.y2fa{bottom:650.683000px;} -.y8eb{bottom:651.222000px;} -.y7b1{bottom:651.552000px;} -.y6e0{bottom:651.664000px;} -.y4e4{bottom:651.971000px;} -.y17a{bottom:652.170000px;} -.y81d{bottom:652.330000px;} -.y77e{bottom:652.697000px;} -.y409{bottom:652.897000px;} -.y3d1{bottom:653.726000px;} -.y63c{bottom:653.764000px;} -.y806{bottom:654.325000px;} +.y7d4{bottom:648.791000px;} +.y5bf{bottom:648.834000px;} +.y41e{bottom:649.634000px;} +.y516{bottom:649.706000px;} +.y55b{bottom:650.661000px;} +.y2f7{bottom:650.683000px;} +.y8e0{bottom:651.222000px;} +.y7a6{bottom:651.552000px;} +.y6d5{bottom:651.664000px;} +.y4dd{bottom:651.971000px;} +.y17a{bottom:652.019000px;} +.y812{bottom:652.330000px;} +.y773{bottom:652.756000px;} +.y403{bottom:652.897000px;} +.y3ce{bottom:653.726000px;} +.y631{bottom:653.764000px;} +.y7fb{bottom:654.325000px;} .y1da{bottom:654.974000px;} -.y3a1{bottom:655.160000px;} -.y737{bottom:655.434000px;} +.y39e{bottom:655.160000px;} +.y72c{bottom:655.434000px;} .y7b{bottom:655.818000px;} -.y767{bottom:655.866000px;} +.y75c{bottom:655.866000px;} .y15b{bottom:656.204000px;} -.y592{bottom:656.994000px;} -.y626{bottom:658.439000px;} -.y8c9{bottom:658.485000px;} +.y58b{bottom:656.994000px;} +.y61b{bottom:658.439000px;} +.y8be{bottom:658.485000px;} .y13e{bottom:658.991000px;} .y48{bottom:659.266000px;} .y21c{bottom:659.305000px;} .ya0{bottom:659.353000px;} -.y2d1{bottom:659.863000px;} -.y43d{bottom:660.283000px;} -.y6f3{bottom:661.078000px;} +.y2ce{bottom:659.863000px;} +.y437{bottom:660.283000px;} +.y6e8{bottom:661.078000px;} .y11f{bottom:661.364000px;} -.y890{bottom:661.377000px;} -.y71f{bottom:662.081000px;} -.y3ec{bottom:662.293000px;} -.y57f{bottom:662.428000px;} +.y885{bottom:661.377000px;} +.y714{bottom:662.081000px;} +.y3e9{bottom:662.378000px;} +.y578{bottom:662.428000px;} .yc0{bottom:662.717000px;} -.y4b4{bottom:662.793000px;} -.y2b3{bottom:663.258000px;} +.y4ad{bottom:662.793000px;} +.y2b0{bottom:663.258000px;} .yfe{bottom:663.266000px;} -.y839{bottom:663.623000px;} -.y5e0{bottom:663.780000px;} -.y1c0{bottom:663.894000px;} -.y38a{bottom:664.530000px;} +.y1c0{bottom:663.554000px;} +.y82e{bottom:663.623000px;} +.y5d9{bottom:663.780000px;} +.y388{bottom:663.838000px;} .y68{bottom:664.733000px;} -.y7de{bottom:665.050000px;} -.y6cc{bottom:665.458000px;} -.y423{bottom:665.893000px;} +.y7d3{bottom:665.050000px;} +.y6c1{bottom:665.458000px;} +.y41d{bottom:665.893000px;} .y1f6{bottom:665.936000px;} -.y470{bottom:666.736000px;} -.y561{bottom:666.919000px;} -.y8ea{bottom:667.489000px;} -.y683{bottom:667.751000px;} -.y7b0{bottom:667.811000px;} -.y6df{bottom:667.923000px;} -.y457{bottom:668.276000px;} -.y179{bottom:668.429000px;} -.y81c{bottom:668.589000px;} -.y77d{bottom:668.956000px;} -.y408{bottom:669.156000px;} -.y3b6{bottom:669.464000px;} -.y805{bottom:670.584000px;} -.y3a0{bottom:671.419000px;} -.y736{bottom:671.693000px;} +.y469{bottom:666.736000px;} +.y55a{bottom:666.919000px;} +.y8df{bottom:667.489000px;} +.y678{bottom:667.751000px;} +.y7a5{bottom:667.811000px;} +.y6d4{bottom:667.923000px;} +.y451{bottom:668.276000px;} +.y179{bottom:668.278000px;} +.y811{bottom:668.589000px;} +.y772{bottom:669.015000px;} +.y402{bottom:669.156000px;} +.y3b3{bottom:669.464000px;} +.y7fa{bottom:670.584000px;} +.y39d{bottom:671.419000px;} +.y72b{bottom:671.693000px;} .y7a{bottom:672.077000px;} -.y766{bottom:672.125000px;} +.y75b{bottom:672.125000px;} .y263{bottom:672.441000px;} .y15a{bottom:672.463000px;} -.y4cd{bottom:672.561000px;} -.y797{bottom:672.676000px;} -.y48a{bottom:673.253000px;} -.y625{bottom:674.698000px;} -.y8c8{bottom:674.744000px;} +.y4c6{bottom:672.561000px;} +.y78c{bottom:672.676000px;} +.y483{bottom:673.253000px;} +.y61a{bottom:674.698000px;} +.y8bd{bottom:674.744000px;} .y236{bottom:675.564000px;} .y9f{bottom:675.612000px;} .y47{bottom:675.877000px;} -.y298{bottom:677.054000px;} -.y34d{bottom:677.214000px;} +.y34b{bottom:677.214000px;} .y11e{bottom:677.623000px;} -.y88f{bottom:677.636000px;} -.y3d4{bottom:678.255000px;} +.y884{bottom:677.636000px;} +.y3d1{bottom:678.255000px;} .y7d{bottom:678.332000px;} -.y667{bottom:678.612000px;} -.y57e{bottom:678.687000px;} +.y65c{bottom:678.612000px;} +.y577{bottom:678.687000px;} .ybf{bottom:678.976000px;} -.y5f8{bottom:678.988000px;} -.y4b3{bottom:679.052000px;} +.y5f1{bottom:678.988000px;} +.y4ac{bottom:679.052000px;} .y21{bottom:679.081000px;} .y3{bottom:679.230000px;} -.y2b2{bottom:679.517000px;} +.y2af{bottom:679.517000px;} .yfd{bottom:679.525000px;} -.y1bf{bottom:680.153000px;} -.y7dd{bottom:681.309000px;} +.y1bf{bottom:679.813000px;} +.y7d2{bottom:681.309000px;} .y13d{bottom:681.342000px;} -.y5c5{bottom:681.352000px;} -.y3d0{bottom:681.940000px;} -.y374{bottom:682.276000px;} -.y46f{bottom:682.995000px;} -.y2f9{bottom:683.201000px;} -.y8e9{bottom:683.757000px;} -.y682{bottom:684.010000px;} +.y5be{bottom:681.352000px;} +.y3cd{bottom:681.940000px;} +.y372{bottom:682.046000px;} +.y468{bottom:682.995000px;} +.y2f6{bottom:683.201000px;} +.y8de{bottom:683.757000px;} +.y677{bottom:684.010000px;} .y281{bottom:684.070000px;} -.y178{bottom:684.688000px;} -.y3b5{bottom:685.723000px;} -.y6f2{bottom:686.085000px;} +.y178{bottom:684.537000px;} +.y3b2{bottom:685.723000px;} +.y6e7{bottom:686.085000px;} .y159{bottom:688.722000px;} -.y796{bottom:688.935000px;} -.y489{bottom:689.512000px;} -.y71d{bottom:689.861000px;} -.y71e{bottom:689.862000px;} -.y624{bottom:690.957000px;} -.y2d0{bottom:692.381000px;} +.y78b{bottom:688.935000px;} +.y482{bottom:689.512000px;} +.y712{bottom:689.861000px;} +.y713{bottom:689.862000px;} +.y619{bottom:690.957000px;} +.y2cd{bottom:692.381000px;} .y1d9{bottom:692.483000px;} .y46{bottom:692.488000px;} .y9e{bottom:692.883000px;} -.y34c{bottom:693.473000px;} +.y34a{bottom:693.473000px;} .y11d{bottom:693.882000px;} -.y88e{bottom:693.895000px;} -.y407{bottom:694.356000px;} -.y77c{bottom:694.539000px;} +.y883{bottom:693.895000px;} +.y401{bottom:694.356000px;} +.y771{bottom:694.569000px;} .ybe{bottom:695.235000px;} .y21b{bottom:695.784000px;} -.y5df{bottom:696.298000px;} -.y389{bottom:697.048000px;} -.y7dc{bottom:697.568000px;} +.y5d8{bottom:696.298000px;} +.y387{bottom:696.356000px;} +.y7d1{bottom:697.568000px;} .y13c{bottom:697.601000px;} -.y6cb{bottom:697.976000px;} -.y3cf{bottom:698.199000px;} -.y422{bottom:698.411000px;} +.y6c0{bottom:697.976000px;} +.y3cc{bottom:698.199000px;} +.y41c{bottom:698.411000px;} .y1f5{bottom:698.454000px;} .y79{bottom:699.245000px;} -.y560{bottom:699.437000px;} -.y8e8{bottom:700.024000px;} +.y559{bottom:699.437000px;} +.y8dd{bottom:700.024000px;} .y280{bottom:700.329000px;} -.y8c7{bottom:700.579000px;} -.y6de{bottom:701.421000px;} -.y456{bottom:701.519000px;} -.y6f1{bottom:702.344000px;} -.y39f{bottom:702.638000px;} -.y5f6{bottom:704.000000px;} +.y8bc{bottom:700.579000px;} +.y6d3{bottom:701.421000px;} +.y450{bottom:701.519000px;} +.y6e6{bottom:702.344000px;} +.y39c{bottom:702.638000px;} +.y5ef{bottom:704.000000px;} .y24b{bottom:704.696000px;} .y158{bottom:704.981000px;} -.y4cc{bottom:705.079000px;} -.y71c{bottom:706.120000px;} -.y57d{bottom:706.294000px;} -.y623{bottom:707.216000px;} +.y4c5{bottom:705.079000px;} +.y711{bottom:706.120000px;} +.y576{bottom:706.294000px;} +.y618{bottom:707.216000px;} .y1d8{bottom:708.742000px;} .y45{bottom:709.099000px;} .y9d{bottom:709.142000px;} -.y34b{bottom:709.732000px;} +.y349{bottom:709.732000px;} .y262{bottom:710.154000px;} -.y4b2{bottom:710.263000px;} -.y77b{bottom:710.798000px;} -.y5c4{bottom:710.871000px;} -.y46e{bottom:711.355000px;} -.y2f8{bottom:711.449000px;} +.y4ab{bottom:710.263000px;} +.y770{bottom:710.828000px;} +.y5bd{bottom:710.871000px;} +.y467{bottom:711.355000px;} +.y2f5{bottom:711.449000px;} .ybd{bottom:711.494000px;} .yfc{bottom:712.043000px;} -.y5de{bottom:712.557000px;} +.y5d7{bottom:712.557000px;} .y13b{bottom:713.860000px;} -.y3ce{bottom:714.458000px;} -.y421{bottom:714.670000px;} +.y3cb{bottom:714.458000px;} +.y371{bottom:714.564000px;} +.y41b{bottom:714.670000px;} .y1f4{bottom:714.713000px;} -.y373{bottom:714.794000px;} -.y1be{bottom:715.694000px;} -.y55f{bottom:715.696000px;} -.y795{bottom:715.803000px;} +.y1be{bottom:715.524000px;} +.y558{bottom:715.696000px;} +.y78a{bottom:715.803000px;} .y27f{bottom:716.588000px;} -.y8c6{bottom:716.838000px;} -.y681{bottom:717.079000px;} -.y488{bottom:717.500000px;} -.y2cf{bottom:718.603000px;} +.y8bb{bottom:716.838000px;} +.y676{bottom:717.079000px;} +.y481{bottom:717.500000px;} +.y2cc{bottom:718.603000px;} .y11c{bottom:720.955000px;} -.y406{bottom:721.430000px;} +.y400{bottom:721.430000px;} .y9c{bottom:725.401000px;} .y44{bottom:725.709000px;} -.y34a{bottom:725.991000px;} -.y8e7{bottom:726.396000px;} +.y348{bottom:725.991000px;} +.y8dc{bottom:726.396000px;} .y78{bottom:726.413000px;} -.y4b1{bottom:726.522000px;} -.y5c3{bottom:727.130000px;} -.y46d{bottom:727.614000px;} -.y2f7{bottom:727.708000px;} +.y4aa{bottom:726.522000px;} +.y5bc{bottom:727.130000px;} +.y466{bottom:727.614000px;} +.y2f4{bottom:727.708000px;} .ybc{bottom:727.753000px;} .yfb{bottom:728.302000px;} -.y388{bottom:729.566000px;} -.y6ca{bottom:730.494000px;} -.y3cd{bottom:730.717000px;} +.y386{bottom:728.874000px;} +.y6bf{bottom:730.494000px;} +.y3ca{bottom:730.717000px;} .y27e{bottom:732.847000px;} -.y680{bottom:733.338000px;} -.y455{bottom:734.037000px;} -.y2ce{bottom:734.862000px;} +.y675{bottom:733.338000px;} +.y44f{bottom:734.037000px;} +.y2cb{bottom:734.862000px;} .y1d7{bottom:742.250000px;} .y43{bottom:742.320000px;} -.y8e6{bottom:742.664000px;} +.y8db{bottom:742.664000px;} .y77{bottom:742.672000px;} .yfa{bottom:744.561000px;} .y27d{bottom:754.583000px;} .ybb{bottom:754.827000px;} -.y2cd{bottom:758.174000px;} +.y2ca{bottom:758.174000px;} .y1d6{bottom:758.509000px;} .y42{bottom:758.931000px;} .y11b{bottom:762.890000px;} @@ -2556,12 +2545,12 @@ .hd{height:16.163430px;} .h1e{height:21.200466px;} .hb{height:21.551150px;} -.h2d{height:27.141841px;} -.h32{height:30.196389px;} +.h34{height:27.141841px;} +.h31{height:30.196389px;} .hc{height:30.283662px;} .he{height:30.401700px;} .h7{height:32.727300px;} -.h40{height:33.474560px;} +.h3f{height:33.474560px;} .h5{height:35.965939px;} .h6{height:36.534121px;} .h4{height:36.988667px;} @@ -2570,80 +2559,79 @@ .h3{height:40.535600px;} .h2{height:40.972747px;} .h8{height:47.297628px;} -.h37{height:52.500000px;} -.h45{height:55.500000px;} +.h36{height:52.500000px;} +.h44{height:55.500000px;} .h1{height:68.121680px;} .h9{height:85.000000px;} -.h23{height:123.000000px;} -.h5c{height:162.500000px;} -.h30{height:202.000000px;} -.h38{height:276.500000px;} -.h4b{height:280.000000px;} -.h46{height:287.500000px;} -.h5b{height:295.000000px;} +.h23{height:120.500000px;} +.h5b{height:162.500000px;} +.h2f{height:202.000000px;} +.h37{height:276.500000px;} +.h4a{height:280.000000px;} +.h45{height:287.500000px;} +.h5a{height:295.000000px;} .h14{height:299.500000px;} .h21{height:344.500000px;} .h10{height:364.000000px;} .h19{height:384.500000px;} -.h31{height:390.500000px;} +.h30{height:390.500000px;} .h1c{height:398.000000px;} -.h33{height:409.500000px;} +.h32{height:409.000000px;} .h1d{height:420.500000px;} -.h3e{height:442.000000px;} +.h3d{height:442.000000px;} .h24{height:456.500000px;} -.h4e{height:457.000000px;} -.h58{height:460.500000px;} +.h4d{height:457.000000px;} +.h57{height:460.500000px;} .h18{height:467.000000px;} -.h54{height:470.000000px;} -.h42{height:479.500000px;} -.h28{height:482.000000px;} -.h2f{height:489.000000px;} +.h53{height:470.000000px;} +.h28{height:477.000000px;} +.h41{height:479.500000px;} +.h2e{height:489.000000px;} .h16{height:495.000000px;} .h29{height:523.000000px;} -.h56{height:532.500000px;} +.h55{height:532.500000px;} .h25{height:541.000000px;} -.h3d{height:542.500000px;} -.h55{height:546.500000px;} +.h3c{height:542.500000px;} +.h54{height:546.500000px;} .h22{height:547.000000px;} .hf{height:560.000000px;} -.h50{height:562.500000px;} +.h4f{height:562.500000px;} .h20{height:575.500000px;} -.h17{height:584.500000px;} -.h5a{height:585.000000px;} -.h49{height:586.000000px;} -.h4c{height:595.000000px;} +.h17{height:584.000000px;} +.h59{height:585.000000px;} +.h48{height:586.000000px;} +.h4b{height:595.000000px;} .h26{height:597.500000px;} -.h3c{height:600.000000px;} -.h48{height:606.000000px;} -.h3b{height:610.000000px;} -.h3f{height:612.500000px;} -.h36{height:615.500000px;} -.h2e{height:618.000000px;} -.h3a{height:622.000000px;} -.h43{height:624.000000px;} -.h44{height:625.000000px;} -.h47{height:626.500000px;} -.h57{height:630.000000px;} -.h4d{height:631.000000px;} +.h3b{height:600.000000px;} +.h47{height:606.000000px;} +.h3a{height:610.000000px;} +.h3e{height:612.500000px;} +.h35{height:615.500000px;} +.h2d{height:618.000000px;} +.h39{height:622.000000px;} +.h42{height:624.000000px;} +.h43{height:625.000000px;} +.h46{height:626.000000px;} +.h56{height:630.000000px;} +.h4c{height:631.000000px;} .h27{height:631.500000px;} -.h39{height:633.500000px;} +.h38{height:633.500000px;} .h1f{height:640.500000px;} -.h4a{height:647.500000px;} +.h49{height:647.500000px;} .h15{height:649.000000px;} -.h53{height:651.000000px;} -.h52{height:654.000000px;} +.h52{height:651.000000px;} +.h51{height:654.000000px;} .h1b{height:656.500000px;} .h2b{height:657.500000px;} .h1a{height:663.500000px;} -.h59{height:664.000000px;} +.h58{height:664.000000px;} .h2a{height:666.500000px;} -.h35{height:677.000000px;} -.h2c{height:677.500000px;} -.h4f{height:678.500000px;} +.h2c{height:677.000000px;} +.h4e{height:678.500000px;} .h11{height:687.500000px;} -.h51{height:692.500000px;} -.h34{height:698.000000px;} -.h41{height:703.000000px;} +.h50{height:692.500000px;} +.h33{height:698.000000px;} +.h40{height:703.000000px;} .h0{height:841.890000px;} .w2{width:180.500000px;} .w3{width:406.000000px;} @@ -2652,9 +2640,9 @@ .x30{left:66.545000px;} .x5{left:72.000000px;} .x11{left:75.387000px;} -.x72{left:78.228000px;} +.x71{left:78.228000px;} .x2b{left:81.365000px;} -.x60{left:82.909000px;} +.x68{left:82.909000px;} .x12{left:84.437000px;} .x26{left:86.545000px;} .xa{left:88.364000px;} @@ -2664,48 +2652,48 @@ .x2c{left:103.183000px;} .xd{left:107.758000px;} .x2a{left:109.751000px;} -.x7c{left:111.851000px;} +.x7d{left:111.851000px;} .xb{left:113.455000px;} -.x6b{left:118.727000px;} +.x6a{left:118.727000px;} .x24{left:121.205000px;} .x32{left:124.075000px;} .x31{left:126.933000px;} .x2{left:130.138000px;} -.x66{left:132.660000px;} +.x64{left:132.660000px;} .x38{left:134.798000px;} .x3e{left:138.149000px;} .x74{left:140.182000px;} .x27{left:141.727000px;} -.x59{left:143.728000px;} +.x5d{left:143.728000px;} .x14{left:144.738000px;} .x28{left:149.842000px;} .x21{left:152.208000px;} -.x62{left:155.569000px;} -.x6e{left:161.296000px;} +.x60{left:155.569000px;} +.x6d{left:161.296000px;} .x73{left:163.331000px;} .x39{left:164.495000px;} .x25{left:167.023000px;} .x20{left:169.275000px;} .x34{left:170.546000px;} .x3a{left:172.863000px;} -.x77{left:176.945000px;} -.x61{left:179.474000px;} +.x76{left:176.945000px;} +.x5f{left:179.474000px;} .x33{left:180.955000px;} -.x63{left:184.205000px;} +.x61{left:184.205000px;} .xc{left:189.937000px;} -.x67{left:194.325000px;} +.x65{left:194.325000px;} .x3d{left:195.479000px;} .x43{left:199.727000px;} -.x64{left:201.387000px;} -.x6a{left:204.656000px;} +.x62{left:201.387000px;} +.x69{left:204.656000px;} .x1{left:208.029000px;} .x3c{left:210.046000px;} .x13{left:213.551000px;} .x0{left:215.119000px;} -.x5b{left:218.569000px;} +.x7c{left:218.569000px;} .x45{left:220.963000px;} .x57{left:224.666000px;} -.x71{left:226.206000px;} +.x70{left:226.206000px;} .x56{left:227.393000px;} .x17{left:228.684000px;} .x46{left:230.643000px;} @@ -2714,12 +2702,12 @@ .x18{left:237.002000px;} .x4b{left:238.825000px;} .x44{left:241.732000px;} -.x5a{left:245.517000px;} -.x5c{left:247.205000px;} -.x6d{left:250.182000px;} +.x5e{left:245.517000px;} +.x77{left:247.349000px;} +.x6c{left:250.182000px;} .x54{left:251.577000px;} .x3b{left:254.433000px;} -.x5d{left:258.660000px;} +.x72{left:259.514000px;} .x55{left:261.258000px;} .x3{left:266.644000px;} .x4c{left:269.128000px;} @@ -2733,7 +2721,7 @@ .x2f{left:292.183000px;} .xe{left:294.911000px;} .x8{left:296.123000px;} -.x7d{left:302.619000px;} +.x7e{left:302.619000px;} .x1a{left:310.455000px;} .x1e{left:312.000000px;} .x2d{left:313.242000px;} @@ -2744,32 +2732,33 @@ .x49{left:329.038000px;} .x22{left:336.747000px;} .x3f{left:340.263000px;} -.x7e{left:342.470000px;} +.x7f{left:342.470000px;} .x23{left:348.308000px;} .x40{left:352.495000px;} .x4f{left:356.008000px;} +.x59{left:359.273000px;} .x4a{left:364.190000px;} .x58{left:367.073000px;} -.x6f{left:375.999000px;} -.x70{left:380.732000px;} +.x6e{left:375.999000px;} +.x6f{left:380.732000px;} .x41{left:383.035000px;} +.x5a{left:387.909000px;} .x42{left:395.267000px;} -.x5e{left:401.842000px;} -.x68{left:402.909000px;} +.x66{left:402.909000px;} .x15{left:406.734000px;} -.x69{left:410.520000px;} +.x67{left:410.520000px;} .x16{left:414.185000px;} .x1b{left:418.929000px;} -.x65{left:421.091000px;} +.x63{left:421.091000px;} .x78{left:423.345000px;} -.x5f{left:436.205000px;} +.x5b{left:446.091000px;} .x1c{left:456.792000px;} .x7{left:463.276000px;} .x75{left:465.091000px;} -.x76{left:469.823000px;} +.x5c{left:469.000000px;} .x6{left:471.457000px;} .xf{left:474.401000px;} -.x6c{left:475.731000px;} +.x6b{left:475.731000px;} .x10{left:479.133000px;} .x52{left:481.568000px;} .x53{left:490.188000px;} @@ -2951,2323 +2940,2312 @@ .y119{bottom:107.020000pt;} .ydc{bottom:110.000000pt;} .y27b{bottom:112.162667pt;} -.y7af{bottom:112.505333pt;} +.y7a4{bottom:112.505333pt;} .yba{bottom:113.534667pt;} .y9a{bottom:117.678667pt;} .y3f{bottom:117.917333pt;} .y67{bottom:118.148000pt;} -.y4b0{bottom:118.553333pt;} +.y4a9{bottom:118.553333pt;} .yb9{bottom:118.613333pt;} -.y655{bottom:120.128000pt;} +.y64a{bottom:120.128000pt;} .yf8{bottom:122.029333pt;} .y9b{bottom:127.333333pt;} .y118{bottom:128.698667pt;} -.y88d{bottom:129.022667pt;} +.y882{bottom:129.022667pt;} .ydb{bottom:131.069333pt;} -.y81b{bottom:131.333333pt;} -.y7f1{bottom:132.000000pt;} +.y810{bottom:131.333333pt;} +.y7e6{bottom:132.000000pt;} .y139{bottom:132.097333pt;} .y27a{bottom:133.841333pt;} -.y2f6{bottom:134.000000pt;} -.y88c{bottom:134.101333pt;} -.y7ae{bottom:134.184000pt;} -.y29d{bottom:134.666667pt;} +.y2f3{bottom:134.000000pt;} +.y881{bottom:134.101333pt;} +.y7a3{bottom:134.184000pt;} +.y29a{bottom:134.666667pt;} .y123{bottom:136.148000pt;} -.y5dd{bottom:136.666667pt;} -.y349{bottom:138.000000pt;} -.y67f{bottom:138.666667pt;} +.y5d6{bottom:136.666667pt;} +.y347{bottom:138.000000pt;} +.y674{bottom:138.666667pt;} .y99{bottom:139.357333pt;} -.y5c2{bottom:139.641333pt;} -.y5aa{bottom:139.654667pt;} +.y5bb{bottom:139.641333pt;} +.y5a3{bottom:139.654667pt;} .y3e{bottom:139.833333pt;} -.y4af{bottom:140.232000pt;} +.y4a8{bottom:140.232000pt;} .y66{bottom:140.296000pt;} -.y654{bottom:141.806667pt;} -.y6c9{bottom:142.156000pt;} -.y838{bottom:142.546667pt;} -.y804{bottom:142.692000pt;} +.y649{bottom:141.806667pt;} +.y6be{bottom:142.156000pt;} +.y82d{bottom:142.546667pt;} +.y7f9{bottom:142.692000pt;} .yf7{bottom:143.708000pt;} .yb8{bottom:144.034667pt;} -.y88b{bottom:144.512000pt;} +.y880{bottom:144.512000pt;} .y11a{bottom:144.666667pt;} -.y30b{bottom:144.796000pt;} -.y81a{bottom:145.186667pt;} -.y2b1{bottom:145.906667pt;} +.y308{bottom:144.796000pt;} +.y80f{bottom:145.186667pt;} +.y2ae{bottom:145.906667pt;} .y1bc{bottom:146.660000pt;} -.y4cb{bottom:146.666667pt;} -.y5dc{bottom:146.777333pt;} +.y4c4{bottom:146.666667pt;} +.y5d5{bottom:146.777333pt;} .y13a{bottom:147.333333pt;} -.y5f5{bottom:147.398667pt;} -.y487{bottom:148.076000pt;} +.y5ee{bottom:147.398667pt;} +.y480{bottom:148.076000pt;} .yda{bottom:148.602667pt;} -.y363{bottom:148.688000pt;} +.y361{bottom:148.688000pt;} .y296{bottom:149.218667pt;} -.y656{bottom:149.333333pt;} -.y88a{bottom:149.590667pt;} -.y697{bottom:149.866667pt;} +.y64b{bottom:149.333333pt;} +.y87f{bottom:149.590667pt;} +.y68c{bottom:149.866667pt;} .y117{bottom:150.377333pt;} -.y8be{bottom:151.069333pt;} +.y8b3{bottom:151.069333pt;} .y1d5{bottom:151.333333pt;} -.y67e{bottom:151.364000pt;} -.y177{bottom:153.333333pt;} +.y673{bottom:151.364000pt;} .yd9{bottom:153.681333pt;} -.y43c{bottom:154.494667pt;} -.y52a{bottom:154.666667pt;} -.y71b{bottom:154.969333pt;} -.y3eb{bottom:156.302667pt;} -.y39d{bottom:156.492000pt;} -.y4e3{bottom:157.370667pt;} +.y177{bottom:154.000000pt;} +.y523{bottom:154.666667pt;} +.y710{bottom:154.969333pt;} +.y436{bottom:154.974667pt;} +.y3e8{bottom:156.302667pt;} +.y4dc{bottom:157.370667pt;} +.y39a{bottom:157.414667pt;} .y156{bottom:158.613333pt;} .y235{bottom:158.666667pt;} -.y889{bottom:160.000000pt;} -.y666{bottom:160.200000pt;} -.y57c{bottom:160.741333pt;} +.y87e{bottom:160.000000pt;} +.y65b{bottom:160.200000pt;} +.y575{bottom:160.741333pt;} .y98{bottom:161.036000pt;} -.y5c1{bottom:161.320000pt;} -.y5a9{bottom:161.333333pt;} -.y77a{bottom:161.337333pt;} +.y5ba{bottom:161.320000pt;} +.y5a2{bottom:161.333333pt;} +.y76f{bottom:161.337333pt;} .y3d{bottom:161.750667pt;} -.y74b{bottom:161.941333pt;} -.y705{bottom:162.154667pt;} +.y740{bottom:161.941333pt;} +.y6fa{bottom:162.154667pt;} .y1f2{bottom:162.356000pt;} .y65{bottom:162.444000pt;} -.y6c8{bottom:163.834667pt;} -.y837{bottom:164.225333pt;} -.y18e{bottom:164.666667pt;} -.y888{bottom:165.078667pt;} +.y6bd{bottom:163.834667pt;} +.y82c{bottom:164.225333pt;} +.y18e{bottom:164.868000pt;} +.y87d{bottom:165.078667pt;} .yf6{bottom:165.386667pt;} -.y53c{bottom:165.460000pt;} +.y535{bottom:165.460000pt;} .yb7{bottom:165.713333pt;} -.y63b{bottom:165.786667pt;} -.y735{bottom:165.852000pt;} -.y30a{bottom:166.474667pt;} -.y819{bottom:168.193333pt;} +.y630{bottom:165.786667pt;} +.y72a{bottom:165.852000pt;} +.y307{bottom:166.474667pt;} +.y80e{bottom:168.193333pt;} .y1bb{bottom:168.338667pt;} -.y5db{bottom:168.456000pt;} +.y5d4{bottom:168.456000pt;} .y24a{bottom:168.821333pt;} -.y486{bottom:169.754667pt;} -.y7c6{bottom:169.869333pt;} +.y47f{bottom:169.754667pt;} +.y7bb{bottom:169.869333pt;} .y279{bottom:169.938667pt;} -.y794{bottom:170.000000pt;} -.y30c{bottom:170.666667pt;} -.y60a{bottom:171.068000pt;} -.y698{bottom:171.333333pt;} +.y789{bottom:170.000000pt;} +.y309{bottom:170.666667pt;} +.y603{bottom:171.068000pt;} +.y68d{bottom:171.333333pt;} .y21a{bottom:172.056000pt;} -.y8bd{bottom:172.748000pt;} +.y8b2{bottom:172.748000pt;} .y1a6{bottom:173.084000pt;} -.y49d{bottom:174.881333pt;} -.y3cc{bottom:175.454667pt;} -.y887{bottom:175.489333pt;} -.y43b{bottom:176.173333pt;} -.y71a{bottom:176.648000pt;} +.y496{bottom:174.881333pt;} +.y3c9{bottom:175.454667pt;} +.y87c{bottom:175.489333pt;} +.y70f{bottom:176.648000pt;} +.y435{bottom:176.653333pt;} .y76{bottom:177.301333pt;} -.y60b{bottom:177.333333pt;} -.y653{bottom:177.904000pt;} -.y39c{bottom:178.170667pt;} +.y648{bottom:177.904000pt;} +.y604{bottom:178.000000pt;} +.y399{bottom:179.093333pt;} .y155{bottom:180.292000pt;} -.y886{bottom:180.568000pt;} -.y7ad{bottom:181.029333pt;} +.y87b{bottom:180.568000pt;} +.y7a2{bottom:181.029333pt;} .y116{bottom:181.521333pt;} -.y31c{bottom:181.712000pt;} -.y49e{bottom:182.000000pt;} -.y6b3{bottom:182.340000pt;} +.y319{bottom:181.712000pt;} +.y497{bottom:182.000000pt;} +.y6a8{bottom:182.340000pt;} .y138{bottom:182.346667pt;} -.y57b{bottom:182.420000pt;} -.y372{bottom:182.465333pt;} -.y2cb{bottom:182.669333pt;} +.y574{bottom:182.420000pt;} +.y370{bottom:182.465333pt;} +.y2c8{bottom:182.669333pt;} .y234{bottom:182.694667pt;} .y176{bottom:182.714667pt;} -.y5c0{bottom:182.998667pt;} -.y779{bottom:183.016000pt;} -.y454{bottom:183.554667pt;} -.y74a{bottom:183.620000pt;} +.y5b9{bottom:182.998667pt;} +.y76e{bottom:183.016000pt;} +.y44e{bottom:183.554667pt;} +.y73f{bottom:183.620000pt;} .y3c{bottom:183.668000pt;} -.y836{bottom:185.904000pt;} -.y803{bottom:186.049333pt;} +.y82b{bottom:185.904000pt;} +.y7f8{bottom:186.049333pt;} .yf5{bottom:187.065333pt;} -.y63a{bottom:187.465333pt;} -.y622{bottom:188.116000pt;} -.y2b0{bottom:189.264000pt;} -.y260{bottom:189.692000pt;} +.y62f{bottom:187.465333pt;} +.y617{bottom:188.766667pt;} +.y2ad{bottom:189.264000pt;} .y1ba{bottom:190.017333pt;} +.y260{bottom:190.482667pt;} .y249{bottom:190.500000pt;} -.y5f4{bottom:190.756000pt;} -.y885{bottom:190.977333pt;} -.y362{bottom:192.045333pt;} +.y5ed{bottom:190.756000pt;} +.y87a{bottom:190.977333pt;} +.y360{bottom:192.045333pt;} .y1f{bottom:192.776000pt;} -.y696{bottom:193.224000pt;} -.y4ae{bottom:193.238667pt;} -.y50b{bottom:193.254667pt;} +.y68b{bottom:193.224000pt;} +.y4a7{bottom:193.238667pt;} +.y504{bottom:193.254667pt;} .y295{bottom:193.256000pt;} -.y6f0{bottom:193.513333pt;} -.y404{bottom:193.734667pt;} -.y8bc{bottom:194.426667pt;} -.y67d{bottom:194.721333pt;} +.y6e5{bottom:193.513333pt;} +.y329{bottom:193.734667pt;} +.y8b1{bottom:194.426667pt;} +.y672{bottom:194.721333pt;} .y1a5{bottom:194.762667pt;} -.y6c7{bottom:194.917333pt;} -.y53d{bottom:196.000000pt;} -.y719{bottom:198.326667pt;} +.y6bc{bottom:194.917333pt;} +.y536{bottom:196.000000pt;} +.y70e{bottom:198.326667pt;} .y64{bottom:199.449333pt;} .y97{bottom:199.460000pt;} -.y39b{bottom:199.849333pt;} -.y32c{bottom:200.573333pt;} -.y39e{bottom:202.666667pt;} +.y398{bottom:200.772000pt;} +.y39b{bottom:202.666667pt;} .y115{bottom:203.200000pt;} -.y665{bottom:203.557333pt;} +.y65a{bottom:203.557333pt;} .y137{bottom:204.025333pt;} -.y57a{bottom:204.098667pt;} -.y371{bottom:204.144000pt;} -.y2c9{bottom:204.348000pt;} +.y573{bottom:204.098667pt;} +.y36f{bottom:204.144000pt;} +.y2c6{bottom:204.348000pt;} .y175{bottom:204.393333pt;} -.y5be{bottom:204.676000pt;} -.y5bf{bottom:204.677333pt;} -.y84c{bottom:204.758667pt;} -.y309{bottom:205.092000pt;} -.y749{bottom:205.298667pt;} -.y5da{bottom:205.384000pt;} -.y704{bottom:205.512000pt;} +.y5b7{bottom:204.676000pt;} +.y5b8{bottom:204.677333pt;} +.y841{bottom:204.758667pt;} +.y306{bottom:205.092000pt;} +.y73e{bottom:205.298667pt;} +.y5d3{bottom:205.384000pt;} +.y6f9{bottom:205.512000pt;} .y3b{bottom:205.584000pt;} .y1f1{bottom:205.713333pt;} -.y793{bottom:205.770667pt;} -.y54c{bottom:206.738667pt;} -.y835{bottom:207.582667pt;} -.y18d{bottom:208.024000pt;} -.y2f3{bottom:208.385333pt;} -.y884{bottom:208.512000pt;} -.y53b{bottom:208.817333pt;} -.y639{bottom:209.144000pt;} -.y734{bottom:209.208000pt;} -.y387{bottom:209.453333pt;} -.y2ca{bottom:209.626667pt;} -.y5a8{bottom:209.972000pt;} +.y788{bottom:205.730667pt;} +.y545{bottom:206.738667pt;} +.y82a{bottom:207.582667pt;} +.y18d{bottom:208.225333pt;} +.y2f0{bottom:208.385333pt;} +.y879{bottom:208.512000pt;} +.y534{bottom:208.817333pt;} +.y62e{bottom:209.144000pt;} +.y729{bottom:209.208000pt;} +.y2c7{bottom:209.626667pt;} +.y385{bottom:209.761333pt;} +.y5a1{bottom:209.972000pt;} .y154{bottom:210.093333pt;} .y219{bottom:210.436000pt;} .y248{bottom:212.178667pt;} -.y43a{bottom:212.272000pt;} -.y485{bottom:213.112000pt;} -.y7c5{bottom:213.226667pt;} -.y883{bottom:213.590667pt;} -.y3b3{bottom:213.852000pt;} -.y3ea{bottom:214.369333pt;} +.y434{bottom:212.750667pt;} +.y47e{bottom:213.112000pt;} +.y7ba{bottom:213.226667pt;} +.y878{bottom:213.590667pt;} +.y3b0{bottom:213.852000pt;} +.y3e7{bottom:214.369333pt;} .y1e{bottom:214.454667pt;} -.y778{bottom:214.682667pt;} -.y50a{bottom:214.933333pt;} +.y76d{bottom:214.682667pt;} +.y503{bottom:214.933333pt;} .y294{bottom:214.934667pt;} -.y6ef{bottom:215.192000pt;} -.y5f7{bottom:215.333333pt;} -.y403{bottom:215.413333pt;} -.y6b2{bottom:215.548000pt;} -.y8bb{bottom:216.105333pt;} -.y2f5{bottom:216.180000pt;} -.y67c{bottom:216.400000pt;} +.y6e4{bottom:215.192000pt;} +.y5f0{bottom:215.333333pt;} +.y3fe{bottom:215.413333pt;} +.y6a7{bottom:215.548000pt;} +.y8b0{bottom:216.105333pt;} +.y2f2{bottom:216.180000pt;} +.y671{bottom:216.400000pt;} .y1a4{bottom:216.441333pt;} -.y2f4{bottom:218.362667pt;} -.y764{bottom:218.473333pt;} -.y718{bottom:220.018667pt;} +.y2f1{bottom:218.362667pt;} +.y759{bottom:218.473333pt;} +.y70d{bottom:220.018667pt;} .y278{bottom:220.222667pt;} -.y6dd{bottom:220.630667pt;} +.y6d2{bottom:220.630667pt;} .yb6{bottom:221.100000pt;} .y63{bottom:221.597333pt;} -.y802{bottom:221.609333pt;} -.y49c{bottom:221.650667pt;} -.y2cc{bottom:222.000000pt;} -.y4e2{bottom:222.405333pt;} +.y7f7{bottom:221.609333pt;} +.y495{bottom:221.650667pt;} +.y2c9{bottom:222.000000pt;} +.y4db{bottom:222.405333pt;} .yf4{bottom:223.162667pt;} -.y818{bottom:223.472000pt;} -.y882{bottom:224.000000pt;} +.y80d{bottom:223.472000pt;} +.y877{bottom:224.000000pt;} .y1b9{bottom:224.258667pt;} -.y7ac{bottom:224.386667pt;} -.y31b{bottom:225.069333pt;} -.y41f{bottom:225.457333pt;} -.y3cb{bottom:225.585333pt;} -.y579{bottom:225.777333pt;} -.y2c8{bottom:226.026667pt;} +.y7a1{bottom:224.386667pt;} +.y318{bottom:225.069333pt;} +.y419{bottom:225.457333pt;} +.y3c8{bottom:225.585333pt;} +.y572{bottom:225.777333pt;} +.y2c5{bottom:226.026667pt;} .y174{bottom:226.072000pt;} .y233{bottom:226.145333pt;} -.y609{bottom:226.629333pt;} +.y602{bottom:226.629333pt;} .y1f0{bottom:227.392000pt;} -.y792{bottom:227.449333pt;} +.y787{bottom:227.409333pt;} .y3a{bottom:227.501333pt;} -.y453{bottom:227.808000pt;} -.y652{bottom:227.944000pt;} -.y748{bottom:228.010667pt;} -.y2af{bottom:228.037333pt;} -.y2f2{bottom:228.202667pt;} -.y8e5{bottom:228.820000pt;} -.y881{bottom:229.078667pt;} -.y834{bottom:229.261333pt;} -.y733{bottom:230.886667pt;} -.y621{bottom:231.472000pt;} +.y44d{bottom:227.808000pt;} +.y647{bottom:227.944000pt;} +.y73d{bottom:228.010667pt;} +.y2ac{bottom:228.037333pt;} +.y2ef{bottom:228.202667pt;} +.y8da{bottom:228.820000pt;} +.y876{bottom:229.078667pt;} +.y829{bottom:229.261333pt;} +.y728{bottom:230.886667pt;} .y153{bottom:231.772000pt;} -.y5f3{bottom:231.976000pt;} -.y484{bottom:234.790667pt;} -.y7c4{bottom:234.905333pt;} -.y361{bottom:235.402667pt;} -.y695{bottom:235.958667pt;} -.y3e9{bottom:236.048000pt;} +.y5ec{bottom:231.976000pt;} +.y616{bottom:232.124000pt;} +.y47d{bottom:234.790667pt;} +.y7b9{bottom:234.905333pt;} +.y35f{bottom:235.402667pt;} +.y68a{bottom:235.958667pt;} +.y3e6{bottom:236.048000pt;} .y1d{bottom:236.133333pt;} .y293{bottom:236.613333pt;} -.y6c6{bottom:237.021333pt;} -.y46c{bottom:237.092000pt;} -.y6b1{bottom:237.226667pt;} -.y8ba{bottom:237.784000pt;} -.y866{bottom:238.000000pt;} +.y6bb{bottom:237.021333pt;} +.y328{bottom:237.092000pt;} +.y6a6{bottom:237.226667pt;} +.y8af{bottom:237.784000pt;} +.y85b{bottom:238.000000pt;} .y1a3{bottom:238.120000pt;} -.y703{bottom:238.854667pt;} +.y6f8{bottom:238.854667pt;} .y124{bottom:239.333333pt;} -.y25f{bottom:240.140000pt;} -.y763{bottom:240.152000pt;} -.y1d4{bottom:240.648000pt;} -.y308{bottom:241.250667pt;} +.y758{bottom:240.152000pt;} +.y1d4{bottom:240.876000pt;} +.y305{bottom:241.250667pt;} +.y25f{bottom:241.720000pt;} .y277{bottom:241.901333pt;} -.y801{bottom:243.288000pt;} +.y7f6{bottom:243.288000pt;} .y62{bottom:243.745333pt;} -.y32b{bottom:243.930667pt;} -.y4e1{bottom:244.084000pt;} +.y4da{bottom:244.084000pt;} .y114{bottom:244.118667pt;} -.y53a{bottom:245.296000pt;} +.y533{bottom:245.296000pt;} .y1b8{bottom:245.937333pt;} -.y7ab{bottom:246.065333pt;} -.y664{bottom:246.914667pt;} -.y3ca{bottom:247.264000pt;} -.y370{bottom:247.534667pt;} +.y7a0{bottom:246.065333pt;} +.y659{bottom:246.914667pt;} +.y3c7{bottom:247.264000pt;} +.y36e{bottom:247.534667pt;} .y173{bottom:247.750667pt;} .y1ef{bottom:249.070667pt;} .y39{bottom:249.417333pt;} -.y452{bottom:249.486667pt;} -.y650{bottom:249.622667pt;} -.y747{bottom:249.689333pt;} -.y2ae{bottom:249.716000pt;} -.y880{bottom:249.781333pt;} -.y402{bottom:249.888000pt;} -.y54b{bottom:250.096000pt;} -.y39a{bottom:250.134667pt;} -.y399{bottom:250.136000pt;} +.y44c{bottom:249.486667pt;} +.y645{bottom:249.622667pt;} +.y73c{bottom:249.689333pt;} +.y2ab{bottom:249.716000pt;} +.y3fd{bottom:249.776000pt;} +.y875{bottom:249.781333pt;} +.y544{bottom:250.096000pt;} .y136{bottom:250.212000pt;} -.y8e4{bottom:250.498667pt;} -.y833{bottom:250.940000pt;} +.y8d9{bottom:250.498667pt;} +.y828{bottom:250.940000pt;} .y247{bottom:251.357333pt;} -.y509{bottom:251.488000pt;} -.y2f1{bottom:252.280000pt;} -.y638{bottom:252.501333pt;} -.y5bd{bottom:252.614667pt;} -.y18c{bottom:253.024000pt;} -.y620{bottom:253.150667pt;} -.y5a7{bottom:253.329333pt;} -.y651{bottom:254.901333pt;} -.y483{bottom:256.469333pt;} +.y502{bottom:251.488000pt;} +.y18c{bottom:251.582667pt;} +.y397{bottom:251.980000pt;} +.y2ee{bottom:252.280000pt;} +.y62d{bottom:252.501333pt;} +.y5b6{bottom:252.614667pt;} +.y5a0{bottom:253.329333pt;} +.y615{bottom:253.802667pt;} +.y646{bottom:254.901333pt;} +.y47c{bottom:256.469333pt;} .y96{bottom:256.941333pt;} -.y3b2{bottom:257.209333pt;} -.y31a{bottom:257.649333pt;} -.y3e8{bottom:257.726667pt;} -.y386{bottom:258.097333pt;} -.y4ad{bottom:258.274667pt;} +.y3af{bottom:257.209333pt;} +.y317{bottom:257.649333pt;} +.y3e5{bottom:257.726667pt;} +.y4a6{bottom:258.274667pt;} .y292{bottom:258.292000pt;} -.y6c5{bottom:258.700000pt;} -.y51b{bottom:258.770667pt;} -.y6b0{bottom:258.905333pt;} -.y777{bottom:259.094667pt;} -.y405{bottom:259.333333pt;} -.y67b{bottom:259.386667pt;} +.y6ba{bottom:258.700000pt;} +.y384{bottom:258.712000pt;} +.y514{bottom:258.770667pt;} +.y6a5{bottom:258.905333pt;} +.y76c{bottom:259.094667pt;} +.y3ff{bottom:259.333333pt;} +.y670{bottom:259.386667pt;} .y1a2{bottom:259.798667pt;} .y218{bottom:260.062667pt;} -.y702{bottom:260.533333pt;} -.y762{bottom:261.830667pt;} -.y1d3{bottom:262.326667pt;} -.y439{bottom:262.788000pt;} +.y6f7{bottom:260.533333pt;} +.y757{bottom:261.830667pt;} +.y1d3{bottom:262.554667pt;} +.y433{bottom:263.342667pt;} .y276{bottom:263.580000pt;} -.y578{bottom:263.613333pt;} -.y905{bottom:263.982667pt;} +.y571{bottom:263.613333pt;} +.y8fa{bottom:263.982667pt;} .yb5{bottom:264.957333pt;} -.y4e0{bottom:265.762667pt;} +.y4d9{bottom:265.762667pt;} .y113{bottom:265.797333pt;} .y61{bottom:265.893333pt;} -.y817{bottom:266.829333pt;} -.y539{bottom:266.974667pt;} +.y80c{bottom:266.829333pt;} +.y532{bottom:266.974667pt;} .y1b6{bottom:267.614667pt;} .y1b7{bottom:267.616000pt;} -.y731{bottom:267.926667pt;} -.y732{bottom:267.928000pt;} -.y6dc{bottom:268.322667pt;} -.y663{bottom:268.593333pt;} -.y717{bottom:268.725333pt;} -.y791{bottom:268.932000pt;} -.y84b{bottom:269.318667pt;} -.y2c7{bottom:269.394667pt;} +.y726{bottom:267.926667pt;} +.y727{bottom:267.928000pt;} +.y6d1{bottom:268.322667pt;} +.y658{bottom:268.593333pt;} +.y70c{bottom:268.725333pt;} +.y786{bottom:268.886667pt;} +.y840{bottom:269.318667pt;} +.y2c4{bottom:269.394667pt;} .y172{bottom:269.429333pt;} -.y5d9{bottom:269.484000pt;} +.y5d2{bottom:269.484000pt;} .y232{bottom:269.502667pt;} -.y6ee{bottom:269.630667pt;} -.y608{bottom:269.985333pt;} -.y46b{bottom:270.000000pt;} -.y41e{bottom:270.078667pt;} -.y7db{bottom:270.576000pt;} -.y451{bottom:271.165333pt;} -.y8b9{bottom:271.174667pt;} -.y64f{bottom:271.301333pt;} +.y6e3{bottom:269.630667pt;} +.y601{bottom:269.985333pt;} +.y465{bottom:270.000000pt;} +.y418{bottom:270.078667pt;} +.y7d0{bottom:270.576000pt;} +.y44b{bottom:271.165333pt;} +.y8ae{bottom:271.174667pt;} +.y644{bottom:271.301333pt;} .y38{bottom:271.334667pt;} -.y2ac{bottom:271.394667pt;} -.y54a{bottom:271.774667pt;} +.y2a9{bottom:271.394667pt;} +.y543{bottom:271.774667pt;} .y135{bottom:271.890667pt;} -.y8e3{bottom:272.177333pt;} -.y832{bottom:272.618667pt;} +.y8d8{bottom:272.177333pt;} +.y827{bottom:272.618667pt;} .y152{bottom:272.706667pt;} .yf3{bottom:273.460000pt;} -.y2f0{bottom:273.958667pt;} -.y637{bottom:274.180000pt;} -.y61f{bottom:274.829333pt;} -.y5a6{bottom:275.008000pt;} -.y7c3{bottom:275.736000pt;} -.y2ad{bottom:276.673333pt;} +.y2ed{bottom:273.958667pt;} +.y62c{bottom:274.180000pt;} +.y59f{bottom:275.008000pt;} +.y614{bottom:275.481333pt;} +.y7b8{bottom:275.736000pt;} +.y2aa{bottom:276.673333pt;} .y95{bottom:278.620000pt;} -.y360{bottom:278.760000pt;} -.y3b1{bottom:278.888000pt;} -.y4ac{bottom:279.953333pt;} -.y6c4{bottom:280.378667pt;} -.y4ca{bottom:280.449333pt;} -.y6af{bottom:280.584000pt;} -.y3e7{bottom:280.704000pt;} -.y67a{bottom:281.065333pt;} +.y35e{bottom:278.760000pt;} +.y3ae{bottom:278.888000pt;} +.y4a5{bottom:279.953333pt;} +.y6b9{bottom:280.378667pt;} +.y4c3{bottom:280.449333pt;} +.y6a4{bottom:280.584000pt;} +.y3e4{bottom:280.704000pt;} +.y327{bottom:280.890667pt;} +.y66f{bottom:281.065333pt;} .y1a1{bottom:281.477333pt;} -.y7aa{bottom:281.494667pt;} -.y3b4{bottom:282.000000pt;} +.y79f{bottom:281.494667pt;} +.y3b1{bottom:282.000000pt;} .y1ee{bottom:282.218667pt;} -.y5f2{bottom:283.374667pt;} -.y25e{bottom:283.497333pt;} -.y761{bottom:283.509333pt;} -.y1d2{bottom:284.005333pt;} +.y5eb{bottom:283.374667pt;} +.y756{bottom:283.509333pt;} +.y1d2{bottom:284.233333pt;} +.y25e{bottom:285.077333pt;} .y275{bottom:285.258667pt;} -.y904{bottom:285.673333pt;} -.y87f{bottom:285.722667pt;} -.y591{bottom:285.917333pt;} -.y401{bottom:285.986667pt;} +.y8f9{bottom:285.673333pt;} +.y874{bottom:285.722667pt;} +.y3fc{bottom:285.874667pt;} +.y58a{bottom:285.917333pt;} .yb4{bottom:286.636000pt;} -.y49b{bottom:286.686667pt;} -.y32a{bottom:286.821333pt;} -.y4df{bottom:287.441333pt;} +.y494{bottom:286.686667pt;} +.y4d8{bottom:287.441333pt;} .y112{bottom:287.476000pt;} .y60{bottom:288.041333pt;} -.y538{bottom:288.653333pt;} +.y531{bottom:288.653333pt;} .y1b5{bottom:289.293333pt;} -.y730{bottom:289.605333pt;} -.y694{bottom:289.826667pt;} -.y800{bottom:289.980000pt;} -.y662{bottom:290.272000pt;} -.y790{bottom:290.610667pt;} -.y36f{bottom:290.892000pt;} -.y84a{bottom:290.997333pt;} -.y4f5{bottom:291.108000pt;} -.y607{bottom:291.664000pt;} -.y46a{bottom:291.678667pt;} -.y7da{bottom:292.254667pt;} -.y3c9{bottom:292.702667pt;} -.y450{bottom:292.844000pt;} -.y8b8{bottom:292.853333pt;} -.y64e{bottom:292.980000pt;} -.y2ab{bottom:293.073333pt;} -.y319{bottom:293.746667pt;} -.y577{bottom:294.696000pt;} -.y51a{bottom:294.736000pt;} -.y2ee{bottom:294.837333pt;} -.y385{bottom:295.210667pt;} -.y5bc{bottom:295.970667pt;} -.y18b{bottom:296.381333pt;} -.y61e{bottom:296.508000pt;} -.y5a5{bottom:296.686667pt;} +.y725{bottom:289.605333pt;} +.y689{bottom:289.826667pt;} +.y7f5{bottom:289.980000pt;} +.y657{bottom:290.272000pt;} +.y785{bottom:290.565333pt;} +.y36d{bottom:290.892000pt;} +.y83f{bottom:290.997333pt;} +.y4ee{bottom:291.108000pt;} +.y600{bottom:291.664000pt;} +.y464{bottom:291.678667pt;} +.y7cf{bottom:292.254667pt;} +.y3c6{bottom:292.702667pt;} +.y44a{bottom:292.844000pt;} +.y8ad{bottom:292.853333pt;} +.y643{bottom:292.980000pt;} +.y2a8{bottom:293.073333pt;} +.y316{bottom:293.746667pt;} +.y570{bottom:294.696000pt;} +.y513{bottom:294.736000pt;} +.y2eb{bottom:294.837333pt;} +.y18b{bottom:294.940000pt;} +.y5b5{bottom:295.970667pt;} +.y383{bottom:296.132000pt;} +.y59e{bottom:296.686667pt;} +.y613{bottom:297.160000pt;} .y27c{bottom:297.333333pt;} -.y7c2{bottom:297.414667pt;} +.y7b7{bottom:297.414667pt;} .yd7{bottom:297.512000pt;} -.y765{bottom:298.000000pt;} -.y482{bottom:299.826667pt;} +.y75a{bottom:298.000000pt;} +.y47b{bottom:299.826667pt;} .y246{bottom:299.996000pt;} .y157{bottom:300.000000pt;} .y94{bottom:300.298667pt;} -.y3b0{bottom:300.566667pt;} -.y4ab{bottom:301.632000pt;} +.y3ad{bottom:300.566667pt;} +.y4a4{bottom:301.632000pt;} .y230{bottom:301.820000pt;} -.y6c3{bottom:302.057333pt;} -.y4c9{bottom:302.128000pt;} -.y6ae{bottom:302.262667pt;} +.y6b8{bottom:302.057333pt;} +.y4c2{bottom:302.128000pt;} +.y6a3{bottom:302.262667pt;} .y151{bottom:302.281333pt;} -.y679{bottom:302.744000pt;} +.y326{bottom:302.569333pt;} +.y66e{bottom:302.744000pt;} .yd8{bottom:302.790667pt;} -.y8c5{bottom:302.820000pt;} -.y307{bottom:303.085333pt;} +.y8ba{bottom:302.820000pt;} +.y304{bottom:303.085333pt;} .y1a0{bottom:303.156000pt;} -.y7a9{bottom:303.173333pt;} -.y4f6{bottom:303.333333pt;} +.y79e{bottom:303.173333pt;} +.y4ef{bottom:303.333333pt;} .y217{bottom:303.418667pt;} -.y746{bottom:303.489333pt;} +.y73b{bottom:303.489333pt;} .y1ed{bottom:303.897333pt;} -.y2ef{bottom:304.814667pt;} -.y25d{bottom:305.176000pt;} -.y760{bottom:305.188000pt;} -.y1d1{bottom:305.684000pt;} -.y8e2{bottom:306.624000pt;} +.y2ec{bottom:304.814667pt;} +.y755{bottom:305.188000pt;} +.y1d1{bottom:305.912000pt;} +.y8d7{bottom:306.624000pt;} +.y25d{bottom:306.756000pt;} .y1c{bottom:306.889333pt;} .y274{bottom:306.937333pt;} .y231{bottom:307.098667pt;} -.y549{bottom:307.298667pt;} -.y903{bottom:307.352000pt;} -.y87d{bottom:307.401333pt;} -.y590{bottom:307.596000pt;} +.y542{bottom:307.298667pt;} +.y8f8{bottom:307.352000pt;} +.y872{bottom:307.401333pt;} +.y589{bottom:307.596000pt;} .y37{bottom:307.956000pt;} .y291{bottom:308.106667pt;} .yb3{bottom:308.314667pt;} -.y49a{bottom:308.365333pt;} -.y329{bottom:308.500000pt;} -.y4de{bottom:309.120000pt;} +.y493{bottom:308.365333pt;} +.y4d7{bottom:309.120000pt;} .y111{bottom:309.154667pt;} -.y776{bottom:309.237333pt;} +.y76b{bottom:309.237333pt;} .y5f{bottom:310.189333pt;} -.y537{bottom:310.332000pt;} -.y438{bottom:310.680000pt;} +.y530{bottom:310.332000pt;} .y171{bottom:311.038667pt;} -.y72f{bottom:311.284000pt;} -.y693{bottom:311.505333pt;} -.y6db{bottom:311.680000pt;} -.y815{bottom:311.929333pt;} -.y661{bottom:311.950667pt;} -.y716{bottom:312.082667pt;} -.y78f{bottom:312.289333pt;} -.y87e{bottom:312.680000pt;} -.y2c6{bottom:312.752000pt;} -.y348{bottom:312.786667pt;} -.y5d8{bottom:312.840000pt;} -.y6ed{bottom:312.988000pt;} -.y469{bottom:313.357333pt;} -.y41d{bottom:313.436000pt;} -.y508{bottom:314.488000pt;} -.y44f{bottom:314.522667pt;} -.y8b7{bottom:314.532000pt;} -.y2ed{bottom:314.654667pt;} -.y55e{bottom:314.940000pt;} -.y398{bottom:315.170667pt;} +.y724{bottom:311.284000pt;} +.y688{bottom:311.505333pt;} +.y6d0{bottom:311.680000pt;} +.y432{bottom:311.713333pt;} +.y80a{bottom:311.929333pt;} +.y656{bottom:311.950667pt;} +.y70b{bottom:312.082667pt;} +.y784{bottom:312.244000pt;} +.y873{bottom:312.680000pt;} +.y2c3{bottom:312.752000pt;} +.y346{bottom:312.786667pt;} +.y5d1{bottom:312.840000pt;} +.y6e2{bottom:312.988000pt;} +.y463{bottom:313.357333pt;} +.y417{bottom:313.436000pt;} +.y501{bottom:314.488000pt;} +.y449{bottom:314.522667pt;} +.y8ac{bottom:314.532000pt;} +.y2ea{bottom:314.654667pt;} +.y557{bottom:314.940000pt;} .y134{bottom:315.248000pt;} -.y831{bottom:315.976000pt;} -.y384{bottom:316.889333pt;} -.y816{bottom:317.208000pt;} -.y636{bottom:317.537333pt;} -.y61d{bottom:318.186667pt;} -.y7c1{bottom:319.093333pt;} +.y826{bottom:315.976000pt;} +.y396{bottom:317.016000pt;} +.y80b{bottom:317.208000pt;} +.y62b{bottom:317.537333pt;} +.y382{bottom:317.810667pt;} +.y612{bottom:318.838667pt;} +.y7b6{bottom:319.093333pt;} .yf2{bottom:319.953333pt;} -.y35f{bottom:320.145333pt;} -.y481{bottom:321.505333pt;} +.y35d{bottom:320.145333pt;} +.y47a{bottom:321.505333pt;} .y93{bottom:321.977333pt;} -.y36e{bottom:323.208000pt;} +.y36c{bottom:323.208000pt;} .y22e{bottom:323.498667pt;} -.y4c8{bottom:323.806667pt;} -.y6ad{bottom:323.941333pt;} -.y678{bottom:324.422667pt;} -.y3d3{bottom:324.666667pt;} -.y7a8{bottom:324.852000pt;} +.y4c1{bottom:323.806667pt;} +.y6a2{bottom:323.941333pt;} +.y66d{bottom:324.422667pt;} +.y3d0{bottom:324.666667pt;} +.y79d{bottom:324.852000pt;} .y216{bottom:325.097333pt;} .y1ec{bottom:325.576000pt;} -.y2ec{bottom:326.493333pt;} -.y701{bottom:326.688000pt;} -.y5f1{bottom:326.732000pt;} -.y25c{bottom:326.854667pt;} -.y75f{bottom:326.866667pt;} -.y8e0{bottom:328.301333pt;} -.y8e1{bottom:328.302667pt;} +.y2e9{bottom:326.493333pt;} +.y6f6{bottom:326.688000pt;} +.y5ea{bottom:326.732000pt;} +.y754{bottom:326.866667pt;} +.y8d5{bottom:328.301333pt;} +.y8d6{bottom:328.302667pt;} +.y25c{bottom:328.434667pt;} .y1b{bottom:328.568000pt;} .y273{bottom:328.616000pt;} .y22f{bottom:328.777333pt;} -.y87c{bottom:329.080000pt;} -.y58f{bottom:329.274667pt;} +.y871{bottom:329.080000pt;} +.y588{bottom:329.274667pt;} .y36{bottom:329.872000pt;} -.y606{bottom:330.730667pt;} -.y4dd{bottom:330.798667pt;} -.y536{bottom:332.010667pt;} -.y18a{bottom:332.178667pt;} +.y5ff{bottom:330.730667pt;} +.y4d6{bottom:330.798667pt;} +.y18a{bottom:330.938667pt;} +.y52f{bottom:332.010667pt;} .y5e{bottom:332.336000pt;} -.y5bb{bottom:332.662667pt;} +.y5b4{bottom:332.662667pt;} .y170{bottom:332.717333pt;} -.y692{bottom:333.184000pt;} -.y7ff{bottom:333.337333pt;} -.y6da{bottom:333.358667pt;} -.y7d9{bottom:333.525333pt;} -.y660{bottom:333.629333pt;} +.y687{bottom:333.184000pt;} +.y7f4{bottom:333.337333pt;} +.y6cf{bottom:333.358667pt;} +.y7ce{bottom:333.525333pt;} +.y655{bottom:333.629333pt;} .y1b4{bottom:333.713333pt;} -.y5a3{bottom:334.193333pt;} -.y849{bottom:334.354667pt;} -.y2c5{bottom:334.430667pt;} -.y910{bottom:334.465333pt;} -.y5d7{bottom:334.518667pt;} -.y468{bottom:335.036000pt;} -.y3e6{bottom:335.840000pt;} -.y400{bottom:335.993333pt;} -.y3c8{bottom:336.058667pt;} -.y507{bottom:336.166667pt;} -.y44e{bottom:336.201333pt;} -.y8b6{bottom:336.210667pt;} -.y55d{bottom:336.618667pt;} -.y397{bottom:336.849333pt;} +.y59c{bottom:334.193333pt;} +.y83e{bottom:334.354667pt;} +.y2c2{bottom:334.430667pt;} +.y905{bottom:334.465333pt;} +.y5d0{bottom:334.518667pt;} +.y462{bottom:335.036000pt;} +.y3e3{bottom:335.840000pt;} +.y3fb{bottom:335.864000pt;} +.y3c5{bottom:336.058667pt;} +.y500{bottom:336.166667pt;} +.y448{bottom:336.201333pt;} +.y8ab{bottom:336.210667pt;} +.y556{bottom:336.618667pt;} .y133{bottom:336.926667pt;} -.y576{bottom:337.225333pt;} -.y64d{bottom:337.842667pt;} -.y6c2{bottom:338.154667pt;} +.y56f{bottom:337.225333pt;} +.y642{bottom:337.842667pt;} +.y6b7{bottom:338.154667pt;} .y150{bottom:338.378667pt;} +.y395{bottom:338.694667pt;} .y19f{bottom:339.253333pt;} -.y5a4{bottom:339.472000pt;} +.y59d{bottom:339.472000pt;} .y110{bottom:340.298667pt;} -.y519{bottom:340.474667pt;} +.y512{bottom:340.474667pt;} .yf1{bottom:341.632000pt;} -.y35e{bottom:341.824000pt;} -.y3af{bottom:342.136000pt;} -.y902{bottom:342.514667pt;} -.y2aa{bottom:342.980000pt;} +.y35c{bottom:341.824000pt;} +.y3ac{bottom:342.136000pt;} +.y8f7{bottom:342.514667pt;} +.y2a7{bottom:342.980000pt;} +.y783{bottom:343.326667pt;} .y245{bottom:343.353333pt;} -.y78e{bottom:343.372000pt;} -.y318{bottom:343.392000pt;} +.y315{bottom:343.392000pt;} .y92{bottom:344.852000pt;} -.y36d{bottom:344.886667pt;} -.y4aa{bottom:344.989333pt;} -.y4c7{bottom:345.485333pt;} -.y6ac{bottom:345.620000pt;} +.y36b{bottom:344.886667pt;} +.y4a3{bottom:344.989333pt;} +.y4c0{bottom:345.485333pt;} +.y6a1{bottom:345.620000pt;} .yd6{bottom:346.150667pt;} -.y306{bottom:346.441333pt;} -.y7a7{bottom:346.530667pt;} -.y745{bottom:346.846667pt;} +.y303{bottom:346.441333pt;} +.y79c{bottom:346.530667pt;} +.y73a{bottom:346.846667pt;} .y1eb{bottom:347.254667pt;} -.y72e{bottom:347.382667pt;} -.y85d{bottom:347.673333pt;} -.y2eb{bottom:348.172000pt;} -.y75e{bottom:348.545333pt;} -.y4f4{bottom:348.793333pt;} -.y715{bottom:349.544000pt;} -.y8df{bottom:349.980000pt;} +.y723{bottom:347.382667pt;} +.y852{bottom:347.673333pt;} +.y2e8{bottom:348.172000pt;} +.y753{bottom:348.545333pt;} +.y4ed{bottom:348.793333pt;} +.y70a{bottom:349.544000pt;} +.y8d4{bottom:349.980000pt;} .y1a{bottom:350.246667pt;} -.y87b{bottom:350.758667pt;} -.y58e{bottom:350.953333pt;} -.y830{bottom:351.220000pt;} +.y870{bottom:350.758667pt;} +.y587{bottom:350.953333pt;} +.y825{bottom:351.220000pt;} .y290{bottom:351.464000pt;} -.y499{bottom:351.722667pt;} +.y492{bottom:351.722667pt;} .y35{bottom:351.789333pt;} -.y605{bottom:352.409333pt;} -.y775{bottom:352.594667pt;} +.y5fe{bottom:352.409333pt;} +.y76a{bottom:352.594667pt;} +.y189{bottom:352.617333pt;} .yb2{bottom:352.681333pt;} -.y383{bottom:352.988000pt;} -.y548{bottom:353.001333pt;} -.y1d0{bottom:353.072000pt;} -.y189{bottom:353.857333pt;} -.y437{bottom:354.037333pt;} +.y541{bottom:353.001333pt;} +.y1d0{bottom:353.526667pt;} +.y381{bottom:354.029333pt;} .y16f{bottom:354.396000pt;} .y5d{bottom:354.484000pt;} -.y7fe{bottom:355.016000pt;} -.y7d8{bottom:355.204000pt;} -.y65f{bottom:355.308000pt;} -.y61c{bottom:355.698667pt;} -.y5a2{bottom:355.872000pt;} -.y848{bottom:356.033333pt;} -.y2c4{bottom:356.109333pt;} -.y347{bottom:356.144000pt;} -.y5d6{bottom:356.197333pt;} -.y6ec{bottom:356.294667pt;} -.y467{bottom:356.714667pt;} -.y41c{bottom:356.793333pt;} -.y677{bottom:357.108000pt;} -.y3ff{bottom:357.672000pt;} -.y3c7{bottom:357.737333pt;} -.y8b5{bottom:357.889333pt;} -.y575{bottom:358.904000pt;} -.y64c{bottom:359.521333pt;} -.y480{bottom:360.846667pt;} -.y635{bottom:360.894667pt;} -.y328{bottom:361.570667pt;} +.y7f3{bottom:355.016000pt;} +.y431{bottom:355.070667pt;} +.y7cd{bottom:355.204000pt;} +.y654{bottom:355.308000pt;} +.y59b{bottom:355.872000pt;} +.y83d{bottom:356.033333pt;} +.y2c1{bottom:356.109333pt;} +.y345{bottom:356.144000pt;} +.y5cf{bottom:356.197333pt;} +.y6e1{bottom:356.294667pt;} +.y325{bottom:356.546667pt;} +.y461{bottom:356.714667pt;} +.y416{bottom:356.793333pt;} +.y611{bottom:357.002667pt;} +.y66c{bottom:357.108000pt;} +.y3fa{bottom:357.542667pt;} +.y3c4{bottom:357.737333pt;} +.y8aa{bottom:357.889333pt;} +.y56e{bottom:358.904000pt;} +.y641{bottom:359.521333pt;} +.y479{bottom:360.846667pt;} +.y62a{bottom:360.894667pt;} .y10f{bottom:361.977333pt;} .y215{bottom:363.308000pt;} .yf0{bottom:363.310667pt;} .y261{bottom:364.000000pt;} .y244{bottom:365.032000pt;} -.y25b{bottom:366.056000pt;} .y91{bottom:366.530667pt;} -.y5f0{bottom:366.658667pt;} +.y5e9{bottom:366.658667pt;} .y22d{bottom:366.948000pt;} -.y4c6{bottom:367.164000pt;} -.y814{bottom:367.208000pt;} -.y55c{bottom:367.701333pt;} +.y4bf{bottom:367.164000pt;} +.y809{bottom:367.208000pt;} +.y555{bottom:367.701333pt;} .yd5{bottom:367.829333pt;} .y1b2{bottom:367.954667pt;} -.y7a6{bottom:368.209333pt;} +.y79b{bottom:368.209333pt;} +.y25b{bottom:368.426667pt;} .y1ea{bottom:368.933333pt;} -.y44d{bottom:369.321333pt;} -.y2ea{bottom:369.850667pt;} -.y32d{bottom:370.000000pt;} -.y75d{bottom:370.224000pt;} -.y4f3{bottom:370.472000pt;} -.y714{bottom:371.222667pt;} -.y6d9{bottom:371.274667pt;} +.y447{bottom:369.321333pt;} +.y2e7{bottom:369.850667pt;} +.y752{bottom:370.224000pt;} +.y4ec{bottom:370.472000pt;} +.y709{bottom:371.222667pt;} +.y6ce{bottom:371.274667pt;} .y19{bottom:371.925333pt;} -.y879{bottom:372.437333pt;} +.y86e{bottom:372.437333pt;} .y28f{bottom:373.142667pt;} .y1b3{bottom:373.233333pt;} -.y4dc{bottom:374.156000pt;} +.y4d5{bottom:374.156000pt;} +.y188{bottom:374.296000pt;} .yb1{bottom:374.360000pt;} .y272{bottom:375.030667pt;} -.y188{bottom:375.536000pt;} -.y7c0{bottom:376.229333pt;} -.y691{bottom:376.540000pt;} +.y7b5{bottom:376.229333pt;} +.y686{bottom:376.540000pt;} .y75{bottom:376.632000pt;} -.y7fd{bottom:376.694667pt;} -.y7d7{bottom:376.882667pt;} -.y65e{bottom:376.986667pt;} -.y61b{bottom:377.377333pt;} -.y901{bottom:377.677333pt;} -.y87a{bottom:377.716000pt;} -.y346{bottom:377.822667pt;} -.y5d5{bottom:377.876000pt;} -.y41b{bottom:378.472000pt;} -.y3e5{bottom:379.197333pt;} -.y3fe{bottom:379.350667pt;} -.y3c6{bottom:379.416000pt;} -.y506{bottom:379.524000pt;} -.y8b4{bottom:379.568000pt;} -.y535{bottom:379.792000pt;} -.y396{bottom:380.206667pt;} +.y32a{bottom:376.666667pt;} +.y7f2{bottom:376.694667pt;} +.y7cc{bottom:376.882667pt;} +.y653{bottom:376.986667pt;} +.y8f6{bottom:377.677333pt;} +.y86f{bottom:377.716000pt;} +.y344{bottom:377.822667pt;} +.y5ce{bottom:377.876000pt;} +.y415{bottom:378.472000pt;} +.y610{bottom:378.681333pt;} +.y3e2{bottom:379.197333pt;} +.y3f9{bottom:379.221333pt;} +.y3c3{bottom:379.416000pt;} +.y4ff{bottom:379.524000pt;} +.y8a9{bottom:379.568000pt;} +.y52e{bottom:379.792000pt;} .y132{bottom:380.284000pt;} -.y5ba{bottom:380.600000pt;} -.y339{bottom:380.921333pt;} -.y6ab{bottom:381.717333pt;} -.y47f{bottom:382.525333pt;} -.y634{bottom:382.573333pt;} -.y85c{bottom:382.672000pt;} +.y5b3{bottom:380.600000pt;} +.y6a0{bottom:381.717333pt;} +.y394{bottom:382.052000pt;} +.y478{bottom:382.525333pt;} +.y629{bottom:382.573333pt;} +.y851{bottom:382.672000pt;} .y10e{bottom:383.656000pt;} -.y8de{bottom:384.426667pt;} +.y8d3{bottom:384.426667pt;} .y16e{bottom:384.873333pt;} .y214{bottom:384.986667pt;} .yef{bottom:384.989333pt;} -.y78d{bottom:385.493333pt;} -.y317{bottom:385.746667pt;} -.y2a9{bottom:386.337333pt;} +.y782{bottom:385.441333pt;} +.y314{bottom:385.746667pt;} +.y2a6{bottom:386.337333pt;} +.y337{bottom:387.510667pt;} .y14f{bottom:387.800000pt;} -.y6c1{bottom:388.202667pt;} +.y6b6{bottom:388.202667pt;} .y90{bottom:388.209333pt;} -.y36c{bottom:388.277333pt;} -.y5ef{bottom:388.337333pt;} -.y4a9{bottom:388.346667pt;} +.y36a{bottom:388.277333pt;} +.y5e8{bottom:388.337333pt;} +.y4a2{bottom:388.346667pt;} .y34{bottom:388.409333pt;} -.y89f{bottom:388.842667pt;} -.y2e9{bottom:389.348000pt;} +.y894{bottom:388.842667pt;} +.y2e6{bottom:389.348000pt;} .yd4{bottom:389.508000pt;} -.y744{bottom:389.570667pt;} +.y739{bottom:389.570667pt;} .y1b1{bottom:389.633333pt;} -.y305{bottom:389.798667pt;} -.y7a5{bottom:389.888000pt;} +.y302{bottom:389.798667pt;} +.y79a{bottom:389.888000pt;} .y18f{bottom:390.000000pt;} .y1e9{bottom:390.612000pt;} -.y44c{bottom:391.000000pt;} +.y446{bottom:391.000000pt;} .y5c{bottom:391.490667pt;} -.y2e8{bottom:391.529333pt;} -.y700{bottom:391.724000pt;} -.y4f2{bottom:392.150667pt;} -.y713{bottom:392.914667pt;} -.y6d8{bottom:392.953333pt;} +.y2e5{bottom:391.529333pt;} +.y6f5{bottom:391.724000pt;} +.y4eb{bottom:392.150667pt;} +.y708{bottom:392.914667pt;} +.y6cd{bottom:392.953333pt;} .y18{bottom:393.604000pt;} -.y878{bottom:394.116000pt;} -.y35d{bottom:394.513333pt;} +.y86d{bottom:394.116000pt;} +.y35b{bottom:394.513333pt;} .y28e{bottom:394.821333pt;} -.y3ae{bottom:394.950667pt;} -.y498{bottom:395.080000pt;} -.y4db{bottom:395.834667pt;} -.y774{bottom:395.952000pt;} +.y3ab{bottom:394.950667pt;} +.y491{bottom:395.080000pt;} +.y4d4{bottom:395.834667pt;} +.y769{bottom:395.952000pt;} .yb0{bottom:396.038667pt;} -.y547{bottom:396.358667pt;} -.y1cf{bottom:396.429333pt;} -.y2c3{bottom:397.489333pt;} -.y82f{bottom:397.766667pt;} -.y690{bottom:398.218667pt;} +.y540{bottom:396.358667pt;} +.y1cf{bottom:396.882667pt;} +.y2c0{bottom:397.489333pt;} +.y824{bottom:397.766667pt;} +.y685{bottom:398.218667pt;} +.y430{bottom:398.428000pt;} .y74{bottom:398.780000pt;} -.y58d{bottom:398.894667pt;} -.y900{bottom:399.366667pt;} -.y5d4{bottom:399.554667pt;} -.y436{bottom:399.941333pt;} -.y41a{bottom:400.150667pt;} -.y3e4{bottom:400.876000pt;} -.y466{bottom:401.040000pt;} -.y505{bottom:401.202667pt;} -.y8b3{bottom:401.246667pt;} +.y586{bottom:398.894667pt;} +.y8f5{bottom:399.366667pt;} +.y5cd{bottom:399.554667pt;} +.y324{bottom:399.904000pt;} +.y414{bottom:400.150667pt;} +.y3e1{bottom:400.876000pt;} +.y460{bottom:401.040000pt;} +.y4fe{bottom:401.202667pt;} +.y8a8{bottom:401.246667pt;} .y131{bottom:401.962667pt;} -.y604{bottom:402.665333pt;} -.y64b{bottom:402.878667pt;} +.y5fd{bottom:402.665333pt;} +.y640{bottom:402.878667pt;} .y243{bottom:403.492000pt;} -.y382{bottom:403.628000pt;} .y203{bottom:404.125333pt;} -.y633{bottom:404.252000pt;} -.y85b{bottom:404.350667pt;} -.y5a1{bottom:404.510667pt;} -.y327{bottom:404.928000pt;} +.y628{bottom:404.252000pt;} +.y850{bottom:404.350667pt;} +.y59a{bottom:404.510667pt;} +.y380{bottom:405.021333pt;} .y19e{bottom:405.202667pt;} -.y518{bottom:405.510667pt;} -.y8dd{bottom:406.105333pt;} -.y574{bottom:406.514667pt;} +.y511{bottom:405.510667pt;} +.y8d2{bottom:406.105333pt;} +.y56d{bottom:406.514667pt;} .y16d{bottom:406.552000pt;} .yee{bottom:406.666667pt;} -.y78c{bottom:407.172000pt;} -.y7f0{bottom:407.261333pt;} -.y2a8{bottom:408.016000pt;} -.y65d{bottom:408.261333pt;} -.y4c4{bottom:408.892000pt;} -.y72d{bottom:408.962667pt;} +.y781{bottom:407.120000pt;} +.y7e5{bottom:407.261333pt;} +.y2a5{bottom:408.016000pt;} +.y652{bottom:408.261333pt;} +.y4bd{bottom:408.892000pt;} +.y722{bottom:408.962667pt;} .y14e{bottom:409.478667pt;} .y8f{bottom:409.888000pt;} -.y55b{bottom:409.962667pt;} +.y554{bottom:409.962667pt;} .y22c{bottom:410.305333pt;} .y33{bottom:410.326667pt;} -.y89e{bottom:410.521333pt;} -.y813{bottom:410.565333pt;} -.y6eb{bottom:410.733333pt;} -.y847{bottom:410.818667pt;} +.y893{bottom:410.521333pt;} +.y808{bottom:410.565333pt;} +.y6e0{bottom:410.733333pt;} +.y83c{bottom:410.818667pt;} .yd3{bottom:411.186667pt;} -.y743{bottom:411.249333pt;} -.y7a4{bottom:411.566667pt;} +.y738{bottom:411.249333pt;} +.y799{bottom:411.566667pt;} .y1e8{bottom:412.290667pt;} -.y44b{bottom:412.678667pt;} -.y6ff{bottom:413.402667pt;} -.y345{bottom:413.572000pt;} -.y7fc{bottom:413.612000pt;} +.y445{bottom:412.678667pt;} +.y6f4{bottom:413.402667pt;} +.y343{bottom:413.572000pt;} +.y7f1{bottom:413.612000pt;} .y5b{bottom:413.638667pt;} -.y4c5{bottom:414.170667pt;} -.y712{bottom:414.593333pt;} -.y90f{bottom:415.148000pt;} +.y4be{bottom:414.170667pt;} +.y707{bottom:414.593333pt;} +.y904{bottom:415.148000pt;} .y17{bottom:415.282667pt;} -.y676{bottom:415.534667pt;} -.y877{bottom:415.794667pt;} -.y25a{bottom:416.502667pt;} -.y75c{bottom:417.114667pt;} -.y2e5{bottom:417.198667pt;} -.y1ce{bottom:418.108000pt;} +.y66b{bottom:415.534667pt;} +.y86c{bottom:415.794667pt;} +.y751{bottom:417.114667pt;} +.y2e2{bottom:417.198667pt;} .y271{bottom:418.388000pt;} -.y82e{bottom:419.445333pt;} -.y7bf{bottom:419.586667pt;} +.y1ce{bottom:418.561333pt;} +.y823{bottom:419.445333pt;} +.y7b4{bottom:419.586667pt;} +.y25a{bottom:419.664000pt;} .y10d{bottom:419.753333pt;} -.y7d6{bottom:420.545333pt;} -.y8ff{bottom:421.057333pt;} -.y419{bottom:421.829333pt;} -.y865{bottom:422.018667pt;} -.y187{bottom:422.524000pt;} -.y3e3{bottom:422.554667pt;} -.y465{bottom:422.718667pt;} -.y3c5{bottom:422.773333pt;} -.y504{bottom:422.881333pt;} -.y8b2{bottom:422.925333pt;} -.y534{bottom:423.149333pt;} -.y395{bottom:423.564000pt;} +.y7cb{bottom:420.545333pt;} +.y8f4{bottom:421.057333pt;} +.y187{bottom:421.485333pt;} +.y413{bottom:421.829333pt;} +.y85a{bottom:422.018667pt;} +.y3e0{bottom:422.554667pt;} +.y45f{bottom:422.718667pt;} +.y3c2{bottom:422.773333pt;} +.y4fd{bottom:422.881333pt;} +.y8a7{bottom:422.925333pt;} +.y52d{bottom:423.149333pt;} .y130{bottom:423.641333pt;} -.y5b9{bottom:423.957333pt;} -.y3fd{bottom:424.005333pt;} -.y6d7{bottom:424.036000pt;} -.y338{bottom:424.278667pt;} -.y64a{bottom:424.557333pt;} +.y3f8{bottom:423.762667pt;} +.y5b2{bottom:423.957333pt;} +.y6cc{bottom:424.036000pt;} +.y63f{bottom:424.557333pt;} .y242{bottom:425.170667pt;} -.y381{bottom:425.306667pt;} -.y632{bottom:425.930667pt;} -.y85a{bottom:426.029333pt;} -.y61a{bottom:426.136000pt;} +.y393{bottom:425.409333pt;} +.y627{bottom:425.930667pt;} +.y84f{bottom:426.029333pt;} +.y37f{bottom:426.700000pt;} .y19d{bottom:426.881333pt;} -.y2e6{bottom:427.176000pt;} -.y517{bottom:427.189333pt;} -.y8dc{bottom:427.784000pt;} -.y573{bottom:428.193333pt;} +.y2e3{bottom:427.176000pt;} +.y510{bottom:427.189333pt;} +.y8d1{bottom:427.784000pt;} +.y60f{bottom:428.090667pt;} +.y56c{bottom:428.193333pt;} .y16c{bottom:428.230667pt;} -.y78b{bottom:428.850667pt;} -.y7ef{bottom:428.940000pt;} -.y316{bottom:429.104000pt;} -.y65c{bottom:429.940000pt;} -.y4c3{bottom:430.570667pt;} -.y72c{bottom:430.641333pt;} -.y6aa{bottom:431.461333pt;} -.y36b{bottom:431.634667pt;} -.y47e{bottom:431.640000pt;} -.y55a{bottom:431.641333pt;} -.y4a8{bottom:431.704000pt;} -.y89d{bottom:432.200000pt;} +.y780{bottom:428.798667pt;} +.y7e4{bottom:428.940000pt;} +.y313{bottom:429.104000pt;} +.y651{bottom:429.940000pt;} +.y4bc{bottom:430.570667pt;} +.y721{bottom:430.641333pt;} +.y336{bottom:430.868000pt;} +.y69f{bottom:431.461333pt;} +.y369{bottom:431.634667pt;} +.y477{bottom:431.640000pt;} +.y553{bottom:431.641333pt;} +.y4a1{bottom:431.704000pt;} +.y892{bottom:432.200000pt;} .y32{bottom:432.244000pt;} -.y546{bottom:432.286667pt;} -.y846{bottom:432.497333pt;} +.y53f{bottom:432.286667pt;} +.y83b{bottom:432.497333pt;} .y8e{bottom:432.764000pt;} .yd2{bottom:432.865333pt;} -.y6c0{bottom:433.113333pt;} -.y304{bottom:433.156000pt;} -.y2e7{bottom:433.182667pt;} +.y6b5{bottom:433.113333pt;} +.y301{bottom:433.156000pt;} +.y2e4{bottom:433.182667pt;} .y28d{bottom:433.392000pt;} .y213{bottom:433.764000pt;} .y1b0{bottom:434.053333pt;} -.y8c4{bottom:434.637333pt;} -.y7fb{bottom:435.290667pt;} +.y8b9{bottom:434.637333pt;} +.y7f0{bottom:435.290667pt;} .y5a{bottom:435.786667pt;} -.y35c{bottom:435.954667pt;} -.y711{bottom:436.272000pt;} +.y35a{bottom:435.954667pt;} +.y706{bottom:436.272000pt;} .y16{bottom:436.961333pt;} -.y2e4{bottom:437.016000pt;} -.y875{bottom:437.473333pt;} -.y3ad{bottom:438.308000pt;} -.y497{bottom:438.437333pt;} -.y75b{bottom:438.793333pt;} -.y5d3{bottom:439.085333pt;} -.y4da{bottom:439.192000pt;} -.y4f1{bottom:439.290667pt;} -.y773{bottom:439.309333pt;} -.y5ee{bottom:439.736000pt;} +.y2e1{bottom:437.016000pt;} +.y86a{bottom:437.473333pt;} +.y3aa{bottom:438.308000pt;} +.y490{bottom:438.437333pt;} +.y750{bottom:438.793333pt;} +.y5cc{bottom:439.085333pt;} +.y4d3{bottom:439.192000pt;} +.y4ea{bottom:439.290667pt;} +.y768{bottom:439.309333pt;} +.y5e7{bottom:439.736000pt;} .y270{bottom:440.066667pt;} .yaf{bottom:440.404000pt;} -.y2c2{bottom:440.846667pt;} -.y82d{bottom:441.124000pt;} -.y7be{bottom:441.265333pt;} -.y68f{bottom:441.576000pt;} +.y2bf{bottom:440.846667pt;} +.y822{bottom:441.124000pt;} +.y7b3{bottom:441.265333pt;} +.y684{bottom:441.576000pt;} +.y42f{bottom:441.785333pt;} .y1f3{bottom:442.000000pt;} .yed{bottom:442.028000pt;} -.y58c{bottom:442.252000pt;} +.y585{bottom:442.252000pt;} .y22b{bottom:442.509333pt;} -.y8fe{bottom:442.746667pt;} -.y876{bottom:442.752000pt;} -.y435{bottom:443.298667pt;} -.y418{bottom:443.506667pt;} -.y864{bottom:443.697333pt;} -.y3e2{bottom:444.233333pt;} -.y503{bottom:444.560000pt;} -.y8b1{bottom:444.604000pt;} -.y533{bottom:444.828000pt;} +.y8f3{bottom:442.746667pt;} +.y86b{bottom:442.752000pt;} +.y412{bottom:443.506667pt;} +.y859{bottom:443.697333pt;} +.y323{bottom:443.702667pt;} +.y3df{bottom:444.233333pt;} +.y4fc{bottom:444.560000pt;} +.y8a6{bottom:444.604000pt;} +.y52c{bottom:444.828000pt;} .y12f{bottom:445.320000pt;} -.y5b8{bottom:445.636000pt;} -.y603{bottom:446.022667pt;} -.y649{bottom:446.236000pt;} +.y5b1{bottom:445.636000pt;} +.y5fc{bottom:446.022667pt;} +.y63e{bottom:446.236000pt;} .y241{bottom:446.849333pt;} -.y380{bottom:446.986667pt;} -.y859{bottom:447.708000pt;} -.y2a7{bottom:447.742667pt;} -.y326{bottom:447.818667pt;} -.y5a0{bottom:447.868000pt;} +.y84e{bottom:447.708000pt;} +.y2a4{bottom:447.742667pt;} +.y599{bottom:447.868000pt;} +.y37e{bottom:448.440000pt;} .y19c{bottom:448.560000pt;} -.y90e{bottom:448.684000pt;} -.y44a{bottom:448.776000pt;} -.y516{bottom:448.868000pt;} -.y8db{bottom:449.462667pt;} -.y572{bottom:449.872000pt;} +.y903{bottom:448.684000pt;} +.y444{bottom:448.776000pt;} +.y50f{bottom:448.868000pt;} +.y8d0{bottom:449.462667pt;} +.y56b{bottom:449.872000pt;} .y14d{bottom:450.413333pt;} -.y7ee{bottom:450.618667pt;} -.y315{bottom:450.782667pt;} -.y65b{bottom:451.618667pt;} -.y72b{bottom:452.320000pt;} +.y7e3{bottom:450.618667pt;} +.y312{bottom:450.782667pt;} +.y650{bottom:451.618667pt;} +.y720{bottom:452.320000pt;} .y202{bottom:452.765333pt;} -.y4c2{bottom:453.094667pt;} -.y7a3{bottom:453.337333pt;} -.y4a7{bottom:453.382667pt;} -.y89c{bottom:453.878667pt;} -.y6ea{bottom:454.090667pt;} +.y4bb{bottom:453.094667pt;} +.y798{bottom:453.337333pt;} +.y4a0{bottom:453.382667pt;} +.y891{bottom:453.878667pt;} +.y6df{bottom:454.090667pt;} .y31{bottom:454.160000pt;} .y8d{bottom:454.442667pt;} .yd1{bottom:454.544000pt;} -.y6bf{bottom:454.792000pt;} +.y6b4{bottom:454.792000pt;} .y212{bottom:455.442667pt;} -.y1cd{bottom:455.720000pt;} .y1af{bottom:455.732000pt;} -.y812{bottom:456.069333pt;} -.y8c3{bottom:456.316000pt;} -.y6fe{bottom:456.760000pt;} +.y807{bottom:456.069333pt;} +.y8b8{bottom:456.316000pt;} +.y1cd{bottom:456.401333pt;} +.y6f3{bottom:456.760000pt;} .y1e7{bottom:456.968000pt;} -.y845{bottom:457.360000pt;} -.y35b{bottom:457.633333pt;} +.y83a{bottom:457.360000pt;} +.y359{bottom:457.633333pt;} .y59{bottom:457.933333pt;} .y15{bottom:458.640000pt;} -.y675{bottom:458.892000pt;} -.y259{bottom:459.860000pt;} -.y3ac{bottom:459.986667pt;} -.y344{bottom:460.396000pt;} -.y5d2{bottom:460.764000pt;} -.y4f0{bottom:460.969333pt;} -.y2e3{bottom:461.094667pt;} +.y66a{bottom:458.892000pt;} +.y3a9{bottom:459.986667pt;} +.y342{bottom:460.396000pt;} +.y5cb{bottom:460.764000pt;} +.y4e9{bottom:460.969333pt;} +.y2e0{bottom:461.094667pt;} .yae{bottom:462.082667pt;} -.y2c1{bottom:462.525333pt;} -.y82c{bottom:462.802667pt;} -.y631{bottom:462.905333pt;} -.y6a9{bottom:463.424000pt;} +.y2be{bottom:462.525333pt;} +.y821{bottom:462.802667pt;} +.y626{bottom:462.905333pt;} +.y259{bottom:463.021333pt;} +.y69e{bottom:463.424000pt;} .yec{bottom:463.706667pt;} -.y36a{bottom:463.892000pt;} -.y7d5{bottom:463.902667pt;} +.y368{bottom:463.892000pt;} +.y7ca{bottom:463.902667pt;} .y22a{bottom:464.188000pt;} -.y8fd{bottom:464.437333pt;} -.y742{bottom:465.049333pt;} -.y863{bottom:465.376000pt;} -.y186{bottom:465.881333pt;} -.y3e1{bottom:465.912000pt;} -.y464{bottom:466.076000pt;} -.y3c4{bottom:466.130667pt;} -.y502{bottom:466.238667pt;} -.y8b0{bottom:466.282667pt;} -.y532{bottom:466.506667pt;} -.y394{bottom:466.921333pt;} +.y8f2{bottom:464.437333pt;} +.y186{bottom:464.842667pt;} +.y737{bottom:465.049333pt;} +.y858{bottom:465.376000pt;} +.y3de{bottom:465.912000pt;} +.y45e{bottom:466.076000pt;} +.y3c1{bottom:466.130667pt;} +.y4fb{bottom:466.238667pt;} +.y8a5{bottom:466.282667pt;} +.y52b{bottom:466.506667pt;} .y12e{bottom:466.998667pt;} -.y5b7{bottom:467.314667pt;} -.y3fc{bottom:467.362667pt;} -.y710{bottom:467.380000pt;} -.y559{bottom:467.738667pt;} -.y37f{bottom:468.665333pt;} +.y3f7{bottom:467.120000pt;} +.y5b0{bottom:467.314667pt;} +.y705{bottom:467.380000pt;} +.y552{bottom:467.738667pt;} +.y392{bottom:468.766667pt;} .y10c{bottom:469.173333pt;} -.y858{bottom:469.386667pt;} -.y619{bottom:469.492000pt;} -.y59f{bottom:469.546667pt;} +.y84d{bottom:469.386667pt;} +.y598{bottom:469.546667pt;} .y16b{bottom:469.840000pt;} -.y90d{bottom:470.362667pt;} -.y515{bottom:470.546667pt;} -.y337{bottom:470.930667pt;} -.y7fa{bottom:470.962667pt;} -.y8da{bottom:471.141333pt;} -.y571{bottom:471.550667pt;} +.y37d{bottom:470.118667pt;} +.y902{bottom:470.362667pt;} +.y50e{bottom:470.546667pt;} +.y7ef{bottom:470.962667pt;} +.y8cf{bottom:471.141333pt;} +.y60e{bottom:471.448000pt;} +.y56a{bottom:471.550667pt;} .y14c{bottom:472.092000pt;} -.y874{bottom:473.414667pt;} -.y78a{bottom:473.866667pt;} -.y496{bottom:474.074667pt;} -.y4c1{bottom:474.773333pt;} -.y47d{bottom:474.997333pt;} -.y7a2{bottom:475.016000pt;} +.y869{bottom:473.414667pt;} +.y77f{bottom:473.776000pt;} +.y48f{bottom:474.074667pt;} +.y335{bottom:474.225333pt;} +.y4ba{bottom:474.773333pt;} +.y476{bottom:474.997333pt;} +.y797{bottom:475.016000pt;} .y26f{bottom:475.292000pt;} .y30{bottom:476.077333pt;} .yd0{bottom:476.222667pt;} -.y6be{bottom:476.470667pt;} -.y303{bottom:476.513333pt;} +.y6b3{bottom:476.470667pt;} +.y300{bottom:476.513333pt;} .y211{bottom:477.121333pt;} -.y1cc{bottom:477.398667pt;} -.y6d6{bottom:477.597333pt;} -.y545{bottom:477.989333pt;} -.y8c2{bottom:477.994667pt;} -.y844{bottom:479.038667pt;} -.y35a{bottom:479.312000pt;} -.y772{bottom:479.677333pt;} +.y6cb{bottom:477.597333pt;} +.y53e{bottom:477.989333pt;} +.y8b7{bottom:477.994667pt;} +.y1cc{bottom:478.080000pt;} +.y839{bottom:479.038667pt;} +.y358{bottom:479.312000pt;} +.y767{bottom:479.677333pt;} +.y42e{bottom:479.977333pt;} .y58{bottom:480.081333pt;} .y14{bottom:480.318667pt;} -.y58b{bottom:480.417333pt;} -.y674{bottom:480.570667pt;} -.y434{bottom:481.012000pt;} -.y258{bottom:481.538667pt;} -.y75a{bottom:482.150667pt;} -.y7bd{bottom:482.210667pt;} -.y5d1{bottom:482.442667pt;} -.y4d9{bottom:482.549333pt;} -.y4ef{bottom:482.648000pt;} -.y2e2{bottom:482.773333pt;} -.y5ed{bottom:483.093333pt;} +.y584{bottom:480.417333pt;} +.y669{bottom:480.570667pt;} +.y74f{bottom:482.150667pt;} +.y7b2{bottom:482.210667pt;} +.y5ca{bottom:482.442667pt;} +.y4d2{bottom:482.549333pt;} +.y4e8{bottom:482.648000pt;} +.y2df{bottom:482.773333pt;} +.y5e6{bottom:483.093333pt;} .y28c{bottom:483.206667pt;} -.y2c0{bottom:484.204000pt;} -.y2a6{bottom:484.333333pt;} -.y82b{bottom:484.481333pt;} -.y68e{bottom:484.933333pt;} -.y602{bottom:484.976000pt;} -.y6a8{bottom:485.102667pt;} -.y369{bottom:485.570667pt;} -.y7d4{bottom:485.581333pt;} -.y8fc{bottom:486.126667pt;} -.y417{bottom:486.864000pt;} -.y862{bottom:487.054667pt;} -.y3e0{bottom:487.590667pt;} -.y3c3{bottom:487.809333pt;} -.y501{bottom:487.917333pt;} -.y8af{bottom:487.961333pt;} -.y7ed{bottom:488.237333pt;} +.y2bd{bottom:484.204000pt;} +.y2a3{bottom:484.333333pt;} +.y820{bottom:484.481333pt;} +.y258{bottom:484.700000pt;} +.y683{bottom:484.933333pt;} +.y5fb{bottom:484.976000pt;} +.y69d{bottom:485.102667pt;} +.y367{bottom:485.570667pt;} +.y7c9{bottom:485.581333pt;} +.y8f1{bottom:486.126667pt;} +.y411{bottom:486.864000pt;} +.y857{bottom:487.054667pt;} +.y3dd{bottom:487.590667pt;} +.y3c0{bottom:487.809333pt;} +.y4fa{bottom:487.917333pt;} +.y8a4{bottom:487.961333pt;} +.y7e2{bottom:488.237333pt;} .y12d{bottom:488.677333pt;} -.y5b6{bottom:488.993333pt;} +.y3f6{bottom:488.798667pt;} +.y5af{bottom:488.993333pt;} .y1ae{bottom:489.018667pt;} -.y3fb{bottom:489.041333pt;} -.y648{bottom:489.593333pt;} +.y63d{bottom:489.593333pt;} .y10b{bottom:490.852000pt;} -.y857{bottom:491.065333pt;} -.y618{bottom:491.170667pt;} -.y59e{bottom:491.225333pt;} +.y84c{bottom:491.065333pt;} +.y597{bottom:491.225333pt;} .y16a{bottom:491.518667pt;} -.y7f9{bottom:492.641333pt;} -.y8d9{bottom:492.820000pt;} -.y570{bottom:493.229333pt;} -.y314{bottom:494.140000pt;} -.y4a6{bottom:495.088000pt;} +.y7ee{bottom:492.641333pt;} +.y8ce{bottom:492.820000pt;} +.y60d{bottom:493.126667pt;} +.y569{bottom:493.229333pt;} +.y311{bottom:494.140000pt;} +.y49f{bottom:495.088000pt;} .y240{bottom:495.488000pt;} -.y72a{bottom:495.677333pt;} -.y495{bottom:495.753333pt;} +.y71f{bottom:495.677333pt;} +.y48e{bottom:495.753333pt;} .yad{bottom:495.789333pt;} -.y343{bottom:495.861333pt;} +.y341{bottom:495.861333pt;} .y201{bottom:496.122667pt;} .y26e{bottom:496.970667pt;} .y19b{bottom:497.198667pt;} -.y89b{bottom:497.236000pt;} -.y6e9{bottom:497.448000pt;} +.y890{bottom:497.236000pt;} +.y6de{bottom:497.448000pt;} +.y322{bottom:497.680000pt;} .ycf{bottom:497.901333pt;} .y2f{bottom:497.993333pt;} .y8c{bottom:498.046667pt;} -.y6bd{bottom:498.149333pt;} +.y6b2{bottom:498.149333pt;} .y210{bottom:498.800000pt;} -.y1cb{bottom:499.077333pt;} -.y8c1{bottom:499.673333pt;} -.y6fd{bottom:500.117333pt;} +.y8b6{bottom:499.673333pt;} +.y1cb{bottom:499.758667pt;} +.y6f2{bottom:500.117333pt;} .y1e6{bottom:500.325333pt;} -.y325{bottom:500.888000pt;} -.y185{bottom:501.622667pt;} +.y185{bottom:500.785333pt;} +.y42d{bottom:501.656000pt;} .y14b{bottom:501.666667pt;} -.y3ab{bottom:501.670667pt;} +.y3a8{bottom:501.670667pt;} .y13{bottom:501.997333pt;} .y57{bottom:502.229333pt;} -.y433{bottom:502.690667pt;} -.y531{bottom:503.041333pt;} -.y2df{bottom:503.652000pt;} -.y759{bottom:503.829333pt;} -.y7bc{bottom:503.889333pt;} -.y90c{bottom:503.900000pt;} -.y5d0{bottom:504.121333pt;} -.y4ee{bottom:504.326667pt;} -.y82a{bottom:506.160000pt;} -.y6a7{bottom:506.781333pt;} -.y368{bottom:507.249333pt;} -.y8fb{bottom:507.817333pt;} -.y741{bottom:508.406667pt;} +.y52a{bottom:503.041333pt;} +.y2dc{bottom:503.652000pt;} +.y74e{bottom:503.829333pt;} +.y7b1{bottom:503.889333pt;} +.y901{bottom:503.900000pt;} +.y5c9{bottom:504.121333pt;} +.y4e7{bottom:504.326667pt;} +.y81f{bottom:506.160000pt;} +.y69c{bottom:506.781333pt;} +.y366{bottom:507.249333pt;} +.y8f0{bottom:507.817333pt;} +.y736{bottom:508.406667pt;} .y229{bottom:508.520000pt;} -.y416{bottom:508.542667pt;} -.y861{bottom:508.733333pt;} -.y3df{bottom:509.269333pt;} -.y872{bottom:509.356000pt;} -.y463{bottom:509.432000pt;} -.y462{bottom:509.433333pt;} -.y3c2{bottom:509.488000pt;} -.y449{bottom:509.740000pt;} -.y7eb{bottom:509.916000pt;} -.y70f{bottom:510.148000pt;} +.y410{bottom:508.542667pt;} +.y856{bottom:508.733333pt;} +.y3dc{bottom:509.269333pt;} +.y867{bottom:509.356000pt;} +.y45d{bottom:509.432000pt;} +.y45c{bottom:509.433333pt;} +.y3bf{bottom:509.488000pt;} +.y443{bottom:509.740000pt;} +.y7e0{bottom:509.916000pt;} +.y704{bottom:510.148000pt;} .yeb{bottom:510.200000pt;} .y1ad{bottom:510.697333pt;} -.y630{bottom:511.013333pt;} -.y647{bottom:511.272000pt;} -.y811{bottom:511.348000pt;} -.y359{bottom:511.969333pt;} -.y856{bottom:512.744000pt;} -.y617{bottom:512.849333pt;} +.y625{bottom:511.013333pt;} +.y63c{bottom:511.272000pt;} +.y806{bottom:511.348000pt;} +.y357{bottom:511.969333pt;} +.y391{bottom:512.124000pt;} +.y84b{bottom:512.744000pt;} .y169{bottom:513.197333pt;} -.y2e0{bottom:513.629333pt;} -.y514{bottom:513.904000pt;} -.y47c{bottom:513.934667pt;} -.y336{bottom:514.288000pt;} -.y7f8{bottom:514.320000pt;} -.y873{bottom:514.634667pt;} -.y393{bottom:514.890667pt;} -.y7ec{bottom:515.194667pt;} -.y2bf{bottom:516.212000pt;} -.y789{bottom:516.897333pt;} -.y37e{bottom:517.308000pt;} -.y729{bottom:517.356000pt;} -.y494{bottom:517.432000pt;} -.y342{bottom:517.540000pt;} -.y7d3{bottom:517.770667pt;} -.y558{bottom:517.942667pt;} +.y2dd{bottom:513.629333pt;} +.y50d{bottom:513.904000pt;} +.y475{bottom:513.934667pt;} +.y7ed{bottom:514.320000pt;} +.y868{bottom:514.634667pt;} +.y60c{bottom:514.805333pt;} +.y7e1{bottom:515.194667pt;} +.y2bc{bottom:516.212000pt;} +.y77e{bottom:517.133333pt;} +.y71e{bottom:517.356000pt;} +.y48d{bottom:517.432000pt;} +.y340{bottom:517.540000pt;} +.y334{bottom:517.582667pt;} +.y7c8{bottom:517.770667pt;} +.y551{bottom:517.942667pt;} .y26d{bottom:518.649333pt;} .y19a{bottom:518.877333pt;} -.y89a{bottom:518.914667pt;} +.y88f{bottom:518.914667pt;} +.y37c{bottom:519.069333pt;} .yce{bottom:519.580000pt;} -.y2e1{bottom:519.634667pt;} +.y2de{bottom:519.634667pt;} .y8b{bottom:519.725333pt;} -.y6bc{bottom:519.828000pt;} -.y302{bottom:519.870667pt;} +.y6b1{bottom:519.828000pt;} +.y2ff{bottom:519.870667pt;} .y2e{bottom:519.910667pt;} .y20f{bottom:520.478667pt;} -.y6d5{bottom:520.954667pt;} -.y843{bottom:521.326667pt;} -.y544{bottom:521.346667pt;} -.y8ae{bottom:521.352000pt;} -.y7a1{bottom:521.861333pt;} +.y6ca{bottom:520.954667pt;} +.y838{bottom:521.326667pt;} +.y53d{bottom:521.346667pt;} +.y8a3{bottom:521.352000pt;} +.y796{bottom:521.861333pt;} .y1e5{bottom:522.004000pt;} -.y673{bottom:522.200000pt;} -.y184{bottom:523.301333pt;} -.y3aa{bottom:523.349333pt;} -.y2de{bottom:523.469333pt;} +.y668{bottom:522.200000pt;} +.y184{bottom:522.464000pt;} +.y42c{bottom:523.334667pt;} +.y3a7{bottom:523.349333pt;} +.y2db{bottom:523.469333pt;} .y12{bottom:523.676000pt;} -.y5ec{bottom:524.313333pt;} -.y432{bottom:524.369333pt;} +.y5e5{bottom:524.313333pt;} .y73{bottom:524.377333pt;} -.y758{bottom:525.508000pt;} -.y5b5{bottom:525.798667pt;} -.y4d8{bottom:525.906667pt;} -.y4ed{bottom:526.005333pt;} -.y7bb{bottom:526.277333pt;} +.y74d{bottom:525.508000pt;} +.y5ae{bottom:525.798667pt;} +.y4d1{bottom:525.906667pt;} +.y4e6{bottom:526.005333pt;} +.y7b0{bottom:526.277333pt;} .y28b{bottom:526.564000pt;} -.y8d8{bottom:527.265333pt;} -.y4c0{bottom:527.633333pt;} -.y68d{bottom:527.668000pt;} -.y829{bottom:527.838667pt;} -.y500{bottom:527.957333pt;} -.y58a{bottom:528.358667pt;} -.y6a6{bottom:528.460000pt;} -.y59d{bottom:528.732000pt;} -.y8fa{bottom:529.506667pt;} -.y257{bottom:529.637333pt;} -.y771{bottom:529.820000pt;} -.y740{bottom:530.085333pt;} +.y8cd{bottom:527.265333pt;} +.y4b9{bottom:527.633333pt;} +.y682{bottom:527.668000pt;} +.y81e{bottom:527.838667pt;} +.y4f9{bottom:527.957333pt;} +.y257{bottom:528.057333pt;} +.y583{bottom:528.358667pt;} +.y69b{bottom:528.460000pt;} +.y596{bottom:528.732000pt;} +.y8ef{bottom:529.506667pt;} +.y766{bottom:529.820000pt;} +.y735{bottom:530.085333pt;} .y228{bottom:530.198667pt;} -.y415{bottom:530.221333pt;} -.y3de{bottom:530.948000pt;} -.y871{bottom:531.034667pt;} -.y461{bottom:531.110667pt;} -.y7ea{bottom:531.594667pt;} -.y3fa{bottom:531.708000pt;} +.y40f{bottom:530.221333pt;} +.y3db{bottom:530.948000pt;} +.y866{bottom:531.034667pt;} +.y45b{bottom:531.110667pt;} +.y7df{bottom:531.594667pt;} .y10a{bottom:531.770667pt;} -.y70e{bottom:531.826667pt;} +.y703{bottom:531.826667pt;} .yea{bottom:531.878667pt;} .y12c{bottom:532.034667pt;} +.y3f5{bottom:532.156000pt;} .y1ac{bottom:532.376000pt;} .y2{bottom:532.849333pt;} -.y646{bottom:532.950667pt;} -.y810{bottom:533.026667pt;} +.y63b{bottom:532.950667pt;} +.y805{bottom:533.026667pt;} .y200{bottom:534.986667pt;} -.y601{bottom:535.232000pt;} -.y2dd{bottom:535.308000pt;} -.y7f7{bottom:535.998667pt;} -.y2a5{bottom:536.416000pt;} -.y56f{bottom:536.586667pt;} -.y90b{bottom:537.436000pt;} -.y313{bottom:537.497333pt;} -.y2be{bottom:537.890667pt;} +.y5fa{bottom:535.232000pt;} +.y2da{bottom:535.308000pt;} +.y7ec{bottom:535.998667pt;} +.y2a2{bottom:536.416000pt;} +.y568{bottom:536.586667pt;} +.y900{bottom:537.436000pt;} +.y310{bottom:537.497333pt;} +.y2bb{bottom:537.890667pt;} .y23f{bottom:538.845333pt;} -.y530{bottom:539.140000pt;} +.y529{bottom:539.140000pt;} .y56{bottom:539.236000pt;} -.y7d2{bottom:539.449333pt;} -.y557{bottom:539.621333pt;} +.y7c7{bottom:539.449333pt;} +.y550{bottom:539.621333pt;} .y199{bottom:540.556000pt;} -.y899{bottom:540.593333pt;} -.y6e8{bottom:540.805333pt;} +.y88e{bottom:540.593333pt;} +.y6dd{bottom:540.805333pt;} +.y321{bottom:541.037333pt;} .ycd{bottom:541.258667pt;} .y8a{bottom:541.404000pt;} .y2d{bottom:541.828000pt;} .y20e{bottom:542.157333pt;} .y14a{bottom:542.601333pt;} -.y8ad{bottom:543.030667pt;} -.y6fc{bottom:543.474667pt;} -.y672{bottom:543.878667pt;} -.y324{bottom:544.245333pt;} +.y8a2{bottom:543.030667pt;} +.y6f1{bottom:543.474667pt;} +.y667{bottom:543.878667pt;} .y168{bottom:544.626667pt;} -.y860{bottom:544.830667pt;} +.y855{bottom:544.830667pt;} .y11{bottom:545.354667pt;} .yac{bottom:546.198667pt;} -.y1ca{bottom:546.465333pt;} .y72{bottom:546.525333pt;} -.y5eb{bottom:546.544000pt;} -.y5b4{bottom:547.477333pt;} -.y4ec{bottom:547.684000pt;} -.y855{bottom:547.744000pt;} -.y7ba{bottom:547.956000pt;} -.y4a5{bottom:548.096000pt;} -.y8d7{bottom:548.944000pt;} -.y4bf{bottom:549.312000pt;} -.y68c{bottom:549.346667pt;} -.y367{bottom:549.622667pt;} -.y6a5{bottom:550.138667pt;} -.y788{bottom:551.009333pt;} -.y335{bottom:551.794667pt;} +.y5e4{bottom:546.544000pt;} +.y1ca{bottom:547.373333pt;} +.y5ad{bottom:547.477333pt;} +.y4e5{bottom:547.684000pt;} +.y84a{bottom:547.744000pt;} +.y7af{bottom:547.956000pt;} +.y49e{bottom:548.096000pt;} +.y8cc{bottom:548.944000pt;} +.y4b8{bottom:549.312000pt;} +.y681{bottom:549.346667pt;} +.y365{bottom:549.622667pt;} +.y69a{bottom:550.138667pt;} +.y77d{bottom:551.205333pt;} .y227{bottom:551.877333pt;} -.y86f{bottom:552.713333pt;} -.y3c1{bottom:552.845333pt;} -.y448{bottom:553.097333pt;} -.y7e9{bottom:553.273333pt;} +.y864{bottom:552.713333pt;} +.y3be{bottom:552.845333pt;} +.y442{bottom:553.097333pt;} +.y7de{bottom:553.273333pt;} .y109{bottom:553.449333pt;} -.y493{bottom:553.529333pt;} +.y48c{bottom:553.529333pt;} .ye9{bottom:553.557333pt;} -.y6bb{bottom:553.606667pt;} -.y341{bottom:553.637333pt;} +.y6b0{bottom:553.606667pt;} +.y33f{bottom:553.637333pt;} .y12b{bottom:553.713333pt;} .y1ab{bottom:554.054667pt;} -.y62f{bottom:554.370667pt;} -.y728{bottom:554.396000pt;} -.y80f{bottom:554.705333pt;} -.y5cf{bottom:554.897333pt;} -.y616{bottom:556.206667pt;} +.y624{bottom:554.370667pt;} +.y71d{bottom:554.396000pt;} +.y804{bottom:554.705333pt;} +.y5c8{bottom:554.897333pt;} +.y333{bottom:555.088000pt;} +.y332{bottom:555.089333pt;} .y1ff{bottom:556.665333pt;} -.y2dc{bottom:556.986667pt;} -.y513{bottom:557.261333pt;} -.y543{bottom:557.274667pt;} -.y529{bottom:557.493333pt;} -.y870{bottom:557.992000pt;} -.y56e{bottom:558.265333pt;} -.y6d4{bottom:558.870667pt;} -.y312{bottom:559.176000pt;} -.y358{bottom:559.292000pt;} -.y183{bottom:559.398667pt;} -.y37d{bottom:560.665333pt;} -.y7d1{bottom:561.128000pt;} +.y2d9{bottom:556.986667pt;} +.y50c{bottom:557.261333pt;} +.y53c{bottom:557.274667pt;} +.y522{bottom:557.493333pt;} +.y865{bottom:557.992000pt;} +.y60b{bottom:558.162667pt;} +.y567{bottom:558.265333pt;} +.y183{bottom:558.561333pt;} +.y6c9{bottom:558.870667pt;} +.y30f{bottom:559.176000pt;} +.y356{bottom:559.292000pt;} +.y7c6{bottom:561.128000pt;} .y55{bottom:561.382667pt;} -.y898{bottom:562.272000pt;} -.y757{bottom:562.622667pt;} +.y88d{bottom:562.272000pt;} +.y37b{bottom:562.426667pt;} +.y74c{bottom:562.622667pt;} .ycc{bottom:562.937333pt;} -.y47b{bottom:563.050667pt;} +.y474{bottom:563.050667pt;} .y89{bottom:563.082667pt;} -.y301{bottom:563.228000pt;} -.y414{bottom:563.710667pt;} +.y2fe{bottom:563.228000pt;} +.y40e{bottom:563.710667pt;} .y20d{bottom:563.836000pt;} .y149{bottom:564.280000pt;} -.y8f9{bottom:564.669333pt;} -.y8ac{bottom:564.709333pt;} +.y8ee{bottom:564.669333pt;} +.y8a1{bottom:564.709333pt;} .y26c{bottom:565.064000pt;} -.y7a0{bottom:565.218667pt;} +.y795{bottom:565.218667pt;} .y1e4{bottom:565.361333pt;} -.y671{bottom:565.557333pt;} +.y666{bottom:565.557333pt;} .y10{bottom:567.033333pt;} .yaa{bottom:567.877333pt;} -.y5ea{bottom:568.222667pt;} +.y5e3{bottom:568.222667pt;} .y71{bottom:568.673333pt;} -.y4d7{bottom:569.264000pt;} -.y4eb{bottom:569.362667pt;} -.y854{bottom:569.422667pt;} +.y4d0{bottom:569.264000pt;} +.y4e4{bottom:569.362667pt;} +.y849{bottom:569.422667pt;} .y28a{bottom:569.921333pt;} -.y8d6{bottom:570.622667pt;} -.y90a{bottom:570.972000pt;} -.y68b{bottom:571.025333pt;} -.y828{bottom:571.196000pt;} -.y7f6{bottom:571.670667pt;} -.y589{bottom:571.716000pt;} -.y6a4{bottom:571.817333pt;} -.y431{bottom:572.260000pt;} -.y787{bottom:572.686667pt;} -.y73f{bottom:572.753333pt;} -.y256{bottom:572.994667pt;} +.y8cb{bottom:570.622667pt;} +.y8ff{bottom:570.972000pt;} +.y680{bottom:571.025333pt;} +.y81d{bottom:571.196000pt;} +.y256{bottom:571.414667pt;} +.y7eb{bottom:571.670667pt;} +.y42b{bottom:571.705333pt;} +.y582{bottom:571.716000pt;} +.y699{bottom:571.817333pt;} +.y734{bottom:572.753333pt;} +.y77c{bottom:572.884000pt;} .yab{bottom:573.154667pt;} -.y770{bottom:573.177333pt;} +.y765{bottom:573.177333pt;} .y226{bottom:573.556000pt;} -.y2bd{bottom:573.988000pt;} -.y3dd{bottom:574.305333pt;} -.y86e{bottom:574.392000pt;} -.y460{bottom:574.468000pt;} -.y447{bottom:574.776000pt;} -.y7e8{bottom:574.952000pt;} -.y3f9{bottom:575.065333pt;} +.y2ba{bottom:573.988000pt;} +.y3da{bottom:574.305333pt;} +.y863{bottom:574.392000pt;} +.y45a{bottom:574.468000pt;} +.y441{bottom:574.776000pt;} +.y7dd{bottom:574.952000pt;} .ye8{bottom:575.236000pt;} -.y3a9{bottom:576.164000pt;} +.y3f4{bottom:575.513333pt;} +.y3a6{bottom:576.164000pt;} .y23e{bottom:576.237333pt;} -.y645{bottom:576.308000pt;} -.y59c{bottom:577.370667pt;} -.y4ff{bottom:577.772000pt;} +.y63a{bottom:576.308000pt;} +.y390{bottom:577.160000pt;} +.y595{bottom:577.370667pt;} +.y4f8{bottom:577.772000pt;} .y198{bottom:577.949333pt;} .y2c{bottom:578.448000pt;} -.y600{bottom:578.589333pt;} -.y542{bottom:578.953333pt;} -.y528{bottom:579.172000pt;} -.y392{bottom:579.926667pt;} -.y56d{bottom:579.944000pt;} -.y70d{bottom:580.533333pt;} -.y70c{bottom:580.534667pt;} -.y65a{bottom:580.854667pt;} -.y357{bottom:580.970667pt;} -.y37c{bottom:582.344000pt;} -.y7d0{bottom:582.806667pt;} +.y5f9{bottom:578.589333pt;} +.y53b{bottom:578.953333pt;} +.y521{bottom:579.172000pt;} +.y566{bottom:579.944000pt;} +.y702{bottom:580.533333pt;} +.y701{bottom:580.534667pt;} +.y64f{bottom:580.854667pt;} +.y355{bottom:580.970667pt;} +.y7c5{bottom:582.806667pt;} .y54{bottom:583.530667pt;} -.y5b3{bottom:583.574667pt;} -.y756{bottom:584.301333pt;} +.y5ac{bottom:583.574667pt;} +.y37a{bottom:584.105333pt;} +.y74b{bottom:584.301333pt;} +.y320{bottom:584.394667pt;} .ycb{bottom:584.616000pt;} -.y47a{bottom:584.729333pt;} +.y473{bottom:584.729333pt;} .y88{bottom:584.761333pt;} -.y413{bottom:585.389333pt;} -.y6e7{bottom:585.469333pt;} -.y2a4{bottom:585.474667pt;} +.y40d{bottom:585.389333pt;} +.y6dc{bottom:585.469333pt;} +.y2a1{bottom:585.474667pt;} .y20c{bottom:585.514667pt;} -.y556{bottom:585.529333pt;} +.y54f{bottom:585.529333pt;} .y167{bottom:586.236000pt;} -.y8f8{bottom:586.360000pt;} -.y8ab{bottom:586.388000pt;} -.y6fb{bottom:586.832000pt;} -.y323{bottom:587.602667pt;} +.y8ed{bottom:586.360000pt;} +.y8a0{bottom:586.388000pt;} +.y6f0{bottom:586.832000pt;} .yf{bottom:588.712000pt;} .ya9{bottom:589.556000pt;} -.y52f{bottom:589.638667pt;} -.y1c9{bottom:589.822667pt;} -.y842{bottom:590.172000pt;} -.y5e9{bottom:590.453333pt;} +.y528{bottom:589.638667pt;} +.y837{bottom:590.172000pt;} +.y5e2{bottom:590.453333pt;} +.y1c9{bottom:590.730667pt;} .y70{bottom:590.821333pt;} -.y853{bottom:591.101333pt;} -.y8d5{bottom:592.301333pt;} -.y4be{bottom:592.669333pt;} -.y897{bottom:592.808000pt;} -.y7f5{bottom:593.349333pt;} -.y6a3{bottom:593.496000pt;} -.y786{bottom:594.365333pt;} -.y255{bottom:594.673333pt;} -.y76f{bottom:594.856000pt;} +.y848{bottom:591.101333pt;} +.y8ca{bottom:592.301333pt;} +.y4b7{bottom:592.669333pt;} +.y88c{bottom:592.808000pt;} +.y255{bottom:593.093333pt;} +.y7ea{bottom:593.349333pt;} +.y698{bottom:593.496000pt;} +.y77b{bottom:594.562667pt;} +.y764{bottom:594.856000pt;} .y148{bottom:595.034667pt;} .y225{bottom:595.234667pt;} -.y85f{bottom:595.465333pt;} -.y86c{bottom:596.070667pt;} -.y3c0{bottom:596.202667pt;} -.y7e7{bottom:596.630667pt;} -.y3f8{bottom:596.744000pt;} +.y854{bottom:595.465333pt;} +.y861{bottom:596.070667pt;} +.y3bd{bottom:596.202667pt;} +.y7dc{bottom:596.630667pt;} .y108{bottom:596.806667pt;} .y12a{bottom:597.070667pt;} -.y62e{bottom:597.728000pt;} +.y3f3{bottom:597.192000pt;} +.y623{bottom:597.728000pt;} .y23d{bottom:597.916000pt;} -.y80e{bottom:598.062667pt;} -.y670{bottom:598.242667pt;} -.y5ce{bottom:598.254667pt;} +.y803{bottom:598.062667pt;} +.y665{bottom:598.242667pt;} +.y5c7{bottom:598.254667pt;} .y1aa{bottom:598.474667pt;} -.y6ba{bottom:598.517333pt;} -.y615{bottom:599.564000pt;} +.y6af{bottom:598.517333pt;} +.y38f{bottom:598.838667pt;} .y197{bottom:599.628000pt;} -.y7b9{bottom:600.146667pt;} +.y7ae{bottom:600.146667pt;} .y2b{bottom:600.365333pt;} -.y334{bottom:600.433333pt;} -.y512{bottom:600.618667pt;} -.y79f{bottom:600.760000pt;} -.y86d{bottom:601.349333pt;} -.y391{bottom:601.605333pt;} -.y56c{bottom:601.622667pt;} -.y311{bottom:602.533333pt;} -.y727{bottom:602.569333pt;} -.y2db{bottom:603.252000pt;} -.y356{bottom:603.458667pt;} -.y492{bottom:603.870667pt;} -.y340{bottom:603.986667pt;} -.y7cf{bottom:604.485333pt;} -.y909{bottom:604.508000pt;} +.y50b{bottom:600.618667pt;} +.y794{bottom:600.760000pt;} +.y862{bottom:601.349333pt;} +.y60a{bottom:601.520000pt;} +.y565{bottom:601.622667pt;} +.y30e{bottom:602.533333pt;} +.y71c{bottom:602.569333pt;} +.y2d8{bottom:603.252000pt;} +.y354{bottom:603.458667pt;} +.y331{bottom:603.728000pt;} +.y48b{bottom:603.870667pt;} +.y33e{bottom:603.986667pt;} +.y7c4{bottom:604.485333pt;} +.y8fe{bottom:604.508000pt;} .y1fe{bottom:605.304000pt;} -.y4ea{bottom:605.369333pt;} +.y4e3{bottom:605.369333pt;} .y53{bottom:605.678667pt;} -.y755{bottom:605.980000pt;} +.y74a{bottom:605.980000pt;} .yca{bottom:606.294667pt;} -.y479{bottom:606.408000pt;} +.y472{bottom:606.408000pt;} .y87{bottom:606.440000pt;} -.y6d3{bottom:606.562667pt;} -.y300{bottom:606.585333pt;} -.y2a3{bottom:607.153333pt;} +.y6c8{bottom:606.562667pt;} +.y2fd{bottom:606.585333pt;} +.y2a0{bottom:607.153333pt;} .y20b{bottom:607.193333pt;} .y166{bottom:607.914667pt;} -.y8f7{bottom:608.038667pt;} -.y8aa{bottom:608.066667pt;} +.y8ec{bottom:608.038667pt;} +.y89f{bottom:608.066667pt;} .y26b{bottom:608.421333pt;} .y1e3{bottom:608.718667pt;} -.y182{bottom:609.773333pt;} -.y588{bottom:609.882667pt;} -.y644{bottom:610.037333pt;} +.y182{bottom:608.966667pt;} +.y581{bottom:609.882667pt;} +.y639{bottom:610.037333pt;} .ye{bottom:610.390667pt;} .ye7{bottom:610.597333pt;} .ya8{bottom:611.234667pt;} -.y52e{bottom:611.317333pt;} -.y1c8{bottom:611.501333pt;} -.y5e8{bottom:612.132000pt;} -.y4d6{bottom:612.621333pt;} -.y4a4{bottom:613.132000pt;} +.y527{bottom:611.317333pt;} +.y5e1{bottom:612.132000pt;} +.y1c8{bottom:612.409333pt;} +.y4cf{bottom:612.621333pt;} +.y49d{bottom:613.132000pt;} .y289{bottom:613.278667pt;} -.y8d4{bottom:613.980000pt;} -.y4bd{bottom:614.348000pt;} -.y841{bottom:615.036000pt;} -.y541{bottom:615.050667pt;} -.y6a2{bottom:615.174667pt;} -.y430{bottom:615.617333pt;} -.y76e{bottom:616.534667pt;} -.y51c{bottom:616.666667pt;} +.y8c9{bottom:613.980000pt;} +.y4b6{bottom:614.348000pt;} +.y836{bottom:615.036000pt;} +.y53a{bottom:615.050667pt;} +.y42a{bottom:615.062667pt;} +.y697{bottom:615.174667pt;} +.y763{bottom:616.534667pt;} +.y515{bottom:616.666667pt;} .y147{bottom:616.713333pt;} .y224{bottom:616.913333pt;} -.y5ff{bottom:617.541333pt;} -.y86b{bottom:617.749333pt;} -.y45f{bottom:617.825333pt;} -.y3bf{bottom:617.881333pt;} -.y446{bottom:618.133333pt;} -.y3dc{bottom:618.138667pt;} -.y7e6{bottom:618.309333pt;} +.y5f8{bottom:617.541333pt;} +.y860{bottom:617.749333pt;} +.y459{bottom:617.825333pt;} +.y3bc{bottom:617.881333pt;} +.y440{bottom:618.133333pt;} +.y3d9{bottom:618.138667pt;} +.y7db{bottom:618.309333pt;} .y129{bottom:618.749333pt;} -.y3a8{bottom:619.204000pt;} +.y3a5{bottom:619.204000pt;} .y1a9{bottom:620.153333pt;} -.y59b{bottom:620.728000pt;} -.y614{bottom:621.242667pt;} +.y594{bottom:620.728000pt;} .y2a{bottom:622.281333pt;} -.y2bc{bottom:623.793333pt;} -.y70b{bottom:623.890667pt;} -.y659{bottom:624.210667pt;} -.y68a{bottom:624.893333pt;} -.y2da{bottom:624.930667pt;} -.y355{bottom:625.137333pt;} -.y491{bottom:625.549333pt;} -.y33f{bottom:625.665333pt;} -.y73e{bottom:626.553333pt;} -.y852{bottom:627.198667pt;} -.y527{bottom:627.810667pt;} +.y609{bottom:623.198667pt;} +.y2b9{bottom:623.793333pt;} +.y700{bottom:623.890667pt;} +.y64e{bottom:624.210667pt;} +.y67f{bottom:624.893333pt;} +.y2d7{bottom:624.930667pt;} +.y353{bottom:625.137333pt;} +.y48a{bottom:625.549333pt;} +.y33d{bottom:625.665333pt;} +.y733{bottom:626.553333pt;} +.y847{bottom:627.198667pt;} +.y379{bottom:627.462667pt;} +.y31f{bottom:627.752000pt;} +.y520{bottom:627.810667pt;} .y52{bottom:627.826667pt;} .yc9{bottom:627.973333pt;} .y86{bottom:628.118667pt;} -.y2a2{bottom:628.832000pt;} -.y555{bottom:628.886667pt;} -.y896{bottom:628.906667pt;} -.y37b{bottom:629.000000pt;} -.y7f4{bottom:629.448000pt;} +.y29f{bottom:628.832000pt;} +.y54e{bottom:628.886667pt;} +.y88b{bottom:628.906667pt;} +.y7e9{bottom:629.448000pt;} .y165{bottom:629.593333pt;} -.y8f6{bottom:629.717333pt;} -.y8a9{bottom:629.745333pt;} -.y412{bottom:630.010667pt;} -.y3f7{bottom:630.094667pt;} -.y6fa{bottom:630.189333pt;} +.y8eb{bottom:629.717333pt;} +.y89e{bottom:629.745333pt;} +.y40c{bottom:630.010667pt;} +.y6ef{bottom:630.189333pt;} .y1e2{bottom:630.397333pt;} -.y322{bottom:630.960000pt;} -.y181{bottom:631.452000pt;} -.y587{bottom:631.561333pt;} +.y3f2{bottom:630.432000pt;} +.y181{bottom:630.645333pt;} +.y580{bottom:631.561333pt;} .yd{bottom:632.069333pt;} .ye6{bottom:632.276000pt;} .ya7{bottom:632.913333pt;} -.y85e{bottom:633.333333pt;} -.y5e7{bottom:633.810667pt;} -.y254{bottom:633.988000pt;} -.y5b2{bottom:634.098667pt;} -.y4a3{bottom:634.810667pt;} -.y8d3{bottom:635.658667pt;} -.y4bc{bottom:636.026667pt;} +.y254{bottom:633.198667pt;} +.y853{bottom:633.333333pt;} +.y5e0{bottom:633.810667pt;} +.y5ab{bottom:634.098667pt;} +.y49c{bottom:634.810667pt;} +.y8c8{bottom:635.658667pt;} +.y4b5{bottom:636.026667pt;} .y20a{bottom:636.174667pt;} -.y840{bottom:636.714667pt;} -.y5cd{bottom:637.613333pt;} -.y56b{bottom:637.932000pt;} -.y908{bottom:638.044000pt;} +.y835{bottom:636.714667pt;} +.y5c6{bottom:637.613333pt;} +.y564{bottom:637.932000pt;} +.y8fd{bottom:638.044000pt;} .y146{bottom:638.392000pt;} -.y785{bottom:639.382667pt;} -.y86a{bottom:639.428000pt;} -.y45e{bottom:639.504000pt;} -.y3be{bottom:639.560000pt;} -.y445{bottom:639.812000pt;} -.y3db{bottom:639.817333pt;} -.y6e6{bottom:639.908000pt;} +.y85f{bottom:639.428000pt;} +.y458{bottom:639.504000pt;} +.y77a{bottom:639.540000pt;} +.y3bb{bottom:639.560000pt;} +.y43f{bottom:639.812000pt;} +.y3d8{bottom:639.817333pt;} +.y6db{bottom:639.908000pt;} .y107{bottom:640.164000pt;} -.y3a7{bottom:640.882667pt;} -.y62d{bottom:641.085333pt;} -.y6b9{bottom:641.874667pt;} -.y59a{bottom:642.406667pt;} -.y4fe{bottom:642.808000pt;} -.y80d{bottom:643.162667pt;} -.y7b8{bottom:643.504000pt;} +.y3a4{bottom:640.882667pt;} +.y622{bottom:641.085333pt;} +.y6ae{bottom:641.874667pt;} +.y38e{bottom:642.196000pt;} +.y593{bottom:642.406667pt;} +.y4f7{bottom:642.808000pt;} +.y802{bottom:643.162667pt;} +.y7ad{bottom:643.504000pt;} .y1{bottom:643.738667pt;} -.y333{bottom:643.790667pt;} -.y511{bottom:643.976000pt;} -.y42c{bottom:644.110667pt;} +.y50a{bottom:643.976000pt;} +.y426{bottom:644.110667pt;} .y29{bottom:644.198667pt;} -.y478{bottom:644.392000pt;} -.y390{bottom:644.962667pt;} -.y2bb{bottom:645.472000pt;} -.y66f{bottom:645.649333pt;} -.y310{bottom:645.889333pt;} +.y471{bottom:644.392000pt;} +.y2b8{bottom:645.472000pt;} +.y664{bottom:645.649333pt;} +.y30d{bottom:645.889333pt;} .y223{bottom:645.894667pt;} -.y726{bottom:645.925333pt;} +.y71b{bottom:645.925333pt;} .y23c{bottom:646.556000pt;} -.y2d9{bottom:646.609333pt;} -.y354{bottom:646.816000pt;} -.y6a1{bottom:647.137333pt;} -.y79e{bottom:647.605333pt;} -.y7ce{bottom:648.148000pt;} +.y2d6{bottom:646.609333pt;} +.y352{bottom:646.816000pt;} +.y330{bottom:647.085333pt;} +.y696{bottom:647.137333pt;} +.y793{bottom:647.605333pt;} +.y7c3{bottom:648.148000pt;} .y196{bottom:648.266667pt;} .y1fd{bottom:648.661333pt;} -.y5fe{bottom:649.252000pt;} -.y526{bottom:649.489333pt;} +.y5f7{bottom:649.252000pt;} +.y31e{bottom:649.430667pt;} +.y51f{bottom:649.489333pt;} .yc8{bottom:649.652000pt;} -.y6d2{bottom:649.918667pt;} -.y2ff{bottom:649.942667pt;} +.y6c7{bottom:649.918667pt;} +.y2fc{bottom:649.942667pt;} .y51{bottom:649.974667pt;} -.y2a1{bottom:650.510667pt;} -.y554{bottom:650.565333pt;} +.y29e{bottom:650.510667pt;} +.y54d{bottom:650.565333pt;} .y164{bottom:651.272000pt;} -.y8f5{bottom:651.406667pt;} -.y8a8{bottom:651.424000pt;} -.y3f6{bottom:651.773333pt;} +.y8ea{bottom:651.406667pt;} +.y89d{bottom:651.424000pt;} .y26a{bottom:651.778667pt;} -.y4e9{bottom:652.508000pt;} -.y321{bottom:652.638667pt;} -.y754{bottom:652.870667pt;} -.y827{bottom:652.988000pt;} -.y180{bottom:653.130667pt;} +.y3f1{bottom:652.110667pt;} +.y180{bottom:652.324000pt;} +.y4e2{bottom:652.508000pt;} +.y749{bottom:652.870667pt;} +.y81c{bottom:652.988000pt;} .y128{bottom:653.634667pt;} -.y42f{bottom:653.734667pt;} +.y429{bottom:653.658667pt;} .yc{bottom:653.748000pt;} .ye5{bottom:653.954667pt;} .y1a8{bottom:654.394667pt;} .ya6{bottom:654.592000pt;} -.y643{bottom:654.900000pt;} -.y253{bottom:655.666667pt;} -.y5b1{bottom:655.777333pt;} -.y7e5{bottom:655.928000pt;} -.y4d5{bottom:655.978667pt;} +.y253{bottom:654.877333pt;} +.y638{bottom:654.900000pt;} +.y1c7{bottom:655.766667pt;} +.y5aa{bottom:655.777333pt;} +.y7da{bottom:655.928000pt;} +.y4ce{bottom:655.978667pt;} .y288{bottom:656.636000pt;} -.y1c7{bottom:656.901333pt;} -.y4bb{bottom:657.705333pt;} -.y613{bottom:658.754667pt;} -.y52d{bottom:659.098667pt;} -.y5cc{bottom:659.292000pt;} -.y56a{bottom:659.610667pt;} -.y907{bottom:659.722667pt;} -.y76d{bottom:659.892000pt;} +.y4b4{bottom:657.705333pt;} +.y526{bottom:659.098667pt;} +.y5c5{bottom:659.292000pt;} +.y563{bottom:659.610667pt;} +.y8fc{bottom:659.722667pt;} +.y762{bottom:659.892000pt;} .y145{bottom:660.070667pt;} -.y869{bottom:661.106667pt;} -.y45d{bottom:661.182667pt;} -.y490{bottom:661.298667pt;} +.y85e{bottom:661.106667pt;} +.y457{bottom:661.182667pt;} +.y489{bottom:661.298667pt;} +.y608{bottom:661.362667pt;} .y106{bottom:661.842667pt;} -.y586{bottom:662.644000pt;} -.y62c{bottom:662.764000pt;} -.y70a{bottom:662.822667pt;} -.y6f9{bottom:663.532000pt;} -.y6b8{bottom:663.553333pt;} -.y599{bottom:664.085333pt;} -.y4fd{bottom:664.486667pt;} -.y80c{bottom:664.841333pt;} -.y7b7{bottom:665.182667pt;} -.y540{bottom:665.222667pt;} -.y510{bottom:665.654667pt;} -.y42b{bottom:665.789333pt;} +.y57f{bottom:662.644000pt;} +.y621{bottom:662.764000pt;} +.y6ff{bottom:662.822667pt;} +.y6ee{bottom:663.532000pt;} +.y6ad{bottom:663.553333pt;} +.y592{bottom:664.085333pt;} +.y4f6{bottom:664.486667pt;} +.y801{bottom:664.841333pt;} +.y7ac{bottom:665.182667pt;} +.y539{bottom:665.222667pt;} +.y509{bottom:665.654667pt;} +.y425{bottom:665.789333pt;} .y28{bottom:666.116000pt;} -.y476{bottom:666.165333pt;} -.y66e{bottom:667.328000pt;} -.y30f{bottom:667.568000pt;} -.y689{bottom:668.249333pt;} -.y6a0{bottom:668.816000pt;} -.y73d{bottom:669.910667pt;} +.y46f{bottom:666.165333pt;} +.y663{bottom:667.328000pt;} +.y30c{bottom:667.568000pt;} +.y67e{bottom:668.249333pt;} +.y695{bottom:668.816000pt;} +.y732{bottom:669.910667pt;} .y195{bottom:669.945333pt;} -.y8d2{bottom:670.105333pt;} +.y8c7{bottom:670.105333pt;} .y1fc{bottom:670.340000pt;} -.y525{bottom:671.168000pt;} +.y378{bottom:670.820000pt;} +.y51e{bottom:671.168000pt;} .yc7{bottom:671.330667pt;} -.y477{bottom:671.444000pt;} +.y470{bottom:671.444000pt;} .y85{bottom:671.721333pt;} .y6f{bottom:672.122667pt;} -.y2a0{bottom:672.189333pt;} -.y553{bottom:672.244000pt;} -.y33e{bottom:672.246667pt;} -.y37a{bottom:672.357333pt;} -.y444{bottom:672.876000pt;} +.y29d{bottom:672.189333pt;} +.y54c{bottom:672.244000pt;} +.y33c{bottom:672.246667pt;} +.y43e{bottom:672.876000pt;} .y163{bottom:672.950667pt;} -.y8f4{bottom:673.097333pt;} -.y8a7{bottom:673.102667pt;} -.y411{bottom:673.368000pt;} +.y8e9{bottom:673.097333pt;} +.y89c{bottom:673.102667pt;} +.y40b{bottom:673.368000pt;} .y1e1{bottom:673.754667pt;} -.y826{bottom:674.666667pt;} +.y81b{bottom:674.666667pt;} .y127{bottom:675.313333pt;} +.y428{bottom:675.337333pt;} .y209{bottom:675.352000pt;} -.y42e{bottom:675.413333pt;} .yb{bottom:675.426667pt;} .ya5{bottom:676.270667pt;} -.y642{bottom:676.578667pt;} -.y851{bottom:677.420000pt;} -.y7e4{bottom:677.606667pt;} -.y4d4{bottom:677.657333pt;} -.y4a2{bottom:678.166667pt;} -.y3da{bottom:678.441333pt;} -.y3a6{bottom:678.604000pt;} -.y4ba{bottom:679.384000pt;} -.y7f3{bottom:679.774667pt;} -.y612{bottom:680.457333pt;} -.y7cd{bottom:680.906667pt;} -.y5cb{bottom:680.970667pt;} -.y569{bottom:681.289333pt;} -.y784{bottom:682.740000pt;} -.y867{bottom:682.785333pt;} -.y725{bottom:682.852000pt;} -.y3bd{bottom:682.917333pt;} -.y48f{bottom:682.977333pt;} -.y6e5{bottom:683.265333pt;} +.y637{bottom:676.578667pt;} +.y846{bottom:677.420000pt;} +.y7d9{bottom:677.606667pt;} +.y4cd{bottom:677.657333pt;} +.y49b{bottom:678.166667pt;} +.y3d7{bottom:678.441333pt;} +.y3a3{bottom:678.604000pt;} +.y4b3{bottom:679.384000pt;} +.y7e8{bottom:679.774667pt;} +.y7c2{bottom:680.906667pt;} +.y5c4{bottom:680.970667pt;} +.y562{bottom:681.289333pt;} +.y85c{bottom:682.785333pt;} +.y71a{bottom:682.852000pt;} +.y779{bottom:682.897333pt;} +.y3ba{bottom:682.917333pt;} +.y488{bottom:682.977333pt;} +.y607{bottom:683.194667pt;} +.y6da{bottom:683.265333pt;} .y222{bottom:683.948000pt;} -.y5e6{bottom:685.209333pt;} -.y6f8{bottom:685.210667pt;} -.y6b7{bottom:685.232000pt;} -.y4fc{bottom:686.165333pt;} -.y53f{bottom:686.901333pt;} +.y5df{bottom:685.209333pt;} +.y6ed{bottom:685.210667pt;} +.y6ac{bottom:685.232000pt;} +.y38d{bottom:685.553333pt;} +.y4f5{bottom:686.165333pt;} +.y538{bottom:686.901333pt;} .y50{bottom:686.980000pt;} -.y2fe{bottom:687.606667pt;} -.y475{bottom:687.844000pt;} -.y868{bottom:688.064000pt;} -.y38f{bottom:688.320000pt;} -.y2ba{bottom:688.838667pt;} -.y658{bottom:689.246667pt;} -.y895{bottom:689.313333pt;} +.y2fb{bottom:687.606667pt;} +.y46e{bottom:687.844000pt;} +.y85d{bottom:688.064000pt;} +.y2b7{bottom:688.838667pt;} +.y64d{bottom:689.246667pt;} +.y88a{bottom:689.313333pt;} .y23b{bottom:689.912000pt;} -.y688{bottom:689.928000pt;} -.y2d8{bottom:689.966667pt;} +.y67d{bottom:689.928000pt;} +.y2d5{bottom:689.966667pt;} .ye4{bottom:690.052000pt;} -.y332{bottom:690.442667pt;} +.y32f{bottom:690.442667pt;} .y1a7{bottom:690.492000pt;} -.y69f{bottom:690.494667pt;} -.y79d{bottom:690.962667pt;} +.y694{bottom:690.494667pt;} +.y792{bottom:690.962667pt;} .y194{bottom:691.624000pt;} .y105{bottom:691.685333pt;} -.y8d1{bottom:691.784000pt;} +.y8c6{bottom:691.784000pt;} +.y31d{bottom:692.105333pt;} +.y377{bottom:692.498667pt;} .yc6{bottom:693.009333pt;} -.y6d1{bottom:693.276000pt;} +.y6c6{bottom:693.276000pt;} .y84{bottom:693.400000pt;} -.y5fd{bottom:693.793333pt;} -.y29f{bottom:693.868000pt;} -.y552{bottom:693.922667pt;} -.y33d{bottom:693.925333pt;} -.y379{bottom:694.036000pt;} +.y5f6{bottom:693.793333pt;} +.y29c{bottom:693.868000pt;} +.y54b{bottom:693.922667pt;} +.y33b{bottom:693.925333pt;} .y6e{bottom:694.270667pt;} -.y320{bottom:694.405333pt;} -.y443{bottom:694.554667pt;} +.y43d{bottom:694.554667pt;} .y162{bottom:694.629333pt;} -.y8c0{bottom:694.781333pt;} -.y8f3{bottom:694.786667pt;} -.y410{bottom:695.046667pt;} +.y8b5{bottom:694.781333pt;} +.y8e8{bottom:694.786667pt;} +.y40a{bottom:695.046667pt;} .y269{bottom:695.136000pt;} -.y45c{bottom:695.733333pt;} +.y456{bottom:695.733333pt;} .y0{bottom:695.929333pt;} -.y753{bottom:696.228000pt;} -.y824{bottom:696.344000pt;} -.y825{bottom:696.345333pt;} -.y3f5{bottom:696.428000pt;} +.y748{bottom:696.228000pt;} +.y819{bottom:696.344000pt;} +.y81a{bottom:696.345333pt;} +.y3f0{bottom:696.652000pt;} .y126{bottom:696.992000pt;} .y208{bottom:697.030667pt;} -.y906{bottom:697.048000pt;} +.y8fb{bottom:697.048000pt;} .ya{bottom:697.105333pt;} -.y850{bottom:699.098667pt;} -.y4d3{bottom:699.336000pt;} -.y353{bottom:699.504000pt;} -.y62b{bottom:699.738667pt;} +.y845{bottom:699.098667pt;} +.y1c6{bottom:699.124000pt;} +.y4cc{bottom:699.336000pt;} +.y351{bottom:699.504000pt;} +.y17f{bottom:699.513333pt;} +.y620{bottom:699.738667pt;} .y287{bottom:699.993333pt;} -.y17f{bottom:700.117333pt;} -.y1c6{bottom:700.258667pt;} -.y50f{bottom:700.262667pt;} +.y508{bottom:700.262667pt;} .y144{bottom:701.004000pt;} -.y83f{bottom:701.274667pt;} -.y611{bottom:702.136000pt;} -.y52c{bottom:702.456000pt;} -.y598{bottom:702.545333pt;} +.y834{bottom:701.274667pt;} +.y525{bottom:702.456000pt;} +.y591{bottom:702.545333pt;} .y27{bottom:702.736000pt;} -.y76c{bottom:703.249333pt;} -.y420{bottom:703.333333pt;} -.y5b0{bottom:703.714667pt;} -.y724{bottom:704.530667pt;} -.y48e{bottom:704.656000pt;} -.y6e4{bottom:704.944000pt;} -.y66d{bottom:705.028000pt;} -.y585{bottom:705.224000pt;} +.y761{bottom:703.249333pt;} +.y41a{bottom:703.333333pt;} +.y5a9{bottom:703.714667pt;} +.y719{bottom:704.530667pt;} +.y487{bottom:704.656000pt;} +.y606{bottom:704.873333pt;} +.y6d9{bottom:704.944000pt;} +.y662{bottom:705.028000pt;} +.y57e{bottom:705.224000pt;} .y252{bottom:705.266667pt;} .y221{bottom:705.626667pt;} -.y7b6{bottom:706.241333pt;} -.y8a6{bottom:706.493333pt;} -.y4fb{bottom:707.844000pt;} -.y7e3{bottom:708.689333pt;} +.y7ab{bottom:706.241333pt;} +.y89b{bottom:706.493333pt;} +.y4f4{bottom:707.844000pt;} +.y7d8{bottom:708.689333pt;} .y4f{bottom:709.128000pt;} .ya4{bottom:709.976000pt;} -.y30e{bottom:710.925333pt;} -.y894{bottom:710.992000pt;} -.y42d{bottom:711.510667pt;} -.y709{bottom:711.529333pt;} +.y30b{bottom:710.925333pt;} +.y889{bottom:710.992000pt;} +.y427{bottom:711.434667pt;} +.y6fe{bottom:711.529333pt;} .y23a{bottom:711.590667pt;} -.y2d7{bottom:711.645333pt;} -.y69e{bottom:712.173333pt;} -.y568{bottom:712.370667pt;} -.y73c{bottom:712.465333pt;} +.y2d4{bottom:711.645333pt;} +.y693{bottom:712.173333pt;} +.y561{bottom:712.370667pt;} +.y731{bottom:712.465333pt;} .y104{bottom:713.364000pt;} -.y8d0{bottom:713.462667pt;} +.y8c5{bottom:713.462667pt;} .y1fb{bottom:713.697333pt;} -.y42a{bottom:714.428000pt;} -.y524{bottom:714.525333pt;} +.y31c{bottom:713.784000pt;} +.y424{bottom:714.428000pt;} +.y51d{bottom:714.525333pt;} .yc5{bottom:714.688000pt;} .y83{bottom:715.078667pt;} -.y5fc{bottom:715.472000pt;} -.y33c{bottom:715.604000pt;} -.y31f{bottom:716.084000pt;} -.y442{bottom:716.233333pt;} +.y5f5{bottom:715.472000pt;} +.y33a{bottom:715.604000pt;} +.y43c{bottom:716.233333pt;} .y6d{bottom:716.417333pt;} -.y8bf{bottom:716.460000pt;} -.y8f2{bottom:716.477333pt;} -.y40f{bottom:716.725333pt;} -.y783{bottom:716.852000pt;} +.y8b4{bottom:716.460000pt;} +.y8e7{bottom:716.477333pt;} +.y409{bottom:716.725333pt;} +.y778{bottom:716.970667pt;} .y1e0{bottom:717.112000pt;} -.y45b{bottom:717.412000pt;} -.y4e8{bottom:717.544000pt;} -.y5ca{bottom:717.900000pt;} -.y823{bottom:718.022667pt;} +.y455{bottom:717.412000pt;} +.y4e1{bottom:717.544000pt;} +.y5c3{bottom:717.900000pt;} +.y818{bottom:718.022667pt;} .y125{bottom:718.670667pt;} -.y6b6{bottom:718.726667pt;} +.y6ab{bottom:718.726667pt;} .y9{bottom:718.784000pt;} -.y641{bottom:719.936000pt;} -.y80b{bottom:720.120000pt;} -.y84f{bottom:720.777333pt;} -.y4d2{bottom:721.014667pt;} -.y4a1{bottom:721.524000pt;} -.y50e{bottom:721.941333pt;} -.y4b9{bottom:722.470667pt;} -.y29e{bottom:722.849333pt;} -.y83e{bottom:722.953333pt;} -.y610{bottom:723.814667pt;} -.y52b{bottom:724.134667pt;} -.y597{bottom:724.224000pt;} +.y636{bottom:719.936000pt;} +.y800{bottom:720.120000pt;} +.y844{bottom:720.777333pt;} +.y4cb{bottom:721.014667pt;} +.y49a{bottom:721.524000pt;} +.y507{bottom:721.941333pt;} +.y4b2{bottom:722.470667pt;} +.y29b{bottom:722.849333pt;} +.y833{bottom:722.953333pt;} +.y524{bottom:724.134667pt;} +.y590{bottom:724.224000pt;} .y26{bottom:724.653333pt;} .y161{bottom:724.936000pt;} -.y7cc{bottom:725.380000pt;} -.y3bc{bottom:726.274667pt;} -.y48d{bottom:726.334667pt;} -.y7f2{bottom:726.468000pt;} -.y79c{bottom:726.674667pt;} -.y584{bottom:726.902667pt;} +.y7c1{bottom:725.380000pt;} +.y3b9{bottom:726.274667pt;} +.y486{bottom:726.334667pt;} +.y7e7{bottom:726.468000pt;} +.y605{bottom:726.552000pt;} +.y791{bottom:726.674667pt;} +.y57d{bottom:726.902667pt;} .y251{bottom:726.945333pt;} .y220{bottom:727.305333pt;} -.y7b5{bottom:727.920000pt;} -.y8a5{bottom:728.172000pt;} -.y5e5{bottom:728.566667pt;} -.y4fa{bottom:729.522667pt;} -.y6f7{bottom:729.686667pt;} -.y917{bottom:730.085333pt;} +.y7aa{bottom:727.920000pt;} +.y89a{bottom:728.172000pt;} +.y5de{bottom:728.566667pt;} +.y38c{bottom:728.910667pt;} +.y4f3{bottom:729.522667pt;} +.y6ec{bottom:729.686667pt;} +.y90c{bottom:730.085333pt;} +.y376{bottom:730.317333pt;} .y193{bottom:730.488000pt;} .y143{bottom:730.522667pt;} .y4e{bottom:731.276000pt;} -.y378{bottom:731.546667pt;} -.y38e{bottom:731.677333pt;} -.y752{bottom:731.873333pt;} -.y2b9{bottom:732.196000pt;} -.y687{bottom:732.493333pt;} -.y53e{bottom:732.604000pt;} -.y893{bottom:732.670667pt;} +.y747{bottom:731.873333pt;} +.y2b6{bottom:732.196000pt;} +.y67c{bottom:732.493333pt;} +.y537{bottom:732.604000pt;} +.y888{bottom:732.670667pt;} .y207{bottom:733.128000pt;} -.y2d6{bottom:733.324000pt;} -.y331{bottom:733.800000pt;} -.y3a5{bottom:734.016000pt;} -.y73a{bottom:734.144000pt;} +.y2d3{bottom:733.324000pt;} +.y32e{bottom:733.800000pt;} +.y3a2{bottom:734.016000pt;} +.y72f{bottom:734.144000pt;} .y103{bottom:735.042667pt;} -.y8cf{bottom:735.141333pt;} -.y523{bottom:736.204000pt;} +.y8c4{bottom:735.141333pt;} +.y1c5{bottom:735.605333pt;} +.y51c{bottom:736.204000pt;} .yc4{bottom:736.366667pt;} -.y2fd{bottom:736.402667pt;} -.y3d9{bottom:736.506667pt;} -.y1c5{bottom:736.513333pt;} -.y6d0{bottom:736.633333pt;} -.y474{bottom:736.960000pt;} -.y551{bottom:737.280000pt;} -.y33b{bottom:737.282667pt;} -.y441{bottom:737.912000pt;} +.y2fa{bottom:736.402667pt;} +.y3d6{bottom:736.506667pt;} +.y6c5{bottom:736.633333pt;} +.y46d{bottom:736.960000pt;} +.y54a{bottom:737.280000pt;} +.y339{bottom:737.282667pt;} +.y43b{bottom:737.912000pt;} .y82{bottom:737.954667pt;} -.y8f1{bottom:738.166667pt;} -.y40e{bottom:738.402667pt;} +.y8e6{bottom:738.166667pt;} +.y408{bottom:738.402667pt;} .y268{bottom:738.493333pt;} -.y782{bottom:738.530667pt;} .y6c{bottom:738.565333pt;} +.y777{bottom:738.649333pt;} .y1df{bottom:738.790667pt;} -.y4e7{bottom:739.222667pt;} -.y73b{bottom:739.422667pt;} -.y822{bottom:739.701333pt;} -.y3f4{bottom:739.785333pt;} +.y4e0{bottom:739.222667pt;} +.y730{bottom:739.422667pt;} +.y817{bottom:739.701333pt;} +.y3ef{bottom:740.009333pt;} .ye3{bottom:740.349333pt;} -.y6b5{bottom:740.405333pt;} +.y6aa{bottom:740.405333pt;} .y8{bottom:740.462667pt;} -.y352{bottom:741.060000pt;} -.y640{bottom:741.613333pt;} -.y80a{bottom:741.798667pt;} -.y76b{bottom:742.146667pt;} -.y84e{bottom:742.456000pt;} -.y4d1{bottom:742.693333pt;} +.y350{bottom:741.060000pt;} +.y635{bottom:741.613333pt;} +.y7ff{bottom:741.798667pt;} +.y760{bottom:742.146667pt;} +.y843{bottom:742.456000pt;} +.y4ca{bottom:742.693333pt;} +.y17e{bottom:742.870667pt;} .y286{bottom:743.350667pt;} -.y17e{bottom:743.474667pt;} -.y4b8{bottom:744.149333pt;} -.y83d{bottom:744.632000pt;} -.y596{bottom:745.902667pt;} +.y4b1{bottom:744.149333pt;} +.y832{bottom:744.632000pt;} +.y58f{bottom:745.902667pt;} .y25{bottom:746.569333pt;} .y160{bottom:746.614667pt;} -.y7cb{bottom:747.058667pt;} -.y5af{bottom:747.072000pt;} -.y62a{bottom:747.846667pt;} -.y3bb{bottom:747.953333pt;} -.y48c{bottom:748.013333pt;} -.y6e3{bottom:748.250667pt;} -.y69d{bottom:748.270667pt;} -.y79b{bottom:748.353333pt;} -.y583{bottom:748.581333pt;} +.y7c0{bottom:747.058667pt;} +.y5a8{bottom:747.072000pt;} +.y61f{bottom:747.846667pt;} +.y3b8{bottom:747.953333pt;} +.y485{bottom:748.013333pt;} +.y6d8{bottom:748.250667pt;} +.y692{bottom:748.270667pt;} +.y790{bottom:748.353333pt;} +.y57c{bottom:748.581333pt;} .y250{bottom:748.624000pt;} .y239{bottom:748.984000pt;} -.y8a4{bottom:749.850667pt;} -.y5e4{bottom:750.245333pt;} -.y4f9{bottom:751.201333pt;} -.y7e2{bottom:751.380000pt;} -.y916{bottom:751.764000pt;} +.y899{bottom:749.850667pt;} +.y5dd{bottom:750.245333pt;} +.y4f2{bottom:751.201333pt;} +.y7d7{bottom:751.380000pt;} +.y90b{bottom:751.764000pt;} +.y31b{bottom:751.957333pt;} .y192{bottom:752.166667pt;} -.y5fb{bottom:752.197333pt;} -.y723{bottom:752.704000pt;} -.y50d{bottom:753.022667pt;} +.y5f4{bottom:752.197333pt;} +.y718{bottom:752.704000pt;} +.y506{bottom:753.022667pt;} .y4d{bottom:753.424000pt;} -.y45a{bottom:753.509333pt;} -.y751{bottom:753.552000pt;} -.y31e{bottom:753.904000pt;} -.y686{bottom:754.172000pt;} -.y30d{bottom:754.282667pt;} -.y708{bottom:754.886667pt;} -.y566{bottom:754.900000pt;} -.y3a4{bottom:755.694667pt;} -.y8ce{bottom:756.820000pt;} +.y454{bottom:753.509333pt;} +.y746{bottom:753.552000pt;} +.y67b{bottom:754.172000pt;} +.y30a{bottom:754.282667pt;} +.y6fd{bottom:754.886667pt;} +.y55f{bottom:754.900000pt;} +.y3a1{bottom:755.694667pt;} +.y8c3{bottom:756.820000pt;} .y1fa{bottom:757.054667pt;} -.y429{bottom:757.785333pt;} -.y522{bottom:757.882667pt;} -.y3d8{bottom:758.185333pt;} -.y1c4{bottom:758.192000pt;} -.y473{bottom:758.638667pt;} +.y1c4{bottom:757.284000pt;} +.y423{bottom:757.785333pt;} +.y51b{bottom:757.882667pt;} +.y3d5{bottom:758.185333pt;} +.y46c{bottom:758.638667pt;} .y81{bottom:759.633333pt;} -.y8f0{bottom:759.857333pt;} -.y40d{bottom:760.081333pt;} -.y567{bottom:760.178667pt;} -.y781{bottom:760.209333pt;} -.y66c{bottom:760.378667pt;} +.y8e5{bottom:759.857333pt;} +.y407{bottom:760.081333pt;} +.y560{bottom:760.178667pt;} +.y776{bottom:760.328000pt;} +.y661{bottom:760.378667pt;} .ya3{bottom:760.385333pt;} .y6b{bottom:760.713333pt;} -.y821{bottom:761.380000pt;} -.y3f3{bottom:761.464000pt;} +.y816{bottom:761.380000pt;} +.y3ee{bottom:761.688000pt;} .ye1{bottom:762.026667pt;} .ye2{bottom:762.028000pt;} -.y6b4{bottom:762.084000pt;} +.y6a9{bottom:762.084000pt;} .y7{bottom:762.141333pt;} -.y351{bottom:762.738667pt;} +.y34f{bottom:762.738667pt;} .y21f{bottom:763.402667pt;} -.y809{bottom:763.477333pt;} -.y76a{bottom:763.825333pt;} -.y84d{bottom:764.134667pt;} -.y4a0{bottom:764.881333pt;} +.y7fe{bottom:763.477333pt;} +.y75f{bottom:763.825333pt;} +.y842{bottom:764.134667pt;} +.y499{bottom:764.881333pt;} .y285{bottom:765.029333pt;} -.y2b8{bottom:765.384000pt;} -.y2b7{bottom:765.385333pt;} -.y33a{bottom:766.264000pt;} -.y83c{bottom:766.310667pt;} +.y2b5{bottom:765.384000pt;} +.y2b4{bottom:765.385333pt;} +.y338{bottom:766.264000pt;} +.y831{bottom:766.310667pt;} .y142{bottom:766.620000pt;} -.y29c{bottom:767.385333pt;} -.y595{bottom:767.581333pt;} +.y58e{bottom:767.581333pt;} .y15f{bottom:768.293333pt;} .y24{bottom:768.486667pt;} -.y2d5{bottom:768.514667pt;} -.y7ca{bottom:768.737333pt;} -.y629{bottom:769.525333pt;} -.y3ba{bottom:769.632000pt;} -.y48b{bottom:769.692000pt;} +.y2d2{bottom:768.514667pt;} +.y7bf{bottom:768.737333pt;} +.y38b{bottom:768.873333pt;} +.y61e{bottom:769.525333pt;} +.y3b7{bottom:769.632000pt;} +.y484{bottom:769.692000pt;} .y24f{bottom:770.302667pt;} .y238{bottom:770.662667pt;} -.y38d{bottom:770.717333pt;} -.y5c9{bottom:770.978667pt;} -.y6e2{bottom:771.089333pt;} -.y330{bottom:771.305333pt;} -.y8a3{bottom:771.529333pt;} +.y299{bottom:770.680000pt;} +.y5c2{bottom:770.978667pt;} +.y6d7{bottom:771.089333pt;} +.y32d{bottom:771.305333pt;} +.y898{bottom:771.529333pt;} .y1de{bottom:772.165333pt;} -.y60f{bottom:772.572000pt;} -.y6f6{bottom:773.044000pt;} -.y7e1{bottom:773.058667pt;} -.y550{bottom:773.412000pt;} -.y915{bottom:773.442667pt;} -.y7b4{bottom:774.036000pt;} -.y6cf{bottom:774.550667pt;} -.y750{bottom:775.230667pt;} +.y6eb{bottom:773.044000pt;} +.y7d6{bottom:773.058667pt;} +.y549{bottom:773.412000pt;} +.y90a{bottom:773.442667pt;} +.y7a9{bottom:774.036000pt;} +.y6c4{bottom:774.550667pt;} +.y745{bottom:775.230667pt;} .y4c{bottom:775.572000pt;} -.y366{bottom:775.928000pt;} +.y364{bottom:775.928000pt;} .y102{bottom:775.961333pt;} -.y892{bottom:776.028000pt;} -.y3a3{bottom:777.373333pt;} +.y887{bottom:776.028000pt;} +.y3a0{bottom:777.373333pt;} .y1f9{bottom:778.733333pt;} -.y17d{bottom:779.216000pt;} -.y428{bottom:779.464000pt;} -.y521{bottom:779.561333pt;} +.y17d{bottom:778.813333pt;} +.y375{bottom:779.268000pt;} +.y422{bottom:779.464000pt;} +.y51a{bottom:779.561333pt;} .yc3{bottom:779.724000pt;} -.y2fc{bottom:779.760000pt;} -.y377{bottom:780.190667pt;} -.y3d7{bottom:781.164000pt;} +.y2f9{bottom:779.760000pt;} +.y3d4{bottom:781.164000pt;} .y80{bottom:781.312000pt;} -.y8ef{bottom:781.546667pt;} +.y8e4{bottom:781.546667pt;} .y267{bottom:781.850667pt;} -.y66b{bottom:782.057333pt;} +.y660{bottom:782.057333pt;} .ya2{bottom:782.064000pt;} -.y440{bottom:782.164000pt;} -.y4e6{bottom:782.580000pt;} -.y820{bottom:783.058667pt;} +.y43a{bottom:782.164000pt;} +.y4df{bottom:782.580000pt;} +.y815{bottom:783.058667pt;} .y191{bottom:783.248000pt;} -.y5ae{bottom:783.649333pt;} +.y5a7{bottom:783.649333pt;} .ydf{bottom:783.705333pt;} .y206{bottom:783.762667pt;} .y6{bottom:783.820000pt;} -.y63f{bottom:784.970667pt;} -.y350{bottom:785.228000pt;} -.y685{bottom:787.286667pt;} -.y739{bottom:787.944000pt;} -.y83b{bottom:787.989333pt;} +.y634{bottom:784.970667pt;} +.y34e{bottom:785.228000pt;} +.y67a{bottom:787.286667pt;} +.y72e{bottom:787.944000pt;} +.y830{bottom:787.989333pt;} .ye0{bottom:788.984000pt;} -.y29b{bottom:789.064000pt;} .y15e{bottom:789.972000pt;} -.y2d4{bottom:790.193333pt;} -.y5e3{bottom:790.284000pt;} +.y2d1{bottom:790.193333pt;} +.y5dc{bottom:790.284000pt;} .y23{bottom:790.404000pt;} -.y7c9{bottom:790.416000pt;} -.y8cd{bottom:791.265333pt;} +.y7be{bottom:790.416000pt;} +.y38a{bottom:790.552000pt;} +.y8c2{bottom:791.265333pt;} .y24e{bottom:791.981333pt;} -.y4d0{bottom:792.021333pt;} -.y707{bottom:792.290667pt;} -.y38c{bottom:792.396000pt;} -.y5c8{bottom:792.657333pt;} -.y8a2{bottom:793.208000pt;} -.y40c{bottom:793.570667pt;} +.y4c9{bottom:792.021333pt;} +.y6fc{bottom:792.290667pt;} +.y298{bottom:792.358667pt;} +.y5c1{bottom:792.657333pt;} +.y897{bottom:793.208000pt;} +.y406{bottom:793.570667pt;} .y1dd{bottom:793.844000pt;} -.y4f8{bottom:794.558667pt;} -.y54f{bottom:795.090667pt;} -.y914{bottom:795.121333pt;} -.y79a{bottom:795.198667pt;} -.y50c{bottom:795.257333pt;} -.y7b3{bottom:795.714667pt;} -.y722{bottom:796.061333pt;} -.y6ce{bottom:796.229333pt;} -.y3f2{bottom:796.344000pt;} -.y472{bottom:796.509333pt;} -.y582{bottom:796.522667pt;} -.y74e{bottom:796.908000pt;} -.y74f{bottom:796.909333pt;} -.y4b7{bottom:797.009333pt;} -.y365{bottom:797.606667pt;} -.y657{bottom:797.640000pt;} -.y891{bottom:797.706667pt;} +.y4f1{bottom:794.558667pt;} +.y548{bottom:795.090667pt;} +.y909{bottom:795.121333pt;} +.y78f{bottom:795.198667pt;} +.y505{bottom:795.257333pt;} +.y7a8{bottom:795.714667pt;} +.y717{bottom:796.061333pt;} +.y6c3{bottom:796.229333pt;} +.y3ed{bottom:796.456000pt;} +.y46b{bottom:796.509333pt;} +.y57b{bottom:796.522667pt;} +.y743{bottom:796.908000pt;} +.y744{bottom:796.909333pt;} +.y4b0{bottom:797.009333pt;} +.y363{bottom:797.606667pt;} +.y64c{bottom:797.640000pt;} +.y886{bottom:797.706667pt;} .y4b{bottom:797.720000pt;} -.y69c{bottom:798.014667pt;} -.y17c{bottom:800.894667pt;} -.y427{bottom:801.142667pt;} -.y520{bottom:801.240000pt;} -.y565{bottom:802.512000pt;} -.y3d6{bottom:802.842667pt;} +.y691{bottom:798.014667pt;} +.y17c{bottom:800.492000pt;} +.y421{bottom:801.142667pt;} +.y519{bottom:801.240000pt;} +.y55e{bottom:802.512000pt;} +.y3d3{bottom:802.842667pt;} .y7f{bottom:802.990667pt;} -.y8ee{bottom:803.237333pt;} +.y8e3{bottom:803.237333pt;} .y266{bottom:803.529333pt;} -.y594{bottom:803.678667pt;} -.y66a{bottom:803.736000pt;} -.y3b9{bottom:803.824000pt;} +.y58d{bottom:803.678667pt;} +.y65f{bottom:803.736000pt;} +.y3b6{bottom:803.824000pt;} .y284{bottom:804.665333pt;} -.y5fa{bottom:804.681333pt;} -.y780{bottom:805.226667pt;} -.y5ac{bottom:805.328000pt;} +.y5f3{bottom:804.681333pt;} +.y1c3{bottom:804.898667pt;} +.y775{bottom:805.305333pt;} +.y5a5{bottom:805.328000pt;} .yde{bottom:805.384000pt;} .y205{bottom:805.441333pt;} .y5{bottom:805.498667pt;} -.y1c3{bottom:805.580000pt;} -.y49f{bottom:806.586667pt;} -.y63e{bottom:806.649333pt;} +.y498{bottom:806.586667pt;} +.y633{bottom:806.649333pt;} .y237{bottom:806.760000pt;} -.y808{bottom:806.834667pt;} -.y34f{bottom:806.906667pt;} -.y2b6{bottom:808.752000pt;} -.y31d{bottom:809.606667pt;} -.y8a0{bottom:810.000000pt;} -.y5ad{bottom:810.606667pt;} -.y29a{bottom:810.742667pt;} +.y7fd{bottom:806.834667pt;} +.y34d{bottom:806.906667pt;} +.y31a{bottom:808.698667pt;} +.y2b3{bottom:808.752000pt;} +.y895{bottom:810.000000pt;} +.y5a6{bottom:810.606667pt;} .y15d{bottom:811.650667pt;} -.y2d3{bottom:811.872000pt;} -.y5e2{bottom:811.962667pt;} -.y7c8{bottom:812.094667pt;} +.y2d0{bottom:811.872000pt;} +.y5db{bottom:811.962667pt;} +.y7bd{bottom:812.094667pt;} .y22{bottom:812.320000pt;} -.y628{bottom:812.882667pt;} -.y8cc{bottom:812.944000pt;} +.y61d{bottom:812.882667pt;} +.y8c1{bottom:812.944000pt;} .y24d{bottom:813.660000pt;} -.y4cf{bottom:813.700000pt;} -.y769{bottom:813.968000pt;} -.y706{bottom:813.969333pt;} +.y4c8{bottom:813.700000pt;} +.y75e{bottom:813.968000pt;} +.y6fb{bottom:813.969333pt;} .y21e{bottom:814.037333pt;} -.y5c7{bottom:814.336000pt;} -.y459{bottom:814.484000pt;} -.y8a1{bottom:814.886667pt;} -.y40b{bottom:815.249333pt;} +.y5c0{bottom:814.336000pt;} +.y453{bottom:814.484000pt;} +.y896{bottom:814.886667pt;} +.y405{bottom:815.249333pt;} .y1dc{bottom:815.522667pt;} -.y60e{bottom:815.929333pt;} .y140{bottom:816.041333pt;} .y141{bottom:816.042667pt;} -.y4f7{bottom:816.237333pt;} -.y6f5{bottom:816.401333pt;} -.y54e{bottom:816.769333pt;} +.y4f0{bottom:816.237333pt;} +.y6ea{bottom:816.401333pt;} +.y547{bottom:816.769333pt;} .y122{bottom:816.782667pt;} -.y913{bottom:816.800000pt;} -.y7b2{bottom:817.393333pt;} +.y908{bottom:816.800000pt;} +.y7a7{bottom:817.393333pt;} .y1f8{bottom:817.597333pt;} -.y3f0{bottom:818.021333pt;} -.y3f1{bottom:818.022667pt;} -.y74d{bottom:818.586667pt;} -.y2fb{bottom:818.781333pt;} -.y364{bottom:819.285333pt;} +.y3ec{bottom:818.134667pt;} +.y742{bottom:818.586667pt;} +.y2f8{bottom:818.781333pt;} +.y362{bottom:819.285333pt;} .y101{bottom:819.318667pt;} -.y69b{bottom:819.693333pt;} +.y690{bottom:819.693333pt;} .y4a{bottom:819.868000pt;} -.y32f{bottom:819.945333pt;} +.y32c{bottom:819.945333pt;} .ya1{bottom:820.784000pt;} -.y7e0{bottom:821.697333pt;} -.y17b{bottom:822.573333pt;} -.y426{bottom:822.821333pt;} -.y51f{bottom:822.917333pt;} +.y7d5{bottom:821.697333pt;} +.y17b{bottom:822.170667pt;} +.y374{bottom:822.625333pt;} +.y420{bottom:822.821333pt;} +.y518{bottom:822.917333pt;} .yc2{bottom:823.081333pt;} -.y376{bottom:823.548000pt;} -.y564{bottom:824.190667pt;} -.y3d5{bottom:824.521333pt;} +.y55d{bottom:824.190667pt;} +.y3d2{bottom:824.521333pt;} .y7e{bottom:824.669333pt;} -.y8ed{bottom:824.916000pt;} -.y668{bottom:825.414667pt;} -.y3b8{bottom:825.502667pt;} -.y43f{bottom:825.521333pt;} -.y6e1{bottom:825.528000pt;} -.y4e5{bottom:825.937333pt;} +.y8e2{bottom:824.916000pt;} +.y65d{bottom:825.414667pt;} +.y3b5{bottom:825.502667pt;} +.y439{bottom:825.521333pt;} +.y6d6{bottom:825.528000pt;} +.y4de{bottom:825.937333pt;} .y283{bottom:826.344000pt;} -.y5f9{bottom:826.360000pt;} -.y81f{bottom:826.416000pt;} -.y5ab{bottom:827.006667pt;} +.y5f2{bottom:826.360000pt;} +.y814{bottom:826.416000pt;} +.y1c2{bottom:826.577333pt;} +.y5a4{bottom:827.006667pt;} .ydd{bottom:827.062667pt;} .y204{bottom:827.120000pt;} .y4{bottom:827.177333pt;} -.y1c2{bottom:827.258667pt;} -.y63d{bottom:828.328000pt;} -.y807{bottom:828.513333pt;} -.y3a2{bottom:830.189333pt;} -.y2b5{bottom:830.430667pt;} -.y669{bottom:830.692000pt;} -.y738{bottom:831.301333pt;} -.y83a{bottom:831.345333pt;} -.y2d2{bottom:833.550667pt;} -.y5e1{bottom:833.641333pt;} -.y627{bottom:834.561333pt;} -.y8cb{bottom:834.622667pt;} -.y4ce{bottom:835.378667pt;} +.y632{bottom:828.328000pt;} +.y7fc{bottom:828.513333pt;} +.y39f{bottom:830.189333pt;} +.y2b2{bottom:830.430667pt;} +.y65e{bottom:830.692000pt;} +.y72d{bottom:831.301333pt;} +.y82f{bottom:831.345333pt;} +.y2cf{bottom:833.550667pt;} +.y5da{bottom:833.641333pt;} +.y61c{bottom:834.561333pt;} +.y8c0{bottom:834.622667pt;} +.y4c7{bottom:835.378667pt;} .y21d{bottom:835.716000pt;} -.y40a{bottom:836.928000pt;} +.y404{bottom:836.928000pt;} .y1db{bottom:837.201333pt;} -.y60d{bottom:837.608000pt;} .y13f{bottom:837.720000pt;} .y7c{bottom:838.200000pt;} -.y54d{bottom:838.448000pt;} +.y546{bottom:838.448000pt;} .y121{bottom:838.461333pt;} -.y912{bottom:838.478667pt;} -.y799{bottom:838.556000pt;} +.y907{bottom:838.478667pt;} +.y78e{bottom:838.556000pt;} .y265{bottom:838.812000pt;} .y1f7{bottom:839.276000pt;} -.y721{bottom:839.417333pt;} -.y3ee{bottom:839.700000pt;} -.y3ef{bottom:839.701333pt;} -.y581{bottom:839.880000pt;} -.y74c{bottom:840.265333pt;} -.y4b6{bottom:840.366667pt;} +.y716{bottom:839.417333pt;} +.y3eb{bottom:839.813333pt;} +.y57a{bottom:839.880000pt;} +.y741{bottom:840.265333pt;} +.y4af{bottom:840.366667pt;} .y100{bottom:840.997333pt;} -.y7c7{bottom:841.076000pt;} -.y69a{bottom:841.372000pt;} +.y7bc{bottom:841.076000pt;} +.y68f{bottom:841.372000pt;} +.y389{bottom:841.760000pt;} .y6a{bottom:842.014667pt;} .y24c{bottom:842.641333pt;} -.y38b{bottom:842.682667pt;} -.y6cd{bottom:843.920000pt;} -.y425{bottom:844.500000pt;} -.y51e{bottom:844.596000pt;} -.y471{bottom:845.625333pt;} -.y563{bottom:845.869333pt;} -.y8ec{bottom:846.605333pt;} -.y684{bottom:846.977333pt;} -.y3b7{bottom:847.181333pt;} -.y81e{bottom:848.094667pt;} -.y77f{bottom:848.584000pt;} -.y297{bottom:848.666667pt;} -.y3d2{bottom:849.956000pt;} -.y2b4{bottom:852.109333pt;} -.y768{bottom:852.809333pt;} +.y6c2{bottom:843.920000pt;} +.y41f{bottom:844.500000pt;} +.y517{bottom:844.596000pt;} +.y46a{bottom:845.625333pt;} +.y55c{bottom:845.869333pt;} +.y8e1{bottom:846.605333pt;} +.y679{bottom:846.977333pt;} +.y3b4{bottom:847.181333pt;} +.y813{bottom:848.094667pt;} +.y774{bottom:848.662667pt;} +.y3cf{bottom:849.956000pt;} +.y297{bottom:852.000000pt;} +.y2b1{bottom:852.109333pt;} +.y75d{bottom:852.809333pt;} .y15c{bottom:853.260000pt;} -.y593{bottom:854.313333pt;} -.y8ca{bottom:856.301333pt;} +.y58c{bottom:854.313333pt;} +.y8bf{bottom:856.301333pt;} .y49{bottom:856.873333pt;} .y190{bottom:857.394667pt;} -.y458{bottom:857.841333pt;} +.y452{bottom:857.841333pt;} .y282{bottom:857.884000pt;} -.y43e{bottom:858.698667pt;} -.y60c{bottom:859.286667pt;} -.y299{bottom:859.381333pt;} -.y34e{bottom:859.594667pt;} -.y6f4{bottom:859.758667pt;} +.y438{bottom:858.698667pt;} +.y34c{bottom:859.594667pt;} +.y6e9{bottom:859.758667pt;} .y120{bottom:860.140000pt;} -.y911{bottom:860.157333pt;} -.y798{bottom:860.234667pt;} +.y906{bottom:860.157333pt;} +.y78d{bottom:860.234667pt;} +.y373{bottom:860.444000pt;} .y264{bottom:860.490667pt;} -.y375{bottom:861.058667pt;} -.y720{bottom:861.096000pt;} -.y3ed{bottom:861.378667pt;} -.y580{bottom:861.558667pt;} +.y715{bottom:861.096000pt;} +.y3ea{bottom:861.492000pt;} +.y579{bottom:861.558667pt;} .yc1{bottom:861.944000pt;} -.y4b5{bottom:862.045333pt;} +.y4ae{bottom:862.045333pt;} .yff{bottom:862.676000pt;} -.y699{bottom:863.050667pt;} -.y32e{bottom:863.302667pt;} -.y1c1{bottom:863.513333pt;} +.y68e{bottom:863.050667pt;} +.y1c1{bottom:863.060000pt;} +.y32b{bottom:863.302667pt;} .y69{bottom:864.162667pt;} -.y7df{bottom:865.054667pt;} -.y5c6{bottom:865.112000pt;} -.y424{bottom:866.178667pt;} -.y51d{bottom:866.274667pt;} -.y562{bottom:867.548000pt;} -.y2fa{bottom:867.577333pt;} -.y8eb{bottom:868.296000pt;} -.y7b1{bottom:868.736000pt;} -.y6e0{bottom:868.885333pt;} -.y4e4{bottom:869.294667pt;} -.y17a{bottom:869.560000pt;} -.y81d{bottom:869.773333pt;} -.y77e{bottom:870.262667pt;} -.y409{bottom:870.529333pt;} -.y3d1{bottom:871.634667pt;} -.y63c{bottom:871.685333pt;} -.y806{bottom:872.433333pt;} +.y7d4{bottom:865.054667pt;} +.y5bf{bottom:865.112000pt;} +.y41e{bottom:866.178667pt;} +.y516{bottom:866.274667pt;} +.y55b{bottom:867.548000pt;} +.y2f7{bottom:867.577333pt;} +.y8e0{bottom:868.296000pt;} +.y7a6{bottom:868.736000pt;} +.y6d5{bottom:868.885333pt;} +.y4dd{bottom:869.294667pt;} +.y17a{bottom:869.358667pt;} +.y812{bottom:869.773333pt;} +.y773{bottom:870.341333pt;} +.y403{bottom:870.529333pt;} +.y3ce{bottom:871.634667pt;} +.y631{bottom:871.685333pt;} +.y7fb{bottom:872.433333pt;} .y1da{bottom:873.298667pt;} -.y3a1{bottom:873.546667pt;} -.y737{bottom:873.912000pt;} +.y39e{bottom:873.546667pt;} +.y72c{bottom:873.912000pt;} .y7b{bottom:874.424000pt;} -.y767{bottom:874.488000pt;} +.y75c{bottom:874.488000pt;} .y15b{bottom:874.938667pt;} -.y592{bottom:875.992000pt;} -.y626{bottom:877.918667pt;} -.y8c9{bottom:877.980000pt;} +.y58b{bottom:875.992000pt;} +.y61b{bottom:877.918667pt;} +.y8be{bottom:877.980000pt;} .y13e{bottom:878.654667pt;} .y48{bottom:879.021333pt;} .y21c{bottom:879.073333pt;} .ya0{bottom:879.137333pt;} -.y2d1{bottom:879.817333pt;} -.y43d{bottom:880.377333pt;} -.y6f3{bottom:881.437333pt;} +.y2ce{bottom:879.817333pt;} +.y437{bottom:880.377333pt;} +.y6e8{bottom:881.437333pt;} .y11f{bottom:881.818667pt;} -.y890{bottom:881.836000pt;} -.y71f{bottom:882.774667pt;} -.y3ec{bottom:883.057333pt;} -.y57f{bottom:883.237333pt;} +.y885{bottom:881.836000pt;} +.y714{bottom:882.774667pt;} +.y3e9{bottom:883.170667pt;} +.y578{bottom:883.237333pt;} .yc0{bottom:883.622667pt;} -.y4b4{bottom:883.724000pt;} -.y2b3{bottom:884.344000pt;} +.y4ad{bottom:883.724000pt;} +.y2b0{bottom:884.344000pt;} .yfe{bottom:884.354667pt;} -.y839{bottom:884.830667pt;} -.y5e0{bottom:885.040000pt;} -.y1c0{bottom:885.192000pt;} -.y38a{bottom:886.040000pt;} +.y1c0{bottom:884.738667pt;} +.y82e{bottom:884.830667pt;} +.y5d9{bottom:885.040000pt;} +.y388{bottom:885.117333pt;} .y68{bottom:886.310667pt;} -.y7de{bottom:886.733333pt;} -.y6cc{bottom:887.277333pt;} -.y423{bottom:887.857333pt;} +.y7d3{bottom:886.733333pt;} +.y6c1{bottom:887.277333pt;} +.y41d{bottom:887.857333pt;} .y1f6{bottom:887.914667pt;} -.y470{bottom:888.981333pt;} -.y561{bottom:889.225333pt;} -.y8ea{bottom:889.985333pt;} -.y683{bottom:890.334667pt;} -.y7b0{bottom:890.414667pt;} -.y6df{bottom:890.564000pt;} -.y457{bottom:891.034667pt;} -.y179{bottom:891.238667pt;} -.y81c{bottom:891.452000pt;} -.y77d{bottom:891.941333pt;} -.y408{bottom:892.208000pt;} -.y3b6{bottom:892.618667pt;} -.y805{bottom:894.112000pt;} -.y3a0{bottom:895.225333pt;} -.y736{bottom:895.590667pt;} +.y469{bottom:888.981333pt;} +.y55a{bottom:889.225333pt;} +.y8df{bottom:889.985333pt;} +.y678{bottom:890.334667pt;} +.y7a5{bottom:890.414667pt;} +.y6d4{bottom:890.564000pt;} +.y451{bottom:891.034667pt;} +.y179{bottom:891.037333pt;} +.y811{bottom:891.452000pt;} +.y772{bottom:892.020000pt;} +.y402{bottom:892.208000pt;} +.y3b3{bottom:892.618667pt;} +.y7fa{bottom:894.112000pt;} +.y39d{bottom:895.225333pt;} +.y72b{bottom:895.590667pt;} .y7a{bottom:896.102667pt;} -.y766{bottom:896.166667pt;} +.y75b{bottom:896.166667pt;} .y263{bottom:896.588000pt;} .y15a{bottom:896.617333pt;} -.y4cd{bottom:896.748000pt;} -.y797{bottom:896.901333pt;} -.y48a{bottom:897.670667pt;} -.y625{bottom:899.597333pt;} -.y8c8{bottom:899.658667pt;} +.y4c6{bottom:896.748000pt;} +.y78c{bottom:896.901333pt;} +.y483{bottom:897.670667pt;} +.y61a{bottom:899.597333pt;} +.y8bd{bottom:899.658667pt;} .y236{bottom:900.752000pt;} .y9f{bottom:900.816000pt;} .y47{bottom:901.169333pt;} -.y298{bottom:902.738667pt;} -.y34d{bottom:902.952000pt;} +.y34b{bottom:902.952000pt;} .y11e{bottom:903.497333pt;} -.y88f{bottom:903.514667pt;} -.y3d4{bottom:904.340000pt;} +.y884{bottom:903.514667pt;} +.y3d1{bottom:904.340000pt;} .y7d{bottom:904.442667pt;} -.y667{bottom:904.816000pt;} -.y57e{bottom:904.916000pt;} +.y65c{bottom:904.816000pt;} +.y577{bottom:904.916000pt;} .ybf{bottom:905.301333pt;} -.y5f8{bottom:905.317333pt;} -.y4b3{bottom:905.402667pt;} +.y5f1{bottom:905.317333pt;} +.y4ac{bottom:905.402667pt;} .y21{bottom:905.441333pt;} .y3{bottom:905.640000pt;} -.y2b2{bottom:906.022667pt;} +.y2af{bottom:906.022667pt;} .yfd{bottom:906.033333pt;} -.y1bf{bottom:906.870667pt;} -.y7dd{bottom:908.412000pt;} +.y1bf{bottom:906.417333pt;} +.y7d2{bottom:908.412000pt;} .y13d{bottom:908.456000pt;} -.y5c5{bottom:908.469333pt;} -.y3d0{bottom:909.253333pt;} -.y374{bottom:909.701333pt;} -.y46f{bottom:910.660000pt;} -.y2f9{bottom:910.934667pt;} -.y8e9{bottom:911.676000pt;} -.y682{bottom:912.013333pt;} +.y5be{bottom:908.469333pt;} +.y3cd{bottom:909.253333pt;} +.y372{bottom:909.394667pt;} +.y468{bottom:910.660000pt;} +.y2f6{bottom:910.934667pt;} +.y8de{bottom:911.676000pt;} +.y677{bottom:912.013333pt;} .y281{bottom:912.093333pt;} -.y178{bottom:912.917333pt;} -.y3b5{bottom:914.297333pt;} -.y6f2{bottom:914.780000pt;} +.y178{bottom:912.716000pt;} +.y3b2{bottom:914.297333pt;} +.y6e7{bottom:914.780000pt;} .y159{bottom:918.296000pt;} -.y796{bottom:918.580000pt;} -.y489{bottom:919.349333pt;} -.y71d{bottom:919.814667pt;} -.y71e{bottom:919.816000pt;} -.y624{bottom:921.276000pt;} -.y2d0{bottom:923.174667pt;} +.y78b{bottom:918.580000pt;} +.y482{bottom:919.349333pt;} +.y712{bottom:919.814667pt;} +.y713{bottom:919.816000pt;} +.y619{bottom:921.276000pt;} +.y2cd{bottom:923.174667pt;} .y1d9{bottom:923.310667pt;} .y46{bottom:923.317333pt;} .y9e{bottom:923.844000pt;} -.y34c{bottom:924.630667pt;} +.y34a{bottom:924.630667pt;} .y11d{bottom:925.176000pt;} -.y88e{bottom:925.193333pt;} -.y407{bottom:925.808000pt;} -.y77c{bottom:926.052000pt;} +.y883{bottom:925.193333pt;} +.y401{bottom:925.808000pt;} +.y771{bottom:926.092000pt;} .ybe{bottom:926.980000pt;} .y21b{bottom:927.712000pt;} -.y5df{bottom:928.397333pt;} -.y389{bottom:929.397333pt;} -.y7dc{bottom:930.090667pt;} +.y5d8{bottom:928.397333pt;} +.y387{bottom:928.474667pt;} +.y7d1{bottom:930.090667pt;} .y13c{bottom:930.134667pt;} -.y6cb{bottom:930.634667pt;} -.y3cf{bottom:930.932000pt;} -.y422{bottom:931.214667pt;} +.y6c0{bottom:930.634667pt;} +.y3cc{bottom:930.932000pt;} +.y41c{bottom:931.214667pt;} .y1f5{bottom:931.272000pt;} .y79{bottom:932.326667pt;} -.y560{bottom:932.582667pt;} -.y8e8{bottom:933.365333pt;} +.y559{bottom:932.582667pt;} +.y8dd{bottom:933.365333pt;} .y280{bottom:933.772000pt;} -.y8c7{bottom:934.105333pt;} -.y6de{bottom:935.228000pt;} -.y456{bottom:935.358667pt;} -.y6f1{bottom:936.458667pt;} -.y39f{bottom:936.850667pt;} -.y5f6{bottom:938.666667pt;} +.y8bc{bottom:934.105333pt;} +.y6d3{bottom:935.228000pt;} +.y450{bottom:935.358667pt;} +.y6e6{bottom:936.458667pt;} +.y39c{bottom:936.850667pt;} +.y5ef{bottom:938.666667pt;} .y24b{bottom:939.594667pt;} .y158{bottom:939.974667pt;} -.y4cc{bottom:940.105333pt;} -.y71c{bottom:941.493333pt;} -.y57d{bottom:941.725333pt;} -.y623{bottom:942.954667pt;} +.y4c5{bottom:940.105333pt;} +.y711{bottom:941.493333pt;} +.y576{bottom:941.725333pt;} +.y618{bottom:942.954667pt;} .y1d8{bottom:944.989333pt;} .y45{bottom:945.465333pt;} .y9d{bottom:945.522667pt;} -.y34b{bottom:946.309333pt;} +.y349{bottom:946.309333pt;} .y262{bottom:946.872000pt;} -.y4b2{bottom:947.017333pt;} -.y77b{bottom:947.730667pt;} -.y5c4{bottom:947.828000pt;} -.y46e{bottom:948.473333pt;} -.y2f8{bottom:948.598667pt;} +.y4ab{bottom:947.017333pt;} +.y770{bottom:947.770667pt;} +.y5bd{bottom:947.828000pt;} +.y467{bottom:948.473333pt;} +.y2f5{bottom:948.598667pt;} .ybd{bottom:948.658667pt;} .yfc{bottom:949.390667pt;} -.y5de{bottom:950.076000pt;} +.y5d7{bottom:950.076000pt;} .y13b{bottom:951.813333pt;} -.y3ce{bottom:952.610667pt;} -.y421{bottom:952.893333pt;} +.y3cb{bottom:952.610667pt;} +.y371{bottom:952.752000pt;} +.y41b{bottom:952.893333pt;} .y1f4{bottom:952.950667pt;} -.y373{bottom:953.058667pt;} -.y1be{bottom:954.258667pt;} -.y55f{bottom:954.261333pt;} -.y795{bottom:954.404000pt;} +.y1be{bottom:954.032000pt;} +.y558{bottom:954.261333pt;} +.y78a{bottom:954.404000pt;} .y27f{bottom:955.450667pt;} -.y8c6{bottom:955.784000pt;} -.y681{bottom:956.105333pt;} -.y488{bottom:956.666667pt;} -.y2cf{bottom:958.137333pt;} +.y8bb{bottom:955.784000pt;} +.y676{bottom:956.105333pt;} +.y481{bottom:956.666667pt;} +.y2cc{bottom:958.137333pt;} .y11c{bottom:961.273333pt;} -.y406{bottom:961.906667pt;} +.y400{bottom:961.906667pt;} .y9c{bottom:967.201333pt;} .y44{bottom:967.612000pt;} -.y34a{bottom:967.988000pt;} -.y8e7{bottom:968.528000pt;} +.y348{bottom:967.988000pt;} +.y8dc{bottom:968.528000pt;} .y78{bottom:968.550667pt;} -.y4b1{bottom:968.696000pt;} -.y5c3{bottom:969.506667pt;} -.y46d{bottom:970.152000pt;} -.y2f7{bottom:970.277333pt;} +.y4aa{bottom:968.696000pt;} +.y5bc{bottom:969.506667pt;} +.y466{bottom:970.152000pt;} +.y2f4{bottom:970.277333pt;} .ybc{bottom:970.337333pt;} .yfb{bottom:971.069333pt;} -.y388{bottom:972.754667pt;} -.y6ca{bottom:973.992000pt;} -.y3cd{bottom:974.289333pt;} +.y386{bottom:971.832000pt;} +.y6bf{bottom:973.992000pt;} +.y3ca{bottom:974.289333pt;} .y27e{bottom:977.129333pt;} -.y680{bottom:977.784000pt;} -.y455{bottom:978.716000pt;} -.y2ce{bottom:979.816000pt;} +.y675{bottom:977.784000pt;} +.y44f{bottom:978.716000pt;} +.y2cb{bottom:979.816000pt;} .y1d7{bottom:989.666667pt;} .y43{bottom:989.760000pt;} -.y8e6{bottom:990.218667pt;} +.y8db{bottom:990.218667pt;} .y77{bottom:990.229333pt;} .yfa{bottom:992.748000pt;} .y27d{bottom:1006.110667pt;} .ybb{bottom:1006.436000pt;} -.y2cd{bottom:1010.898667pt;} +.y2ca{bottom:1010.898667pt;} .y1d6{bottom:1011.345333pt;} .y42{bottom:1011.908000pt;} .y11b{bottom:1017.186667pt;} @@ -5276,12 +5254,12 @@ .hd{height:21.551241pt;} .h1e{height:28.267288pt;} .hb{height:28.734867pt;} -.h2d{height:36.189121pt;} -.h32{height:40.261852pt;} +.h34{height:36.189121pt;} +.h31{height:40.261852pt;} .hc{height:40.378215pt;} .he{height:40.535600pt;} .h7{height:43.636400pt;} -.h40{height:44.632747pt;} +.h3f{height:44.632747pt;} .h5{height:47.954585pt;} .h6{height:48.712162pt;} .h4{height:49.318223pt;} @@ -5290,80 +5268,79 @@ .h3{height:54.047467pt;} .h2{height:54.630330pt;} .h8{height:63.063504pt;} -.h37{height:70.000000pt;} -.h45{height:74.000000pt;} +.h36{height:70.000000pt;} +.h44{height:74.000000pt;} .h1{height:90.828906pt;} .h9{height:113.333333pt;} -.h23{height:164.000000pt;} -.h5c{height:216.666667pt;} -.h30{height:269.333333pt;} -.h38{height:368.666667pt;} -.h4b{height:373.333333pt;} -.h46{height:383.333333pt;} -.h5b{height:393.333333pt;} +.h23{height:160.666667pt;} +.h5b{height:216.666667pt;} +.h2f{height:269.333333pt;} +.h37{height:368.666667pt;} +.h4a{height:373.333333pt;} +.h45{height:383.333333pt;} +.h5a{height:393.333333pt;} .h14{height:399.333333pt;} .h21{height:459.333333pt;} .h10{height:485.333333pt;} .h19{height:512.666667pt;} -.h31{height:520.666667pt;} +.h30{height:520.666667pt;} .h1c{height:530.666667pt;} -.h33{height:546.000000pt;} +.h32{height:545.333333pt;} .h1d{height:560.666667pt;} -.h3e{height:589.333333pt;} +.h3d{height:589.333333pt;} .h24{height:608.666667pt;} -.h4e{height:609.333333pt;} -.h58{height:614.000000pt;} +.h4d{height:609.333333pt;} +.h57{height:614.000000pt;} .h18{height:622.666667pt;} -.h54{height:626.666667pt;} -.h42{height:639.333333pt;} -.h28{height:642.666667pt;} -.h2f{height:652.000000pt;} +.h53{height:626.666667pt;} +.h28{height:636.000000pt;} +.h41{height:639.333333pt;} +.h2e{height:652.000000pt;} .h16{height:660.000000pt;} .h29{height:697.333333pt;} -.h56{height:710.000000pt;} +.h55{height:710.000000pt;} .h25{height:721.333333pt;} -.h3d{height:723.333333pt;} -.h55{height:728.666667pt;} +.h3c{height:723.333333pt;} +.h54{height:728.666667pt;} .h22{height:729.333333pt;} .hf{height:746.666667pt;} -.h50{height:750.000000pt;} +.h4f{height:750.000000pt;} .h20{height:767.333333pt;} -.h17{height:779.333333pt;} -.h5a{height:780.000000pt;} -.h49{height:781.333333pt;} -.h4c{height:793.333333pt;} +.h17{height:778.666667pt;} +.h59{height:780.000000pt;} +.h48{height:781.333333pt;} +.h4b{height:793.333333pt;} .h26{height:796.666667pt;} -.h3c{height:800.000000pt;} -.h48{height:808.000000pt;} -.h3b{height:813.333333pt;} -.h3f{height:816.666667pt;} -.h36{height:820.666667pt;} -.h2e{height:824.000000pt;} -.h3a{height:829.333333pt;} -.h43{height:832.000000pt;} -.h44{height:833.333333pt;} -.h47{height:835.333333pt;} -.h57{height:840.000000pt;} -.h4d{height:841.333333pt;} +.h3b{height:800.000000pt;} +.h47{height:808.000000pt;} +.h3a{height:813.333333pt;} +.h3e{height:816.666667pt;} +.h35{height:820.666667pt;} +.h2d{height:824.000000pt;} +.h39{height:829.333333pt;} +.h42{height:832.000000pt;} +.h43{height:833.333333pt;} +.h46{height:834.666667pt;} +.h56{height:840.000000pt;} +.h4c{height:841.333333pt;} .h27{height:842.000000pt;} -.h39{height:844.666667pt;} +.h38{height:844.666667pt;} .h1f{height:854.000000pt;} -.h4a{height:863.333333pt;} +.h49{height:863.333333pt;} .h15{height:865.333333pt;} -.h53{height:868.000000pt;} -.h52{height:872.000000pt;} +.h52{height:868.000000pt;} +.h51{height:872.000000pt;} .h1b{height:875.333333pt;} .h2b{height:876.666667pt;} .h1a{height:884.666667pt;} -.h59{height:885.333333pt;} +.h58{height:885.333333pt;} .h2a{height:888.666667pt;} -.h35{height:902.666667pt;} -.h2c{height:903.333333pt;} -.h4f{height:904.666667pt;} +.h2c{height:902.666667pt;} +.h4e{height:904.666667pt;} .h11{height:916.666667pt;} -.h51{height:923.333333pt;} -.h34{height:930.666667pt;} -.h41{height:937.333333pt;} +.h50{height:923.333333pt;} +.h33{height:930.666667pt;} +.h40{height:937.333333pt;} .h0{height:1122.520000pt;} .w2{width:240.666667pt;} .w3{width:541.333333pt;} @@ -5372,9 +5349,9 @@ .x30{left:88.726667pt;} .x5{left:96.000000pt;} .x11{left:100.516000pt;} -.x72{left:104.304000pt;} +.x71{left:104.304000pt;} .x2b{left:108.486667pt;} -.x60{left:110.545333pt;} +.x68{left:110.545333pt;} .x12{left:112.582667pt;} .x26{left:115.393333pt;} .xa{left:117.818667pt;} @@ -5384,48 +5361,48 @@ .x2c{left:137.577333pt;} .xd{left:143.677333pt;} .x2a{left:146.334667pt;} -.x7c{left:149.134667pt;} +.x7d{left:149.134667pt;} .xb{left:151.273333pt;} -.x6b{left:158.302667pt;} +.x6a{left:158.302667pt;} .x24{left:161.606667pt;} .x32{left:165.433333pt;} .x31{left:169.244000pt;} .x2{left:173.517333pt;} -.x66{left:176.880000pt;} +.x64{left:176.880000pt;} .x38{left:179.730667pt;} .x3e{left:184.198667pt;} .x74{left:186.909333pt;} .x27{left:188.969333pt;} -.x59{left:191.637333pt;} +.x5d{left:191.637333pt;} .x14{left:192.984000pt;} .x28{left:199.789333pt;} .x21{left:202.944000pt;} -.x62{left:207.425333pt;} -.x6e{left:215.061333pt;} +.x60{left:207.425333pt;} +.x6d{left:215.061333pt;} .x73{left:217.774667pt;} .x39{left:219.326667pt;} .x25{left:222.697333pt;} .x20{left:225.700000pt;} .x34{left:227.394667pt;} .x3a{left:230.484000pt;} -.x77{left:235.926667pt;} -.x61{left:239.298667pt;} +.x76{left:235.926667pt;} +.x5f{left:239.298667pt;} .x33{left:241.273333pt;} -.x63{left:245.606667pt;} +.x61{left:245.606667pt;} .xc{left:253.249333pt;} -.x67{left:259.100000pt;} +.x65{left:259.100000pt;} .x3d{left:260.638667pt;} .x43{left:266.302667pt;} -.x64{left:268.516000pt;} -.x6a{left:272.874667pt;} +.x62{left:268.516000pt;} +.x69{left:272.874667pt;} .x1{left:277.372000pt;} .x3c{left:280.061333pt;} .x13{left:284.734667pt;} .x0{left:286.825333pt;} -.x5b{left:291.425333pt;} +.x7c{left:291.425333pt;} .x45{left:294.617333pt;} .x57{left:299.554667pt;} -.x71{left:301.608000pt;} +.x70{left:301.608000pt;} .x56{left:303.190667pt;} .x17{left:304.912000pt;} .x46{left:307.524000pt;} @@ -5434,12 +5411,12 @@ .x18{left:316.002667pt;} .x4b{left:318.433333pt;} .x44{left:322.309333pt;} -.x5a{left:327.356000pt;} -.x5c{left:329.606667pt;} -.x6d{left:333.576000pt;} +.x5e{left:327.356000pt;} +.x77{left:329.798667pt;} +.x6c{left:333.576000pt;} .x54{left:335.436000pt;} .x3b{left:339.244000pt;} -.x5d{left:344.880000pt;} +.x72{left:346.018667pt;} .x55{left:348.344000pt;} .x3{left:355.525333pt;} .x4c{left:358.837333pt;} @@ -5453,7 +5430,7 @@ .x2f{left:389.577333pt;} .xe{left:393.214667pt;} .x8{left:394.830667pt;} -.x7d{left:403.492000pt;} +.x7e{left:403.492000pt;} .x1a{left:413.940000pt;} .x1e{left:416.000000pt;} .x2d{left:417.656000pt;} @@ -5464,32 +5441,33 @@ .x49{left:438.717333pt;} .x22{left:448.996000pt;} .x3f{left:453.684000pt;} -.x7e{left:456.626667pt;} +.x7f{left:456.626667pt;} .x23{left:464.410667pt;} .x40{left:469.993333pt;} .x4f{left:474.677333pt;} +.x59{left:479.030667pt;} .x4a{left:485.586667pt;} .x58{left:489.430667pt;} -.x6f{left:501.332000pt;} -.x70{left:507.642667pt;} +.x6e{left:501.332000pt;} +.x6f{left:507.642667pt;} .x41{left:510.713333pt;} +.x5a{left:517.212000pt;} .x42{left:527.022667pt;} -.x5e{left:535.789333pt;} -.x68{left:537.212000pt;} +.x66{left:537.212000pt;} .x15{left:542.312000pt;} -.x69{left:547.360000pt;} +.x67{left:547.360000pt;} .x16{left:552.246667pt;} .x1b{left:558.572000pt;} -.x65{left:561.454667pt;} +.x63{left:561.454667pt;} .x78{left:564.460000pt;} -.x5f{left:581.606667pt;} +.x5b{left:594.788000pt;} .x1c{left:609.056000pt;} .x7{left:617.701333pt;} .x75{left:620.121333pt;} -.x76{left:626.430667pt;} +.x5c{left:625.333333pt;} .x6{left:628.609333pt;} .xf{left:632.534667pt;} -.x6c{left:634.308000pt;} +.x6b{left:634.308000pt;} .x10{left:638.844000pt;} .x52{left:642.090667pt;} .x53{left:653.584000pt;} diff --git a/Book/Index.html b/Book/Index.html index 74064e0..77cca0f 100644 --- a/Book/Index.html +++ b/Book/Index.html @@ -26,9 +26,9 @@
Python 旋风之旅
A Whirlwind Tour of Python
[] Jake VanderPlas  著 同济大学苹果开发俱乐部 译校
译者序
Python 官方教程的开头是这样写的:Python 是一门既容易上手又强大的编程语言。”随
着大数据、机器学习与人工智能的兴起,Python 语言正在受到越来越广泛的关注和应用。对爱
Python 的人来说,人生苦短,Python 当歌!简洁轻松的语法,开箱即用的模块,强大快乐
的社区,总可以速构建出简单效的解决案。对于希望快入门 Python 语言读者们来
说,市众多一般 Python 籍常人感发麻。让对 Python
言感兴趣的读能快速入门这语言,而非分纠结于 Python 细枝节之处,我选择并翻
译了这本 Python 教程:A Whirlwind Tour of Python
本书作者 Jake VanderPlas 目前是华盛顿大 eScience 学院物理科学研究院院长。他既是
一位天文家,也是一会议演讲人,活跃于年的 PyData 会议,其擅 Python 科学
计算与数据可视化。Jake 在数据可视化方面颇有建树,创建了 altairmpld3JSAnimation
视化程序库,同时为 NumPyScikit-LearnScipyMatplotlibIPython 等著名 Python 程序
库做了大量贡献。
这本 100 余页的册子是一精简 Python 编程入门教程,绍了 Python 语言的核
心特性以及数据科领域内一 Python 第三方扩展包的实应用,目的是让熟悉他编程语
言的数据科学家快速学习 Python。本书适合从未接触过 Python 语言但对其他编程语言有一定
了解的读者,建议读者跟随本书亲自动手完成每一个例子。
本书翻译求在版基上做到精炼、全面、确地 Python 语言。在中难理解
的部分我们添加了译者注,希望能便于读者理解。
译、校,稿作;
511–1315–17 录,宇凯翻译 6–9 章,责翻 1–410
14 章;朱彦樵、李晗、李阳、梁琛、阿思亘负责审稿、校对与润色;朱彦樵、李源完成了全书
的编辑排版工作。
本书的出版工作得到了同济大学软件学院出版基金的大力支持,在此一并感谢。
Python 迅速,底,谬之
免。希望读者能够不吝赐教,帮助本书更加完善。
本书译者
上海嘉定
2018 4
i
-
目录
1 Python 介绍 1
1.1 使用示例代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 安装和练习的注意事项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.1 Python 2 还是 Python 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.2 使用 Conda 安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Python 之禅 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 如何运行 Python 代码 5
2.1 Python 解释器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 IPython 解释器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 自包含 Python 脚本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.4 Jupyter Notebook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3 Python 语法速览 9
3.1 # 标记注释 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2 用换行符结束语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.3 用分号结束语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.4 缩进:空白字符有意义 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.5 行内空白字符无意义 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.6 小括号用于表达式分组或函数调用 . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.7 完成并更进一步 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4 基础 Python 语义:变量和对象 15
4.1 变量是指针 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.2 一切皆对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5 基础 Python 语法:运算符 19
5.1 算术运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.2 位运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.3 赋值运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.4 比较运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.5 布尔运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.6 身份和成员运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.6.1 身份运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.6.2 成员运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
i
-
ii 目录
6 内置类型:简单变量类型 27
6.1 整数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.2 浮点数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.2.1 浮点数精度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
6.3 复数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
6.4 字符串类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
6.5 None 类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
6.6 布尔类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
7 内置数据结构 35
7.1 列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
7.1.1 列表索引与切片 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
7.2 元组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
7.3 字典 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
7.4 集合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
7.5 其他专用数据结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
8 控制流 43
8.1 条件语句:if-elif-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
8.2 for 循环 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
8.3 while 循环 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
8.4 调整循环执行:break continue . . . . . . . . . . . . . . . . . . . . . . . . . . 45
8.5 带有 else 块的循环 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
9 定义和使用函数 47
9.1 使用函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
9.2 定义函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
9.3 默认参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
9.4 可变参数:*args **kwargs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
9.5 匿名(Lambda)函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
10 错误和异常 53
10.1 运行时错误 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
10.2 捕获异常:try except . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
10.3 抛出异常:raise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
10.4 深入探究异常 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
10.4.1 访问错误信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
10.4.2 定义自定义异常 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
10.5 try...except...else...finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
11 迭代器 61
11.1 遍历列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
11.2 不总是列表的列表:range() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
11.3 实用迭代器介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
-
目录 iii
11.3.1 enumerate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
11.3.2 zip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
11.3.3 map filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
11.3.4 迭代器作为函数参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
11.4 专用迭代器:itertools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
12 列表推导 67
12.1 基础列表推导 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
12.2 多重迭代 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
12.3 条件控制迭代 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
12.4 条件控制值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
13 生成器 71
13.1 生成器表达式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
13.1.1 列表推导使用方括号,而生成器表达式使用圆括号 . . . . . . . . . . . . . 71
13.1.2 列表是值的集合,而生成器是生成值的方法 . . . . . . . . . . . . . . . . . 71
13.1.3 列表可以被迭代多次,而生成器表达式是一次性的 . . . . . . . . . . . . . 73
13.2 生成器函数:使用关键字 yield . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
13.3 案例学习:素数生成器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
14 模块和包 77
14.1 导入模块:import 语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
14.1.1 显式模块导入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
14.1.2 显式模块导入并取别名 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
14.1.3 显式导入模块内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
14.1.4 隐式导入模块内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
14.2 导入 Python 标准库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
14.3 导入第三方模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
15 字符串处理和正则表达式 81
15.1 Python 简易字符串操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
15.1.1 字符串格式化:大小写转换 . . . . . . . . . . . . . . . . . . . . . . . . . . 81
15.1.2 格式化字符串:添加和删除空格 . . . . . . . . . . . . . . . . . . . . . . . 82
15.1.3 查找和替换子字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
15.1.4 拆分和分割字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
15.2 格式化字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
15.3 使用正则表达式灵活地匹配字符串模式 . . . . . . . . . . . . . . . . . . . . . . . . 88
15.3.1 一个更复杂的例子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
15.3.2 正则表达式语法基础 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
15.3.3 关于正则表达式的更多资源 . . . . . . . . . . . . . . . . . . . . . . . . . . 94
16 数据科学工具概览 95
16.1 NumPyPython 数值计算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
16.2 Pandas:标签化的面向行数据存储 . . . . . . . . . . . . . . . . . . . . . . . . . . 97
+
目录
1 Python 介绍 1
1.1 使用示例代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 安装和练习的注意事项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.1 Python 2 还是 Python 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.2 使用 Conda 安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Python 之禅 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 如何运行 Python 代码 5
2.1 Python 解释器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 IPython 解释器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 自包含 Python 脚本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.4 Jupyter Notebook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3 Python 语法速览 9
3.1 # 标记注释 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2 用换行符结束语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.3 用分号结束语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.4 缩进:空白字符有意义 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.5 行内空白字符无意义 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.6 小括号用于表达式分组或函数调用 . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.7 完成并更进一步 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4 基础 Python 语义:变量和对象 15
4.1 变量是指针 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.2 一切皆对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5 基础 Python 语法:运算符 19
5.1 算术运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.2 位运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.3 赋值运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.4 比较运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.5 布尔运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.6 身份和成员运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.6.1 身份运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.6.2 成员运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
i
+
ii 目录
6 内置类型:简单变量类型 27
6.1 整数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.2 浮点数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.2.1 浮点数精度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
6.3 复数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
6.4 字符串类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
6.5 None 类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
6.6 布尔类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
7 内置数据结构 35
7.1 列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
7.1.1 列表索引与切片 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
7.2 元组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
7.3 字典 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
7.4 集合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
7.5 其他专用数据结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
8 控制流 43
8.1 条件语句:if-elif-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
8.2 for 循环 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
8.3 while 循环 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
8.4 调整循环执行:break continue . . . . . . . . . . . . . . . . . . . . . . . . . . 45
8.5 带有 else 块的循环 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
9 定义和使用函数 47
9.1 使用函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
9.2 定义函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
9.3 默认参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
9.4 可变参数:*args **kwargs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
9.5 匿名(Lambda)函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
10 错误和异常 53
10.1 运行时错误 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
10.2 捕获异常:try except . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
10.3 抛出异常:raise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
10.4 深入探究异常 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
10.4.1 访问错误信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
10.4.2 定义自定义异常 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
10.5 try...except...else...finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
11 迭代器 61
11.1 遍历列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
11.2 不总是列表的列表:range() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
11.3 实用迭代器介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
+
目录 iii
11.3.1 enumerate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
11.3.2 zip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
11.3.3 map filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
11.3.4 迭代器作为函数参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
11.4 专用迭代器:itertools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
12 列表推导 67
12.1 基础列表推导 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
12.2 多重迭代 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
12.3 条件控制迭代 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
12.4 条件控制值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
13 生成器 71
13.1 生成器表达式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
13.1.1 列表推导使用方括号,而生成器表达式使用圆括号 . . . . . . . . . . . . . 71
13.1.2 列表是值的集合,而生成器是生成值的方法 . . . . . . . . . . . . . . . . . 71
13.1.3 列表可以被迭代多次,而生成器表达式是一次性的 . . . . . . . . . . . . . 73
13.2 生成器函数:使用关键字 yield . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
13.3 案例学习:素数生成器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
14 模块和包 77
14.1 导入模块:import 语句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
14.1.1 显式模块导入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
14.1.2 显式模块导入并取别名 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
14.1.3 显式导入模块内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
14.1.4 隐式导入模块内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
14.2 导入 Python 标准库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
14.3 导入第三方模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
15 字符串处理和正则表达式 81
15.1 Python 简易字符串操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
15.1.1 字符串格式化:大小写转换 . . . . . . . . . . . . . . . . . . . . . . . . . . 81
15.1.2 格式化字符串:添加和删除空格 . . . . . . . . . . . . . . . . . . . . . . . 82
15.1.3 查找和替换子字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
15.1.4 拆分和分割字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
15.2 格式化字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
15.3 使用正则表达式灵活地匹配字符串模式 . . . . . . . . . . . . . . . . . . . . . . . . 88
15.3.1 一个更复杂的例子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
15.3.2 正则表达式语法基础 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
15.3.3 关于正则表达式的更多资源 . . . . . . . . . . . . . . . . . . . . . . . . . . 94
16 数据科学工具概览 95
16.1 NumPyPython 数值计算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
16.2 Pandas:标签化的面向行数据存储 . . . . . . . . . . . . . . . . . . . . . . . . . . 97
iv 目录
16.3 MatplotlibMatLab 风格的科学可视化 . . . . . . . . . . . . . . . . . . . . . . . 98
16.4 SciPyPython 科学计算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
16.5 其他数据科学库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
17 更多学习资源 101
A 附录:插图代码 103
A.1 7 章:列表索引 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
中英文术语对照表 105
1 Python 介绍
20 世纪 80 年代期,Python 作为一种合教学使的脚语言,已经为学界和
工业界中许多程序员、工程师、研究人员和数据科学家们必不可少的工具。作为一名专注于构
建和推广适合数据密集型科学研究开放工具的天文学家,我发现无论是从海量天文数据中抽取
出有意义的信息、在网络上爬取数据并进行清洗,还是自动化地处理日常的工作,Python 几乎
都可以完美地解决我每天遇到的各种各样的问题。
Python 的魅力在于它的语法简洁但不失优雅,以及 Python 庞大的生态环境可在不同领域
都发挥作用所来的便利。比如,部分在科计算和数据科中用到的 Python 码都使用
到了几种功能强大且成熟的第三方package
NumPy:提供对多维数据矩阵进行高效计算和存储的方法。
SciPy:包含一系列数学工具,比如数值积分和数值插值计算。
Pandas:提供数据帧对象以及一组强大的方法来处理、过滤、分组和转换数据。
Matplotlib:提供创建高品质数据图表的接口。
Scikit-Learn:提供一个用于常用机器学习算法的通用工具包。
IPython / Jupyter:提供一种交互式笔记本环境,对于科研分析以及创建交互式可执行
文档非常有用。例如,这本书的手稿完全由 Jupyter Notebook 写成。
有了这些强大的包作为支持,其他工具包好像没有什么必要了。如果你需要完成一项科学
分析或者数据分析的任务,一般来说都有人已经写了这样一个工具。
为了能更好的感受到 Python 在数据科学领域的力量,首先要熟悉 Python 的语法。我常常
遇到一些有着(有时是广泛的)其他编程语言背景(比如 MATLABIDLRJava C++ 等)
的学生和同事直在寻找一份洁、全面,并符合他们的水而不是从开始 Python
程,这份教程就试图填补这个空白。
因此,本书不是为了全面地介绍编程,也不是一份完整的 Python 语言说明。(如果你对此
有需求,可以看看第 17 更多学习资源)相对地,这本书为你提供了一场 Python 的旋风之
旅,它及到 Python 的语法、语义、置的类型据结构、函数定义、控流语
句和这门语言的其他方面。我希望读者能顺着这本书走下去,为探索数据科学打下坚实的基础。
1.1 使用示例代码
本书中使用到的一些补充资料(示例代码或者练习等)可以从这里下载:https://github.
com/jakevdp/WhirlwindTourOfPython/的。一说,本书
码,中。使用码,
可。如,程序可,
1
2 1. PYTHON 介绍
O’Reilly 则需可;的示许可,
将书中大量的代码放到你的产品文档中则需要获得许可。
强制在引内容引用明。用说括书名、
者、 ISBN如:A Whirlwind Tour of Python by Jake VanderPlas (O’Reilly).
Copyright 2016 O’Reilly Media, Inc., 978-1-491-96465-1
使 定, permis-
sions@oreilly.com 与我们联系。
1.2 安装和练习的注意事项
无论是使用 WindowsLinux 还是 macOS安装 Python 和使用科学计算的库套件都非常
简单。本节将简要介绍配置你的环境时的一些注意事项。
1.2.1 Python 2 还是 Python 3
这本书使用了 Python 3 的语法,其中包含与 Python 2.x 系列不兼容的语言增强功能。虽
Python 3.0 2008 布,慢, Web
域。件包具包容。而,
2014 年初以来,数据科学生态中一些最重要的工具的稳定版本已经与 Python 2 3 完全兼
容,因书将使新的 Python 3 法。即使在这下,本大多码片
段也可以 Python 2 中不修改运行。使用 Python 2 兼容的语法的况下
1
,我将尽
力明确地注明。
1.2.2 使用 Conda 安装
虽然有很多种方法安装 Python,但是我较为推荐跨平台的 Anaconda,特别是如果你希望
最终使用前面提到的数据科学工具的话。Anaconda 的发行版有下面两种版本:
Miniconda 了一 Python conda 具,
Python 包的跨平台包管理功能,就像 Linux 用户熟悉的 apt 或者 yum
Anaconda 包括 Python conda,以及可添加的科学计算套件。
Anaconda 所包含的包都可以手动地安装在 Miniconda 中。出于这个原因,我推荐从 Mini-
conda 开始。要下载并安装 Miniconda,确保你已经选择了 Python 3 版本,然后安装 IPython
Notebook 包:
[~]$ conda install ipython-notebook
想获得关于 conda 的信息,例如如何创建或者使用 conda 环境,请查看上面给出的 Mini-
conda 链接。
1
译者注:Python 核心团队计划 2020 年停止支持 Python 2。已经有许多开源项目, Numpysklearn
也已经发表声明将在 2020 年以前放弃对于 Python 2 的支持。
@@ -41,7 +41,7 @@
3 Python 语法速览
最开 Python 是被当作门用来教的语言来发的,是它的易性和简洁的语法让
它受到初学者和专家们的欢迎。
Python 语法的简洁性使得一些人将其称为“可执行伪代码”。并且,实际上我自己的经验
是,阅读和理解
Python
脚本比阅读类似的代码(例如
C
语言)要容易得多。这里我们将开始
讨论 Python 语法syntax)的主要特性。
语法指的是语言的结构(即构成正确构造的程序的内容)在开始的时候,我们不会过分地
纠结语义semantics)——这个词指的是语法中词和符号的含义——但是我们在后面的学习中
终究绕不开它。
来看一下后面这个例子:
In [1]: # 设置中点
midpoint = 5
# 创建两个空的列表
lower = []; upper = []
# 把数字分为大的一半和小的一半
for i in range(10):
if (i < midpoint):
lower.append(i)
else:
upper.append(i)
print("lower:", lower)
print("upper:", upper)
lower: [0, 1, 2, 3, 4]
upper: [5, 6, 7, 8, 9]
这段代码起来有点傻,但是短短几句就展示了 Python 法中几个重要分。现
在让我们一点点来看,探讨一下 Python 的语法特性。
3.1 # 标记注释
这段脚本是由一句注释开始的:
9
10 3. PYTHON 语法速览
# 设置中点
Python 中,注释是用一个 # 字符来表示的,一行中跟 # 字符后面的东西都会被解释
器忽略掉。这意味着,比如你可以像刚才那样将注释独立成行,也可以将注释写在语句后的同
一行内。例如,你可以像下面这样写一个注释:
x += 2 # x = x + 2 的简写形式
虽然多行字符串经常被用来替代多行注释,但是 Python 并没有类似 C C++ 中使用
/* ... */
的多行注释的语法。关于这个问题可以参阅第 15 字符串处理和正则表达式
3.2 用换行符结束语句
脚本的下一行是:
midpoint = 5
这是一个赋值运算符assignment operator。我们创建了一个叫做 midpoint 的变量,并
且把它的赋为 5注意到,在子末尾我简单地使了换行来识一行的束。这和必
使用分号(;)结束一个句子的的 C C++ 等语言正好相反。
Python 中,如果你想要在下一行继续一个语句,你可以使用 \ 字符来来指示这一点:
In [2]: x = 1 + 2 + 3 + 4 +\
5 + 6 + 7 + 8
用一对小括号把一个语句括起来也可以让一个表达式换行:
In [3]: x = (1 + 2 + 3 + 4 +
5 + 6 + 7 + 8)
大部 Python 南都(使号),而一种(使 \
符)
3.3 用分号结束语句
有时候把多个语句放在一行上可能会很有用。脚本中下一行代码是:
lower = []; upper = []
这里展示了如何像 C 语言中那样在 Python 中使用分号;把两个语句放到同一行里。
功能上来说,下面这种写法和上面是等价的:
lower = []
upper = []
尽管偶尔使用这种方法能带来一定的便利,使用分号来把两个语句放到同一行中并不被大
部分的 Python 代码风格指南所推荐。
3.4. 缩进:空白字符有意义 11
3.4 缩进:空白字符有意义
接下来让我们来看看代码里主要的部分:
for i in range(10):
if i < midpoint:
lower.append(i)
else:
upper.append(i)
这是个复制流control flow statement,它含了环语loop state-
ment)和条件语句conditional statement)——我们等一下再讨论两种句。现在,
先来看看下面展示出的可能是 Python 语法中最有争议的一个特性:空白字符是有意义的!
中,block)指合。如,
C 语言中代码块被大括号包裹起来:
// C 代码
for (int i = 0; i < 100; i++)
{
// 大括号标识代码块
total += i;
}
Python 中,代码块使用缩进indentation)来标识:
for i in range(100):
# 缩进标识代码块
total += i
Python 中,缩进的代码块的前一行末尾经常有一个冒号(:
使用缩进可强制范出种在大多 Python 代码统一的、可读性高代码格。但
是也可能让初学者觉得很困惑,后面两个代码片段会产生不同的结果:
>>> if x < 4: >>> if x < 4:
... y = x * 2 ... y = x * 2
... print(x) ... print(x)
左边的代片段中,print(x) 在缩进块面,所只有 x 4 的时候才被执行。
边的代码片段中,print(x) 在缩进块外面,所以不管 x 的值为多少都会被执行!
Python 讶,
看,制缩性。使
Python 的空白字符很不舒服,我建议你去尝试一下,你会发现你将逐渐适应它。
最后,你应该注意到,用于缩进代码块的空格的数量决于用户,只要它在整个脚本中是
一致的就好。按照惯例,大多数风格指南都建议将代码块缩进四个空格,这也是本书中遵循的
约定。请注意,许多文本编辑器(如 Emacs Vim)都包含 Python 模式,能自动缩进四个空
格。
-
12 3. PYTHON 语法速览
3.5 行内空白字符无意义
虽然行(代块)之的空是有义的, Python 内的格并重要。如,这
三个表达式是等价的:
In [4]: x=1+2
x = 1 + 2
x = 1 + 2
滥用这种灵活性可能会导致代码可读性的问题——实际上滥用空白字符通常是故意混淆的
代码的主要手段之一(有些人常常以此为消遣)有效地使用空白可以让代码可读性更好,特别
是在操作符相连的情况下。比较以下两个求幂的表达式:
x=10**-2
x = 10 ** -2
我觉得一眼看过去第二个版本更容易读懂。大多是的风格指南都推荐在二元运算符前后各
加一个空格,在一元运算符前后不加空格。我们会在第 5 基础 Python 法:运算符中进
步讨论 Python 的运算符。
3.6 小括号用于表达式分组或函数调用
在前面的代码片段中,我们看到两种使用小括号的方式。首先,小括号可以用在为表达式
或者数学运算的分组中:
In [5]: 2 * (3 + 4)
Out[5]: 14
小括号还可以用于函数function被调用的时候。在下面的代码片段中,print() 函数用
于显示一个变量的内容。下面这个例子中一对小括号将函数的参数argument)括起来,这表
示将这些参数传入这个函数来调用它。
In [6]: print('first value:', 1)
first value: 1
In [7]: print('second value:', 2)
second value: 2
的函有参数,使个函数。使
用列表的 sort 方法的例子。
+
12 3. PYTHON 语法速览
3.5 行内空白字符无意义
虽然行(代块)之的空是有义的, Python 内的格并重要。如,这
三个表达式是等价的:
In [4]: x=1+2
x = 1 + 2
x = 1 + 2
滥用这种灵活性可能会导致代码可读性的问题——实际上滥用空白字符通常是故意混淆的
代码的主要手段之一(有些人常常以此为消遣)有效地使用空白可以让代码可读性更好,特别
是在操作符相连的情况下。比较以下两个求幂的表达式:
x=10**-2
x = 10 ** -2
我觉得一眼看过去第二个版本更容易读懂。大多是的风格指南都推荐在二元运算符前后各
加一个空格,在一元运算符前后不加空格。我们会在第 5 基础 Python 法:运算符中进
步讨论 Python 的运算符。
3.6 小括号用于表达式分组或函数调用
在前面的代码片段中,我们看到两种使用小括号的方式。首先,小括号可以用在为表达式
或者数学运算的分组中:
In [5]: 2 * (3 + 4)
Out[5]: 14
小括号还可以用于函数function被调用的时候。在下面的代码片段中,print() 函数用
于显示一个变量的内容。下面这个例子中一对小括号将函数的参数argument)括起来,这表
示将这些参数传入这个函数来调用它。
In [6]: print('first value:', 1)
first value: 1
In [7]: print('second value:', 2)
second value: 2
的函有参数,使个函数。使
用列表的 sort 方法的例子:
3.7. 完成并更进一步 13
In [8]: L = [4,2,3,1]
L.sort()
print(L)
[1, 2, 3, 4]
sort 之后的括号(())表示函数被执行。即使不需要传入参数,括号也是必不可少的。
旁注:关于 print() 的一点说明
在上面我们是用了 print() 函数做例子,print() 函数是 Python 2.x Python 3.x
变化的一部分。在 Python 2 里,print 表现得像一个表达式——你可以这样写:
# Python 2 才能这么做!
>> print "first value:", 1
first value: 1
由于各种原因,这门语言的开发者决定在 Python 3 print() 应该成为一个函数,
以我们现在这么写:
# Python 3 支持!
>>> print("first value:", 1)
first value: 1
这是 Python 2 3 中不向后兼容的语法中的一条。在撰写本书时,你通常会发现以两
个版本的 Python 编写的示例。并且,存在 print 语句,而不是 print() 函数通常是你正
在查看的代码是 Python 2 代码的第一迹象之一。
3.7 完成并更进一步
Python 索。
时,架。Python 南”
码。Python 广 使 PEP 8
https://www.python.org/dev/peps/pep-0008/ 到。当你开始写更 Python 代码
时,阅读一下这代码指南很有的!风格指南中含许 Python 大师的智慧,大多数建
议不仅仅是简单的教条:它们是基于无数经验的建议所写成,可以帮助你们避免代码中一些微
妙的错误和 bug
4 基础 Python 语义:变量和对象
Python semantics。与节所的语同,
的语义涉及句的含义。如我对语法的讨一样,在这我们致浏 Python 中一些基
本的语义结构,为你提供一个更好的参考框架,以了解以后章节的代码。
本节变量variable对象object的语义,这是 Python 本中储、
用和操作数据的主要方式。
4.1 变量是指针
Python 中想要为变量赋值易如反掌,只需要把一个变量名放到等号(=)的左边就好。
# 4 赋给变量 x
x = 4
这可能看来很直接,如果心中对这操作建立错误印象,那么 Python 工作
方式可能会令你感到困惑。我们将在这里简要介绍一下。
中,变西。
C 中,当你写:
// C 代码
int x = 4;
本质上,你定义了一个名为 x “内存桶”并将值 4 放入其中。相比之下, Python 中变
量并不是作为容器,而是作为一个指针pointer
1
。所以在 Python 中,当你写:
x = 4
你本质上定义一个名为 x 的指针,指向一些包含值 4 的内存中的位置。注意这么做的一个
后果:
Python
的变量是指种对象,以不“声明”变量,至不要要求变
量总是指向相同类型的对象!这是人们所说的 Python 动态类型dynamically typed:变量
名称可以指向任何类型的对象。所以在 Python 中,你可以这样做:
In [1]: x = 1 # x 是一个整数类型
x = 'hello' # 现在 x 是一个字符串
x = [1, 2, 3] # 现在 x 是一个列表
1
译者注:Python 中并 C 那样的指类型,现得 C++ Java 引用reference的概
念,后文中的指针一般是使用这里的含义。
15
@@ -54,90 +54,90 @@
22 5. 基础 PYTHON 语法:运算符
上述扩展的赋值运算符实际上与它们更复杂的对应操作略有不同:它们直接修改有对象的内
容,而不是创建一个新的对象存储运算结果。
5.4 比较运算符
另一种非常有用的运算符是对不同的值进行比较。对此,Python 实现了标准的比较运算符
comparison operator,返回布尔值 True False。下表列出了所有的比较运算符:
运算符 名称 描述
a == b 等于 a b 相等
a != b 不等于 a 不等于 b
a < b 小于 a 小于 b
a > b 大于 a 大于 b
a <= b 小于等于 a 小于或等于 b
a >= b 大于等于 a 大于或等于 b
些比与算和位
辑。例如,我们可以通过检查与 2 的模是否返回 1 来测试一个数字是否为奇数:
In [11]: # 25 是奇数吗?
25 % 2 == 1
Out[11]: True
In [12]: # 66 是奇数吗?
66 % 2 == 1
Out[12]: False
我们可以串联多个比较运算符来检查更复杂的关系:
In [13]: # 检查是否 a 属于区间 (15, 30)
a = 25
15 < a < 30
Out[13]: True
之后,来动动脑子想一下,看看下面这个比较关系:
In [14]: -1 == ~0
Out[14]: True
5.5. 布尔运算符 23
回忆一下,~ 是按位取反运算符。显然,当你按位取反 0 你最后将得到 1如果你对为
什么这样感到奇,以查two’s complement)整数编案。
Python 用来编有符号整数的方案。考一下,当翻转这种方式码的整数的有位
时会发生什么?
5.5 布尔运算符
当使用布尔值时,Python 提供了布尔运算符boolean operator)使用“和”“或”“非”
的标准概念组合不同的布尔值。不出意外地,这些运算符直接使用单词 andor not 来表达:
In [15]: x = 4
(x < 6) and (x > 2)
Out[15]: True
In [16]: (x > 10) or (x % 2 == 0)
Out[16]: True
In [17]: not (x < 6)
Out[17]: False
boolean algebraexclusive or
XOR 没有包括在内。达到异的效果可以通过组多种其他运算符的方式现。你可以
使用下面这种聪明的小窍门实现布尔值的异或运算:
In [18]: # (x > 1) xor (x < 10)
(x > 1) != (x < 10)
Out[18]: False
当我们开始讨论控制流语句(比如循环语句和条件语句)时,这些布尔运算符将会非常有
用。
一个较容易混淆的点在于什么时候使用布尔运算符(andor not,什么时候使用位运
算符&| ~答案取决于它们的名字:布尔运算符应当在你需要对整个语句的布尔值(即
正确)进行计算时用到;而位运算符则应当在你需要独的或者不清楚对象
个部分进行操作时用到。
5.6 身份和成员运算符
andor not 样,Python 的运
个对象是否相同以及一个对象是否包含在另一个对象中。下表总结了这些运算符:
24 5. 基础 PYTHON 语法:运算符
运算符 描述
a is b a b 为相同对象时为真
a is not b a b 为相同对象时为假
a in b a b 的一个成员时为真
a not in b a b 的一个成员时为假
5.6.1 身份运算符
身份运算符identity operator is is not 检查对象身份object identity是否相同。
对象身份相同与对象相等object equality)不同,我们可以在下列例子中看到:
In [19]: a = [1, 2, 3]
b = [1, 2, 3]
In [20]: a == b
Out[20]: True
In [21]: a is b
Out[21]: False
In [22]: a is not b
Out[22]: True
什么样才算是对象身份相同呢?下列例子说明了这个问题:
In [23]: a = [1, 2, 3]
b = a
a is b
Out[23]: True
上述两个例子的区别在于:第一个例子中 a b 指向了不同的对象,而第二个例子中它们
指向的对象如我在上一节看到的,Python 变量际上是指针。is 算符查的
是两个变量是否指向同一个容器(对象)而不是检查它们指向的容器中内容是否一致。有了这
个概念,你就会发现很多情况下初学者想要使用 is,实际上他们大多真正意味着 ==
5.6.2 成员运算符
membership operator复合compound object
况。比如,我们可以写:
-
5.6. 身份和成员运算符 25
In [24]: 1 in [1, 2, 3]
Out[24]: True
In [25]: 2 not in [1, 2, 3]
Out[25]: False
这些 Python (如 C 言)使一个子。 C
中,在列现。
Python 中,你只需要像写英语句子一样直接地键入你想要知道的就可以实现。
+
5.6. 身份和成员运算符 25
In [24]: 1 in [1, 2, 3]
Out[24]: True
In [25]: 2 not in [1, 2, 3]
Out[25]: False
这些 Python (如 C 言)使一个子。 C
中,在列现。
Python 中,你只需要像写英语句子一样直接地键入你想要知道的就可以实现。
-
6 内置类型:简单变量类型
谈到 Python 的变量和对象,我们会发现所有的 Python 对象都附带有相应的类型信息。
里我们将简要地介绍一遍 Python 内置的简单变量类型。我们所说的简单类型simple type
是与一些复合类型compound type)相区别的,在后面的章节中我们会继续讨论复合类型。
下表总结了
Python
的简单变量类型:
类型 举例 描述
int x = 1 整数(对应包括负数和零的整数域)
float x = 1.0 浮点数(对应实数域)
complex x = 1 + 2j 复数(包括实部与虚部的复数)
bool x = True 布尔值:表示真和假
str x = 'abc' 字符串:表示字符或者文本
NoneType x = None 特殊的用以表示空的对象
我们会快速地将这些类型依次介绍一遍。
6.1 整数
最基本的用来表示数字的类型是整数integer。所有不含小数点的数字都是整数:
In [1]: x = 1
type(x)
Out[1]: int
Python 的整数实际上比 C 语言中的整数更为复杂。C 的整数是固定精度fixed-precision
的,而且通常会发生溢出现象(通常发生在整数值靠近 2
31
或者 2
63
时,具体取决于你的系统)
Python 的整数则是可变精度variable-precision)的,因而你可以完成一些在其他语言中往往
会溢出的计算:
In [2]: 2 ** 200
Out[2]: 1606938044258990275541962092341162602522202993782792835301376
Python 整数另外一个方便的特性是它的除法结果可以被默认地转换成浮点类型:
27
-
28 6. 内置类型:简单变量类型
In [3]: 5 / 2
Out[3]: 2.5
需要注意的是这一向上转换是 Python 3 的一个特性;而在 Python 2 中,整数除法截断了
小数部分并返回一个整数的结果,就像许多类似于 C 语言的静态类型语言一样:
# Python 2 的特性
>>> 5 / 2
2
如果想要在
Python 3
中复原这种行为的整除,你可以采用向下整除运算符:
In [4]: 5 // 2
Out[4]: 2
最后,需要注意的是 Python 2.x 同时拥有 int long 两种类型,而 Python 3 则将这两
种类型整合到了 int 这一个单独的类型当中。
6.2 浮点数
浮点数floating-point number)类型可以用来存储小数。它们可以用标准十进制表示法或
指数表示法来表示:
In [5]: x = 0.000005
y = 5e-6
print(x == y)
True
In [6]: x = 1400000.00
y = 1.4e6
print(x == y)
True
exponential notation)中,e E “乘 10 方”
因而 1.4e6 可以被解释成 1.4 × 10
6
一个整数可以用 float 构造函数constructor)来显式地转换为一个浮点数:
In [7]: float(1)
Out[7]: 1.0
-
6.2. 浮点数 29
6.2.1 浮点数精度
在浮点数的计算中需要注意的一点是它的小数部分精度,因而有可能导致在进行等于
比较的时候结果不稳定。例如:
In [8]: 0.1 + 0.2 == 0.3
Out[8]: False
为什么会样呢?事实这不 Python 一种语言存在问题,而是为大多数学计
算平台都采用固定精度的格式来存储二进制浮点数。所有使用浮点数的编程语言都使用固定的
位数来存放这些浮点数,这就导致只能表示出某些数字的大约的值。我们可以通过输出这三个
数字的高精度形式来发现这一点:
In [9]: print("0.1 = {0:.17f}".format(0.1))
print("0.2 = {0:.17f}".format(0.2))
print("0.3 = {0:.17f}".format(0.3))
0.1 = 0.10000000000000001
0.2 = 0.20000000000000001
0.3 = 0.29999999999999999
我们了十数表示式,有的被表示 10 的幂
形式:
1
8
= 1 · 10
1
+ 2 · 10
2
+ 5 · 10
3
在十进制下,我们将其表达成熟悉的小数形式:0.125
计算机通常将数值用二进制的方式存储,因而每一个数字又被表示成 2 的不同幂次的和:
1
8
= 0 · 2
1
+ 0 · 2
2
+ 1 · 2
3
在二制中,们把 0.001
2
,其
2
的下作为进制识。0.125 = 0.001
2
这一
式通常意味着数字可以同时在二进制和十进制下被表示成有限位的数字。
在熟悉的十进制中,你可能会遇到数字无法被表达成有限数字的形式。比如,1 除以 3
结果在标准十进制表示中为:
1
3
= 0.333333333 · · ·
小数末尾的 3 将一直循环下去:也就是说,这个除法的商需要用无限的数字来表示!
类似地,同样存在数字在二进制下需要用无限的数字来表示。比如:
1
10
= 0.00011001100110011 · · ·
2
1/3 地表来,1/10
来表示。Python 在内部截断了这些小数位数,在大多数系统中通常保留为从第一个不为零的数
字开始至多 52 位的数字。
这个由于精度引发的错误是使用浮点数时不可避免的。最好的解决办法是作为程序员,始
终意识到浮点计算的表达是并不精确的,同时绝不依赖完全相等来比较浮点数的值。
-
30 6. 内置类型:简单变量类型
6.3 复数
complex numberreal partimaginary part(浮点表示)
的数字。我们之前已经介绍过了整数和实数,我们可以用它们来构造一个复数:
In [10]: complex(1, 2)
Out[10]: (1+2j)
我们也可以选择用添加后缀 j 来表示复数的虚部:
In [11]: 1 + 2j
Out[11]: (1+2j)
复数有着许多有趣的属性和方法,我们将在这里进行简单的介绍:
In [12]: c = 3 + 4j
In [13]: c.real # 实部
Out[13]: 3.0
In [14]: c.imag # 虚部
Out[14]: 4.0
In [15]: c.conjugate() # 共轭复数
Out[15]: (3-4j)
In [16]: abs(c) # 模,即 sqrt(c.real ** 2 + c.imag ** 2)
Out[16]: 5.0
6.4 字符串类型
Python 中用单引号或双引号创建字符串:
In [17]: message = "what do you like?"
response = 'spam'
Python 有着许多方便的字符串处理函数;下面是其中一些的介绍:
-
6.5. NONE 类型 31
In [18]: # 字符串长度
len(response)
Out[18]: 4
In [19]: # 大写转换。同样还有小写转换:str.lower()
response.upper()
Out[19]: 'SPAM'
In [20]: # 首字母大写。str.title() 有同样的功能
message.capitalize()
Out[20]: 'What do you like?'
In [21]: # + 连接
message + response
Out[21]: 'what do you like?spam'
In [22]: # 乘法意味着自身多次连接
5 * response
Out[22]: 'spamspamspamspamspam'
In [23]: # 任意访问单个字符(下标从 0 开始)
message[0]
Out[23]: 'w'
更多关于下标的讨论,详见后续章节:第 7.1 列表
6.5 None 类型
Python 包括一个特殊的类型:NoneType。它只有一个值:None。例如:
In [24]: type(None)
Out[24]: NoneType
None 使方,个函
default value。例如,Python 3 中的 print() 函数不会返回任何值,但我们依然可以得到它
的值:
-
32 6. 内置类型:简单变量类型
In [25]: return_value = print('abc')
abc
In [26]: print(return_value)
None
同样地,Python 中所有没有返回值的函数都会事实上返回 None
6.6 布尔类型
布尔类型是一种简单的类型,它只拥 True False 两种值,它由之前提到的比较运算
符得到:
In [27]: result = (4 < 5)
result
Out[27]: True
In [28]: type(result)
Out[28]: bool
注意布尔类型是大小写敏感的:不像其它语言,Python True False 必须首字母大写
In [29]: print(True, False)
True False
布尔型变量可以 bool() 造:其型的变可以预设则进
转换type conversion。例如,所有的数字类型将 0 视作 False,其余则为 True
In [30]: bool(2014)
Out[30]: True
In [31]: bool(0)
Out[31]: False
-
6.6. 布尔类型 33
In [32]: bool(3.1415)
Out[32]: True
None 的布尔值永远是 False
In [33]: bool(None)
Out[33]: False
对字符串来说,如果字符串为空串,则 bool(s) 为假,否则为真:
In [34]: bool("")
Out[34]: False
In [35]: bool("abc")
Out[35]: True
对序列而言,我们会在下一节看到,空序列的布尔值为 False,其余则为 True
In [36]: bool([1, 2, 3])
Out[36]: True
In [37]: bool([])
Out[37]: False
+
6 内置类型:简单变量类型
谈到 Python 的变量和对象,我们会发现所有的 Python 对象都附带有相应的类型信息。
里我们将简要地介绍一遍 Python 内置的简单变量类型。我们所说的简单类型simple type
是与一些复合类型compound type)相区别的,在后面的章节中我们会继续讨论复合类型。
下表总结了
Python
的简单变量类型:
类型 举例 描述
int x = 1 整数(对应包括负数和零的整数域)
float x = 1.0 浮点数(对应实数域)
complex x = 1 + 2j 复数(包括实部与虚部的复数)
bool x = True 布尔值:表示真和假
str x = 'abc' 字符串:表示字符或者文本
NoneType x = None 特殊的用以表示空的对象
我们会快速地将这些类型依次介绍一遍。
6.1 整数
最基本的用来表示数字的类型是整数integer。所有不含小数点的数字都是整数:
In [1]: x = 1
type(x)
Out[1]: int
Python 的整数实际上比 C 语言中的整数更为复杂。C 的整数是固定精度fixed-precision
的,而且通常会发生溢出现象(通常发生在整数值靠近 2
31
或者 2
63
时,具体取决于你的系统)
Python 的整数则是可变精度variable-precision)的,因而你可以完成一些在其他语言中往往
会溢出的计算:
In [2]: 2 ** 200
Out[2]: 1606938044258990275541962092341162602522202993782792835301376
Python 整数另外一个方便的特性是它的除法结果可以被默认地转换成浮点类型:
27
+
28 6. 内置类型:简单变量类型
In [3]: 5 / 2
Out[3]: 2.5
需要注意的是这一向上转换是 Python 3 的一个特性;而在 Python 2 中,整数除法截断了
小数部分并返回一个整数的结果,就像许多类似于 C 语言的静态类型语言一样:
# Python 2 的特性
>>> 5 / 2
2
如果想要在
Python 3
中复原这种行为的整除,你可以采用向下整除运算符:
In [4]: 5 // 2
Out[4]: 2
最后,需要注意的是 Python 2.x 同时拥有 int long 两种类型,而 Python 3 则将这两
种类型整合到了 int 这一个单独的类型当中。
6.2 浮点数
浮点数floating-point number)类型可以用来存储小数。它们可以用标准十进制表示法或
指数表示法来表示:
In [5]: x = 0.000005
y = 5e-6
print(x == y)
True
In [6]: x = 1400000.00
y = 1.4e6
print(x == y)
True
exponential notation)中,e E “乘 10 方”
因而 1.4e6 可以被解释成 1.4 × 10
6
一个整数可以用 float 构造函数constructor)来显式地转换为一个浮点数:
In [7]: float(1)
Out[7]: 1.0
+
6.2. 浮点数 29
6.2.1 浮点数精度
在浮点数的计算中需要注意的一点是它的小数部分精度,因而有可能导致在进行等于
比较的时候结果不稳定。例如:
In [8]: 0.1 + 0.2 == 0.3
Out[8]: False
为什么会样呢?事实这不 Python 一种语言存在问题,而是为大多数学计
算平台都采用固定精度的格式来存储二进制浮点数。所有使用浮点数的编程语言都使用固定的
位数来存放这些浮点数,这就导致只能表示出某些数字的大约的值。我们可以通过输出这三个
数字的高精度形式来发现这一点:
In [9]: print("0.1 = {0:.17f}".format(0.1))
print("0.2 = {0:.17f}".format(0.2))
print("0.3 = {0:.17f}".format(0.3))
0.1 = 0.10000000000000001
0.2 = 0.20000000000000001
0.3 = 0.29999999999999999
我们了十数表示式,有的被表示 10 的幂
形式:
1
8
= 1 · 10
1
+ 2 · 10
2
+ 5 · 10
3
在十进制下,我们将其表达成熟悉的小数形式:0.125
计算机通常将数值用二进制的方式存储,因而每一个数字又被表示成 2 的不同幂次的和:
1
8
= 0 · 2
1
+ 0 · 2
2
+ 1 · 2
3
在二制中,们把 0.001
2
,其
2
的下作为进制识。0.125 = 0.001
2
这一
式通常意味着数字可以同时在二进制和十进制下被表示成有限位的数字。
在熟悉的十进制中,你可能会遇到数字无法被表达成有限数字的形式。比如,1 除以 3
结果在标准十进制表示中为:
1
3
= 0.333333333 · · ·
小数末尾的 3 将一直循环下去:也就是说,这个除法的商需要用无限的数字来表示!
类似地,同样存在数字在二进制下需要用无限的数字来表示。比如:
1
10
= 0.00011001100110011 · · ·
2
1/3 地表来,1/10
来表示。Python 在内部截断了这些小数位数,在大多数系统中通常保留为从第一个不为零的数
字开始至多 52 位的数字。
这个由于精度引发的错误是使用浮点数时不可避免的。最好的解决办法是作为程序员,始
终意识到浮点计算的表达是并不精确的,同时绝不依赖完全相等来比较浮点数的值。
+
30 6. 内置类型:简单变量类型
6.3 复数
complex numberreal partimaginary part(浮点表示)
的数字。我们之前已经介绍过了整数和实数,我们可以用它们来构造一个复数:
In [10]: complex(1, 2)
Out[10]: (1+2j)
我们也可以选择用添加后缀 j 来表示复数的虚部:
In [11]: 1 + 2j
Out[11]: (1+2j)
复数有着许多有趣的属性和方法,我们将在这里进行简单的介绍:
In [12]: c = 3 + 4j
In [13]: c.real # 实部
Out[13]: 3.0
In [14]: c.imag # 虚部
Out[14]: 4.0
In [15]: c.conjugate() # 共轭复数
Out[15]: (3-4j)
In [16]: abs(c) # 模,即 sqrt(c.real ** 2 + c.imag ** 2)
Out[16]: 5.0
6.4 字符串类型
Python 中用单引号或双引号创建字符串:
In [17]: message = "what do you like?"
response = 'spam'
Python 有着许多方便的字符串处理函数;下面是其中一些的介绍:
+
6.5. NONE 类型 31
In [18]: # 字符串长度
len(response)
Out[18]: 4
In [19]: # 大写转换。同样还有小写转换:str.lower()
response.upper()
Out[19]: 'SPAM'
In [20]: # 首字母大写。str.title() 有同样的功能
message.capitalize()
Out[20]: 'What do you like?'
In [21]: # + 连接
message + response
Out[21]: 'what do you like?spam'
In [22]: # 乘法意味着自身多次连接
5 * response
Out[22]: 'spamspamspamspamspam'
In [23]: # 任意访问单个字符(下标从 0 开始)
message[0]
Out[23]: 'w'
更多关于下标的讨论,详见后续章节:第 7.1 列表
6.5 None 类型
Python 包括一个特殊的类型:NoneType。它只有一个值:None。例如:
In [24]: type(None)
Out[24]: NoneType
None 使方,个函
default value。例如,Python 3 中的 print() 函数不会返回任何值,但我们依然可以得到它
的值:
+
32 6. 内置类型:简单变量类型
In [25]: return_value = print('abc')
abc
In [26]: print(return_value)
None
同样地,Python 中所有没有返回值的函数都会事实上返回 None
6.6 布尔类型
布尔类型是一种简单的类型,它只拥 True False 两种值,它由之前提到的比较运算
符得到:
In [27]: result = (4 < 5)
result
Out[27]: True
In [28]: type(result)
Out[28]: bool
注意布尔类型是大小写敏感的:不像其它语言,Python True False 必须首字母大写
In [29]: print(True, False)
True False
布尔型变量可以 bool() 造:其型的变可以预设则进
转换type conversion。例如,所有的数字类型将 0 视作 False,其余则为 True
In [30]: bool(2014)
Out[30]: True
In [31]: bool(0)
Out[31]: False
+
6.6. 布尔类型 33
In [32]: bool(3.1415)
Out[32]: True
None 的布尔值永远是 False
In [33]: bool(None)
Out[33]: False
对字符串来说,如果字符串为空串,则 bool(s) 为假,否则为真:
In [34]: bool("")
Out[34]: False
In [35]: bool("abc")
Out[35]: True
对序列而言,我们会在下一节看到,空序列的布尔值为
False
,其余则为
True
In [36]: bool([1, 2, 3])
Out[36]: True
In [37]: bool([])
Out[37]: False
-
7 内置数据结构
我们已经了解了 Python 的一些基本数据类型:intfloatcomplexboolstr 等等。
Python 同样也拥有一些内置的复合类型作为其它类型的容器。这些复合类型有:
类型名 举例 描述
list [1, 2, 3] 列表,有序集合
tuple (1, 2, 3) 元组,不可变的有序集合
dict {'a':1, 'b':2, 'c':3} 字典,无序的键值对映射
set {1, 2, 3} 集合,具有无序性和唯一性
正如你所见,圆括号、方括号和大括号对于这些集合类型有着不同的意义。接下来,我们
将在这里快速认识这些数据结构。
7.1 列表
列表list)是 Python 基本的有序可变的数据集合类型。列表用方括号表示,元素
间用逗号隔开。下面是一个包括前几项质数的列表:
In [1]: L = [2, 3, 5, 7]
列表有着许多方便好用的方法。这里我们将快速介绍那些最普遍和最常用的方法:
In [2]: # 列表长度
len(L)
Out[2]: 4
In [3]: # 在列表尾部添加一个元素
L.append(11)
L
Out[3]: [2, 3, 5, 7, 11]
In [4]: # + 连接
L + [13, 17, 19]
35
-
36 7. 内置数据结构
Out[4]: [2, 3, 5, 7, 11, 13, 17, 19]
In [5]: # 进行原地排序
L = [2, 5, 1, 6, 3, 4]
L.sort()
L
Out[5]: [1, 2, 3, 4, 5, 6]
除此之外,还有许多内置的列表方法,它们在 Python 的官方文档中有详细介绍:https:
//docs.python.org/3/tutorial/datastructures.html
我们已经示了列表包单一型元素的使用方法,然 Python 复合型的强大处在
于它可以包含任何类型的对象,甚至是不同类型的混合,例如:
In [6]: L = [1, 'two', 3.14, [0, 3, 5]]
这种灵活性是 Python 动态类型系统带来的好处之一,而在 C 这种静态类型语言中创建这
样一个复合类型的序列可以说是非常让人头疼了。然而,Python 的列表甚至还能将其它列表作
为其元素。正是这种变量类型的灵活性使得 Python 的代码写起来更为快速和简单。
到现在为止,我们一直着眼于将列表作为一个整体来操作,而相对地,列表另外一个重要
的部分就是访问其中的元素个体。这一部分通过索引以及切片来完成,我们将在下面讨论它们。
7.1.1 列表索引与切片
Python 于复型变量访问indexslice的方法,前
访元素,者用个元素。们会到,两者使用方括的语法来示。
让我们回到之前的质数列表:
In [7]: L = [2, 3, 5, 7, 11]
Python 使零开的索引,我们的语法来得列的第第二
个元素:
In [8]: L[0]
Out[8]: 2
In [9]: L[1]
Out[9]: 3
位于列表末尾的元素可以用负数来访问,1 代表最后一个元素,依次类推:
-
7.1. 列表 37
In [10]: L[-1]
Out[10]: 11
In [11]: L[-2]
Out[11]: 7
1 更直的方解索引:列的元框中
字表示;列表索示。在 L[2] 5
2 下的数值。
1: 列表索引示意图
索引用来取出列表中的单个元素,而切片则是取出在子列表中取出多个值的方法。它用一
个冒号来表示子序列的起点(包含)和终点(不包含)举个例子,为了得到列表中的前三个元
素,我们可以这样做:
In [12]: L[0:3]
Out[12]: [2, 3, 5]
留意 0 3 在语法中的位置以及切片在两个索引之间的取值方式。如果我们把第一个索引
值(也就是 0)省去,那么我们也会得到同样的结果:
In [13]: L[:3]
Out[13]: [2, 3, 5]
同样地,如果我们省去后面的索引值,它的默认值为列表的长度。这样一来,访问列表最
3 个元素可以用下面这种方式:
In [14]: L[-3:]
Out[14]: [5, 7, 11]
-
38 7. 内置数据结构
最后,我们可以用第三个整数来表示步长。例如,要在列表中每 2 个元素选取一个,我们
可以这样写:
In [15]: L[::2] # 等同于 L[0:len(L):2]
Out[15]: [2, 5, 11]
另外一个特别有用的方法是定义一个负数的步长,它可以把序列翻转:
In [16]: L[::-1]
Out[16]: [11, 7, 5, 3, 2]
索引和切片都不仅可以被用来访问元素,它们也可以改变元素。语法就和你所想象的一样:
In [17]: L[0] = 100
print(L)
[100, 3, 5, 7, 11]
In [18]: L[1:3] = [55, 56]
print(L)
[100, 55, 56, 7, 11]
算包中, NumPy Pandas(在
1 Python 介绍中提到过)
既然我们已经学习了 Python 的列表,并且知道了如何在顺序复合类型中访问其中的元素,
那么现在我们可以看看之前提到的其它三种标准复合数据类型。
7.2 元组
元组tuple)在各种意义上都和列表非常相似,但是它们是用圆括号而不是方括号来定
的:
In [19]: t = (1, 2, 3)
它们也可以完全不用括号来进行定义:
In [20]: t = 1, 2, 3
print(t)
(1, 2, 3)
-
7.2. 元组 39
与列表相似,元组也有长度,其单个元素也可以用方括号来提取:
In [21]: len(t)
Out[21]: 3
In [22]: t[0]
Out[22]: 1
元组和列表最主要的区别还是在于元组不可的,这意味着一旦它们被创建,它们的大
小和内容都不能被改变:
In [23]: t[1] = 4
----------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-23-141c76cb54a2> in <module>()
----> 1 t[1] = 4
TypeError: 'tuple' object does not support item assignment
In [24]: t.append(4)
----------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-24-e8bd1632f9dd> in <module>()
----> 1 t.append(4)
AttributeError:
'
tuple
'
object has no attribute
'
append
'
元组经常被用在 Python 的编程中;一个特别常见的例子就是函数返回多个值。举个例子,
浮点对象的方法 as_integer_ratio() 可以返回浮点数对应的分子和分母,这个双值就是以元
组的形式返回的:
In [25]: x = 0.125
x.as_integer_ratio()
-
40 7. 内置数据结构
Out[25]: (1, 8)
这些返回的多个值也可以用下面的方法分别独立赋值:
In [26]: numerator, denominator = x.as_integer_ratio()
print(numerator / denominator)
0.125
之前提到的列表索引和切片的逻辑同样也适用于元组,同时还有一些别的方法。详细的方
法列 Python 档:https://docs.python.org/3/tutorial/datastructures.
html
7.3 字典
字典dictionary)是一种非常灵活的键值对key-value pair)的映射,它也是 Python
多内部实现的基础。它们可以通过在大括号内用逗号分隔的键值对(形如 key:value)创建:
In [27]: numbers = {'one':1, 'two':2, 'three':3}
我们可以用列表和元组中提到的索引的方式来访问和改变字典中的项,只是这里的索引不
再是从零开始的顺序下标,而是一个有效的字典索引键:
In [28]: # 通过键来访问字典中的值
numbers['two']
Out[28]: 2
我们也可以用索引来加入新的项:
In [29]: # 设置一个新的键值对
numbers['ninety'] = 90
print(numbers)
{'one': 1, 'two': 2, 'three': 3, 'ninety': 90}
需要留心的是字典中并没有任何顺概念,这是设定好的。这种无序性反而使得字典的
实现非常有效率。不论字典的大小如何,元素的随机访非常快(如果你对此感到好奇,你
可以试着了解一下哈希表hash table)的概念)Python 的官方文档中列出了字典可用方法的
完整列表:https://docs.python.org/3/library/stdtypes.html
-
7.4. 集合 41
7.4 集合
第四种基本元素集是集合set,它和数学上的集合定义相同,元素具唯一序性
集合的定义除了它使用和字典一样的花括号这一点以外,和列表、元组非常相似:
In [30]: primes = {2, 3, 5, 7}
odds = {1, 3, 5, 7, 9}
如果你熟悉集合的数学定义,你也一定不会对并、交、差、对等差分symmetric difference
等操作感到陌生。Python 的集合通过方法和运算符实现了所有这些操作。对每一个操作,我们
都会展示两种等价的方式:
In [31]: # 并集:包含出现在任意一个集合中的元素
primes | odds # 使用运算符
primes.union(odds) # 等价地使用对象的方法
Out[31]: {1, 2, 3, 5, 7, 9}
In [32]: # 交集:包含同时出现在两个集合中的元素
primes & odds # 使用运算符
primes.intersection(odds) # 等价地使用对象的方法
Out[32]: {3, 5, 7}
In [33]: # 差分:属于 primes 但不属于 odds 的元素
primes - odds # 使用运算符
primes.difference(odds) # 等价地使用对象的方法
Out[33]: {2}
In [34]: # 对称差分: 只出现在其中一个集合的元素
primes ^ odds # 使用运算符
primes.symmetric_difference(odds) # 等价地使用对象的方法
Out[34]: {1, 2, 9}
集合还有多的方和运算符。你可已经到了想说么:详请参 Python 官方
文档:https://docs.python.org/3/library/stdtypes.html
7.5 其他专用数据结构
Python 构,
collections 到。collections 到:https:
//docs.python.org/3/library/collections.html,你可以自行了解这些多种多样的对象。
-
42 7. 内置数据结构
特别地,我偶然发现下面几个类型非常好用:
collections.namedtuple:像是一个元组,但是每一个值都有自己的名字。
collections.defaultdict:像是一个字典,但是未定义的键对应一个用户设定的默认
值。
collections.OrderedDict: 像是一个字典,但是维护了键的顺序。
一旦你了解了这些标准的内置集合类型,使用那些扩展的特性就非常符合直觉。同时我建
议阅读它们的使用方法:https://docs.python.org/3/library/collections.html
-
8 控制流
在编程中,学习控制流control flow)才算是你真正开始投入编程的实践。没有它,程
序就只是一串等待顺序执行的语句列表。有了控制流,你就可以有条件地或者循环地执行某一
个代码块,这些基本的代码块可以组合成意想不到的复杂的程序!
这里绍条(包 ifelif else及循(包 for while
还有 breakcontinue pass
8.1 条件语句:if-elif-else
条件语句通常是 if-then 语句,程序根据布尔条件执行特定代码片段。下面是 Python 条件
语句一个基本的例子:
In [1]: x = -15
if x == 0:
print(x, "is zero")
elif x > 0:
print(x, "is positive")
elif x < 0:
print(x, "is negative")
else:
print(x, "is unlike anything I've ever seen...")
-15 is negative
特别要注意冒号(:)的使用以及用来分隔代码的空白符。
Python 采用 if else 字也被用它语中,但是键字 elif 会比
特,它是 else if 的缩写。在这些条件语句中,elif else 块是可选的。另外,你可以根据
需要使用任意数量的 elif 语句。
8.2 for 循环
Python 中的循环是一种重复执行某些代码语句的一种方式。举个例子,如果我们想要打印
出一个列表中的每一个元素,我们可以使用 for 循环:
43
-
44 8. 控制流
In [2]: for N in [2, 3, 5, 7]:
print(N, end=' ') # 在同一行上打印
2 3 5 7
注意到 for 循环的简洁性:我们可以定义我们想要用的循环变量和循环的序列,使用 in
连接它们,这是一种非常符合直觉且可读的方式。更具体地,in 运算符右边的对象可以使用任
Python
的迭器。个迭一个列,会在 11
中讨论它们。
举个例子,Python 中最常用的迭代器是 range 对象,它可以生成数字的序列:
In [3]: for i in range(10):
print(i, end=' ')
0 1 2 3 4 5 6 7 8 9
序列默认 0 始生成,按照惯例,域的上界并没有包含在输出中。range 对象也可以使
用更为复杂的参数来生成:
In [4]: # 5 10 的范围
list(range(5, 10))
Out[4]: [5, 6, 7, 8, 9]
In [5]: # 0 10 的范围,步长为 2
list(range(0, 10, 2))
Out[5]: [0, 2, 4, 6, 8]
你会发现 range 参数的意义和我们在第 7.1 列表中提到的切片的语法很像。
同时要留意 range() 也是 Python 2 Python 3 的区别之一: Python 2 中,range()
成一个列表,而在 Python 3 中,range() 生成一个可迭代的对象。
8.3 while 循环
Python 中另外的一种循环类型是 while 循环,它保持循环直到不再满足某种条件:
In [6]: i = 0
while i < 10:
print(i, end=' ')
i += 1
0 1 2 3 4 5 6 7 8 9
-
8.4. 调整循环执行:BREAK CONTINUE 45
while 循环的参数用一个布尔表达式来表示,循环一直被执行直到表达式的值为假。
8.4 调整循环执行:break continue
循环中有两种有用的语句来微调它们的执行:
break 语句跳出整个循环体。
continue 语句跳出当前循环,转到下一次迭代中。
它们可以被用在 for while 循环中。
这里有一个使用 continue 语句来打印奇数串的例子。在这个例子中,用 if-else 也可以
完成任务,只是有时候 continue 语句是一种表达你心中想法的更为方便的方式。
In [7]: for n in range(20):
# 如果 n/2 的余数为 0,跳过本次循环的循环部分
if n % 2 == 0:
continue
print(n, end=' ')
1 3 5 7 9 11 13 15 17 19
break 完成个不简单务。这循环波那Fibonacci
numbers)填充一个列表,直到数字超过某一个值:
In [8]: a, b = 0, 1
amax = 100
L = []
while True:
(a, b) = (b, a + b)
if a > amax:
break
L.append(a)
print(L)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
注意到我们使用 while True 循环,它会一直循环直到遇到一个跳出语句!
8.5 带有 else 块的循环
Python else 句, for while 分。
-else 或许是 Python 中一个让人困惑的名字,我更倾向于把它当作 nobreak 语句:else
的代码只有当循环自然结束时才能执行,也就是说不能遇到 break 语句。
-
46 8. 控制流
下面是一个可能用到这个语法的例子:未优化的爱拉托逊斯筛法Sieve of Eratosthenes
一个用来找出质数的著名算法:
In [9]: L = []
nmax = 30
for n in range(2, nmax):
for factor in L:
if n % factor == 0:
break
else: # 没有 break
L.append(n)
print(L)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
只有当所有的因子都不能整除给定数字 n 时,else 语句才被执行。
while 循环的 else 语句也是同样的工作机制。
-
9 定义和使用函数
止,使单代块。上,
的函 Python 码,使
性。法:def 句,数;
lambda
语句,适用于创建较短的匿名函数。
9.1 使用函数
函数是一组有名字的代码,它可以通过圆括号来进行调用。我们已经接触过一些函数,例
Python 3 中的 print 就是一个函数:
In [1]: print('abc')
abc
这里 print 是函数名,而 'abc' 是函数的参数。
除了普通参数,还有用名字指定的关键字形式参数keyword argumentsep print
数的一个可用的关键字形式参数(Python 3,它表示用来间隔各个项之间的字符:
In [2]: print(1, 2, 3)
1 2 3
In [3]: print(1, 2, 3, sep='--')
1--2--3
当无关键字的参数和有关键字的参数共同使用时,有关键字的参数必须被放到后面。
9.2 定义函数
自定义函数使得函数更加实用,这样代码就可以被多个不同的地方调用。 Python 中,
数通过 def 语句来定义。举个例子,我们可以将前一节生成斐波那契数列的代码进行封装:
In [4]: def fibonacci(N):
L = []
47
-
48 9. 定义和使用函数
a, b = 0, 1
while len(L) < N:
a, b = b, a + b
L.append(a)
return L
现在我们有了一个叫做 fibonacci 的函数,它接受一个参数 N完成对应这个参数的工作,
并且返回一个值。下面是一个前 N 项斐波那契数的列表:
In [5]: fibonacci(10)
Out[5]: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
如果你对 C 这样强类语言较熟的话,会立发现里没关于数输入、
息。Python 的函 Python 的对象,单对是复
象。这就意味着对其他语言来说比较难以构造的函数在 Python 里面却可以直接实现。
举个例子:多个返回值会被简单地放入一个用逗号间隔的元组中:
In [6]: def real_imag_conj(val):
return val.real, val.imag, val.conjugate()
r, i, c = real_imag_conj(3 + 4j)
print(r, i, c)
3.0 4.0 (3-4j)
9.3 默认参数
在定义函数时,通常会有某些参数在大多数情况下是同一个特定值,但同时我们又希望用
户具的能力,们给加上了默值。一下 fibonacci 数,
假如我们希望用户可以自己设定起始数值,我们可以采用下面的方法:
In [7]: def fibonacci(N, a=0, b=1):
L = []
while len(L) < N:
a, b = b, a + b
L.append(a)
return L
如果只给一个参数,那么函数的调用结果和之前完全一样:
In [8]: fibonacci(10)
Out[8]: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
-
9.4. 可变参数:*ARGS **KWARGS 49
但是现在,我们可以用这个函数来探索新事物,比如设定新的初始值:
In [9]: fibonacci(10, 0, 2)
Out[9]: [2, 2, 4, 6, 10, 16, 26, 42, 68, 110]
我们也可以按照意愿用名字来指定参数的值,这样参数变量的顺序就无所谓先后了:
In [10]: fibonacci(10, b=3, a=1)
Out[10]: [3, 4, 7, 11, 18, 29, 47, 76, 123, 199]
9.4 可变参数:*args **kwargs
有时候,你可能会希望有这样一个函数:你一开始并不知道用户会传多少参数给这个函数。
在这种情况下,你可以使用 *args **kwargs 的特殊形式来捕捉传进来的参数。就像这样:
In [11]: def catch_all(*args, **kwargs):
print("args =", args)
print("kwargs = ", kwargs)
In [12]: catch_all(1, 2, 3, a=4, b=5)
args = (1, 2, 3)
kwargs = {
'
a
'
: 4,
'
b
'
: 5}
In [13]: catch_all('a', keyword=2)
args = ('a',)
kwargs = {'keyword': 2}
*args **kwargs 要, *
args kwargs 的变名, “arguments” “keyword arguemnts” 写。
*:变 * “将为列表”而变
** 则意味着“将其展开为字典”。事实上,这种语法不仅仅被用在函数定义中,函数的调用
同样也是如此:
In [14]: inputs = (1, 2, 3)
keywords = {'pi': 3.14}
catch_all(*inputs, **keywords)
args = (1, 2, 3)
kwargs = {'pi': 3.14}
-
50 9. 定义和使用函数
9.5 匿名(Lambda)函数
之前我们已经快速了解了定义函数最常用的方式,也就是通过 def 语句。这里我们将介绍
另一种用 lambda 语句定义的更为短小的一次性函数。它看起来长成这样:
In [15]: add = lambda x, y: x + y
add(1, 2)
Out[15]: 3
这个 Lambda 函数粗略地等价于:
In [16]: def add(x, y):
return x + y
那么什么们会要用种语法呢?首先, Python 有这一个实:都是对
,甚至是函数本身!这就意味着函数可以被当作参数传入另一个函数。
1
下面是对应的例子:假设我们有一些数据,它们存放在一个由字典组成的列表中。
In [17]: data = [{'first':'Guido', 'last':'Van Rossum', 'YOB':1956},
{'first':'Grace', 'last':'Hopper', 'YOB':1906},
{'first':'Alan', 'last':'Turing', 'YOB':1912}]
现在我们想要对数据进行排序。Python 已经有一个 sorted 函数来完成这项工作:
In [18]: sorted([2,4,3,5,1,6])
Out[18]: [1, 2, 3, 4, 5, 6]
然而字典并不可排序:我们需要一种方法来告诉函数按照什么顺序排列我们的数据。我们
可以定义一个 key 函数,只要给它一个项,它就可以返回排序所依据的键:
In [19]: # 根据名字按字典序排序
sorted(data, key=lambda item: item['first'])
Out[19]: [{'YOB': 1912, 'first': 'Alan', 'last': 'Turing'},
{'YOB': 1906, 'first': 'Grace', 'last': 'Hopper'},
{'YOB': 1956, 'first': 'Guido', 'last': 'Van Rossum'}]
In [20]: # 根据出生日期排序
sorted(data, key=lambda item: item['YOB'])
1
译者注:这就是所谓一等函数first-order function)的概念:将函数像值一样传递。
-
9.5. 匿名(LAMBDA)函数 51
Out[20]: [{'YOB': 1906, 'first': 'Grace', 'last': 'Hopper'},
{'YOB': 1912, 'first': 'Alan', 'last': 'Turing'},
{'YOB': 1956, 'first': 'Guido', 'last': 'Van Rossum'}]
尽管这些函数一定可以用正常的 def 语法来定义,但 lambda 的语法则让这些短小的一
性函数使用起来更加方便。
+
7 内置数据结构
我们已经了解了 Python 的一些基本数据类型:intfloatcomplexboolstr 等等。
Python 同样也拥有一些内置的复合类型作为其它类型的容器。这些复合类型有:
类型名 举例 描述
list [1, 2, 3] 列表,有序集合
tuple (1, 2, 3) 元组,不可变的有序集合
dict {'a':1, 'b':2, 'c':3} 字典,无序的键值对映射
set {1, 2, 3} 集合,具有无序性和唯一性
正如你所见,圆括号、方括号和大括号对于这些集合类型有着不同的意义。接下来,我们
将在这里快速认识这些数据结构。
7.1 列表
列表list)是 Python 基本的有序可变的数据集合类型。列表用方括号表示,元素
间用逗号隔开。下面是一个包括前几项质数的列表:
In [1]: L = [2, 3, 5, 7]
列表有着许多方便好用的方法。这里我们将快速介绍那些最普遍和最常用的方法:
In [2]: # 列表长度
len(L)
Out[2]: 4
In [3]: # 在列表尾部添加一个元素
L.append(11)
L
Out[3]: [2, 3, 5, 7, 11]
In [4]: # + 连接
L + [13, 17, 19]
35
+
36 7. 内置数据结构
Out[4]: [2, 3, 5, 7, 11, 13, 17, 19]
In [5]: # 进行原地排序
L = [2, 5, 1, 6, 3, 4]
L.sort()
L
Out[5]: [1, 2, 3, 4, 5, 6]
除此之外,还有许多内置的列表方法,它们在 Python 的官方文档中有详细介绍:https:
//docs.python.org/3/tutorial/datastructures.html
我们已经示了列表包单一型元素的使用方法,然 Python 复合型的强大处在
于它可以包含任何类型的对象,甚至是不同类型的混合,例如:
In [6]: L = [1, 'two', 3.14, [0, 3, 5]]
这种灵活性是 Python 动态类型系统带来的好处之一,而在 C 这种静态类型语言中创建这
样一个复合类型的序列可以说是非常让人头疼了。然而,Python 的列表甚至还能将其它列表作
为其元素。正是这种变量类型的灵活性使得 Python 的代码写起来更为快速和简单。
到现在为止,我们一直着眼于将列表作为一个整体来操作,而相对地,列表另外一个重要
的部分就是访问其中的元素个体。这一部分通过索引以及切片来完成,我们将在下面讨论它们。
7.1.1 列表索引与切片
Python 于复型变量访问indexslice的方法,前
访元素,者用个元素。们会到,两者使用方括的语法来示。
让我们回到之前的质数列表:
In [7]: L = [2, 3, 5, 7, 11]
Python 使零开的索引,我们的语法来得列的第第二
个元素:
In [8]: L[0]
Out[8]: 2
In [9]: L[1]
Out[9]: 3
位于列表末尾的元素可以用负数来访问,1 代表最后一个元素,依次类推:
+
7.1. 列表 37
In [10]: L[-1]
Out[10]: 11
In [11]: L[-2]
Out[11]: 7
1 更直的方解索引:列的元框中
字表示;列表索示。在 L[2] 5
2 下的数值。
1: 列表索引示意图
索引用来取出列表中的单个元素,而切片则是取出在子列表中取出多个值的方法。它用一
个冒号来表示子序列的起点(包含)和终点(不包含)举个例子,为了得到列表中的前三个元
素,我们可以这样做:
In [12]: L[0:3]
Out[12]: [2, 3, 5]
留意 0 3 在语法中的位置以及切片在两个索引之间的取值方式。如果我们把第一个索引
值(也就是 0)省去,那么我们也会得到同样的结果:
In [13]: L[:3]
Out[13]: [2, 3, 5]
同样地,如果我们省去后面的索引值,它的默认值为列表的长度。这样一来,访问列表最
3 个元素可以用下面这种方式:
In [14]: L[-3:]
Out[14]: [5, 7, 11]
+
38 7. 内置数据结构
最后,我们可以用第三个整数来表示步长。例如,要在列表中每 2 个元素选取一个,我们
可以这样写:
In [15]: L[::2] # 等同于 L[0:len(L):2]
Out[15]: [2, 5, 11]
另外一个特别有用的方法是定义一个负数的步长,它可以把序列翻转:
In [16]: L[::-1]
Out[16]: [11, 7, 5, 3, 2]
索引和切片都不仅可以被用来访问元素,它们也可以改变元素。语法就和你所想象的一样:
In [17]: L[0] = 100
print(L)
[100, 3, 5, 7, 11]
In [18]: L[1:3] = [55, 56]
print(L)
[100, 55, 56, 7, 11]
算包中, NumPy Pandas(在
1 Python 介绍中提到过)
既然我们已经学习了 Python 的列表,并且知道了如何在顺序复合类型中访问其中的元素,
那么现在我们可以看看之前提到的其它三种标准复合数据类型。
7.2 元组
元组tuple)在各种意义上都和列表非常相似,但是它们是用圆括号而不是方括号来定
的:
In [19]: t = (1, 2, 3)
它们也可以完全不用括号来进行定义:
In [20]: t = 1, 2, 3
print(t)
(1, 2, 3)
+
7.2. 元组 39
与列表相似,元组也有长度,其单个元素也可以用方括号来提取:
In [21]: len(t)
Out[21]: 3
In [22]: t[0]
Out[22]: 1
元组和列表最主要的区别还是在于元组不可的,这意味着一旦它们被创建,它们的大
小和内容都不能被改变:
In [23]: t[1] = 4
----------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-23-141c76cb54a2> in <module>()
----> 1 t[1] = 4
TypeError: 'tuple' object does not support item assignment
In [24]: t.append(4)
----------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-24-e8bd1632f9dd> in <module>()
----> 1 t.append(4)
AttributeError: 'tuple' object has no attribute 'append'
元组经常被用在 Python 的编程中;一个特别常见的例子就是函数返回多个值。举个例子,
浮点对象的方法 as_integer_ratio() 可以返回浮点数对应的分子和分母,这个双值就是以元
组的形式返回的:
In [25]: x = 0.125
x.as_integer_ratio()
+
40 7. 内置数据结构
Out[25]: (1, 8)
这些返回的多个值也可以用下面的方法分别独立赋值:
In [26]: numerator, denominator = x.as_integer_ratio()
print(numerator / denominator)
0.125
之前提到的列表索引和切片的逻辑同样也适用于元组,同时还有一些别的方法。详细的方
法列 Python 档:https://docs.python.org/3/tutorial/datastructures.
html
7.3 字典
字典dictionary)是一种非常灵活的键值对key-value pair)的映射,它也是 Python
多内部实现的基础。它们可以通过在大括号内用逗号分隔的键值对(形如 key:value)创建:
In [27]: numbers = {'one':1, 'two':2, 'three':3}
我们可以用列表和元组中提到的索引的方式来访问和改变字典中的项,只是这里的索引不
再是从零开始的顺序下标,而是一个有效的字典索引键:
In [28]: # 通过键来访问字典中的值
numbers['two']
Out[28]: 2
我们也可以用索引来加入新的项:
In [29]: # 设置一个新的键值对
numbers['ninety'] = 90
print(numbers)
{'one': 1, 'two': 2, 'three': 3, 'ninety': 90}
需要留心的是字典中并没有任何顺概念,这是设定好的。这种无序性反而使得字典的
实现非常有效率。不论字典的大小如何,元素的随机访非常快(如果你对此感到好奇,你
可以试着了解一下哈希表hash table)的概念)Python 的官方文档中列出了字典可用方法的
完整列表:https://docs.python.org/3/library/stdtypes.html
+
7.4. 集合 41
7.4 集合
第四种基本元素集是集合set,它和数学上的集合定义相同,元素具唯一序性
集合的定义除了它使用和字典一样的花括号这一点以外,和列表、元组非常相似:
In [30]: primes = {2, 3, 5, 7}
odds = {1, 3, 5, 7, 9}
如果你熟悉集合的数学定义,你也一定不会对并、交、差、对等差分symmetric difference
等操作感到陌生。Python 的集合通过方法和运算符实现了所有这些操作。对每一个操作,我们
都会展示两种等价的方式:
In [31]: # 并集:包含出现在任意一个集合中的元素
primes | odds # 使用运算符
primes.union(odds) # 等价地使用对象的方法
Out[31]: {1, 2, 3, 5, 7, 9}
In [32]: # 交集:包含同时出现在两个集合中的元素
primes & odds # 使用运算符
primes.intersection(odds) # 等价地使用对象的方法
Out[32]: {3, 5, 7}
In [33]: # 差分:属于 primes 但不属于 odds 的元素
primes - odds # 使用运算符
primes.difference(odds) # 等价地使用对象的方法
Out[33]: {2}
In [34]: # 对称差分: 只出现在其中一个集合的元素
primes ^ odds # 使用运算符
primes.symmetric_difference(odds) # 等价地使用对象的方法
Out[34]: {1, 2, 9}
集合还有多的方和运算符。你可已经到了想说么:详请参 Python 官方
文档:https://docs.python.org/3/library/stdtypes.html
7.5 其他专用数据结构
Python 构,
collections 到。collections 到:https:
//docs.python.org/3/library/collections.html,你可以自行了解这些多种多样的对象。
+
42 7. 内置数据结构
特别地,我偶然发现下面几个类型非常好用:
collections.namedtuple:像是一个元组,但是每一个值都有自己的名字。
collections.defaultdict:像是一个字典,但是未定义的键对应一个用户设定的默认
值。
collections.OrderedDict: 像是一个字典,但是维护了键的顺序。
一旦你了解了这些标准的内置集合类型,使用那些扩展的特性就非常符合直觉。同时我建
议阅读它们的使用方法:https://docs.python.org/3/library/collections.html
+
8 控制流
在编程中,学习控制流control flow)才算是你真正开始投入编程的实践。没有它,程
序就只是一串等待顺序执行的语句列表。有了控制流,你就可以有条件地或者循环地执行某一
个代码块,这些基本的代码块可以组合成意想不到的复杂的程序!
这里绍条(包 ifelif else及循(包 for while
还有 breakcontinue pass
8.1 条件语句:if-elif-else
条件语句通常是 if-then 语句,程序根据布尔条件执行特定代码片段。下面是 Python 条件
语句一个基本的例子:
In [1]: x = -15
if x == 0:
print(x, "is zero")
elif x > 0:
print(x, "is positive")
elif x < 0:
print(x, "is negative")
else:
print(x, "is unlike anything I've ever seen...")
-15 is negative
特别要注意冒号(:)的使用以及用来分隔代码的空白符。
Python 采用 if else 字也被用它语中,但是键字 elif 会比
特,它是 else if 的缩写。在这些条件语句中,elif else 块是可选的。另外,你可以根据
需要使用任意数量的 elif 语句。
8.2 for 循环
Python 中的循环是一种重复执行某些代码语句的一种方式。举个例子,如果我们想要打印
出一个列表中的每一个元素,我们可以使用 for 循环:
43
+
44 8. 控制流
In [2]: for N in [2, 3, 5, 7]:
print(N, end=' ') # 在同一行上打印
2 3 5 7
注意到 for 循环的简洁性:我们可以定义我们想要用的循环变量和循环的序列,使用 in
连接它们,这是一种非常符合直觉且可读的方式。更具体地,in 运算符右边的对象可以使用任
Python 的迭器。个迭个一列,会在 11
中讨论它们。
举个例子,Python 中最常用的迭代器是 range 对象,它可以生成数字的序列:
In [3]: for i in range(10):
print(i, end=' ')
0 1 2 3 4 5 6 7 8 9
序列默认 0 始生成,按照惯例,域的上界并没有包含在输出中。range 对象也可以使
用更为复杂的参数来生成:
In [4]: # 5 10 的范围
list(range(5, 10))
Out[4]: [5, 6, 7, 8, 9]
In [5]: # 0 10 的范围,步长为 2
list(range(0, 10, 2))
Out[5]: [0, 2, 4, 6, 8]
你会发现 range 参数的意义和我们在第 7.1 列表中提到的切片的语法很像。
同时要留意 range() 也是 Python 2 Python 3 的区别之一: Python 2 中,range()
成一个列表,而在 Python 3 中,range() 生成一个可迭代的对象。
8.3 while 循环
Python 中另外的一种循环类型是 while 循环,它保持循环直到不再满足某种条件:
In [6]: i = 0
while i < 10:
print(i, end=' ')
i += 1
0 1 2 3 4 5 6 7 8 9
+
8.4. 调整循环执行:BREAK CONTINUE 45
while 循环的参数用一个布尔表达式来表示,循环一直被执行直到表达式的值为假。
8.4 调整循环执行:break continue
循环中有两种有用的语句来微调它们的执行:
break 语句跳出整个循环体。
continue 语句跳出当前循环,转到下一次迭代中。
它们可以被用在 for while 循环中。
这里有一个使用 continue 语句来打印奇数串的例子。在这个例子中,用 if-else 也可以
完成任务,只是有时候 continue 语句是一种表达你心中想法的更为方便的方式。
In [7]: for n in range(20):
# 如果 n/2 的余数为 0,跳过本次循环的循环部分
if n % 2 == 0:
continue
print(n, end=' ')
1 3 5 7 9 11 13 15 17 19
break 完成个不简单务。这循环波那Fibonacci
numbers)填充一个列表,直到数字超过某一个值:
In [8]: a, b = 0, 1
amax = 100
L = []
while True:
(a, b) = (b, a + b)
if a > amax:
break
L.append(a)
print(L)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
注意到我们使用 while True 循环,它会一直循环直到遇到一个跳出语句!
8.5 带有 else 块的循环
Python else 句, for while 分。
-else 或许是 Python 中一个让人困惑的名字,我更倾向于把它当作 nobreak 语句:else
的代码只有当循环自然结束时才能执行,也就是说不能遇到 break 语句。
+
46 8. 控制流
下面是一个可能用到这个语法的例子:未优化的爱拉托逊斯筛法Sieve of Eratosthenes
一个用来找出质数的著名算法:
In [9]: L = []
nmax = 30
for n in range(2, nmax):
for factor in L:
if n % factor == 0:
break
else: # 没有 break
L.append(n)
print(L)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
只有当所有的因子都不能整除给定数字 n 时,else 语句才被执行。
while 循环的 else 语句也是同样的工作机制。
+
9 定义和使用函数
止,使单代块。上,
的函 Python 码,使
性。法:def 句,数;
lambda
语句,适用于创建较短的匿名函数。
9.1 使用函数
函数是一组有名字的代码,它可以通过圆括号来进行调用。我们已经接触过一些函数,例
Python 3 中的 print 就是一个函数:
In [1]: print('abc')
abc
这里 print 是函数名,而 'abc' 是函数的参数。
除了普通参数,还有用名字指定的关键字形式参数keyword argumentsep print
数的一个可用的关键字形式参数(Python 3,它表示用来间隔各个项之间的字符:
In [2]: print(1, 2, 3)
1 2 3
In [3]: print(1, 2, 3, sep='--')
1--2--3
当无关键字的参数和有关键字的参数共同使用时,有关键字的参数必须被放到后面。
9.2 定义函数
自定义函数使得函数更加实用,这样代码就可以被多个不同的地方调用。 Python 中,
数通过 def 语句来定义。举个例子,我们可以将前一节生成斐波那契数列的代码进行封装:
In [4]: def fibonacci(N):
L = []
47
+
48 9. 定义和使用函数
a, b = 0, 1
while len(L) < N:
a, b = b, a + b
L.append(a)
return L
现在我们有了一个叫做 fibonacci 的函数,它接受一个参数 N完成对应这个参数的工作,
并且返回一个值。下面是一个前 N 项斐波那契数的列表:
In [5]: fibonacci(10)
Out[5]: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
如果你对 C 这样强类语言较熟的话,会立发现里没关于数输入、
息。Python 的函 Python 的对象,单对是复
象。这就意味着对其他语言来说比较难以构造的函数在 Python 里面却可以直接实现。
举个例子:多个返回值会被简单地放入一个用逗号间隔的元组中:
In [6]: def real_imag_conj(val):
return val.real, val.imag, val.conjugate()
r, i, c = real_imag_conj(3 + 4j)
print(r, i, c)
3.0 4.0 (3-4j)
9.3 默认参数
在定义函数时,通常会有某些参数在大多数情况下是同一个特定值,但同时我们又希望用
户具的能力,们给加上了默值。一下 fibonacci 数,
假如我们希望用户可以自己设定起始数值,我们可以采用下面的方法:
In [7]: def fibonacci(N, a=0, b=1):
L = []
while len(L) < N:
a, b = b, a + b
L.append(a)
return L
如果只给一个参数,那么函数的调用结果和之前完全一样:
In [8]: fibonacci(10)
Out[8]: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
+
9.4. 可变参数:*ARGS **KWARGS 49
但是现在,我们可以用这个函数来探索新事物,比如设定新的初始值:
In [9]: fibonacci(10, 0, 2)
Out[9]: [2, 2, 4, 6, 10, 16, 26, 42, 68, 110]
我们也可以按照意愿用名字来指定参数的值,这样参数变量的顺序就无所谓先后了:
In [10]: fibonacci(10, b=3, a=1)
Out[10]: [3, 4, 7, 11, 18, 29, 47, 76, 123, 199]
9.4 可变参数:*args **kwargs
有时候,你可能会希望有这样一个函数:你一开始并不知道用户会传多少参数给这个函数。
在这种情况下,你可以使用 *args **kwargs 的特殊形式来捕捉传进来的参数。就像这样:
In [11]: def catch_all(*args, **kwargs):
print("args =", args)
print("kwargs = ", kwargs)
In [12]: catch_all(1, 2, 3, a=4, b=5)
args = (1, 2, 3)
kwargs = {
'
a
'
: 4,
'
b
'
: 5}
In [13]: catch_all('a', keyword=2)
args = ('a',)
kwargs = {'keyword': 2}
*args **kwargs 要, *
args kwargs 的变名, “arguments” “keyword arguemnts” 写。
*:变 * “将为列表”而变
** 则意味着“将其展开为字典”。事实上,这种语法不仅仅被用在函数定义中,函数的调用
同样也是如此:
In [14]: inputs = (1, 2, 3)
keywords = {'pi': 3.14}
catch_all(*inputs, **keywords)
args = (1, 2, 3)
kwargs = {'pi': 3.14}
+
50 9. 定义和使用函数
9.5 匿名(Lambda)函数
之前我们已经快速了解了定义函数最常用的方式,也就是通过 def 语句。这里我们将介绍
另一种用 lambda 语句定义的更为短小的一次性函数。它看起来长成这样:
In [15]: add = lambda x, y: x + y
add(1, 2)
Out[15]: 3
这个 Lambda 函数粗略地等价于:
In [16]: def add(x, y):
return x + y
那么什么们会要用种语法呢?首先, Python 有这一个实:都是对
,甚至是函数本身!这就意味着函数可以被当作参数传入另一个函数。
1
下面是对应的例子:假设我们有一些数据,它们存放在一个由字典组成的列表中。
In [17]: data = [{'first':'Guido', 'last':'Van Rossum', 'YOB':1956},
{'first':'Grace', 'last':'Hopper', 'YOB':1906},
{'first':'Alan', 'last':'Turing', 'YOB':1912}]
现在我们想要对数据进行排序。Python 已经有一个 sorted 函数来完成这项工作:
In [18]: sorted([2,4,3,5,1,6])
Out[18]: [1, 2, 3, 4, 5, 6]
然而字典并不可排序:我们需要一种方法来告诉函数按照什么顺序排列我们的数据。我们
可以定义一个 key 函数,只要给它一个项,它就可以返回排序所依据的键:
In [19]: # 根据名字按字典序排序
sorted(data, key=lambda item: item['first'])
Out[19]: [{'YOB': 1912, 'first': 'Alan', 'last': 'Turing'},
{'YOB': 1906, 'first': 'Grace', 'last': 'Hopper'},
{'YOB': 1956, 'first': 'Guido', 'last': 'Van Rossum'}]
In [20]: # 根据出生日期排序
sorted(data, key=lambda item: item['YOB'])
1
译者注:这就是所谓一等函数first-order function)的概念:将函数像值一样传递。
+
9.5. 匿名(LAMBDA)函数 51
Out[20]: [{'YOB': 1906, 'first': 'Grace', 'last': 'Hopper'},
{'YOB': 1912, 'first': 'Alan', 'last': 'Turing'},
{'YOB': 1956, 'first': 'Guido', 'last': 'Van Rossum'}]
尽管这些函数一定可以用正常的 def 语法来定义,但 lambda 的语法则让这些短小的一
性函数使用起来更加方便。
-
10 错误和异常
不论你的代码水平怎么样,你终究会在代码中遇到一些错误。可能遇到的错误一般有下列
三种:
语法错误syntax error:由于你写出了不合法的 Python 代码导致的错误(一般很
修改)
运行时错误runtime error由于语法上有效代码无法得到执行导致的错误。也许是由
于不合法的用户输入导致的(有时候很好修改)
语义错semantic error:那些逻辑上的错误。代码执行时并没有出现问题,但是结
果却不是你想要的那样(一般很难追踪和修改)
这里我们主要来看一下如何干净地处理运行时错误。我们可以看到,Python 使用它的异常
处理exception handling)框架来处理运行时错误。
10.1 运行时错误
如果你写一些 Python 码,你该会遇到些运行错误,们可发生在各情况
下。
比如,如果你尝试使用一个未定义的变量:
In [1]: print(Q)
----------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-3-e796bdcf24ff> in <module>()
----> 1 print(Q)
NameError: name 'Q' is not defined
或者你使用一个未定义的操作:
In [2]: 1 + 'abc'
----------------------------------------------------------------------
53
-
54 10. 错误和异常
TypeError Traceback (most recent call last)
<ipython-input-4-aab9e8ede4f7> in <module>()
----> 1 1 + 'abc'
TypeError: unsupported operand type(s) for +: 'int' and 'str'
或者你在尝试计算一个数学上非法的结果:
In [3]: 2 / 0
----------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-5-ae0c5d243292> in <module>()
----> 1 2 / 0
ZeroDivisionError: division by zero
或者你在尝试访问一个在列表中不存在的元素:
In [4]: L = [1, 2, 3]
L[1000]
----------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-6-06b6eb1b8957> in <module>()
1 L = [1, 2, 3]
----> 2 L[1000]
IndexError: list index out of range
中,Python 错误生,
的异常说明:包括了什么代码出错,以及具体哪一行代码出错。
在你试图追踪代码中的问题根源时,遇到这样有意义的报错通常很有帮助。
-
10.2. 捕获异常:TRY EXCEPT 55
10.2 捕获异常:try except
Python 你提时异常 try...except 句,的基
像这样:
In [5]: try:
print("this gets executed first")
except:
print("this gets executed only if there is an error")
this gets executed first
个代行:个代误。
try 代码块中放一个有问题的语句会发生什么:
In [6]: try:
print("let's try something:")
x = 1 / 0 # ZeroDivisionError
except:
print("something bad happened!")
let's try something:
something bad happened!
们可到,一个(这是一 ZeroDivisionError try 中发
时,这个错误被捕获,然后 except 语句会被执行。
个函法。
个函数可以捕获一个被除零异常并返回一个其他值,也许是一个像 10
100
一样很大的数字:
In [7]: def safe_divide(a, b):
try:
return a / b
except:
return 1E100
In [8]: safe_divide(1, 2)
Out[10]: 0.5
In [9]: safe_divide(2, 0)
Out[9]: 1e+100
-
56 10. 错误和异常
这段代码存在一个微妙的问题,如果发生了其他的异常会出现什么状况呢?比如这里有一
个不符合我们预期的例子:
In [10]: safe_divide (1, '2')
Out[10]: 1e+100
在整数和字符串之间进行除法会触发一个 TypeError 异常,但是我们上面写的那段过于热
情的代码把它当做 ZeroDivisionError 来处理了。因此,最好要明确指出我们要捕获的异常类
型:
In [11]: def safe_divide(a, b):
try:
return a / b
except ZeroDivisionError:
return 1E100
In [12]: safe_divide(1, 0)
Out[12]: 1e+100
In [13]: safe_divide(1, '2')
----------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-15-2331af6a0acf> in <module>()
----> 1 safe_divide(1, '2')
<ipython-input-13-10b5f0163af8> in safe_divide(a, b)
1 def safe_divide(a, b):
2 try:
----> 3 return a / b
4 except ZeroDivisionError:
5 return 1E100
TypeError: unsupported operand type(s) for /: 'int' and 'str'
现在我们只能捕获被除零异常,让其他类型的异常都原封不动地传出去。
-
10.3. 抛出异常:RAISE 57
10.3 抛出异常:raise
我们已经到了在使 Python 进行程时获得异信息多么宝贵。你编写的码中
利用异常信息同样非常有帮助,因为这样使用你代码的用户(最重要的是你自己!能弄清导致
错误的根因。
你可以通过使用 raise 语句来自己抛出异常,比如:
In [14]: raise RuntimeError("my error message")
----------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-16-c6a4c1ed2f34> in <module>()
----> 1 raise RuntimeError("my error message")
RuntimeError: my error message
这里使用这个例子很合适,让我们回到我们前面定义的 fibonacci 函数:
In [15]: def fibonacci(N):
L = []
a, b = 0, 1
while len(L) < N:
a, b = b, a + b
L.append(a)
return L
这里有一个潜在的问题是用户输入的值可能为负值。这并不会让我们的函数现在出现什么
错误,但是我们可能希望让用户知道一个负的 N 是不受支持的。
根据惯例,由于无效参数值导致的错误导致 ValueError 错误:
In [16]: def fibonacci(N):
if N < 0:
raise ValueError("N must be non-negative")
L = []
a, b = 0, 1
while len(L) < N:
a, b = b, a + b
L.append(a)
return L
In [17]: fibonacci(10)
-
58 10. 错误和异常
Out[17]: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
In [18]: fibonacci(-10)
----------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-20-3d291499cfa7> in <module>()
----> 1 fibonacci(-10)
<ipython-input-18-01d0cf168d63> in fibonacci(N)
1 def fibonacci(N):
2 if N < 0:
----> 3 raise ValueError("N must be non-negative")
4 L = []
5 a, b = 0, 1
ValueError: N must be non-negative
现在用户能够确切地知道为什么输入是无效的了,然后可以用 try...except 来处理它。
In [19]: N = -10
try:
print("trying this...")
print(fibonacci(N))
except ValueError:
print("Bad value: need to do something else")
trying this...
Bad value: need to do something else
10.4 深入探究异常
简而言之,我想在这里提及一些其他可能遇到的概念。我不会详细介绍这些概念,以及如
何和为什么使用它们,而只是向你展示语法,之后你可以自己探索更多关于它们的内容。
10.4.1 访问错误信息
有时 try...except 语句中,你可会想能够理错误信息本身。这你可以使 as
键字:
-
10.4. 深入探究异常 59
In [20]: try:
x = 1 / 0
except ZeroDivisionError as err:
print("Error class is: ", type(err))
print("Error message is:", err)
Error class is: <class 'ZeroDivisionError'>
Error message is: division by zero
通过这种方法,你可以进一步自定义函数的异常处理。
10.4.2 定义自定义异常
除了内置异常类型之外,还可以通过类继承来定义自定义异常。例如,如果你想要一个特
殊的 ValueError,你可以这样做:
In [21]: class MySpecialError(ValueError):
pass
raise MySpecialError("here's the message")
----------------------------------------------------------------------
MySpecialError Traceback (most recent call last)
<ipython-input-23-92c36e04a9d0> in <module>()
2 pass
3
----> 4 raise MySpecialError("here's the message")
MySpecialError: here's the message
这将允许你使用只能捕获此类错误的 try...except 块。
In [22]: try:
print("do something")
raise MySpecialError("[informative error message here]")
except MySpecialError:
print("do something else")
do something
do something else
-
60 10. 错误和异常
在编写过更多自定义代码时,你可能会发现这很有用。
10.5 try...except...else...finally
除了 try except 之外,你可以使 else finally 进一步调整代码的异常处理。其
基本结构是这样的:
In [23]: try:
print("try something here")
except:
print("this happens only if it fails")
else:
print("this happens only if it succeeds")
finally:
print("this happens no matter what")
try something here
this happens only if it succeeds
this happens no matter what
这里的 else 的功能很清楚,但是 finally 的意思是什么?其实无论发生什么,finally
句始终会被执行,我通常认为它是在操作完成后用来做某种清理工作的。
-
11 迭代器
方式理。
一个表格,名;
种标准的格式。对于这类问 Python 中的解决方法是采迭代器iterator)语法。我们已经
range 迭代器中见过它了:
In [1]: for i in range(10):
print(i, end=' ')
0 1 2 3 4 5 6 7 8 9
在本章中我们将深入讨论迭代器。 Python 3 中,range 产生的不是一个列表,而是一个
称为迭代器的对象。掌握它的工作原理将帮助你理解许多非常有用的 Python 功能与特性。
11.1 遍历列表
使用迭代器最简单的场景莫过于对列表进行迭代。考虑下列代码:
In [2]: for value in [2, 4, 6, 8, 10]:
# 做其他一些操作
print(value + 1, end=' ')
3 5 7 9 11
for x in y 对列 作。
Python for [each] value in [the] list’’使 Python
学、用。是,况。
for val in L’’ 代码时,Python 器会查它否包一个器接
iterator interface。你可以通过内置的 iter 函数进行检查:
In [3]: iter([2, 4, 6, 8, 10])
Out[3]: <list_iterator at 0x104722400>
正是这个迭代器对象提供 for 循环需要的功能。这 iter 对象是一个容器,使你能访
问下一个对象(只要它是合法的)。你可以通过内置的 next 函数查看:
61
-
62 11. 迭代器
In [4]: I = iter([2, 4, 6, 8, 10])
In [5]: print(next(I))
2
In [6]: print(next(I))
4
In [7]: print(next(I))
6
你可能觉得这样“迂回”的操作过于复杂,但事实证明这是非常有用的。因为这样的操作
允许 Python 像列表一样对待实际上不是列表的对象。下面我们将会看到这样的例子。
11.2 不总是列表的列表:range()
可能这种“迂回”迭代最常见的例子就是 Python 3 中的 range() 函数(在 Python 2 中这
个函数命名为 xrange()。这个函数并不返回一个列表,而是一个特殊的 range() 对象:
In [8]: range(10)
Out[8]: range(0, 10)
range 像一个列表一样暴露了一个迭代器接口:
In [9]: iter(range(10))
Out[9]: <range_iterator at 0x1045a1810>
所以 Python 假装按照它是一个列表一样对待它:
In [10]: for i in range(10):
print(i, end=' ')
0 1 2 3 4 5 6 7 8 9
这样迭代的好处是,个列表并没有(显式地)得到完全创。我们可以通过一个范围计
算的例子看到这一点。在下面这个例子中,如果我们把列表中的每一个元素都创建出来(完全
实例化这个列表)系统内存将被全部吞噬(注意到在 Python 2 range 创建了一个列表,因
此在 Python 2 中运行下面的代码可能导致不好的事情发生)
-
11.3. 实用迭代器介绍 63
In [11]: N = 10 ** 12
for i in range(N):
if i >= 10: break
print(i, end=', ')
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
如果 range 真的创建了一个包含 1 万亿个值的列表,它将占用几十 TB 的机器内存!这是
一个巨大的浪费,因为我们实际上并没有用到前 10 个值之外的所有东西!
事实上,这根本有理让我个列迭代。Python itertools 包含
一个 count 函数,这个函数起到了一个无穷 range 的作用:
In [12]: from itertools import count
for i in count():
if i >= 10:
break
print(i, end=', ')
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
环,(比
Ctrl-C
11.3 实用迭代器介绍
迭代器语法乎普用于 Python 内置型以及数科学的一特定对象,我将在
后面的部分中讨论。这里我们介绍一些 Python 中更有实际价值的迭代器。
11.3.1 enumerate
通常你不仅需要迭代数组中的值,还需要同步对索引进行跟踪。你可能会用下面这种方式
去实现:
In [13]: L = [2, 4, 6, 8, 10]
for i in range(len(L)):
print(i, L[i])
0 2
1 4
2 6
3 8
4 10
-
64 11. 迭代器
尽管上述例子是可行的,但是 Python 提供了一个更简洁的语法,即通过 enumerate 迭代
器:
In [14]: for i, val in enumerate(L):
print(i, val)
0 2
1 4
2 6
3 8
4 10
在对一个列表中的索引和值进行迭代时,这是一种更加 Pythonic
1
的方法。
11.3.2 zip
下,个列代。
Pythonic 的方法那对列表索引行迭代,但是好的法是使 zip 迭代器,它将
代对象链在一起:
In [15]: L = [2, 4, 6, 8, 10]
R = [3, 6, 9, 12, 15]
for lval, rval in zip(L, R):
print(lval, rval)
2 3
4 6
6 9
8 12
10 15
任意数量的可迭代对象都可以被链在一起,其中最短的那个列表将决定整个 zip 迭代器的
长度。
11.3.3 map filter
map 迭代器接受一个函数,并且将它应用到迭代器中每一个值:
In [16]: # 寻找前 10 个平方数
square = lambda x: x ** 2
for val in map(square, range(10)):
print(val, end=' ')
1
译者注:所谓 Pythonic 的代码就是以 Python 的方式写出简洁优美的代码(在第 1 章中我们介绍了Python
禅》 19 Python 想) PEP 8Python 南:
https://www.python.org/dev/peps/pep-0008/,你的代码就足够 Pythonic 了!
-
11.3. 实用迭代器介绍 65
0 1 4 9 16 25 36 49 64 81
filter 迭代器看上去类似,但是它只允许使得过滤函数为的值保留下来:
In [17]: # 寻找当 x % 2 0 且小于 10 的值
is_even = lambda x: x % 2 == 0
for val in filter(is_even, range(10)):
print(val, end=' ')
0 2 4 6 8
mapfilter reduce (位 Python functools 中)
functional programming)风格的本组模块。 Python 世界中,这方式时还
是主流,但是仍然有着坚定的支持者(比如 pytoolz
11.3.4 迭代器作为函数参数
我们在 9.4 可变参数:*args **kwargs 中看见 *args **kwargs 可以用来向函
数传递序列和字典。事实上,*args 语法不仅仅适用于序列,同样适用于任意迭代器:
In [18]: print(*range(10))
0 1 2 3 4 5 6 7 8 9
那么,举一个例子,我们可以将之前的 map 例子用一个技巧整合进下面的函数调用中:
In [19]: print(*map(lambda x: x ** 2, range(10)))
0 1 4 9 16 25 36 49 64 81
使 巧, Python 题:
Python unzip() zip() 作呢?
个漆题, zip() 的函 zip()
理解这个问题的关键在于 zip() 可以链接任意数量的迭代器或者序列。观察下列代码:
In [20]: L1 = (1, 2, 3, 4)
L2 = ('a', 'b', 'c', 'd')
In [21]: z = zip(L1, L2)
print(*z)
(1, 'a') (2, 'b') (3, 'c') (4, 'd')
-
66 11. 迭代器
In [22]: z = zip(L1, L2)
new_L1, new_L2 = zip(*z)
print(new_L1, new_L2)
(1, 2, 3, 4) ('a', 'b', 'c', 'd')
子。的,
Python 的迭代器!
11.4 专用迭代器:itertools
itertools 的迭 器,
range 器:itertools.count的迭
常值得的。作为一个例子,考虑 itertools.permutations 函数,这个函数在一个序列全排
full permutation)中进行迭代:
In [23]: from itertools import permutations
p = permutations(range(3))
print(*p)
(0, 1, 2) (0, 2, 1) (1, 0, 2) (1, 2, 0) (2, 0, 1) (2, 1, 0)
类似地,itertools.combinations 函数在一个列表中所有不同的 N 组合中进行迭代:
In [24]: from itertools import combinations
c = combinations(range(4), 2)
print(*c)
(0, 1) (0, 2) (0, 3) (1, 2) (1, 3) (2, 3)
与之有一点儿关联的是 product 迭代器,这个迭代器对两个或多个可迭代对象进行两两配
2
,最终产生一个集合进行迭代:
In [25]: from itertools import product
p = product('ab', range(3))
print(*p)
('a', 0) ('a', 1) ('a', 2) ('b', 0) ('b', 1) ('b', 2)
itertools 中还有多有用的具:你可以 Python 官方文找到全部的列以及
些例子:https://docs.python.org/3/library/itertools.html
2
译者注:实际上是求两个或多个集合的笛卡尔积Cartesian Product
-
12 列表推导
如果你读过足够多的 Python 代码的话,你最终一定会遇到著名的列表推list compre-
hension
1
这种短、代码式。果你使用过性,希望
会爱上它。它的格式如下所示:
In [1]: [i for i in range(20) if i % 3 > 0]
Out[1]: [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19]
这行代码的结果是一个排除了数 3 及其倍数的列表。第一眼看上去这段代码也许有些
人困惑,但是随着你对 Python 代码的熟悉,阅读和书写列表推导代码将变得越来越自然。
12.1 基础列表推导
列表推导是将一个冗长的 for 循环列表构造语句压缩为一行简短易读代码的简单方法。比
如,下面就是一个构造包含前 12 个平方数的列表的循环语句:
In [2]: L = []
for n in range(12):
L.append(n ** 2)
L
Out[2]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
与之等价的列表推导如下所示:
In [3]: [n ** 2 for n in range(12)]
Out[3]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
正如许多
Python
语句一样,你几乎可以直接用直白的英语读出这段代码的意义:“对于每
个小于 12 n 值,构造一个包含 n 的平方的列表”
列表推导的基本语法是:[expr for var in iterable ]。在这里 expr 是任意合法的表达
式,var 是变量名,iterable 是任意可以迭代的 Python 对象。
1
译者注:list comprehension 目前并没有一个固定的翻译,有翻译成列表速构、列表解析、列表内包等,但意思
上都是在定义列表结构的时候按照一定的规则进行推导,而不是穷举所有元素,故本书译为列表推导。
67
-
68 12. 列表推导
12.2 多重迭代
有的时候你可能需要从不止一个值构建列表。在这个情况下,只要简单地在列表推导中加
入另外一个 for 表达式即可:
In [4]: [(i, j) for i in range(2) for j in range(3)]
Out[4]: [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]
第二 for 达式在这里起环索作用,果的列
表。列表推导中这种类型的构造可以继续拓展到 3 次、4 次甚至更多次迭代,尽管增加到一定
程度时代码的可读性会下降!
12.3 条件控制迭代
你可以通过在表达式尾部增加判断语句进一步地控制迭代的条件。在这一节的第一个例子
中,我们 1 20 迭代了所有整数,然后剔除了 3 的倍数。看下面这个例子,观察构造语
的不同:
In [5]: [val for val in range(20) if val % 3 > 0]
Out[5]: [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19]
(var % 3 > 0) True val 3 时。见,
码的意义可以立即用英语读出来:“构造一个列表,包含每一个小于 20 的整数,但是数值不
3 整除”。一旦对这法感惯,那书写代码得更简单——并且
上去比与之等价的循环语句更好理解:
In [6]: L = []
for val in range(20):
if val % 3:
L.append(val)
L
Out[6]: [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19]
12.4 条件控制值
如果你曾写过 C 语言代码,你可能对使用三元运算符ternary operator ? : 在一行内
进行条件判断感到熟悉:
int absval = (val < 0) ? -val : val
-
12.4. 条件控制值 69
Python 也有非常类似的语法,并且在列表推导、Lambda 函数和其他简单的表达式场景中
也十分常用:
In [7]: val = -10
val if val >= 0 else -val
Out[7]: 10
我们可以看到,上述代码实现了内置的取绝对值 abs() 函数,但是这种构造方式能够使你
在列表推导中做更多有趣的事情。目前我们的代码变得越来越复杂,但是你可以做类似下面这
段代码的事情:
In [8]: [val if val % 2 else -val
for val in range(20) if val % 3]
Out[8]: [1, -2, -4, 5, 7, -8, -10, 11, 13, -14, -16, 17, 19]
注意到上述列表推导表达式中在 for 循环表达式之前有一个换行:这在 Python 中是合法
的。并且为了更好的可读性,经常用来截断过长的列表推导表达式。让我们重新看一下上述代
码:我们在构造一个表达式,去除所有 3 的倍数,并且把所有 2 的倍数取负。
一旦你理解了列表推导的动态性,那么理解其他类型的推导就变得易如反掌:语法几乎是
一致的,仅仅在于括号的使用方法不同。
举例来说,使用大括号你就可以使用集合推导set comprehension)生成一个 set 对象:
In [9]: {n**2 for n in range(12)}
Out[9]: {0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121}
回忆一下,set 一个含重项的集合。因此集合推也遵守了个规则,消了所
重复的项:
In [10]: {a % 3 for a in range(1000)}
Out[10]: {0, 1, 2}
只要稍微调整一下语法,加一个冒号(:)就可以使用字典推导dict comprehension
In [11]: {n:n**2 for n in range(6)}
Out[11]: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
最后,如果你使用小括号而不是方括号,你就得到了生成器表达式generator expression
-
70 12. 列表推导
In [12]: (n**2 for n in range(12))
Out[12]: <generator object <genexpr> at 0x10e53f150>
生成器表达式基本上和列表推导没有什么不同,区别仅仅在于生成器表达式是按需生成
象,而列表推导次产生全部象。这里语言上的简单性掩盖了这种语言功能的强大,我们
将在下面探讨这一点。
-
13 生成器
Python generator generator
expression)和生成器函数generator function
13.1 生成器表达式
列表推导和生成器表达式的区别有的时候令人十分困惑。这里我们快速领略一下它们的区
别:
13.1.1 列表推导使用方括号,而生成器表达式使用圆括号
这是一个典型的列表推导:
In [1]: [n ** 2 for n in range(12)]
Out[1]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
而这是一个典型的生成器表达式:
In [2]: (n ** 2 for n in range(12))
Out[2]: <generator object <genexpr> at 0x10fe0dfc0>
注意:直接打印生成器表达式并不会打印出内容。要打印出生成器表达式生成的全部内容
的一个方法是通过向 list 构造器传递参数:
In [3]: G = (n ** 2 for n in range(12))
list(G)
Out[3]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
13.1.2 列表是值的集合,而生成器是生成值的方法
当你创建一个列表的时候,你际上在产生一个数值的集合,并且需要花费一定的内存开
销。当你创建一个生成器的时候,你并没有创建一个数值的集合,而是建立了一个产生这些数
值的方法。这两者都具有相同的迭代器接口,正如我们在这里看到的:
71
-
72 13. 生成器
In [4]: L = [n ** 2 for n in range(12)]
for val in L:
print(val, end=' ')
0 1 4 9 16 25 36 49 64 81 100 121
In [5]: G = (n ** 2 for n in range(12))
for val in G:
print(val, end=' ')
0 1 4 9 16 25 36 49 64 81 100 121
区别是:生成器表达式并不会在数值被需要之前计算出它们。这并不仅仅可以提高内存效
率,也能提高计算效率!这也意味着一个列表的大小受到可用内存的限制,而生成器表达式的
大小是无限的!
我们可以通过 itertools 中定义的 count 迭代器创建一个无限的产生器表达式的例子:
In [6]: from itertools import count
count()
Out[6]: count(0)
In [7]: for i in count():
print(i, end=' ')
if i >= 10: break
0 1 2 3 4 5 6 7 8 9 10
count 束,使
的生成器非常方便:
In [8]: factors = [2, 3, 5, 7]
G = (i for i in count() if all(i % n > 0 for n in factors))
for val in G:
print(val, end=' ')
if val > 40: break
1 11 13 17 19 23 29 31 37 41
你可能看到我们在这里得到什么:如果我们把这个包含因子的列表合适地展开的话,我们
在开头会得到一个素数的产生器(通过爱拉托逊斯筛法)我们马上就会开始继续研究产生素数
这个话题。
-
13.1. 生成器表达式 73
13.1.3 列表可以被迭代多次,而生成器表达式是一次性的
这是生成器表达式潜在的问题之一。我们可以直接对一个列表进行如下操作:
In [9]: L = [n ** 2 for n in range(12)]
for val in L:
print(val, end=' ')
print()
for val in L:
print(val, end=' ')
0 1 4 9 16 25 36 49 64 81 100 121
0 1 4 9 16 25 36 49 64 81 100 121
另一方面,生成器表达式在一次迭代后就被用尽:
In [10]: G = (n ** 2 for n in range(12))
list(G)
Out[10]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
In [11]: list(G)
Out[11]: []
这个特性可以变得非常实用,因为这意味着迭代可以被停止和继续:
In [12]: G = (n**2 for n in range(12))
for n in G:
print(n, end=' ')
if n > 30: break
print("\ndoing something in between")
for n in G:
print(n, end=' ')
0 1 4 9 16 25 36
doing something in between
49 64 81 100 121
一个我发现这个特性非常实用的场合是在对磁盘上的数据文件集合进行处理时,这个特性
意味着你可以非常轻松地批量处理数据,让生成器负责跟踪那些你尚未处理的块。
-
74 13. 生成器
13.2 生成器函数:使用关键字 yield
在之前的章节中我们看到了列表推导是创建相对简单的列表的最佳途径,而常规的 for
环在更加复杂的情况下更为合适。对于生成器表达式来说这也是成立的:我们可以通过生成器
函数 使用 yield 语句来创建更加复杂的生成器。
在这里我们有两种方式构造同一个列表:
In [13]: L1 = [n ** 2 for n in range(12)]
L2 = []
for n in range(12):
L2.append(n ** 2)
print(L1)
print(L2)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
类似地,我们有两种方法构造等价的生成器:
In [14]: G1 = (n ** 2 for n in range(12))
def gen():
for n in range(12):
yield n ** 2
G2 = gen()
print(*G1)
print(*G2)
0 1 4 9 16 25 36 49 64 81 100 121
0 1 4 9 16 25 36 49 64 81 100 121
一个生成器函数是这样的一个函数:它不使 return 返回一个值(仅返回一次),而是使
yield 来产生一个包含(可能是无穷多的)数值的序列。和生成器表达式中一样,在部分迭
1
的间隔中生成器的状态得到保留。但是如果我们需要生成器的一个全新的副本,我们只需要
简单地重新调用那个函数即可。
13.3 案例学习:素数生成器
这里我将展示我最喜欢的一个生成器函数的例子:一个函数来产生无限的素数序列。解决
这个问题的一个经典算法是爱拉托逊斯筛法,它的工作过程类似下面的代码:
1
译者注:两次迭代的中间,此时生成器并没有被从头到尾执行完,故称部分迭代。
-
13.3. 案例学习:素数生成器 75
In [15]: # 生成一个包含候选数值的列表
L = [n for n in range(2, 40)]
print(L)
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39]
In [16]: # 对于候选数值序列的第一个值,移除它的倍数
L = [n for n in L if n == L[0] or n % L[0] > 0]
print(L)
[2, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39]
In [17]: # 对于候选数值序列的第二个值,移除它的倍数
L = [n for n in L if n == L[1] or n % L[1] > 0]
print(L)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 25, 29, 31, 35, 37]
In [18]: # 对于候选数值序列的第三个值,移除它的倍数
L = [n for n in L if n == L[2] or n % L[2] > 0]
print(L)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]
如果我们不断在一个足够大的列表上重复这个过程足够多次,我们就能产生足够多我们需
要的素数。
让我们把计算的逻辑封装成为一个生成器表达式:
In [19]: def gen_primes(N):
"""Generate primes up to N"""
primes = set()
for n in range(2, N):
if all(n % p > 0 for p in primes):
primes.add(n)
yield n
print(*gen_primes(100))
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
这就是关于生成器的一切!尽管这绝对不是一个高效实现爱拉托逊斯筛法的方法,但它说
明了如何使用生成器函数的语法来方便地构建更复杂的序列。
+
10 错误和异常
不论你的代码水平怎么样,你终究会在代码中遇到一些错误。可能遇到的错误一般有下列
三种:
语法错误syntax error:由于你写出了不合法的 Python 代码导致的错误(一般很
修改)
运行时错误runtime error由于语法上有效代码无法得到执行导致的错误。也许是由
于不合法的用户输入导致的(有时候很好修改)
语义错semantic error:那些逻辑上的错误。代码执行时并没有出现问题,但是结
果却不是你想要的那样(一般很难追踪和修改)
这里我们主要来看一下如何干净地处理运行时错误。我们可以看到,Python 使用它的异常
处理exception handling)框架来处理运行时错误。
10.1 运行时错误
如果你写一些 Python 码,你该会遇到些运行错误,们可发生在各情况
下。
比如,如果你尝试使用一个未定义的变量:
In [1]: print(Q)
----------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-3-e796bdcf24ff> in <module>()
----> 1 print(Q)
NameError: name 'Q' is not defined
或者你使用一个未定义的操作:
In [2]: 1 + 'abc'
----------------------------------------------------------------------
53
+
54 10. 错误和异常
TypeError Traceback (most recent call last)
<ipython-input-4-aab9e8ede4f7> in <module>()
----> 1 1 + 'abc'
TypeError: unsupported operand type(s) for +: 'int' and 'str'
或者你在尝试计算一个数学上非法的结果:
In [3]: 2 / 0
----------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-5-ae0c5d243292> in <module>()
----> 1 2 / 0
ZeroDivisionError: division by zero
或者你在尝试访问一个在列表中不存在的元素:
In [4]: L = [1, 2, 3]
L[1000]
----------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-6-06b6eb1b8957> in <module>()
1 L = [1, 2, 3]
----> 2 L[1000]
IndexError: list index out of range
中,Python 错误生,
的异常说明:包括了什么代码出错,以及具体哪一行代码出错。
在你试图追踪代码中的问题根源时,遇到这样有意义的报错通常很有帮助。
+
10.2. 捕获异常:TRY EXCEPT 55
10.2 捕获异常:try except
Python 你提时异常 try...except 句,的基
像这样:
In [5]: try:
print("this gets executed first")
except:
print("this gets executed only if there is an error")
this gets executed first
个代行:个代误。
try 代码块中放一个有问题的语句会发生什么:
In [6]: try:
print("let's try something:")
x = 1 / 0 # ZeroDivisionError
except:
print("something bad happened!")
let's try something:
something bad happened!
们可到,一个(这是一 ZeroDivisionError try 中发
时,这个错误被捕获,然后 except 语句会被执行。
个函法。
个函数可以捕获一个被除零异常并返回一个其他值,也许是一个像 10
100
一样很大的数字:
In [7]: def safe_divide(a, b):
try:
return a / b
except:
return 1E100
In [8]: safe_divide(1, 2)
Out[10]: 0.5
In [9]: safe_divide(2, 0)
Out[9]: 1e+100
+
56 10. 错误和异常
这段代码存在一个微妙的问题,如果发生了其他的异常会出现什么状况呢?比如这里有一
个不符合我们预期的例子:
In [10]: safe_divide (1, '2')
Out[10]: 1e+100
在整数和字符串之间进行除法会触发一个 TypeError 异常,但是我们上面写的那段过于热
情的代码把它当做 ZeroDivisionError 来处理了。因此,最好要明确指出我们要捕获的异常类
型:
In [11]: def safe_divide(a, b):
try:
return a / b
except ZeroDivisionError:
return 1E100
In [12]: safe_divide(1, 0)
Out[12]: 1e+100
In [13]: safe_divide(1, '2')
----------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-15-2331af6a0acf> in <module>()
----> 1 safe_divide(1, '2')
<ipython-input-13-10b5f0163af8> in safe_divide(a, b)
1 def safe_divide(a, b):
2 try:
----> 3 return a / b
4 except ZeroDivisionError:
5 return 1E100
TypeError: unsupported operand type(s) for /: 'int' and 'str'
现在我们只能捕获被除零异常,让其他类型的异常都原封不动地传出去。
+
10.3. 抛出异常:RAISE 57
10.3 抛出异常:raise
我们已经到了在使 Python 进行程时获得异信息多么宝贵。你编写的码中
利用异常信息同样非常有帮助,因为这样使用你代码的用户(最重要的是你自己!能弄清导致
错误的根因。
你可以通过使用 raise 语句来自己抛出异常,比如:
In [14]: raise RuntimeError("my error message")
----------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-16-c6a4c1ed2f34> in <module>()
----> 1 raise RuntimeError("my error message")
RuntimeError: my error message
这里使用这个例子很合适,让我们回到我们前面定义的 fibonacci 函数:
In [15]: def fibonacci(N):
L = []
a, b = 0, 1
while len(L) < N:
a, b = b, a + b
L.append(a)
return L
这里有一个潜在的问题是用户输入的值可能为负值。这并不会让我们的函数现在出现什么
错误,但是我们可能希望让用户知道一个负的 N 是不受支持的。
根据惯例,由于无效参数值导致的错误导致 ValueError 错误:
In [16]: def fibonacci(N):
if N < 0:
raise ValueError("N must be non-negative")
L = []
a, b = 0, 1
while len(L) < N:
a, b = b, a + b
L.append(a)
return L
In [17]: fibonacci(10)
+
58 10. 错误和异常
Out[17]: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
In [18]: fibonacci(-10)
----------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-20-3d291499cfa7> in <module>()
----> 1 fibonacci(-10)
<ipython-input-18-01d0cf168d63> in fibonacci(N)
1 def fibonacci(N):
2 if N < 0:
----> 3 raise ValueError("N must be non-negative")
4 L = []
5 a, b = 0, 1
ValueError: N must be non-negative
现在用户能够确切地知道为什么输入是无效的了,然后可以用 try...except 来处理它。
In [19]: N = -10
try:
print("trying this...")
print(fibonacci(N))
except ValueError:
print("Bad value: need to do something else")
trying this...
Bad value: need to do something else
10.4 深入探究异常
简而言之,我想在这里提及一些其他可能遇到的概念。我不会详细介绍这些概念,以及如
何和为什么使用它们,而只是向你展示语法,之后你可以自己探索更多关于它们的内容。
10.4.1 访问错误信息
有时 try...except 语句中,你可会想能够理错误信息本身。这你可以使 as
键字:
+
10.4. 深入探究异常 59
In [20]: try:
x = 1 / 0
except ZeroDivisionError as err:
print("Error class is: ", type(err))
print("Error message is:", err)
Error class is: <class 'ZeroDivisionError'>
Error message is: division by zero
通过这种方法,你可以进一步自定义函数的异常处理。
10.4.2 定义自定义异常
除了内置异常类型之外,还可以通过类继承来定义自定义异常。例如,如果你想要一个特
殊的 ValueError,你可以这样做:
In [21]: class MySpecialError(ValueError):
pass
raise MySpecialError("here's the message")
----------------------------------------------------------------------
MySpecialError Traceback (most recent call last)
<ipython-input-23-92c36e04a9d0> in <module>()
2 pass
3
----> 4 raise MySpecialError("here's the message")
MySpecialError: here's the message
这将允许你使用只能捕获此类错误的 try...except 块。
In [22]: try:
print("do something")
raise MySpecialError("[informative error message here]")
except MySpecialError:
print("do something else")
do something
do something else
+
60 10. 错误和异常
在编写过更多自定义代码时,你可能会发现这很有用。
10.5 try...except...else...finally
除了 try except 之外,你可以使 else finally 进一步调整代码的异常处理。其
基本结构是这样的:
In [23]: try:
print("try something here")
except:
print("this happens only if it fails")
else:
print("this happens only if it succeeds")
finally:
print("this happens no matter what")
try something here
this happens only if it succeeds
this happens no matter what
这里的 else 的功能很清楚,但是 finally 的意思是什么?其实无论发生什么,finally
句始终会被执行,我通常认为它是在操作完成后用来做某种清理工作的。
+
11 迭代器
方式理。
一个表格,名;
种标准的格式。对于这类问 Python 中的解决方法是采迭代器iterator)语法。我们已经
range 迭代器中见过它了:
In [1]: for i in range(10):
print(i, end=' ')
0 1 2 3 4 5 6 7 8 9
在本章中我们将深入讨论迭代器。 Python 3 中,range 产生的不是一个列表,而是一个
称为迭代器的对象。掌握它的工作原理将帮助你理解许多非常有用的 Python 功能与特性。
11.1 遍历列表
使用迭代器最简单的场景莫过于对列表进行迭代。考虑下列代码:
In [2]: for value in [2, 4, 6, 8, 10]:
# 做其他一些操作
print(value + 1, end=' ')
3 5 7 9 11
for x in y 对列 作。
Python for [each] value in [the] list’’使 Python
学、用。是,况。
for val in L’’ 代码时,Python 器会查它否包一个器接
iterator interface。你可以通过内置的 iter 函数进行检查:
In [3]: iter([2, 4, 6, 8, 10])
Out[3]: <list_iterator at 0x104722400>
正是这个迭代器对象提供 for 循环需要的功能。这 iter 对象是一个容器,使你能访
问下一个对象(只要它是合法的)。你可以通过内置的 next 函数查看:
61
+
62 11. 迭代器
In [4]: I = iter([2, 4, 6, 8, 10])
In [5]: print(next(I))
2
In [6]: print(next(I))
4
In [7]: print(next(I))
6
你可能觉得这样“迂回”的操作过于复杂,但事实证明这是非常有用的。因为这样的操作
允许 Python 像列表一样对待实际上不是列表的对象。下面我们将会看到这样的例子。
11.2 不总是列表的列表:range()
可能这种“迂回”迭代最常见的例子就是 Python 3 中的 range() 函数(在 Python 2 中这
个函数命名为 xrange()。这个函数并不返回一个列表,而是一个特殊的 range() 对象:
In [8]: range(10)
Out[8]: range(0, 10)
range 像一个列表一样暴露了一个迭代器接口:
In [9]: iter(range(10))
Out[9]: <range_iterator at 0x1045a1810>
所以 Python 假装按照它是一个列表一样对待它:
In [10]: for i in range(10):
print(i, end=' ')
0 1 2 3 4 5 6 7 8 9
这样迭代的好处是,个列表并没有(显式地)得到完全创。我们可以通过一个范围计
算的例子看到这一点。在下面这个例子中,如果我们把列表中的每一个元素都创建出来(完全
实例化这个列表)系统内存将被全部吞噬(注意到在 Python 2 range 创建了一个列表,因
此在 Python 2 中运行下面的代码可能导致不好的事情发生)
+
11.3. 实用迭代器介绍 63
In [11]: N = 10 ** 12
for i in range(N):
if i >= 10: break
print(i, end=', ')
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
如果 range 真的创建了一个包含 1 万亿个值的列表,它将占用几十 TB 的机器内存!这是
一个巨大的浪费,因为我们实际上并没有用到前 10 个值之外的所有东西!
事实上,这根本有理让我个列迭代。Python itertools 包含
一个 count 函数,这个函数起到了一个无穷 range 的作用:
In [12]: from itertools import count
for i in count():
if i >= 10:
break
print(i, end=', ')
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
环,(比
Ctrl-C
11.3 实用迭代器介绍
迭代器语法乎普用于 Python 内置型以及数科学的一特定对象,我将在
后面的部分中讨论。这里我们介绍一些 Python 中更有实际价值的迭代器。
11.3.1 enumerate
通常你不仅需要迭代数组中的值,还需要同步对索引进行跟踪。你可能会用下面这种方式
去实现:
In [13]: L = [2, 4, 6, 8, 10]
for i in range(len(L)):
print(i, L[i])
0 2
1 4
2 6
3 8
4 10
+
64 11. 迭代器
尽管上述例子是可行的,但是 Python 提供了一个更简洁的语法,即通过 enumerate 迭代
器:
In [14]: for i, val in enumerate(L):
print(i, val)
0 2
1 4
2 6
3 8
4 10
在对一个列表中的索引和值进行迭代时,这是一种更加 Pythonic
1
的方法。
11.3.2 zip
下,个列代。
Pythonic 的方法那对列表索引行迭代,但是好的法是使 zip 迭代器,它将
代对象链在一起:
In [15]: L = [2, 4, 6, 8, 10]
R = [3, 6, 9, 12, 15]
for lval, rval in zip(L, R):
print(lval, rval)
2 3
4 6
6 9
8 12
10 15
任意数量的可迭代对象都可以被链在一起,其中最短的那个列表将决定整个 zip 迭代器的
长度。
11.3.3 map filter
map 迭代器接受一个函数,并且将它应用到迭代器中每一个值:
In [16]: # 寻找前 10 个平方数
square = lambda x: x ** 2
for val in map(square, range(10)):
print(val, end=' ')
1
译者注:所谓 Pythonic 的代码就是以 Python 的方式写出简洁优美的代码(在第 1 章中我们介绍了Python
禅》 19 Python 想) PEP 8Python 南:
https://www.python.org/dev/peps/pep-0008/,你的代码就足够 Pythonic 了!
+
11.3. 实用迭代器介绍 65
0 1 4 9 16 25 36 49 64 81
filter 迭代器看上去类似,但是它只允许使得过滤函数为的值保留下来:
In [17]: # 寻找当 x % 2 0 且小于 10 的值
is_even = lambda x: x % 2 == 0
for val in filter(is_even, range(10)):
print(val, end=' ')
0 2 4 6 8
mapfilter reduce (位 Python functools 中)
functional programming)风格的本组模块。 Python 世界中,这方式时还
是主流,但是仍然有着坚定的支持者(比如 pytoolz
11.3.4 迭代器作为函数参数
我们在 9.4 可变参数:*args **kwargs 中看见 *args **kwargs 可以用来向函
数传递序列和字典。事实上,*args 语法不仅仅适用于序列,同样适用于任意迭代器:
In [18]: print(*range(10))
0 1 2 3 4 5 6 7 8 9
那么,举一个例子,我们可以将之前的 map 例子用一个技巧整合进下面的函数调用中:
In [19]: print(*map(lambda x: x ** 2, range(10)))
0 1 4 9 16 25 36 49 64 81
使 巧, Python 题:
Python unzip() zip() 作呢?
个漆题, zip() 的函 zip()
理解这个问题的关键在于 zip() 可以链接任意数量的迭代器或者序列。观察下列代码:
In [20]: L1 = (1, 2, 3, 4)
L2 = ('a', 'b', 'c', 'd')
In [21]: z = zip(L1, L2)
print(*z)
(1, 'a') (2, 'b') (3, 'c') (4, 'd')
+
66 11. 迭代器
In [22]: z = zip(L1, L2)
new_L1, new_L2 = zip(*z)
print(new_L1, new_L2)
(1, 2, 3, 4) ('a', 'b', 'c', 'd')
子。的,
Python 的迭代器!
11.4 专用迭代器:itertools
itertools 的迭 器,
range 器:itertools.count的迭
常值得的。作为一个例子,考虑 itertools.permutations 函数,这个函数在一个序列全排
full permutation)中进行迭代:
In [23]: from itertools import permutations
p = permutations(range(3))
print(*p)
(0, 1, 2) (0, 2, 1) (1, 0, 2) (1, 2, 0) (2, 0, 1) (2, 1, 0)
类似地,itertools.combinations 函数在一个列表中所有不同的 N 组合中进行迭代:
In [24]: from itertools import combinations
c = combinations(range(4), 2)
print(*c)
(0, 1) (0, 2) (0, 3) (1, 2) (1, 3) (2, 3)
与之有一点儿关联的是 product 迭代器,这个迭代器对两个或多个可迭代对象进行两两配
2
,最终产生一个集合进行迭代:
In [25]: from itertools import product
p = product('ab', range(3))
print(*p)
('a', 0) ('a', 1) ('a', 2) ('b', 0) ('b', 1) ('b', 2)
itertools 中还有多有用的具:你可以 Python 官方文找到全部的列以及
些例子:https://docs.python.org/3/library/itertools.html
2
译者注:实际上是求两个或多个集合的笛卡尔积Cartesian Product
+
12 列表推导
如果你读过足够多的 Python 代码的话,你最终一定会遇到著名的列表推list compre-
hension
1
这种短、代码式。果你使用过性,希望
会爱上它。它的格式如下所示:
In [1]: [i for i in range(20) if i % 3 > 0]
Out[1]: [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19]
这行代码的结果是一个排除了数 3 及其倍数的列表。第一眼看上去这段代码也许有些
人困惑,但是随着你对 Python 代码的熟悉,阅读和书写列表推导代码将变得越来越自然。
12.1 基础列表推导
列表推导是将一个冗长的 for 循环列表构造语句压缩为一行简短易读代码的简单方法。比
如,下面就是一个构造包含前 12 个平方数的列表的循环语句:
In [2]: L = []
for n in range(12):
L.append(n ** 2)
L
Out[2]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
与之等价的列表推导如下所示:
In [3]: [n ** 2 for n in range(12)]
Out[3]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
正如许多
Python
语句一样,你几乎可以直接用直白的英语读出这段代码的意义:“对于每
个小于 12 n 值,构造一个包含 n 的平方的列表”
列表推导的基本语法是:[expr for var in iterable ]。在这里 expr 是任意合法的表达
式,var 是变量名,iterable 是任意可以迭代的 Python 对象。
1
译者注:list comprehension 目前并没有一个固定的翻译,有翻译成列表速构、列表解析、列表内包等,但意思
上都是在定义列表结构的时候按照一定的规则进行推导,而不是穷举所有元素,故本书译为列表推导。
67
+
68 12. 列表推导
12.2 多重迭代
有的时候你可能需要从不止一个值构建列表。在这个情况下,只要简单地在列表推导中加
入另外一个 for 表达式即可:
In [4]: [(i, j) for i in range(2) for j in range(3)]
Out[4]: [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]
第二 for 达式在这里起环索作用,果的列
表。列表推导中这种类型的构造可以继续拓展到 3 次、4 次甚至更多次迭代,尽管增加到一定
程度时代码的可读性会下降!
12.3 条件控制迭代
你可以通过在表达式尾部增加判断语句进一步地控制迭代的条件。在这一节的第一个例子
中,我们 1 20 迭代了所有整数,然后剔除了 3 的倍数。看下面这个例子,观察构造语
的不同:
In [5]: [val for val in range(20) if val % 3 > 0]
Out[5]: [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19]
(var % 3 > 0) True val 3 时。见,
码的意义可以立即用英语读出来:“构造一个列表,包含每一个小于 20 的整数,但是数值不
3 整除”。一旦对这法感惯,那书写代码得更简单——并且
上去比与之等价的循环语句更好理解:
In [6]: L = []
for val in range(20):
if val % 3:
L.append(val)
L
Out[6]: [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19]
12.4 条件控制值
如果你曾写过 C 语言代码,你可能对使用三元运算符ternary operator ? : 在一行内
进行条件判断感到熟悉:
int absval = (val < 0) ? -val : val
+
12.4. 条件控制值 69
Python 也有非常类似的语法,并且在列表推导、Lambda 函数和其他简单的表达式场景中
也十分常用:
In [7]: val = -10
val if val >= 0 else -val
Out[7]: 10
我们可以看到,上述代码实现了内置的取绝对值 abs() 函数,但是这种构造方式能够使你
在列表推导中做更多有趣的事情。目前我们的代码变得越来越复杂,但是你可以做类似下面这
段代码的事情:
In [8]: [val if val % 2 else -val
for val in range(20) if val % 3]
Out[8]: [1, -2, -4, 5, 7, -8, -10, 11, 13, -14, -16, 17, 19]
注意到上述列表推导表达式中在 for 循环表达式之前有一个换行:这在 Python 中是合法
的。并且为了更好的可读性,经常用来截断过长的列表推导表达式。让我们重新看一下上述代
码:我们在构造一个表达式,去除所有 3 的倍数,并且把所有 2 的倍数取负。
一旦你理解了列表推导的动态性,那么理解其他类型的推导就变得易如反掌:语法几乎是
一致的,仅仅在于括号的使用方法不同。
举例来说,使用大括号你就可以使用集合推导set comprehension)生成一个 set 对象:
In [9]: {n**2 for n in range(12)}
Out[9]: {0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121}
回忆一下,set 一个含重项的集合。因此集合推也遵守了个规则,消了所
重复的项:
In [10]: {a % 3 for a in range(1000)}
Out[10]: {0, 1, 2}
只要稍微调整一下语法,加一个冒号(:)就可以使用字典推导dict comprehension
In [11]: {n:n**2 for n in range(6)}
Out[11]: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
最后,如果你使用小括号而不是方括号,你就得到了生成器表达式generator expression
+
70 12. 列表推导
In [12]: (n**2 for n in range(12))
Out[12]: <generator object <genexpr> at 0x10e53f150>
生成器表达式基本上和列表推导没有什么不同,区别仅仅在于生成器表达式是按需生成
象,而列表推导次产生全部象。这里语言上的简单性掩盖了这种语言功能的强大,我们
将在下面探讨这一点。
+
13 生成器
Python generator generator
expression)和生成器函数generator function
13.1 生成器表达式
列表推导和生成器表达式的区别有的时候令人十分困惑。这里我们快速领略一下它们的区
别:
13.1.1 列表推导使用方括号,而生成器表达式使用圆括号
这是一个典型的列表推导:
In [1]: [n ** 2 for n in range(12)]
Out[1]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
而这是一个典型的生成器表达式:
In [2]: (n ** 2 for n in range(12))
Out[2]: <generator object <genexpr> at 0x10fe0dfc0>
注意:直接打印生成器表达式并不会打印出内容。要打印出生成器表达式生成的全部内容
的一个方法是通过向 list 构造器传递参数:
In [3]: G = (n ** 2 for n in range(12))
list(G)
Out[3]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
13.1.2 列表是值的集合,而生成器是生成值的方法
当你创建一个列表的时候,你际上在产生一个数值的集合,并且需要花费一定的内存开
销。当你创建一个生成器的时候,你并没有创建一个数值的集合,而是建立了一个产生这些数
值的方法。这两者都具有相同的迭代器接口,正如我们在这里看到的:
71
+
72 13. 生成器
In [4]: L = [n ** 2 for n in range(12)]
for val in L:
print(val, end=' ')
0 1 4 9 16 25 36 49 64 81 100 121
In [5]: G = (n ** 2 for n in range(12))
for val in G:
print(val, end=' ')
0 1 4 9 16 25 36 49 64 81 100 121
区别是:生成器表达式并不会在数值被需要之前计算出它们。这并不仅仅可以提高内存效
率,也能提高计算效率!这也意味着一个列表的大小受到可用内存的限制,而生成器表达式的
大小是无限的!
我们可以通过 itertools 中定义的 count 迭代器创建一个无限的产生器表达式的例子:
In [6]: from itertools import count
count()
Out[6]: count(0)
In [7]: for i in count():
print(i, end=' ')
if i >= 10: break
0 1 2 3 4 5 6 7 8 9 10
count 束,使
的生成器非常方便:
In [8]: factors = [2, 3, 5, 7]
G = (i for i in count() if all(i % n > 0 for n in factors))
for val in G:
print(val, end=' ')
if val > 40: break
1 11 13 17 19 23 29 31 37 41
你可能看到我们在这里得到什么:如果我们把这个包含因子的列表合适地展开的话,我们
在开头会得到一个素数的产生器(通过爱拉托逊斯筛法)我们马上就会开始继续研究产生素数
这个话题。
+
13.1. 生成器表达式 73
13.1.3 列表可以被迭代多次,而生成器表达式是一次性的
这是生成器表达式潜在的问题之一。我们可以直接对一个列表进行如下操作:
In [9]: L = [n ** 2 for n in range(12)]
for val in L:
print(val, end=' ')
print()
for val in L:
print(val, end=' ')
0 1 4 9 16 25 36 49 64 81 100 121
0 1 4 9 16 25 36 49 64 81 100 121
另一方面,生成器表达式在一次迭代后就被用尽:
In [10]: G = (n ** 2 for n in range(12))
list(G)
Out[10]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
In [11]: list(G)
Out[11]: []
这个特性可以变得非常实用,因为这意味着迭代可以被停止和继续:
In [12]: G = (n**2 for n in range(12))
for n in G:
print(n, end=' ')
if n > 30: break
print("\ndoing something in between")
for n in G:
print(n, end=' ')
0 1 4 9 16 25 36
doing something in between
49 64 81 100 121
一个我发现这个特性非常实用的场合是在对磁盘上的数据文件集合进行处理时,这个特性
意味着你可以非常轻松地批量处理数据,让生成器负责跟踪那些你尚未处理的块。
+
74 13. 生成器
13.2 生成器函数:使用关键字 yield
在之前的章节中我们看到了列表推导是创建相对简单的列表的最佳途径,而常规的 for
环在更加复杂的情况下更为合适。对于生成器表达式来说这也是成立的:我们可以通过生成器
函数 使用 yield 语句来创建更加复杂的生成器。
在这里我们有两种方式构造同一个列表:
In [13]: L1 = [n ** 2 for n in range(12)]
L2 = []
for n in range(12):
L2.append(n ** 2)
print(L1)
print(L2)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
类似地,我们有两种方法构造等价的生成器:
In [14]: G1 = (n ** 2 for n in range(12))
def gen():
for n in range(12):
yield n ** 2
G2 = gen()
print(*G1)
print(*G2)
0 1 4 9 16 25 36 49 64 81 100 121
0 1 4 9 16 25 36 49 64 81 100 121
一个生成器函数是这样的一个函数:它不使 return 返回一个值(仅返回一次),而是使
yield 来产生一个包含(可能是无穷多的)数值的序列。和生成器表达式中一样,在部分迭
1
的间隔中生成器的状态得到保留。但是如果我们需要生成器的一个全新的副本,我们只需要
简单地重新调用那个函数即可。
13.3 案例学习:素数生成器
这里我将展示我最喜欢的一个生成器函数的例子:一个函数来产生无限的素数序列。解决
这个问题的一个经典算法是爱拉托逊斯筛法,它的工作过程类似下面的代码:
1
译者注:两次迭代的中间,此时生成器并没有被从头到尾执行完,故称部分迭代。
+
13.3. 案例学习:素数生成器 75
In [15]: # 生成一个包含候选数值的列表
L = [n for n in range(2, 40)]
print(L)
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39]
In [16]: # 对于候选数值序列的第一个值,移除它的倍数
L = [n for n in L if n == L[0] or n % L[0] > 0]
print(L)
[2, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39]
In [17]: # 对于候选数值序列的第二个值,移除它的倍数
L = [n for n in L if n == L[1] or n % L[1] > 0]
print(L)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 25, 29, 31, 35, 37]
In [18]: # 对于候选数值序列的第三个值,移除它的倍数
L = [n for n in L if n == L[2] or n % L[2] > 0]
print(L)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]
如果我们不断在一个足够大的列表上重复这个过程足够多次,我们就能产生足够多我们需
要的素数。
让我们把计算的逻辑封装成为一个生成器表达式:
In [19]: def gen_primes(N):
"""Generate primes up to N"""
primes = set()
for n in range(2, N):
if all(n % p > 0 for p in primes):
primes.add(n)
yield n
print(*gen_primes(100))
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
这就是关于生成器的一切!尽管这绝对不是一个高效实现爱拉托逊斯筛法的方法,但它说
明了如何使用生成器函数的语法来方便地构建更复杂的序列。
-
14 模块和包
Python 使 务, “自 池”
1
Python library具。外,Python
广件包统,的功能。
准库模块、安装第三方模块的工具以及如何制作自己的模块。
14.1 导入模块:import 语句
为了加载内置和第三方模块,Python 提供了 import 语句。我们在这里按最推荐到最不推
荐的顺序简要介绍一下使用这个语句的一些方法。
14.1.1 显式模块导入
块的namespace中。使
个命名空间来引用它们的内容:通过命名空间加 . 加某个具体的内容。例如,这里我们将导
内置的 math 模块并计算 π 的余弦值:
In [1]: import math
math.cos(math.pi)
Out[1]: -1.0
14.1.2 显式模块导入并取别名
如果模块有更长的名称,那么每次访问某个元素时使用完整模块名称并不方便。因此,我
们通常会使用 import... as... 来为命名空间创建一个较短的别名。例如 NumPyNumerical
Python件包,一受欢件包,照惯使
np 导入:
In [2]: import numpy as np
np.cos(np.pi)
Out[2]: -1.0
1
注: batteries included 能, PEP 206Python 级库:
https://www.python.org/dev/peps/pep-0206/#id3
77
-
78 14. 模块和包
14.1.3 显式导入模块内容
目,个命间。
from... import... 来完成。例如,我们可以从 math 模块导入 cos 函数和 pi 常量:
In [3]: from math import cos, pi
cos(pi)
Out[3]: -1.0
14.1.4 隐式导入模块内容
最后,有时候你也可以将整个模块内容导入本地的命名空间。这可以通过 from... import
* 来完成:
In [4]: from math import *
sin(pi) ** 2 + cos(pi) ** 2
Out[4]: 1.0
你应当谨慎使用这种方法。由此带来的问题是,这样导入有时可能会覆盖你不想覆盖的函
称,使化。如,Python
“sum” 功能,可用于各种操作:
In [5]: help(sum)
Help on built-in function sum in module builtins:
sum(...)
sum(iterable[, start]) -> value
Return the sum of an iterable of numbers (NOT strings) plus the value
of parameter 'start' (which defaults to 0). When the iterable is
empty, return start.
我们可以用这个函数从某个指定的初始值开始计算一个序列的和,在这里我们从 1 开始:
In [6]: sum(range(5), -1)
Out[6]: 9
现在观察如果我们从 numpy 导入全部内容后进行完全相同的函数调用会发生什么:
-
14.2. 导入 PYTHON 标准库 79
In [7]: from numpy import *
In [8]: sum(range(5), -1)
Out[8]: 10
1因为 import numpy.sum sum 数:
在前者中,sum(5) -1 开始对 range(5) 求和;而在后者中,我们沿着最后一个轴(用 -1
示) range(5) 求和。这是使用 import 时很难注意到的情况:为此,除非你确切知道你在做
什么,否则最好避免这种情况。
14.2 导入 Python 标准库
Python 准库 块, https://docs.python.org/3/
library/ 明。使 import 入,使
面一出现 help 功能查看助。以是一你可希望解和的一模块不完
列表:
os sys:与操作系统交互的工具,包括文件目录间的导航和执行 shell 命令。
math cmath:数学功能和对实数和复数的操作。
itertools:使用迭代器和生成器的工具。
functools:函数式编程的工具。
random:产生随机数的工具。
pickle:对象序列化的工具:保存对象或者从磁盘中读取对象。
json csv:读取 JSON 格式和 CSV 格式文件的工具。
urllib: 进行 HTTP 和其他网络请求的工具。
查阅 Python 官方标准库文档查阅更多信息吧!
14.3 导入第三方模块
第三方模的生态系使得 Python 分易用,这点在据科学领表现最为显。这
些模块可以像内置模块一样被导入,当然前提是你在你的系统中已经安装好了它们。
这些模块的标准来源是 Python 软件包索引Python Package IndexPyPI网址为 https:
//pypi.python.org/。为了更便地使用,Python 提供了一叫做 pip 序(pip installs
packages 写)可以 PyPI 自动获取包 release 本。(如使 Python
2 的话,你需要额外安装 pip
比如,如果你想安装我写的 supersmoother 包,你只需要键入下面的命令:
$ pip install supersmoother
这个包代码自动 PyPI 下载来,且安 Python 路径(我
们假定你拥有在你使用的电脑上做这些操作的权限)
对于 PyPI pip 安装器的更多信息,可以查看这里的文档:https://pypi.python.org/
+
14 模块和包
Python 使 务, “自 池”
1
Python library具。外,Python
广件包统,的功能。
准库模块、安装第三方模块的工具以及如何制作自己的模块。
14.1 导入模块:import 语句
为了加载内置和第三方模块,Python 提供了 import 语句。我们在这里按最推荐到最不推
荐的顺序简要介绍一下使用这个语句的一些方法。
14.1.1 显式模块导入
块的namespace中。使
个命名空间来引用它们的内容:通过命名空间加 . 加某个具体的内容。例如,这里我们将导
内置的 math 模块并计算 π 的余弦值:
In [1]: import math
math.cos(math.pi)
Out[1]: -1.0
14.1.2 显式模块导入并取别名
如果模块有更长的名称,那么每次访问某个元素时使用完整模块名称并不方便。因此,我
们通常会使用 import... as... 来为命名空间创建一个较短的别名。例如 NumPyNumerical
Python件包,一受欢件包,照惯使
np 导入:
In [2]: import numpy as np
np.cos(np.pi)
Out[2]: -1.0
1
注: batteries included 能, PEP 206Python 级库:
https://www.python.org/dev/peps/pep-0206/#id3
77
+
78 14. 模块和包
14.1.3 显式导入模块内容
目,个命间。
from... import... 来完成。例如,我们可以从 math 模块导入 cos 函数和 pi 常量:
In [3]: from math import cos, pi
cos(pi)
Out[3]: -1.0
14.1.4 隐式导入模块内容
最后,有时候你也可以将整个模块内容导入本地的命名空间。这可以通过 from... import
* 来完成:
In [4]: from math import *
sin(pi) ** 2 + cos(pi) ** 2
Out[4]: 1.0
你应当谨慎使用这种方法。由此带来的问题是,这样导入有时可能会覆盖你不想覆盖的函
称,使化。如,Python
“sum” 功能,可用于各种操作:
In [5]: help(sum)
Help on built-in function sum in module builtins:
sum(...)
sum(iterable[, start]) -> value
Return the sum of an iterable of numbers (NOT strings) plus the value
of parameter 'start' (which defaults to 0). When the iterable is
empty, return start.
我们可以用这个函数从某个指定的初始值开始计算一个序列的和,在这里我们从 1 开始:
In [6]: sum(range(5), -1)
Out[6]: 9
现在观察如果我们从 numpy 导入全部内容后进行完全相同的函数调用会发生什么:
+
14.2. 导入 PYTHON 标准库 79
In [7]: from numpy import *
In [8]: sum(range(5), -1)
Out[8]: 10
1因为 import numpy.sum sum 数:
在前者中,sum(5) -1 开始对 range(5) 求和;而在后者中,我们沿着最后一个轴(用 -1
示) range(5) 求和。这是使用 import 时很难注意到的情况:为此,除非你确切知道你在做
什么,否则最好避免这种情况。
14.2 导入 Python 标准库
Python 准库 块, https://docs.python.org/3/
library/ 明。使 import 入,使
面一出现 help 功能查看助。以是一你可希望解和的一模块不完
列表:
os sys:与操作系统交互的工具,包括文件目录间的导航和执行 shell 命令。
math cmath:数学功能和对实数和复数的操作。
itertools:使用迭代器和生成器的工具。
functools:函数式编程的工具。
random:产生随机数的工具。
pickle:对象序列化的工具:保存对象或者从磁盘中读取对象。
json csv:读取 JSON 格式和 CSV 格式文件的工具。
urllib: 进行 HTTP 和其他网络请求的工具。
查阅 Python 官方标准库文档查阅更多信息吧!
14.3 导入第三方模块
第三方模的生态系使得 Python 分易用,这点在据科学领表现最为显。这
些模块可以像内置模块一样被导入,当然前提是你在你的系统中已经安装好了它们。
这些模块的标准来源是 Python 软件包索引Python Package IndexPyPI网址为 https:
//pypi.python.org/。为了更便地使用,Python 提供了一叫做 pip 序(pip installs
packages 写)可以 PyPI 自动获取包 release 本。(如使 Python
2 的话,你需要额外安装 pip
比如,如果你想安装我写的 supersmoother 包,你只需要键入下面的命令:
$ pip install supersmoother
这个包代码自动 PyPI 下载来,且安 Python 路径(我
们假定你拥有在你使用的电脑上做这些操作的权限)
对于 PyPI pip 安装器的更多信息,可以查看这里的文档:https://pypi.python.org/
-
15 字符串处理和正则表达式
Python 语言的一个突出特性是它能轻松地处理字符串。在本章中我们将会讨论 Python
置的串处以及符串format string作,之后会简绍一
非常实用的主题:正则表达式regular expression。这种字符串处理的模式经常在数据科学的
工作中出现,并且也是 Python 中非常活跃的一个主题。
Python (从
的)
In [1]: x = 'a string'
y = "a string"
x == y
Out[1]: True
除此之外,也可以用三重引号来定义跨行字符串:
In [2]: multiline = """
one
two
three
"""
有了这些作为基础,我们来快速浏览一下 Python 中对字符串进行操作的一些工具。
15.1 Python 简易字符串操作
对于字符串的基础操作,Python 内置的字符串处理函数极其地方便。如果你有一定的 C
言或者其他低语言的基础,你一会觉 Python 提供的这些函数常简便。我已经介绍
Python 的字符串类和一些字串函数,在这一节我们将会加深入地介绍符串处理
的函数。
15.1.1 字符串格式化:大小写转换
Python 写。
upper()lower()capitalize()title() swapcase() 这几个函数:
In [3]: fox = "tHe qUICk bROWn fOx."
81
-
82 15. 字符串处理和正则表达式
要将整个字符串转换为大写或者小写,你可以分别使用 upper() lower() 函数:
In [4]: fox.upper()
Out[4]: 'THE QUICK BROWN FOX.'
In [5]: fox.lower()
Out[5]: 'the quick brown fox.'
一个常见格式化的需求是将字符串中每一个单词的首字母大写,或者每一个段落的首字母
大写,这个时候你可以使用 title() capitalize() 函数:
In [6]: fox.title()
Out[6]: 'The Quick Brown Fox.'
In [7]: fox.capitalize()
Out[7]: 'The quick brown fox.'
swapcase() 函数可以将大小写颠倒:
In [8]: fox.swapcase()
Out[8]: 'ThE QuicK BrowN FoX.'
15.1.2 格式化字符串:添加和删除空格
另一个常见的需求是在字符串的头部或者尾部删除空格(或者其他字符)删除字符的基本
方法是通过 strip() 函数,这个函数会将头部和尾部的空白字符删去:
In [9]: line = ' this is the content '
line.strip()
Out[9]: 'this is the content'
如果只需要删除右边或者左边的空格,可以分别使用 rstrip() lstrip()
In [10]: line.rstrip()
Out[10]: ' this is the content'
In [11]: line.lstrip()
-
15.1. PYTHON 简易字符串操作 83
Out[11]: 'this is the content '
如果要删除的不是空格而是其他字符,向 strip() 函数传递你需要删除的字符作为参数:
In [12]: num = "000000000000435"
num.strip('0')
Out[12]: '435'
删除空格的反向操作可以通过 center()ljust() rjust() 三个函数实现。
举例来说,我们可以使用 center() 函数来以一定数量的空格中心对齐一个给定的字符串:
In [13]: line = "this is the content"
line.center(30)
Out[13]: ' this is the content '
类似地,ljust() rjust() 将会以一定长度的空格左对齐或者右对齐字符串:
In [14]: line.ljust(30)
Out[14]: 'this is the content '
In [15]: line.rjust(30)
Out[15]: ' this is the content'
除此以外,所有这些函数都支持以任意的字符填充空白。比如:
In [16]: '435'.rjust(10, '0')
Out[16]: '0000000435'
因为填 0 是一种常见需求,Python 也提供 zfill() 函数。这个特殊的函数会在字
串左边填充一个全为 “0” 的字符串:
In [17]: '435'.zfill(10)
Out[17]: '0000000435'
-
84 15. 字符串处理和正则表达式
15.1.3 查找和替换子字符串
如果你需要查找一个特定字符在一个字符串出现的次数,Python 内置的 find()/rfind()
index()/rindex() replace() 函数是最好的选择。
find() index() 函数似,它都在字符中搜个字或者子串次出
现的情况,并且返回子串的索引:
In [18]: line = 'the quick brown fox jumped over a lazy dog'
line.find('fox')
Out[18]: 16
In [19]: line.index('fox')
Out[19]: 16
find() index() 个函同:
find() 返回 -1,而 index() 将会抛出一个 ValueError 异常:
In [20]: line.find('bear')
Out[20]: -1
In [21]: line.index('bear')
----------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-21-4cbe6ee9b0eb> in <module>()
----> 1 line.index('bear')
ValueError: substring not found
与之相关的 rfind() rindex() 函数与上面两个函数类似,它们会从字符串尾部开始搜
索第一次出现的子串,而不是从头部:
In [22]: line.rfind('a')
Out[22]: 35
况,Python
startswith() endswith()
-
15.1. PYTHON 简易字符串操作 85
In [23]: line.endswith('dog')
Out[23]: True
In [24]: line.startswith('fox')
Out[24]: False
地,你可以使 replace() 数将一个给定子串替换为另一个。在这里我
'brown' 替换为 'red'
In [25]: line.replace('brown', 'red')
Out[25]: 'the quick red fox jumped over a lazy dog'
replace() 函数返回一个新的字符串,并且会替换输入中的所有出现的字符串:
In [26]: line.replace('o', '--')
Out[26]: '
the quick br--wn f--x jumped --ver a lazy d--g
'
对于 replace() 更为的用法,参阅 15.3 于正则表的讨论:使
正则表达式灵活地匹配字符串模式
15.1.4 拆分和分割字符串
串, 割,
partition() / split() 法。个函
串序列。
partition() 函数返回一个三个元素的元组:在待寻找的子串第一次出现的位置(拆分位
置)之前的子字符串、拆分位置本身以及后面的子字符串:
In [27]: line.partition('fox')
Out[27]: ('the quick brown ', 'fox', ' jumped over a lazy dog')
rpartition() 函数与之类似,但是是从右往左搜索字符串。
split() 函数可能更加实用。这个函数寻找所有分割位置的实例并且返回它们之间的子串。
调用个函以任据,
的列表:
In [28]: line.split()
-
86 15. 字符串处理和正则表达式
Out[28]: ['the', 'quick', 'brown', 'fox', 'jumped', 'over', 'a', 'lazy',
'dog']
与之相关的一个函数是 splitlines(),它对换行符进行分割。让我们 17 世纪著名的俳
句诗人松尾芭蕉(まつお ばしょう,
Matsuo Bash¯o
)的一首俳句进行分割:
In [29]: haiku = """matsushima-ya
aah matsushima-ya
matsushima-ya"""
haiku.splitlines()
Out[29]: ['matsushima-ya', 'aah matsushima-ya', 'matsushima-ya']
注意,如果你希望撤销 split() 结果,你可以使用 join() 函数,这个函数将返回一个
由一个分割位置和一个可迭代对象组成的字符串:
In [30]: '--'.join(['1', '2', '3'])
Out[30]: '1--2--3'
一个常见的模式是使用换行符 "\n" 来连接之前分割过的字符串,这样可以恢复原始输入:
In [31]: print("\n".join(['matsushima-ya', 'aah matsushima-ya',
'matsushima-ya']))
matsushima-ya
aah matsushima-ya
matsushima-ya
15.2 格式化字符串
在对上述函数的讨论中,我们已经学会了如何从字符串中提取值,并对字符串进行操作以转
换为需要的格式。另外一个字符串函数的使用是对字符串其他类型的值的表示representation
进行操作。当然,字符串表示总是可以通过
str()
函数生成,比如:
In [32]: pi = 3.14159
str(pi)
Out[32]: '3.14159'
式,使 5 Python 法:
的算术运算符:
-
15.2. 格式化字符串 87
In [33]: "The value of pi is " + str(pi)
Out[33]: 'The value of pi is 3.14159'
灵活方法使用格式化符串。是由花括表示特殊标记成的字符串,
代表将要插入字符串格式化后的值。这里有一个简单的例子:
In [34]: "The value of pi is {}".format(pi)
Out[34]: 'The value of pi is 3.14159'
{} 标记内部你也可以包括希望在那里出现的确切的信息
1
。如果你包括了一个数字,它
指向的是带插入的参数的索引:
In [35]: """First letter: {0}. Last letter: {1}.""" .format('A', 'Z')
Out[35]: 'First letter: A. Last letter: Z.'
如果你在大括号中包括了一个字符串,它会指向任何关键字参数的键:
In [36]: """First letter: {first}. Last letter: {last}.""" .format(
last='Z', first='A')
Out[36]: 'First letter: A. Last letter: Z.'
最后,对于数字的输入,你可以使用格式化代码来控制数字转换为字符串的格式。比如要
打印一个小数点后保留 3 位的浮点数,你可以使用如下格式化字符串:
In [37]: "pi = {0:.3f}".format(pi)
Out[37]: 'pi = 3.142'
像之那样, 0 要插的参的索引,冒:后面
跟着格式化代码,.3f 编码了需要的精度信息:小数点后保留 3 位小数的浮点数。
活。的语
法。息, Python 中字节:https://docs.
python.org/3/library/string.html#formatspec
1
译者注:译时 Python 3.6 本,提供string interpolation)功能,
以使用 f'The value of pi is {pi}' 来实现上述例子同样的效果。详情请参阅网址:https://www.python.org/
dev/peps/pep-0498/
-
88 15. 字符串处理和正则表达式
15.3 使用正则表达式灵活地匹配字符串模式
Python str 类型提供系列的字格式化、分割作字数据的函
数。但 Python 还有更强的工具,这就是正则表达式块。正则达式一个很庞的话
题。有许多书整都是围绕个话进行展开(比如 Jeffrey E.F. Friedl Mastering Regular
Expressions,因此在短短一节内讲完全部的知识几乎是不可能的。
过正题,
Python 中解决它们。在本章最后,我将为之后的学习提供一些参考资料,请参阅第 15.3.3
于正则表达式的更多资源
说,正pattern match-
ing
法。 使 行,
*
象。 * wildcard)。 说,
“Python” IPython (即 .ipynb 件)使 *
配符来匹配文件名中的其他字符:
In [38]: !ls *Python*.ipynb
01-How-to-Run-Python-Code.ipynb 02-Basic-Python-Syntax.ipynb
式扩了“通符”这一个念,形了一套更广泛的活字串匹配的语法。
Python 支持正则表达式的接口存放在内置的 re 模块中。我们首先来看一个简单的例子,这个
例子实现了与字符串 split() 函数相同的功能:
In [39]: import re
regex = re.compile('\s+')
regex.split(line)
Out[39]: ['the', 'quick', 'brown', 'fox', 'jumped', 'over', 'a', 'lazy',
'dog']
compile 个正 式, 串。
Python split() 样,的列表,正
达式的 split() 函数返回了一个包含所有匹配给定输入模式串的子串的列表。
在这个例子中,输入串是 "\s+"其中 \s 是一个特殊的字符,它匹配了所有空白字符(包
含空格、TAB 字符、换行符等等)+ 指明了在它前面的实体出现一次或多次因此,上述正则
表达式匹配了任何包含一个或多个空格的子串。
split() 种模便数。
match() 函数,这个函数会返回一个字符串的开头是否匹配了模式串:
In [40]: for s in [" ", "abc ", " abc"]:
if regex.match(s):
print(repr(s), "matches")
else:
print(repr(s), "does not match")
-
15.3. 使用正则表达式灵活地匹配字符串模式 89
("' '", 'matches')
("'abc '", 'does not match')
("' abc'", 'matches')
split() 样,Python 便 的函 (类
str.index() str.find()(类 str.replace()使
用之前用过的这行字符串:
In [41]: line = 'the quick brown fox jumped over a lazy dog'
串, regex.search()
str.index() str.find() 函数:
In [42]: line.index('fox')
Out[42]: 16
In [43]: regex = re.compile('fox')
match = regex.search(line)
match.start()
Out[43]: 16
类似地,regex.sub() 函数的行为很像 str.replace()
In [44]: line.replace('fox', 'BEAR')
Out[44]: 'the quick brown BEAR jumped over a lazy dog'
In [45]: regex.sub('BEAR', line)
Out[45]: 'the quick brown BEAR jumped over a lazy dog'
你可能会有一点这样的想法:其他简单的字符串操作也可以转换为正则表达式进行操作。
15.3.1 一个更复杂的例子
但是你可能会问,为什么要用这种相对来说更复杂的正则表达式语法,而不是用更符合直
觉、更简单的字符串操作呢?正则表达式的优点是它提供的特性远不止灵活性这么简单。
这里我们将会再考虑一个更加复杂的例子,同时也是一个非常常见的任务——匹配电子邮
件地址。我将从粗暴地写下一个难以理解的正则表达式开始,然后一步一步地带你理解其中的
内涵。这个复杂的表达式如下:
-
90 15. 字符串处理和正则表达式
In [46]: email = re.compile('\w+@\w+\.[a-z]{3}')
如果从文档中有一行文字,那么你可以使用这个正则表达式迅速提取看上去像电子邮件地
址的内容:
In [47]: text = "To email Guido, try guido@python.org or the older address "\
"guido@google.com."
email.findall(text)
Out[47]: ['guido@python.org', 'guido@google.com']
(请注意,这些地址完全是瞎编的。也许有更好的方法与 Guido 取得联系……)
我们可以进行进一步的操作,比如将这些电子邮件地址替换为其他的字符串,这可以达到
在输出中隐藏地址、保护个人信息的作用:
In [48]: email.sub('--@--.--', text)
Out[48]: 'To email Guido, try --@--.-- or the older address --@--.--.'
最后,请注意,如果你真的需要匹配任意电子邮件地址,之前这个正则表达式太过于简单
了。比如它只允许由数字和字母组成的地址,并且要求以常见的几个域名后缀结尾。因此举例
来说,我们目前使用的时候只是意味着我们暂时只能找到符合要求地址的一部分:
In [49]: email.findall('barack.obama@whitehouse.gov')
Out[49]: ['obama@whitehouse.gov']
这个例子表明如果你不小心的话,使用一个错误的正则表达式将带来不可饶恕的错误!如
果你在互联网上搜索,你会找到不少用来匹配全部法电子邮件地址的正则表达式的建议,但
是需要小心:它们比这里用到的例子要复杂太多!
15.3.2 正则表达式语法基础
正则表达式的语法比本节讨论的要复杂许多。我仍然认为熟悉其中的一部分能够给今后的
学习打下基础。因此我将在这里介绍一些基本的构造块,然后列出一些更完整的资源,从中你
可以了解到更多信息。我希望下面的这个初学者入门指引能使你高效地利用这些资源。
简单的字符串直接匹配。 如果你直接用简单的字母或者数字构建正则表达式的话,它会直接精
确匹配对应的字符串:
In [50]: regex = re.compile('ion')
regex.findall('Great Expectations')
Out[50]: ['ion']
-
15.3. 使用正则表达式灵活地匹配字符串模式 91
一些字符有特殊含义。 尽管一些字符或者数字是直接匹配的,有另外一些字符在正则表达式里
是有特殊含义的。它们是:
. ^ $ * + ? { } [ ] \ | ( )
我们马上会开始讨论其中一些字符的含义。同时,你需要知道如果你希望直接匹配这其中
任何一个字符,你可以使用一个反斜线转义escape)它们:
In [51]: regex = re.compile(r'\$')
regex.findall("the cost is $20")
Out[51]: ['$']
r'\$' r 缀表明这一个始字符串raw string Python 标准字符串中,反
线用来表示特殊的字符。举例来说,TAB 制表符是用 \t 来代表的:
In [52]: print('a\tb\tc')
a b c
这样的替换不会在原始字符串中进行:
In [53]: print(r'a\tb\tc')
a\tb\tc
基于这样一种原因考虑,无论何时,只要在正则表达式中使用反斜杠,最好使用原始字符
串。
特殊组。 在正则 \ 字符过转字符使
普通的字符,它也可以用来赋予普通字符意义。这些特殊的字符可以匹配指定的字符组,我们
已经到了的作用。子邮匹配的正表达中,我们使 \w 匹配数字
者字母类似地,在简单的 split() 例子中,我们也见到了 \s这是一个特殊的标记,匹配
意空白字符
这些起,/的正
表达式:
In [54]: regex = re.compile(r'\w\s\w')
regex.findall('the fox is 9 years old')
Out[54]: ['e f', 'x i', 's 9', 's o']
从这个例子开始,正则表达式的强大和灵活性渐渐开始显现。
下表列出了一些通常比较有用的字符和它们对应的意义:
-
92 15. 字符串处理和正则表达式
字符 描述
\d 匹配任意数字
\D 匹配任意非数字
\s 匹配任意空白字符
\S 匹配任意非空白字符
\w 匹配任意字母和数字
\W 匹配任意非字母和数字
子,述。节,
Python 方正式语档:https://docs.python.org/3/library/re.html#
re-syntax
方括号匹配自定义字符组。 如果内置的字符组不能满足你的定制需求,你可以使用方括号来指
定任意字符的集合。举例来说,下列正则表达式可以匹配任意小写元音字母:
In [55]: regex = re.compile('[aeiou]')
regex.split('consequential')
Out[55]: ['c', 'ns', 'q', '', 'nt', '', 'l']
地,使线-围: [a-z] 母,
[1-3] 匹配任意数字 12 3
你可能需要从文档中提取特定的数字代码,比如包含一个大写字母后跟一个数字。你可以
这样使用正则表达式:
In [56]: regex = re.compile('[A-Z][0-9]')
regex.findall('1043879, G2, H6')
Out[56]: ['G2', 'H6']
通配符匹配重复字符。 如果你需要匹配一个一行中有三个字母或数字的字符串,你也许会这样
构造正则表达式:\w\w\w。但是,由于这是一个普遍的需求,有更具体的语法支持这一重复
配的需要——用花括号括起一个数字:
In [57]: regex = re.compile(r'\w{3}')
regex.findall('The quick brown fox')
Out[57]: ['The', 'qui', 'bro', 'fox']
同样,可以使用另一些标记匹配意数的重复字——比如,+ 字符将会配前
字符出现 1 次或多次重复的情况:
-
15.3. 使用正则表达式灵活地匹配字符串模式 93
In [58]: regex = re.compile(r'\w+')
regex.findall('The quick brown fox')
Out[58]: ['The', 'quick', 'brown', 'fox']
下表总结了正则表达式中的重复标记:
字符 描述 举例
? 匹配前面字符 0 次或 1 次重复 ab? 匹配 "a" "ab"
* 匹配前面字符 0 次或多次重复 ab* 匹配 "a""ab""abb""abbb"
+ 匹配前面字符 1 次或多次重复 ab+ 匹配 "ab""abb""abbb"…但是不匹配 "a"
{n} 匹配前面字符 n 次重复 ab{2} 匹配 "abb"
{m,n} 匹配前面字符 m 次到 n 次重复 ab{2,3} 匹配 "abb" "abbb"
脑海中有了这些内容作为基础,我们将回到之前邮件地址匹配的那个正则表达式:
In [59]: email = re.compile(r'\w+@\w+\.[a-z]{3}')
我们现在能够理解这意味着什么:我们需要一个或者多个数字或字母(\w+)后跟 at 符号
@然后接一个或者多个数字或字母\w+跟着一个句号(\.注意这里需要一个反斜杠转
义),最后跟恰好三个小写字母([a-z]{3}
如果们要改这个正则表式使 Obama 的邮地址够得匹配,们可使用
括号:
In [60]: email2 = re.compile(r'[\w.]+@\w+\.[a-z]{3}')
email2.findall('barack.obama@whitehouse.gov')
Out[60]: ['barack.obama@whitehouse.gov']
我们 \w+ [\w.]+们就意字数字句号。
更为灵活的表达式,我们能够匹配更广范围的邮件地址(尽管仍然不是全部)——你能找出这
个正则表达式的其他不足吗?
通过小括号进行分组提取。 对于复合正则表达式,比如我们的邮件匹配器,我们经常需要提取
它们的一部分,而不是全部匹配内容。这可以通过分组group)实现:
In [61]: email3 = re.compile(r'([\w.]+)@(\w+)\.([a-z]{3})')
In [62]: text = "To email Guido, try guido@python.org or the older address "\
"guido@google.com."
email3.findall(text)
Out[62]: [('guido', 'python', 'org'), ('guido', 'google', 'com')]
-
94 15. 字符串处理和正则表达式
看到这样,个分组好提了一包含有邮各个成部的列表。
我们以进地使 (?P<name>) 提取name,在这况下被提
Python 的字典:
In [63]: email4 = re.compile(r'(?P<user>[\w.]+)@(?P<domain>\w+)'\
'.(?P<suffix>[a-z]{3})')
match = email4.match('guido@python.org')
match.groupdict()
Out[63]: {'domain': 'python', 'suffix': 'org', 'user': 'guido'}
结合这些想法(以及我们未在这里介绍的一些强大的正则表达式语法)你可以灵活快速地
Python 中的字符串中提取信息。
15.3.3 关于正则表达式的更多资源
之前我们对于正则表达式的讨论仅仅只是一个概览,对于这个庞大的主题来说还远远不够。
如果你对此有兴趣并且想知道更多的内容,我推荐如下的资源:
Python re 库函数文档》:我发现我每次需要使用正则表达式的时候都会忘记如何使
用它们。既然我已经对这些内容有一些基本的了解,我觉得这个文档对我来说非常有价
值。通过这个文档我可以迅速回忆起来正则表达式中一个特定的符号或者序列的意义。
Python 册》
Python 中的正则表达式。
Mastering Regular Expressions
2
:这本书 500 余页,完整详细地介绍了正则表达式的内
容。如果你需要一个完整的解决方案,这本书是你的不二之选。
对于更大范围内字符串操作和实际使用正则表达式的一些例子,可以看第 16.2 Pandas
标签化的面向行数据存储在这一节中我们利用 Pandas 库,你会看到如何应用这些表达式在
table)之间处理字符串数据。
2
译者注:中文版《精通正则表达式(第三版)》已由电子工业出版社于 2017 年出版。
-
16 数据科学工具概览
如果你想这里开始,一步使 Python 进行科计算进行数据学研究,那本章
介绍的几个软件包可以让你的工作变得更加轻松。本章将介绍其中几个比较重要的工具,并为
工具题。使书开 Anaconda
Miniconda
环境的话,你可以使用下面这个命令安装本章中有关的工具包:
$ conda install numpy scipy pandas matplotlib scikit-learn
我们来简单看看这些工具。
16.1 NumPyPython 数值计算
NumPy Python 中稠密高维的数组进行存储和操作提供了一个高效的途径。NumPy
重要特性有:
提供 ndarray 体,使量、
集。
它提供了一个易读并且高效的语法来对数据进行处理,支持从简单的按元素的算术运算
到相对复杂的线性代数运算。
在最简单的情况中,NumPy 的数组与 Python 的列表十分相像。举例来说,这里有一个包
含范围从 1 9 的数字的数组(把这个例子与 Python 中内置的 range() 函数进行比较)
In [1]: import numpy as np
x = np.arange(1, 10)
x
Out[1]: array([1, 2, 3, 4, 5, 6, 7, 8, 9])
NumPy 数组存储的方法,供了函数
元素进行运算。比如,对数组中每个元素进行平方,我们可以直接对数组进行 ** 操作:
In [2]: x ** 2
Out[2]: array([ 1, 4, 9, 16, 25, 36, 49, 64, 81])
把上面的代码与有些复杂的 Python 风格的列表推导式(两者产生相同的结果)进行比较:
95
-
96 16. 数据科学工具概览
In [3]: [val ** 2 for val in range(1, 10)]
Out[3]: [1, 4, 9, 16, 25, 36, 49, 64, 81]
不像 Python 的列表(受限于一维)NumPy 的数组可以是多维的。比如,这里我们将
前的 x 数组调整为一个 3 × 3 维度的数组:
In [4]: M = x.reshape((3, 3))
M
Out[4]: array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
一个二维数组是矩阵的一种表示形式,并 NumPy 可以高效地进行典型的矩阵运算。比
如,你可以通过 .T 计算矩阵的转置矩阵transpose matrix
In [5]: M.T
Out[5]: array([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]])
或者通过 np.dot 进行矩阵乘法:
In [6]: np.dot(M, [5, 6, 7])
Out[6]: array([ 38, 92, 146])
并且你可以进行更复杂的操作,比如特征值分解eigenvalue decomposition
1
In [7]: np.linalg.eigvals(M)
Out[7]: array([ 1.61168440e+01, -1.11684397e+00, -1.30367773e-15])
这种线性代数计算是现代数据分析的基础,这在机器学习和数据挖掘领域体现得尤为明显。
想了解关于 NumPy 的更多知识,查阅第 17 更多学习资源
1
译者注:对 N × N 维矩阵 A N 维非零向量 v,若满足 Av = λv,其中 λ 一标量,则称 λ v 对应的
特征值。即特征向量被施以线性变换 A 只会使向量伸长或缩短而其方向不被改变。
-
16.2. PANDAS:标签化的面向行数据存储 97
16.2 Pandas:标签化的面向行数据存储
Pandas 是一个比 NumPy 新很多的库,并且实际上是基于后者构建的。Pandas 提供了一个
标签化的接口来访问多维数据,并且数据帧data frame)对象的形式呈现。如果你 R
言或者相关语言的用户,你对此一定会感到很熟悉。Pandas 中的数据帧像下面这段代码一样:
In [8]: import pandas as pd
df = pd.DataFrame({'label': ['A', 'B', 'C', 'A', 'B', 'C'],
'value': [1, 2, 3, 4, 5, 6]})
df
Out[8]: label value
0 A 1
1 B 2
2 C 3
3 A
4
4 B 5
5 C 6
Pandas 的接口允许你直接以名字选中列并进行操作:
In [9]: df['label']
Out[9]: 0 A
1 B
2 C
3 A
4 B
5 C
Name: label, dtype: object
在字符串条目之间应用字符串处理函数:
In [10]: df['label'].str.lower()
Out[10]: 0 a
1 b
2 c
3 a
4 b
5 c
Name: label, dtype: object
在数值条目之间应用聚集aggregate)函数:
-
98 16. 数据科学工具概览
In [11]: df['value'].sum()
Out[11]: 21
并且可能最重要的一点是你可以直接应用高效的数据库风格的连接和分组操作:
In [12]: df.groupby('label').sum()
Out[12]: value
label
A 5
B 7
C 9
里,和。使 NumPy
Python 代码,这样的操作更加繁琐(也更加低效)
想了解关于 Pandas 的更多知识,查阅第 17 更多学习资源
16.3 MatplotlibMatLab 风格的科学可视化
Matplotlib 目前 Python 最受的科视化库。管它持者认为的接
口有的时候过于繁琐,但是它对于绘制各种类型的图表来说仍然是一个强有力的工具包。
使 Matplotlib我们(对使 Jupyter Notebook 户来说)
然后导入库并重命名为 plt
In [13]: # 如果使用 Jupyter Notebook 需要运行下面这一行
%matplotlib notebook
In [14]: import matplotlib.pyplot as plt
plt.style.use('ggplot') # 使用 R 语言的 ggplot 风格画图
现在让我们创建一些数据(当然是以 NumPy 数组的形式),并且将结果绘制出来:
In [15]: x = np.linspace(0, 10) # 0 10 范围内取值
y = np.sin(x) # 取这些值的正弦值
plt.plot(x, y); # 绘制成一条曲线
-
16.4. SCIPYPYTHON 科学计算 99
如果你使用交互模式运行上述代码,你可以在一个交互式的窗口中移动、缩放、滚动来浏
览数据。
这是 Matplotlib 图像单的子。想创建表的识,查阅 Mat-
plotlib 在线画廊:http://matplotlib.org/gallery.html 和其他在第 17 更多学习资源
列出的资源。
16.4 SciPyPython 科学计算
SciPy 是基 NumPy 个科能的合。初这个库 Fortran
名数值计算库 Python 下的封装,慢慢展壮大。这个库被组成一列子模块,个子
模块实现一些数值算法。下面列出了部分对于数据科学而言重要的模块:
scipy.fftpack快速傅里叶变换Fast Fourier Transforms (FFT)
scipy.integrate数值积分numerical integration
scipy.interpolate数值插值numerical interpolation
scipy.linalg:线性代数方法
scipy.optimize函数数值优化numerical optimization of functions
scipy.sparse稀疏矩阵存储sparse matrix storage)和线性代数
scipy.stats统计分析statistical analysis)方法
比如,我们来看看如何在某些数据之间插值从而绘制出平滑的曲线:
In [16]: from scipy import interpolate
# 选择 0 10 之间的 8 个点
x = np.linspace(0, 10, 8)
y = np.sin(x)
# 创建一个三次插值函数
func = interpolate.interp1d(x, y, kind='cubic')
# 1,000 个点的网格上进行插值运算
x_interp = np.linspace(0, 10, 1000)
-
100 16. 数据科学工具概览
y_interp = func(x_interp)
# 绘制结果
plt.figure() # 新的图片
plt.plot(x, y, 'o')
plt.plot(x_interp, y_interp);
我们看到的是在点之间平滑的插值。
16.5 其他数据科学库
许多其他数据科学包建立在这些工具之上,包括一些通用工具,比如机器学习的库 Scikit-
Learn,图理、分 Scikit-Image,以建模 Statsmodels有其
些更专注领域的库,比如对天学和体物学的 AstroPy,神经影学工 NiPy
还有更多……
无论你遇到什么样的科学、数值或统计问题,都可能有一个 Python 包可以帮助你解决它。
-
17 更多学习资源
Python 旅! 时,
Python 的基本的语法、语义、运算符和功能有一定的了解,并且能掌握一些 Python 的工具
和代码块来帮助你探索更多 Python 的知识。
在全书中我们经尝试向介绍 Python 一些在数科学领域最有用的识,但这并
不意这是面、完 Python 绍。如果要进 Python 语言
如何高效使用 Python,下面是一些我推荐的资源:
Fluent Python
1
者:Luciano Ramalho Python 材,
Python 中的最佳实践以及常见的用法,包括标准库中大多数的用法。
Dive Into Python作者:Mark Pilgrim这是一本免费的在线书籍。介绍了 Python
言的详细用法。
Learn Python the Hard Way
2
作者:Zed Shaw这本书通过“在尝试中学习”的方法,
着重强调了一个程序员可能最重要的一种技能:上 Google 搜索自己不清楚的问题。
Python Essential Reference
3
作者:David Beazley。这本精心写作的 700 页的“怪兽”
包括了几乎所有需要知道 Python 语言知识和它内置的库。如果你需要更专注于具体
应用的知识,你可以看这位作者的另外一本书:Python Cookbook
4
在数据科学和科学计算领域,你可以阅读以下书籍来挖掘更多 Python 的知识:
The Python Data Science Handbook
5
作者:Jake VanderPlas这本书从我们这次旋风
之旅结束的地方开始,为 Python 据科学的技术栈中的基本工具(从数据管理、操作
到机器学习等方面)提供了全面的指南。
Effective Computation in Physics
6
,作者:Katie HuffAnthony Scopatz。这本书适用
于需要进行物理研究的人。这本书逐步介绍了科学计算的内容,还介绍了本书中提到的
许多工具的使用方法。
Python for Data Analysis
7
,作者:Wes McKinney。这本书的作者是 Pandas 库的创始
人。这本书涵盖了 Pandas 库的详尽知识,也提供了许多其他工具的有用知识。
最后,为了更广泛地了解 Python 世界,我推荐如下资源:
1
译者注:中文版《流畅的 Python》已由人民邮电出版社于 2017 5 月出版。
2
注: Zed Shaw Python 3 Learn Python 3 the Hard Way
Learn Python the Hard Way 中文版《“笨办法”学 Python》已由人民邮电出版社于 2014 11 月出版。
3
译者注:中文版《Python 参考手册(第四版)》已由人民邮电出版社于 2016 10 月出版。
4
译者注:中文版《Python Cookbook 中文版(第三版)》已由人民邮电出版社于 2015 5 月出版。
5
译者注:中文版《Python 数据科学手册》已由人民邮电出版社于 2018 1 月出版。
6
译者注:中文版《Python 物理学高效计算》已由人民邮电出版社于 2018 2 月出版。
7
译者注:本书翻译时,该书已经更新 2 ,仍然由 O’Reilly 公司出版。原书 Python for Data Analysis 中文
版《利用 Python 进行数据分析》已由机械工业出版社于 2013 11 月出版。
101
-
102 17. 更多学习资源
O’Reilly Python ResourcesO’Reilly 出版公司提供了许多关于 Python 的优秀书籍,
且提供了许多专门的主题,让你在 Python 世界中遨游。
PyConSciPy PyDataPyConSciPyPyData 大会每年吸引了数以千计的参会
者,并且每年将其大部分节目存档为免费在线视频。这些已经成为一套学习 Python
言、Python 包和库函有关非常料。你索访程的
源:其中访谈通常比较短,涉及到了新的库或者对以前的库的新鲜的观点;而教程可能
长达数小时,涉及到如何使用讨论的这些工具以及其他内容。
-
A 附录:插图代码
本章包含生成本书中出现的插图的代码。
In [1]: %matplotlib inline
import matplotlib.pyplot as plt
In [2]: import os
if not os.path.exists('fig'):
os.makedirs('fig')
A.1 7 章:列表索引
这个插图能帮助你形象地理解 Python 索引的工作方式。
In [3]: L = [2, 3, 5, 7, 11]
fig = plt.figure(figsize=(10, 4))
ax = fig.add_axes([0, 0, 1, 1], xticks=[], yticks=[], frameon=False,
aspect='equal')
for i in range(5):
ax.add_patch(plt.Rectangle([i - 0.5, -0.5], 1, 1, fc='none',
ec='black'))
ax.text(i, -0.05, L[i], size=100,
ha='center', va='center', family='monospace')
for i in range(6):
ax.text(i - 0.5, 0.55, str(i), size=20,
ha='center', va='bottom', family='monospace')
for i in range(5):
ax.text(i - 0.5, -0.58, str(-5 + i), size=20,
ha='center', va='top', family='monospace')
ax.axis([-0.7, 4.7, -0.7, 0.7]);
fig.savefig('fig/list-indexing.png');
103
-
104 A. 附录:插图代码
-
中英文术语对照表
聚集 aggregate 97
argument 12, 13, 44, 45, 47–50, 57, 71,
83, 87
算术运算符 arithmetic operator 20–22, 86
赋值运算符 assignment operator 10, 21, 22
属性 attribute 17, 18, 30
二元算术运算符 binary arithmetic operator 19
二元运算符 binary operator 12, 21
二进制表示 binary representation 20
位运算 bitwise logical operation 20
位运算符 bitwise operator 20–23
代码块 block 6, 11, 12, 43, 47, 55, 101
布尔代数 boolean algebra 23
布尔运算符 boolean operator 23
笛卡尔积 Cartesian Product 66
比较运算符 comparison operator 22, 32
编译 compile 7, 88
编译型 compiled 5
复数 complex number 18, 30, 79
复合对象 compound object 17, 24, 48
复合类型 compound type 27, 35, 36, 38
条件语句 conditional statement 11, 23, 43
构造函数 constructor 28
控制流 control flow 43
控制流语句 control flow statement 1, 11, 23
数据帧 data frame 1, 21, 97
默认值 default value 31, 37, 42, 48
字典推导 dict comprehension 69
字典 dictionary 40–42, 49
动态类型 dynamically typed 15, 16, 36
特征值分解 eigenvalue decomposition 96
转义 escape 91, 93
异常 exception 54–57, 59, 84
异常处理 exception handling 53, 59, 60
异或 exclusive or 21, 23
指数表示法 exponential notation 28
Fast Fourier Transforms
(FFT) 99
斐波那契数列 Fibonacci numbers 45, 47
一等函数 first-order function 50
固定精度 fixed-precision 27, 29
floating-point number 18, 20, 28, 29,
39, 87
向下整除 floor division 19, 20, 28
格式化字符串 format string 81, 87
全排列 full permutation 66
function 1, 12, 13, 18, 30–32, 39, 47–51,
55, 57, 59, 62–66, 74, 78, 81–86, 88,
89, 97, 102
函数式编程 functional programming 65, 79
生成器 generator 71–75, 79
生成器表达式 generator expression 69–75
生成器函数 generator function 71, 74, 75
分组 group 1, 93, 94, 98
哈希表 hash table 40
身份运算符 identity operator 24
虚部 imaginary part 18, 30
不可变 immutable 16, 39
缩进 indentation 11
index 36–38, 40, 63, 64, 68, 79, 84, 87,
103
整数 integer 18, 20, 23, 27, 28, 38, 56, 68
解释型 interpreted 5, 7
解释器 interpreter 2, 3, 5, 6, 10, 61
105
-
106 中英文术语对照表
迭代器 iterator 44, 61, 63–66, 71, 79
迭代器接口 iterator interface 61, 62
键值对 key-value pair 40
关键字形式参数 keyword argument 47
library 2, 7, 20, 63, 77, 79, 97–102
线性代数 linear algebra 20, 95, 96, 99
list 12, 16, 17, 21, 25, 35–41, 48–50, 54,
61–64, 66–68, 71–75, 85, 88, 94–96
列表推导 list comprehension 67–71, 74, 95
循环语句 loop statement 11, 23, 43, 67, 68
矩阵乘法 matrix product 20, 96
成员运算符 membership operator 24
元数据 metadata 17
方法 method 1, 17, 18, 30, 35–41, 95, 99
可变 mutable 16, 21, 35
命名 name 94
命名空间 namespace 77, 78
数值积分 numerical integration 1, 99
数值插值 numerical interpolation 1, 99
函数数值优化 numerical optimization of func-
tions 99
对象 object 1, 15–19, 21–24, 27, 36, 39, 41, 44,
48, 50, 61–64, 66, 67, 70, 79, 86, 97
对象相等 object equality 24
对象身份 object identity 24
面向对象 object-oriented 17
运算符 operator 12, 19–23, 28, 41, 101
package 1, 2, 38, 77, 79, 95, 98, 100, 102
模式匹配
pattern matching 88
指针 pointer 15–17, 24
原始字符串 raw string 91
实部 real part 18, 30
引用 reference 15
正则表达式 regular expression 81, 85, 88–94
表示 representation 28–30, 86, 96
运行时错误 runtime error 53
自包含脚本 self-contained script 5, 7
语义错误 semantic error 53
语义 semantics 1, 9, 15, 101
集合 set 41, 66, 69, 92
集合推导 set comprehension 69
Sieve of Eratosthenes 46, 72,
74, 75
简单类型 simple type 16, 17, 27
切片 slice 36–38, 40, 44
稀疏矩阵存储 sparse matrix storage 99
静态类型 statically typed 16, 28, 36
统计分析 statistical analysis 99
字符串内插 string interpolation 87
对等差分 symmetric difference 41
syntax 1, 2, 9–11, 13, 15, 19, 36–38, 44,
46, 49–51, 53, 58, 61, 63, 64, 67, 69,
75, 87–90, 92, 94, 95, 101
语法错误 syntax error 53
表格 table 94
终端 terminal 5
三元运算符 ternary operator 68
转置矩阵 transpose matrix 96
真除 true division 19, 20
元组 tuple 38–42, 48, 85
补码 two’s complement 23
类型转换 type conversion 32
一元运算符 unary operator 12, 19
variable 5, 10, 12, 15–17, 19, 21, 24, 27,
32, 36, 44, 49, 53, 67
可变精度 variable-precision 27
通配符 wildcard 88, 92
-
同济大学苹果开发俱乐部介绍
2003 9 24 日, Apple
部, Apple 识, macOSiOS
watchOStvOS 等平台的软件开发。
自俱乐部成立以来,软件学院、Apple 公司和广大学生通力合作,积极努力。在俱乐部中,
学生任何创造性的想法都会被珍视、鼓励、去芜存菁并在指导下实施,俱乐部成为了来自不同
院系学生发挥创造力的舞台。在十四年的发展中,经过几任指导教师和广大同学的奋斗,俱乐
部取得了丰硕的成果,极大地促进了学生的实践与创新能力。
国内《苹基础程》版,
该教材完全由俱乐部的学生编写。
国内第一门苹果软件开发类课程《Apple 平台软件开发》在同济大学开设。
国内第一个学生开发的开源,且受到苹果总部高层赞赏的免费软件。
国内第一批赴美国参加苹果全球开发者大会(WWDC)的学生开发者。
国内第一个获得苹果平台学生开发竞赛所有重要奖项的俱乐部。
国内一个开发受邀果全发者会(WWDC门环做技
和展示。
国内第一个冲击苹果年度全球软件设计最高荣誉——苹果设计大奖的学生作品。
Apple 6 果中学生中,同苹果共计
5 金奖,1 奖,16 奖,7 的好绩,该项“五连冠”
录。 2016 “中国校计算机-移动用创新赛”中,俱乐的学生再获得等奖。
2005 年开始,同济大学苹果俱乐部每年均有十余名师生受邀前往参加在 San Francisco 举办
WWDCWorld Wide Development Conference)活动,成为第一批参与该活动的中国开发
者。在 2005 WWDC 上,Steve Jobs 特别在演欢迎自中的俱开发者,
大学苹果乐部的师也成 WWDC 上来自中国的道靓丽的景线。 2009 年开始,苹
部的学生进入 App Store 行销售。俱完成 Animal Kingdom
为苹国官广的作品,到了户的评。目果俱经有 60 余个
品在 App Store 行销售,累计次数 5,000,000 次,下用户布中国、美国、
大、英国、法国、日本等多个国家和地区,作品受到了中国、日本、美国多家风险投资和代理
注。苹果乐部学生获得了用单位一致评,俱乐部历届业生 Apple
FacebookIBMMicrosoftGoogleAutodeskSAPKodakEAGameloft 等多家企业在
美国、中国从事苹果及其相关产品开发,并有多名学生自主创业。
107
-
108 同济大学苹果开发俱乐部介绍
十多年来,同济大学苹果俱乐部获得了“苹果杰出贡献奖”“苹果先驱俱乐部奖”“苹果优秀
俱乐部奖”“苹果杰出实验室奖”等荣誉;指导教师先后获得了“苹果杰出教育专家ADE“苹
果杰出教师奖”等奖项。
广道, CCTV网、网、易、CSDN
Tencent 等多个媒体的采访,同时也接受了包括《第一财经周刊》《解放日报》等在内的多个平
面媒体的采访,登上 2 期《第一财经周刊》封面故事。同时作为高校与跨 IT 企业的
合作案例,入选教育部组织编写的《中国高校与大型企业合作经典案例集》全国政协副主席董
华、钢、部副迪、苹高级 Philip W. Schiller
Ron Okamoto 法国参众议员访华代表团、众多国内外大学校长教授等均参观和指导过同济大
学苹果俱乐部。
同济大学苹果俱乐部在十多年的建设过程中,始终坚持以学生为本,以创新为本,坚持以
工程实际需求为导向,和国内外相关企业积极合作,鼓励学生自主创新,以专业教师进行指导,
为学生创造良好的软硬件环境,为学生的成长、成才提供有力的保障,体现了同济大学软件学
院创新人才培养和前沿化、工程化、国际化,理论基础和实践技能协调发展的培养理念。
+
15 字符串处理和正则表达式
Python 语言的一个突出特性是它能轻松地处理字符串。在本章中我们将会讨论 Python
置的串处以及符串format string作,之后会简绍一
非常实用的主题:正则表达式regular expression。这种字符串处理的模式经常在数据科学的
工作中出现,并且也是 Python 中非常活跃的一个主题。
Python (从
的)
In [1]: x = 'a string'
y = "a string"
x == y
Out[1]: True
除此之外,也可以用三重引号来定义跨行字符串:
In [2]: multiline = """
one
two
three
"""
有了这些作为基础,我们来快速浏览一下 Python 中对字符串进行操作的一些工具。
15.1 Python 简易字符串操作
对于字符串的基础操作,Python 内置的字符串处理函数极其地方便。如果你有一定的 C
言或者其他低语言的基础,你一会觉 Python 提供的这些函数常简便。我已经介绍
Python 的字符串类和一些字串函数,在这一节我们将会加深入地介绍符串处理
的函数。
15.1.1 字符串格式化:大小写转换
Python 写。
upper()lower()capitalize()title() swapcase() 这几个函数:
In [3]: fox = "tHe qUICk bROWn fOx."
81
+
82 15. 字符串处理和正则表达式
要将整个字符串转换为大写或者小写,你可以分别使用 upper() lower() 函数:
In [4]: fox.upper()
Out[4]: 'THE QUICK BROWN FOX.'
In [5]: fox.lower()
Out[5]: 'the quick brown fox.'
一个常见格式化的需求是将字符串中每一个单词的首字母大写,或者每一个段落的首字母
大写,这个时候你可以使用 title() capitalize() 函数:
In [6]: fox.title()
Out[6]: 'The Quick Brown Fox.'
In [7]: fox.capitalize()
Out[7]: 'The quick brown fox.'
swapcase() 函数可以将大小写颠倒:
In [8]: fox.swapcase()
Out[8]: 'ThE QuicK BrowN FoX.'
15.1.2 格式化字符串:添加和删除空格
另一个常见的需求是在字符串的头部或者尾部删除空格(或者其他字符)删除字符的基本
方法是通过 strip() 函数,这个函数会将头部和尾部的空白字符删去:
In [9]: line = ' this is the content '
line.strip()
Out[9]: 'this is the content'
如果只需要删除右边或者左边的空格,可以分别使用 rstrip() lstrip()
In [10]: line.rstrip()
Out[10]: ' this is the content'
In [11]: line.lstrip()
+
15.1. PYTHON 简易字符串操作 83
Out[11]: 'this is the content '
如果要删除的不是空格而是其他字符,向 strip() 函数传递你需要删除的字符作为参数:
In [12]: num = "000000000000435"
num.strip('0')
Out[12]: '435'
删除空格的反向操作可以通过 center()ljust() rjust() 三个函数实现。
举例来说,我们可以使用 center() 函数来以一定数量的空格中心对齐一个给定的字符串:
In [13]: line = "this is the content"
line.center(30)
Out[13]: ' this is the content '
类似地,ljust() rjust() 将会以一定长度的空格左对齐或者右对齐字符串:
In [14]: line.ljust(30)
Out[14]: 'this is the content '
In [15]: line.rjust(30)
Out[15]: ' this is the content'
除此以外,所有这些函数都支持以任意的字符填充空白。比如:
In [16]: '435'.rjust(10, '0')
Out[16]: '0000000435'
因为填 0 是一种常见需求,Python 也提供 zfill() 函数。这个特殊的函数会在字
串左边填充一个全为 “0” 的字符串:
In [17]: '435'.zfill(10)
Out[17]: '0000000435'
+
84 15. 字符串处理和正则表达式
15.1.3 查找和替换子字符串
如果你需要查找一个特定字符在一个字符串出现的次数,Python 内置的 find()/rfind()
index()/rindex() replace() 函数是最好的选择。
find() index() 函数似,它都在字符中搜个字或者子串次出
现的情况,并且返回子串的索引:
In [18]: line = 'the quick brown fox jumped over a lazy dog'
line.find('fox')
Out[18]: 16
In [19]: line.index('fox')
Out[19]: 16
find() index() 个函同:
find() 返回 -1,而 index() 将会抛出一个 ValueError 异常:
In [20]: line.find('bear')
Out[20]: -1
In [21]: line.index('bear')
----------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-21-4cbe6ee9b0eb> in <module>()
----> 1 line.index('bear')
ValueError: substring not found
与之相关的 rfind() rindex() 函数与上面两个函数类似,它们会从字符串尾部开始搜
索第一次出现的子串,而不是从头部:
In [22]: line.rfind('a')
Out[22]: 35
况,Python
startswith() endswith()
+
15.1. PYTHON 简易字符串操作 85
In [23]: line.endswith('dog')
Out[23]: True
In [24]: line.startswith('fox')
Out[24]: False
地,你可以使 replace() 数将一个给定子串替换为另一个。在这里我
'brown' 替换为 'red'
In [25]: line.replace('brown', 'red')
Out[25]: 'the quick red fox jumped over a lazy dog'
replace() 函数返回一个新的字符串,并且会替换输入中的所有出现的字符串:
In [26]: line.replace('o', '--')
Out[26]: '
the quick br--wn f--x jumped --ver a lazy d--g
'
对于 replace() 更为的用法,参阅 15.3 于正则表的讨论:使
正则表达式灵活地匹配字符串模式
15.1.4 拆分和分割字符串
串, 割,
partition() / split() 法。个函
串序列。
partition() 函数返回一个三个元素的元组:在待寻找的子串第一次出现的位置(拆分位
置)之前的子字符串、拆分位置本身以及后面的子字符串:
In [27]: line.partition('fox')
Out[27]: ('the quick brown ', 'fox', ' jumped over a lazy dog')
rpartition() 函数与之类似,但是是从右往左搜索字符串。
split() 函数可能更加实用。这个函数寻找所有分割位置的实例并且返回它们之间的子串。
调用个函以任据,
的列表:
In [28]: line.split()
+
86 15. 字符串处理和正则表达式
Out[28]: ['the', 'quick', 'brown', 'fox', 'jumped', 'over', 'a', 'lazy',
'dog']
与之相关的一个函数是 splitlines(),它对换行符进行分割。让我们 17 世纪著名的俳
句诗人松尾芭蕉(まつお ばしょう,
Matsuo Bash¯o
)的一首俳句进行分割:
In [29]: haiku = """matsushima-ya
aah matsushima-ya
matsushima-ya"""
haiku.splitlines()
Out[29]: ['matsushima-ya', 'aah matsushima-ya', 'matsushima-ya']
注意,如果你希望撤销 split() 结果,你可以使用 join() 函数,这个函数将返回一个
由一个分割位置和一个可迭代对象组成的字符串:
In [30]: '--'.join(['1', '2', '3'])
Out[30]: '1--2--3'
一个常见的模式是使用换行符 "\n" 来连接之前分割过的字符串,这样可以恢复原始输入:
In [31]: print("\n".join(['matsushima-ya', 'aah matsushima-ya',
'matsushima-ya']))
matsushima-ya
aah matsushima-ya
matsushima-ya
15.2 格式化字符串
在对上述函数的讨论中,我们已经学会了如何从字符串中提取值,并对字符串进行操作以转
换为需要的格式。另外一个字符串函数的使用是对字符串其他类型的值的表示representation
进行操作。当然,字符串表示总是可以通过
str()
函数生成,比如:
In [32]: pi = 3.14159
str(pi)
Out[32]: '3.14159'
式,使 5 Python 法:
的算术运算符:
+
15.2. 格式化字符串 87
In [33]: "The value of pi is " + str(pi)
Out[33]: 'The value of pi is 3.14159'
灵活方法使用格式化符串。是由花括表示特殊标记成的字符串,
代表将要插入字符串格式化后的值。这里有一个简单的例子:
In [34]: "The value of pi is {}".format(pi)
Out[34]: 'The value of pi is 3.14159'
{} 标记内部你也可以包括希望在那里出现的确切的信息
1
。如果你包括了一个数字,它
指向的是带插入的参数的索引:
In [35]: """First letter: {0}. Last letter: {1}.""" .format('A', 'Z')
Out[35]: 'First letter: A. Last letter: Z.'
如果你在大括号中包括了一个字符串,它会指向任何关键字参数的键:
In [36]: """First letter: {first}. Last letter: {last}.""" .format(
last='Z', first='A')
Out[36]: 'First letter: A. Last letter: Z.'
最后,对于数字的输入,你可以使用格式化代码来控制数字转换为字符串的格式。比如要
打印一个小数点后保留 3 位的浮点数,你可以使用如下格式化字符串:
In [37]: "pi = {0:.3f}".format(pi)
Out[37]: 'pi = 3.142'
像之那样, 0 要插的参的索引,冒:后面
跟着格式化代码,.3f 编码了需要的精度信息:小数点后保留 3 位小数的浮点数。
活。的语
法。息, Python 中字节:https://docs.
python.org/3/library/string.html#formatspec
1
译者注:译时 Python 3.6 本,提供string interpolation)功能,
以使用 f'The value of pi is {pi}' 来实现上述例子同样的效果。详情请参阅网址:https://www.python.org/
dev/peps/pep-0498/
+
88 15. 字符串处理和正则表达式
15.3 使用正则表达式灵活地匹配字符串模式
Python str 类型提供系列的字格式化、分割作字数据的函
数。但 Python 还有更强的工具,这就是正则表达式块。正则达式一个很庞的话
题。有许多书整都是围绕个话进行展开(比如 Jeffrey E.F. Friedl Mastering Regular
Expressions,因此在短短一节内讲完全部的知识几乎是不可能的。
过正题,
Python 中解决它们。在本章最后,我将为之后的学习提供一些参考资料,请参阅第 15.3.3
于正则表达式的更多资源
说,正pattern match-
ing
法。 使 行,
*
象。 * wildcard)。 说,
“Python” IPython (即 .ipynb 件)使 *
配符来匹配文件名中的其他字符:
In [38]: !ls *Python*.ipynb
01-How-to-Run-Python-Code.ipynb 02-Basic-Python-Syntax.ipynb
式扩了“通符”这一个念,形了一套更广泛的活字串匹配的语法。
Python 支持正则表达式的接口存放在内置的 re 模块中。我们首先来看一个简单的例子,这个
例子实现了与字符串 split() 函数相同的功能:
In [39]: import re
regex = re.compile('\s+')
regex.split(line)
Out[39]: ['the', 'quick', 'brown', 'fox', 'jumped', 'over', 'a', 'lazy',
'dog']
compile 个正 式, 串。
Python split() 样,的列表,正
达式的 split() 函数返回了一个包含所有匹配给定输入模式串的子串的列表。
在这个例子中,输入串是 "\s+"其中 \s 是一个特殊的字符,它匹配了所有空白字符(包
含空格、TAB 字符、换行符等等)+ 指明了在它前面的实体出现一次或多次因此,上述正则
表达式匹配了任何包含一个或多个空格的子串。
split() 种模便数。
match() 函数,这个函数会返回一个字符串的开头是否匹配了模式串:
In [40]: for s in [" ", "abc ", " abc"]:
if regex.match(s):
print(repr(s), "matches")
else:
print(repr(s), "does not match")
+
15.3. 使用正则表达式灵活地匹配字符串模式 89
("' '", 'matches')
("'abc '", 'does not match')
("' abc'", 'matches')
split() 样,Python 便 的函 (类
str.index() str.find()(类 str.replace()使
用之前用过的这行字符串:
In [41]: line = 'the quick brown fox jumped over a lazy dog'
串, regex.search()
str.index() str.find() 函数:
In [42]: line.index('fox')
Out[42]: 16
In [43]: regex = re.compile('fox')
match = regex.search(line)
match.start()
Out[43]: 16
类似地,regex.sub() 函数的行为很像 str.replace()
In [44]: line.replace('fox', 'BEAR')
Out[44]: 'the quick brown BEAR jumped over a lazy dog'
In [45]: regex.sub('BEAR', line)
Out[45]: 'the quick brown BEAR jumped over a lazy dog'
你可能会有一点这样的想法:其他简单的字符串操作也可以转换为正则表达式进行操作。
15.3.1 一个更复杂的例子
但是你可能会问,为什么要用这种相对来说更复杂的正则表达式语法,而不是用更符合直
觉、更简单的字符串操作呢?正则表达式的优点是它提供的特性远不止灵活性这么简单。
这里我们将会再考虑一个更加复杂的例子,同时也是一个非常常见的任务——匹配电子邮
件地址。我将从粗暴地写下一个难以理解的正则表达式开始,然后一步一步地带你理解其中的
内涵。这个复杂的表达式如下:
+
90 15. 字符串处理和正则表达式
In [46]: email = re.compile('\w+@\w+\.[a-z]{3}')
如果从文档中有一行文字,那么你可以使用这个正则表达式迅速提取看上去像电子邮件地
址的内容:
In [47]: text = "To email Guido, try guido@python.org or the older address "\
"guido@google.com."
email.findall(text)
Out[47]: ['guido@python.org', 'guido@google.com']
(请注意,这些地址完全是瞎编的。也许有更好的方法与 Guido 取得联系……)
我们可以进行进一步的操作,比如将这些电子邮件地址替换为其他的字符串,这可以达到
在输出中隐藏地址、保护个人信息的作用:
In [48]: email.sub('--@--.--', text)
Out[48]: 'To email Guido, try --@--.-- or the older address --@--.--.'
最后,请注意,如果你真的需要匹配任意电子邮件地址,之前这个正则表达式太过于简单
了。比如它只允许由数字和字母组成的地址,并且要求以常见的几个域名后缀结尾。因此举例
来说,我们目前使用的时候只是意味着我们暂时只能找到符合要求地址的一部分:
In [49]: email.findall('barack.obama@whitehouse.gov')
Out[49]: ['obama@whitehouse.gov']
这个例子表明如果你不小心的话,使用一个错误的正则表达式将带来不可饶恕的错误!如
果你在互联网上搜索,你会找到不少用来匹配全部法电子邮件地址的正则表达式的建议,但
是需要小心:它们比这里用到的例子要复杂太多!
15.3.2 正则表达式语法基础
正则表达式的语法比本节讨论的要复杂许多。我仍然认为熟悉其中的一部分能够给今后的
学习打下基础。因此我将在这里介绍一些基本的构造块,然后列出一些更完整的资源,从中你
可以了解到更多信息。我希望下面的这个初学者入门指引能使你高效地利用这些资源。
简单的字符串直接匹配。 如果你直接用简单的字母或者数字构建正则表达式的话,它会直接精
确匹配对应的字符串:
In [50]: regex = re.compile('ion')
regex.findall('Great Expectations')
Out[50]: ['ion']
+
15.3. 使用正则表达式灵活地匹配字符串模式 91
一些字符有特殊含义。 尽管一些字符或者数字是直接匹配的,有另外一些字符在正则表达式里
是有特殊含义的。它们是:
. ^ $ * + ? { } [ ] \ | ( )
我们马上会开始讨论其中一些字符的含义。同时,你需要知道如果你希望直接匹配这其中
任何一个字符,你可以使用一个反斜线转义escape)它们:
In [51]: regex = re.compile(r'\$')
regex.findall("the cost is $20")
Out[51]: ['$']
r'\$' r 缀表明这一个始字符串raw string Python 标准字符串中,反
线用来表示特殊的字符。举例来说,TAB 制表符是用 \t 来代表的:
In [52]: print('a\tb\tc')
a b c
这样的替换不会在原始字符串中进行:
In [53]: print(r'a\tb\tc')
a\tb\tc
基于这样一种原因考虑,无论何时,只要在正则表达式中使用反斜杠,最好使用原始字符
串。
特殊组。 在正则 \ 字符过转字符使
普通的字符,它也可以用来赋予普通字符意义。这些特殊的字符可以匹配指定的字符组,我们
已经到了的作用。子邮匹配的正表达中,我们使 \w 匹配数字
者字母类似地,在简单的 split() 例子中,我们也见到了 \s这是一个特殊的标记,匹配
意空白字符
这些起,/的正
表达式:
In [54]: regex = re.compile(r'\w\s\w')
regex.findall('the fox is 9 years old')
Out[54]: ['e f', 'x i', 's 9', 's o']
从这个例子开始,正则表达式的强大和灵活性渐渐开始显现。
下表列出了一些通常比较有用的字符和它们对应的意义:
+
92 15. 字符串处理和正则表达式
字符 描述
\d 匹配任意数字
\D 匹配任意非数字
\s 匹配任意空白字符
\S 匹配任意非空白字符
\w 匹配任意字母和数字
\W 匹配任意非字母和数字
子,述。节,
Python 方正式语档:https://docs.python.org/3/library/re.html#
re-syntax
方括号匹配自定义字符组。 如果内置的字符组不能满足你的定制需求,你可以使用方括号来指
定任意字符的集合。举例来说,下列正则表达式可以匹配任意小写元音字母:
In [55]: regex = re.compile('[aeiou]')
regex.split('consequential')
Out[55]: ['c', 'ns', 'q', '', 'nt', '', 'l']
地,使线-围: [a-z] 母,
[1-3] 匹配任意数字 12 3
你可能需要从文档中提取特定的数字代码,比如包含一个大写字母后跟一个数字。你可以
这样使用正则表达式:
In [56]: regex = re.compile('[A-Z][0-9]')
regex.findall('1043879, G2, H6')
Out[56]: ['G2', 'H6']
通配符匹配重复字符。 如果你需要匹配一个一行中有三个字母或数字的字符串,你也许会这样
构造正则表达式:\w\w\w。但是,由于这是一个普遍的需求,有更具体的语法支持这一重复
配的需要——用花括号括起一个数字:
In [57]: regex = re.compile(r'\w{3}')
regex.findall('The quick brown fox')
Out[57]: ['The', 'qui', 'bro', 'fox']
同样,可以使用另一些标记匹配意数的重复字——比如,+ 字符将会配前
字符出现 1 次或多次重复的情况:
+
15.3. 使用正则表达式灵活地匹配字符串模式 93
In [58]: regex = re.compile(r'\w+')
regex.findall('The quick brown fox')
Out[58]: ['The', 'quick', 'brown', 'fox']
下表总结了正则表达式中的重复标记:
字符 描述 举例
? 匹配前面字符 0 次或 1 次重复 ab? 匹配 "a" "ab"
* 匹配前面字符 0 次或多次重复 ab* 匹配 "a""ab""abb""abbb"
+ 匹配前面字符 1 次或多次重复 ab+ 匹配 "ab""abb""abbb"…但是不匹配 "a"
{n} 匹配前面字符 n 次重复 ab{2} 匹配 "abb"
{m,n} 匹配前面字符 m 次到 n 次重复 ab{2,3} 匹配 "abb" "abbb"
脑海中有了这些内容作为基础,我们将回到之前邮件地址匹配的那个正则表达式:
In [59]: email = re.compile(r'\w+@\w+\.[a-z]{3}')
我们现在能够理解这意味着什么:我们需要一个或者多个数字或字母(\w+)后跟 at 符号
@然后接一个或者多个数字或字母\w+跟着一个句号(\.注意这里需要一个反斜杠转
义),最后跟恰好三个小写字母([a-z]{3}
如果们要改这个正则表式使 Obama 的邮地址够得匹配,们可使用
括号:
In [60]: email2 = re.compile(r'[\w.]+@\w+\.[a-z]{3}')
email2.findall('barack.obama@whitehouse.gov')
Out[60]: ['barack.obama@whitehouse.gov']
我们 \w+ [\w.]+们就意字数字句号。
更为灵活的表达式,我们能够匹配更广范围的邮件地址(尽管仍然不是全部)——你能找出这
个正则表达式的其他不足吗?
通过小括号进行分组提取。 对于复合正则表达式,比如我们的邮件匹配器,我们经常需要提取
它们的一部分,而不是全部匹配内容。这可以通过分组group)实现:
In [61]: email3 = re.compile(r'([\w.]+)@(\w+)\.([a-z]{3})')
In [62]: text = "To email Guido, try guido@python.org or the older address "\
"guido@google.com."
email3.findall(text)
Out[62]: [('guido', 'python', 'org'), ('guido', 'google', 'com')]
+
94 15. 字符串处理和正则表达式
看到这样,个分组好提了一包含有邮各个成部的列表。
我们以进地使 (?P<name>) 提取name,在这况下被提
Python 的字典:
In [63]: email4 = re.compile(r'(?P<user>[\w.]+)@(?P<domain>\w+)'\
'.(?P<suffix>[a-z]{3})')
match = email4.match('guido@python.org')
match.groupdict()
Out[63]: {'domain': 'python', 'suffix': 'org', 'user': 'guido'}
结合这些想法(以及我们未在这里介绍的一些强大的正则表达式语法)你可以灵活快速地
Python 中的字符串中提取信息。
15.3.3 关于正则表达式的更多资源
之前我们对于正则表达式的讨论仅仅只是一个概览,对于这个庞大的主题来说还远远不够。
如果你对此有兴趣并且想知道更多的内容,我推荐如下的资源:
Python re 库函数文档》:我发现我每次需要使用正则表达式的时候都会忘记如何使
用它们。既然我已经对这些内容有一些基本的了解,我觉得这个文档对我来说非常有价
值。通过这个文档我可以迅速回忆起来正则表达式中一个特定的符号或者序列的意义。
Python 册》
Python 中的正则表达式。
Mastering Regular Expressions
2
:这本书 500 余页,完整详细地介绍了正则表达式的内
容。如果你需要一个完整的解决方案,这本书是你的不二之选。
对于更大范围内字符串操作和实际使用正则表达式的一些例子,可以看第 16.2 Pandas
标签化的面向行数据存储在这一节中我们利用 Pandas 库,你会看到如何应用这些表达式在
table)之间处理字符串数据。
2
译者注:中文版《精通正则表达式(第三版)》已由电子工业出版社于 2017 年出版。
+
16 数据科学工具概览
如果你想这里开始,一步使 Python 进行科计算进行数据学研究,那本章
介绍的几个软件包可以让你的工作变得更加轻松。本章将介绍其中几个比较重要的工具,并为
工具题。使书开 Anaconda
Miniconda
环境的话,你可以使用下面这个命令安装本章中有关的工具包:
$ conda install numpy scipy pandas matplotlib scikit-learn
我们来简单看看这些工具。
16.1 NumPyPython 数值计算
NumPy Python 中稠密高维的数组进行存储和操作提供了一个高效的途径。NumPy
重要特性有:
提供 ndarray 体,使量、
集。
它提供了一个易读并且高效的语法来对数据进行处理,支持从简单的按元素的算术运算
到相对复杂的线性代数运算。
在最简单的情况中,NumPy 的数组与 Python 的列表十分相像。举例来说,这里有一个包
含范围从 1 9 的数字的数组(把这个例子与 Python 中内置的 range() 函数进行比较)
In [1]: import numpy as np
x = np.arange(1, 10)
x
Out[1]: array([1, 2, 3, 4, 5, 6, 7, 8, 9])
NumPy 数组存储的方法,供了函数
元素进行运算。比如,对数组中每个元素进行平方,我们可以直接对数组进行 ** 操作:
In [2]: x ** 2
Out[2]: array([ 1, 4, 9, 16, 25, 36, 49, 64, 81])
把上面的代码与有些复杂的 Python 风格的列表推导式(两者产生相同的结果)进行比较:
95
+
96 16. 数据科学工具概览
In [3]: [val ** 2 for val in range(1, 10)]
Out[3]: [1, 4, 9, 16, 25, 36, 49, 64, 81]
不像 Python 的列表(受限于一维)NumPy 的数组可以是多维的。比如,这里我们将
前的 x 数组调整为一个 3 × 3 维度的数组:
In [4]: M = x.reshape((3, 3))
M
Out[4]: array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
一个二维数组是矩阵的一种表示形式,并 NumPy 可以高效地进行典型的矩阵运算。比
如,你可以通过 .T 计算矩阵的转置矩阵transpose matrix
In [5]: M.T
Out[5]: array([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]])
或者通过 np.dot 进行矩阵乘法:
In [6]: np.dot(M, [5, 6, 7])
Out[6]: array([ 38, 92, 146])
并且你可以进行更复杂的操作,比如特征值分解eigenvalue decomposition
1
In [7]: np.linalg.eigvals(M)
Out[7]: array([ 1.61168440e+01, -1.11684397e+00, -1.30367773e-15])
这种线性代数计算是现代数据分析的基础,这在机器学习和数据挖掘领域体现得尤为明显。
想了解关于 NumPy 的更多知识,查阅第 17 更多学习资源
1
译者注:对 N × N 维矩阵 A N 维非零向量 v,若满足 Av = λv,其中 λ 一标量,则称 λ v 对应的
特征值。即特征向量被施以线性变换 A 只会使向量伸长或缩短而其方向不被改变。
+
16.2. PANDAS:标签化的面向行数据存储 97
16.2 Pandas:标签化的面向行数据存储
Pandas 是一个比 NumPy 新很多的库,并且实际上是基于后者构建的。Pandas 提供了一个
标签化的接口来访问多维数据,并且数据帧data frame)对象的形式呈现。如果你 R
言或者相关语言的用户,你对此一定会感到很熟悉。Pandas 中的数据帧像下面这段代码一样:
In [8]: import pandas as pd
df = pd.DataFrame({'label': ['A', 'B', 'C', 'A', 'B', 'C'],
'value': [1, 2, 3, 4, 5, 6]})
df
Out[8]: label value
0 A 1
1 B 2
2 C 3
3 A
4
4 B 5
5 C 6
Pandas 的接口允许你直接以名字选中列并进行操作:
In [9]: df['label']
Out[9]: 0 A
1 B
2 C
3 A
4 B
5 C
Name: label, dtype: object
在字符串条目之间应用字符串处理函数:
In [10]: df['label'].str.lower()
Out[10]: 0 a
1 b
2 c
3 a
4 b
5 c
Name: label, dtype: object
在数值条目之间应用聚集aggregate)函数:
+
98 16. 数据科学工具概览
In [11]: df['value'].sum()
Out[11]: 21
并且可能最重要的一点是你可以直接应用高效的数据库风格的连接和分组操作:
In [12]: df.groupby('label').sum()
Out[12]: value
label
A 5
B 7
C 9
里,和。使 NumPy
Python 代码,这样的操作更加繁琐(也更加低效)
想了解关于 Pandas 的更多知识,查阅第 17 更多学习资源
16.3 MatplotlibMatLab 风格的科学可视化
Matplotlib 目前 Python 最受的科视化库。管它持者认为的接
口有的时候过于繁琐,但是它对于绘制各种类型的图表来说仍然是一个强有力的工具包。
使 Matplotlib我们(对使 Jupyter Notebook 户来说)
然后导入库并重命名为 plt
In [13]: # 如果使用 Jupyter Notebook 需要运行下面这一行
%matplotlib notebook
In [14]: import matplotlib.pyplot as plt
plt.style.use('ggplot') # 使用 R 语言的 ggplot 风格画图
现在让我们创建一些数据(当然是以 NumPy 数组的形式),并且将结果绘制出来:
In [15]: x = np.linspace(0, 10) # 0 10 范围内取值
y = np.sin(x) # 取这些值的正弦值
plt.plot(x, y); # 绘制成一条曲线
+
16.4. SCIPYPYTHON 科学计算 99
如果你使用交互模式运行上述代码,你可以在一个交互式的窗口中移动、缩放、滚动来浏
览数据。
这是 Matplotlib 图像单的子。想创建表的识,查阅 Mat-
plotlib 在线画廊:http://matplotlib.org/gallery.html 和其他在第 17 更多学习资源
列出的资源。
16.4 SciPyPython 科学计算
SciPy 是基 NumPy 个科能的合。初这个库 Fortran
名数值计算库 Python 下的封装,慢慢展壮大。这个库被组成一列子模块,个子
模块实现一些数值算法。下面列出了部分对于数据科学而言重要的模块:
scipy.fftpack快速傅里叶变换Fast Fourier Transforms (FFT)
scipy.integrate数值积分numerical integration
scipy.interpolate数值插值numerical interpolation
scipy.linalg:线性代数方法
scipy.optimize函数数值优化numerical optimization of functions
scipy.sparse稀疏矩阵存储sparse matrix storage)和线性代数
scipy.stats统计分析statistical analysis)方法
比如,我们来看看如何在某些数据之间插值从而绘制出平滑的曲线:
In [16]: from scipy import interpolate
# 选择 0 10 之间的 8 个点
x = np.linspace(0, 10, 8)
y = np.sin(x)
# 创建一个三次插值函数
func = interpolate.interp1d(x, y, kind='cubic')
# 1,000 个点的网格上进行插值运算
x_interp = np.linspace(0, 10, 1000)
+
100 16. 数据科学工具概览
y_interp = func(x_interp)
# 绘制结果
plt.figure() # 新的图片
plt.plot(x, y, 'o')
plt.plot(x_interp, y_interp);
我们看到的是在点之间平滑的插值。
16.5 其他数据科学库
许多其他数据科学包建立在这些工具之上,包括一些通用工具,比如机器学习的库 Scikit-
Learn,图理、分 Scikit-Image,以建模 Statsmodels有其
些更专注领域的库,比如对天学和体物学的 AstroPy,神经影学工 NiPy
还有更多……
无论你遇到什么样的科学、数值或统计问题,都可能有一个 Python 包可以帮助你解决它。
+
17 更多学习资源
Python 旅! 时,
Python 的基本的语法、语义、运算符和功能有一定的了解,并且能掌握一些 Python 的工具
和代码块来帮助你探索更多 Python 的知识。
在全书中我们经尝试向介绍 Python 一些在数科学领域最有用的识,但这并
不意这是面、完 Python 绍。如果要进 Python 语言
如何高效使用 Python,下面是一些我推荐的资源:
Fluent Python
1
者:Luciano Ramalho Python 材,
Python 中的最佳实践以及常见的用法,包括标准库中大多数的用法。
Dive Into Python作者:Mark Pilgrim这是一本免费的在线书籍。介绍了 Python
言的详细用法。
Learn Python the Hard Way
2
作者:Zed Shaw这本书通过“在尝试中学习”的方法,
着重强调了一个程序员可能最重要的一种技能:上 Google 搜索自己不清楚的问题。
Python Essential Reference
3
作者:David Beazley。这本精心写作的 700 页的“怪兽”
包括了几乎所有需要知道 Python 语言知识和它内置的库。如果你需要更专注于具体
应用的知识,你可以看这位作者的另外一本书:Python Cookbook
4
在数据科学和科学计算领域,你可以阅读以下书籍来挖掘更多 Python 的知识:
The Python Data Science Handbook
5
作者:Jake VanderPlas这本书从我们这次旋风
之旅结束的地方开始,为 Python 据科学的技术栈中的基本工具(从数据管理、操作
到机器学习等方面)提供了全面的指南。
Effective Computation in Physics
6
,作者:Katie HuffAnthony Scopatz。这本书适用
于需要进行物理研究的人。这本书逐步介绍了科学计算的内容,还介绍了本书中提到的
许多工具的使用方法。
Python for Data Analysis
7
,作者:Wes McKinney。这本书的作者是 Pandas 库的创始
人。这本书涵盖了 Pandas 库的详尽知识,也提供了许多其他工具的有用知识。
最后,为了更广泛地了解 Python 世界,我推荐如下资源:
1
译者注:中文版《流畅的 Python》已由人民邮电出版社于 2017 5 月出版。
2
注: Zed Shaw Python 3 Learn Python 3 the Hard Way
Learn Python the Hard Way 中文版《“笨办法”学 Python》已由人民邮电出版社于 2014 11 月出版。
3
译者注:中文版《Python 参考手册(第四版)》已由人民邮电出版社于 2016 10 月出版。
4
译者注:中文版《Python Cookbook 中文版(第三版)》已由人民邮电出版社于 2015 5 月出版。
5
译者注:中文版《Python 数据科学手册》已由人民邮电出版社于 2018 1 月出版。
6
译者注:中文版《Python 物理学高效计算》已由人民邮电出版社于 2018 2 月出版。
7
译者注:本书翻译时,该书已经更新 2 ,仍然由 O’Reilly 公司出版。原书 Python for Data Analysis 中文
版《利用 Python 进行数据分析》已由机械工业出版社于 2013 11 月出版。
101
+
102 17. 更多学习资源
O’Reilly Python ResourcesO’Reilly 出版公司提供了许多关于 Python 的优秀书籍,
且提供了许多专门的主题,让你在 Python 世界中遨游。
PyConSciPy PyDataPyConSciPyPyData 大会每年吸引了数以千计的参会
者,并且每年将其大部分节目存档为免费在线视频。这些已经成为一套学习 Python
言、Python 包和库函有关非常料。你索访程的
源:其中访谈通常比较短,涉及到了新的库或者对以前的库的新鲜的观点;而教程可能
长达数小时,涉及到如何使用讨论的这些工具以及其他内容。
+
A 附录:插图代码
本章包含生成本书中出现的插图的代码。
In [1]: %matplotlib inline
import matplotlib.pyplot as plt
In [2]: import os
if not os.path.exists('fig'):
os.makedirs('fig')
A.1 7 章:列表索引
这个插图能帮助你形象地理解 Python 索引的工作方式。
In [3]: L = [2, 3, 5, 7, 11]
fig = plt.figure(figsize=(10, 4))
ax = fig.add_axes([0, 0, 1, 1], xticks=[], yticks=[], frameon=False,
aspect='equal')
for i in range(5):
ax.add_patch(plt.Rectangle([i - 0.5, -0.5], 1, 1, fc='none',
ec='black'))
ax.text(i, -0.05, L[i], size=100,
ha='center', va='center', family='monospace')
for i in range(6):
ax.text(i - 0.5, 0.55, str(i), size=20,
ha='center', va='bottom', family='monospace')
for i in range(5):
ax.text(i - 0.5, -0.58, str(-5 + i), size=20,
ha='center', va='top', family='monospace')
ax.axis([-0.7, 4.7, -0.7, 0.7]);
fig.savefig('fig/list-indexing.png');
103
+
104 A. 附录:插图代码
+
中英文术语对照表
聚集 aggregate 97
argument 12, 13, 44, 45, 47–50, 57, 71,
83, 87
算术运算符 arithmetic operator 20–22, 86
赋值运算符 assignment operator 10, 21, 22
属性 attribute 17, 18, 30
二元算术运算符 binary arithmetic operator 19
二元运算符 binary operator 12, 21
二进制表示 binary representation 20
位运算 bitwise logical operation 20
位运算符 bitwise operator 20–23
代码块 block 6, 11, 12, 43, 47, 55, 101
布尔代数 boolean algebra 23
布尔运算符 boolean operator 23
笛卡尔积 Cartesian Product 66
比较运算符 comparison operator 22, 32
编译 compile 7, 88
编译型 compiled 5
复数 complex number 18, 30, 79
复合对象 compound object 17, 24, 48
复合类型 compound type 27, 35, 36, 38
条件语句 conditional statement 11, 23, 43
构造函数 constructor 28
控制流 control flow 43
控制流语句 control flow statement 1, 11, 23
数据帧 data frame 1, 21, 97
默认值 default value 31, 37, 42, 48
字典推导 dict comprehension 69
字典 dictionary 40–42, 49
动态类型 dynamically typed 15, 16, 36
特征值分解 eigenvalue decomposition 96
转义 escape 91, 93
异常 exception 54–57, 59, 84
异常处理 exception handling 53, 59, 60
异或 exclusive or 21, 23
指数表示法 exponential notation 28
Fast Fourier Transforms
(FFT) 99
斐波那契数列 Fibonacci numbers 45, 47
一等函数 first-order function 50
固定精度 fixed-precision 27, 29
floating-point number 18, 20, 28, 29,
39, 87
向下整除 floor division 19, 20, 28
格式化字符串 format string 81, 87
全排列 full permutation 66
function 1, 12, 13, 18, 30–32, 39, 47–51,
55, 57, 59, 62–66, 74, 78, 81–86, 88,
89, 97, 102
函数式编程 functional programming 65, 79
生成器 generator 71–75, 79
生成器表达式 generator expression 69–75
生成器函数 generator function 71, 74, 75
分组 group 1, 93, 94, 98
哈希表 hash table 40
身份运算符 identity operator 24
虚部 imaginary part 18, 30
不可变 immutable 16, 39
缩进 indentation 11
index 36–38, 40, 63, 64, 68, 79, 84, 87,
103
整数 integer 18, 20, 23, 27, 28, 38, 56, 68
解释型 interpreted 5, 7
解释器 interpreter 2, 3, 5, 6, 10, 61
105
+
106 中英文术语对照表
迭代器 iterator 44, 61, 63–66, 71, 79
迭代器接口 iterator interface 61, 62
键值对 key-value pair 40
关键字形式参数 keyword argument 47
library 2, 7, 20, 63, 77, 79, 97–102
线性代数 linear algebra 20, 95, 96, 99
list 12, 16, 17, 21, 25, 35–41, 48–50, 54,
61–64, 66–68, 71–75, 85, 88, 94–96
列表推导 list comprehension 67–71, 74, 95
循环语句 loop statement 11, 23, 43, 67, 68
矩阵乘法 matrix product 20, 96
成员运算符 membership operator 24
元数据 metadata 17
方法 method 1, 17, 18, 30, 35–41, 95, 99
可变 mutable 16, 21, 35
命名 name 94
命名空间 namespace 77, 78
数值积分 numerical integration 1, 99
数值插值 numerical interpolation 1, 99
函数数值优化 numerical optimization of func-
tions 99
对象 object 1, 15–19, 21–24, 27, 36, 39, 41, 44,
48, 50, 61–64, 66, 67, 70, 79, 86, 97
对象相等 object equality 24
对象身份 object identity 24
面向对象 object-oriented 17
运算符 operator 12, 19–23, 28, 41, 101
package 1, 2, 38, 77, 79, 95, 98, 100, 102
模式匹配
pattern matching 88
指针 pointer 15–17, 24
原始字符串 raw string 91
实部 real part 18, 30
引用 reference 15
正则表达式 regular expression 81, 85, 88–94
表示 representation 28–30, 86, 96
运行时错误 runtime error 53
自包含脚本 self-contained script 5, 7
语义错误 semantic error 53
语义 semantics 1, 9, 15, 101
集合 set 41, 66, 69, 92
集合推导 set comprehension 69
Sieve of Eratosthenes 46, 72,
74, 75
简单类型 simple type 16, 17, 27
切片 slice 36–38, 40, 44
稀疏矩阵存储 sparse matrix storage 99
静态类型 statically typed 16, 28, 36
统计分析 statistical analysis 99
字符串内插 string interpolation 87
对等差分 symmetric difference 41
syntax 1, 2, 9–11, 13, 15, 19, 36–38, 44,
46, 49–51, 53, 58, 61, 63, 64, 67, 69,
75, 87–90, 92, 94, 95, 101
语法错误 syntax error 53
表格 table 94
终端 terminal 5
三元运算符 ternary operator 68
转置矩阵 transpose matrix 96
真除 true division 19, 20
元组 tuple 38–42, 48, 85
补码 two’s complement 23
类型转换 type conversion 32
一元运算符 unary operator 12, 19
variable 5, 10, 12, 15–17, 19, 21, 24, 27,
32, 36, 44, 49, 53, 67
可变精度 variable-precision 27
通配符 wildcard 88, 92
+
同济大学苹果开发俱乐部介绍
2003 9 24 日, Apple
部, Apple 识, macOSiOS
watchOStvOS 等平台的软件开发。
自俱乐部成立以来,软件学院、Apple 公司和广大学生通力合作,积极努力。在俱乐部中,
学生任何创造性的想法都会被珍视、鼓励、去芜存菁并在指导下实施,俱乐部成为了来自不同
院系学生发挥创造力的舞台。在十四年的发展中,经过几任指导教师和广大同学的奋斗,俱乐
部取得了丰硕的成果,极大地促进了学生的实践与创新能力。
国内《苹基础程》版,
该教材完全由俱乐部的学生编写。
国内第一门苹果软件开发类课程《Apple 平台软件开发》在同济大学开设。
国内第一个学生开发的开源,且受到苹果总部高层赞赏的免费软件。
国内第一批赴美国参加苹果全球开发者大会(WWDC)的学生开发者。
国内第一个获得苹果平台学生开发竞赛所有重要奖项的俱乐部。
国内一个开发受邀果全发者会(WWDC门环做技
和展示。
国内第一个冲击苹果年度全球软件设计最高荣誉——苹果设计大奖的学生作品。
Apple 6 果中学生中,同苹果共计
5 金奖,1 奖,16 奖,7 的好绩,该项“五连冠”
录。 2016 “中国校计算机-移动用创新赛”中,俱乐的学生再获得等奖。
2005 年开始,同济大学苹果俱乐部每年均有十余名师生受邀前往参加在 San Francisco 举办
WWDCWorld Wide Development Conference)活动,成为第一批参与该活动的中国开发
者。在 2005 WWDC 上,Steve Jobs 特别在演欢迎自中的俱开发者,
大学苹果乐部的师也成 WWDC 上来自中国的道靓丽的景线。 2009 年开始,苹
部的学生进入 App Store 行销售。俱完成 Animal Kingdom
为苹国官广的作品,到了户的评。目果俱经有 60 余个
品在 App Store 行销售,累计次数 5,000,000 次,下用户布中国、美国、
大、英国、法国、日本等多个国家和地区,作品受到了中国、日本、美国多家风险投资和代理
注。苹果乐部学生获得了用单位一致评,俱乐部历届业生 Apple
FacebookIBMMicrosoftGoogleAutodeskSAPKodakEAGameloft 等多家企业在
美国、中国从事苹果及其相关产品开发,并有多名学生自主创业。
107
+
108 同济大学苹果开发俱乐部介绍
十多年来,同济大学苹果俱乐部获得了“苹果杰出贡献奖”“苹果先驱俱乐部奖”“苹果优秀
俱乐部奖”“苹果杰出实验室奖”等荣誉;指导教师先后获得了“苹果杰出教育专家ADE“苹
果杰出教师奖”等奖项。
广道, CCTV网、网、易、CSDN
Tencent 等多个媒体的采访,同时也接受了包括《第一财经周刊》《解放日报》等在内的多个平
面媒体的采访,登上 2 期《第一财经周刊》封面故事。同时作为高校与跨 IT 企业的
合作案例,入选教育部组织编写的《中国高校与大型企业合作经典案例集》全国政协副主席董
华、钢、部副迪、苹高级 Philip W. Schiller
Ron Okamoto 法国参众议员访华代表团、众多国内外大学校长教授等均参观和指导过同济大
学苹果俱乐部。
同济大学苹果俱乐部在十多年的建设过程中,始终坚持以学生为本,以创新为本,坚持以
工程实际需求为导向,和国内外相关企业积极合作,鼓励学生自主创新,以专业教师进行指导,
为学生创造良好的软硬件环境,为学生的成长、成才提供有力的保障,体现了同济大学软件学
院创新人才培养和前沿化、工程化、国际化,理论基础和实践技能协调发展的培养理念。
diff --git a/Book/Index.outline b/Book/Index.outline index e01699d..40c9897 100644 --- a/Book/Index.outline +++ b/Book/Index.outline @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/Book/bg13.png b/Book/bg13.png index ede30e72011a434718dfd34f9999764e7dbd49dc..6d1fbb58ec7e693ce791ade8e1df7f2198d3fb01 100644 GIT binary patch literal 4816 zcmeAS@N?(olHy`uVBq!ia0y~yU~Xq%V41+d1Qa>&duKzbe>ec6e)6ufz(jH9(*tIP1zwB{4pW&%=@A+Z4O*<=_$QSH79D$h zC+8TmFfgQh-m3b*$gpEMFbD&dGJuoPC_T8t0T_MruH=R>Fg%#XF3-Ra3M>vl<@YE( zGQ(lC-X8q*Hm%!ND}e1oP&ycjGy_9Jyy;0ZX9k9XX-n1uOSFdS(c*0A6z9Nd$n$O* zD+5DbC9oke+IAS+Z3kM%54qhDV4LRNGS6+2ObiX1RdQ{A0DCyWz~(5ZJOep-lpdMk p0P5k=I?0ZjPrV`wn2rBG<#zoc$GA%Hf+vv2;OXk;vd$@?2>@i%!utRK literal 4829 zcmeAS@N?(olHy`uVBq!ia0y~yU~Xq%V429l1Qg+3UUw2maTa()7Beu2se&-0XOPMV z1_q&iPZ!6Kid%1Q9^`dm6mW9f@PFRN9Oin{b5jnyR8?VMC|K*cO_GVBVY5nZd>8}6 zgE?BP3=UI)0;BYx4+mhJR|IX3WMpWFmaAc42+?FPeJLG0ulV-^O6bkAE=9~c>SEZ@AA zMVk?*jbY!)%}2S8F^U4!{5Lsi=FGrQFm1_Nc6o+|>Qy3>Wtr_JYcm@Vfkif7=K8}p z`92rNyK^Kr+HCdZQcpaG-QDpW=F7RRmxv|b4&5d50 jEaktaqI0(!!9NU5$A&`@9Ur6h{{p!h);aRu~JTjk)a{mchgw`28KDRnZMIn z85qv31ezYA$-uB;kkbqd2lQW>X)`bsoNnf4XwU+>J(O#d9--mDuu23R|0L543?Fi5 zrOZ}jV6gDMbPbr24%m(+Bcihru-y6JcQ*}~_wp(~Ffs%zWnfs~HA)Y)Z~#W5-CECW zl1vN@n^kgce=soI2?j7(t|q1H~Nm3u*L8Bo7vDAK^XbikhdrF;f>=g z3=C_!*IO|#T>BZ$#n7O|%D@mhcf*4m}F9Tkewl6{%Ct+$h5bB(f4Die$`B! UJ1rUo+&~_Kr>mdKI;Vst0Em%3>(g|$}=#8 z0>f&R$S6Hh!y!Zy691z#;czJbWWYGbGl}KFqP2n#dg_-lFudtrZv`v}eui^_vp*;| zfr^1qdYFX+1H+HFnKQSwF)$?PdJ2ozFfe>u39MW|nP$Z(Jz~Ql09XWo;-45A*z#C^ z=^C)MeN%Lho#qV&plv^5)0VAOWMGK!zH|gw(>K(PR`a9H98#)z28IKxw`>JAba%&m zU<9Y}1zw{xD6dm99Dq6XpVw$k9qovqb;L-?si2a5Ak_m)3Tyh+ZG*kDO-uIyON%?< kqou`=EiD)r9!#G1afZ?5o848Oz{q6qboFyt=akR{0M3g$LjV8( diff --git a/Book/bg20.png b/Book/bg20.png index 84bea19c987322055b83c70f6860135b561f0c15..e707323a9c9c28a8e7df8bf578edfb54d2d6f12b 100644 GIT binary patch literal 1075 zcmeAS@N?(olHy`uVBq!ia0y~yU~UJpKXNbu$?r0u4M2*sz$3Dlfk8|agc&`9R6YPz zJ@s^P45_&F_L?Chg8|Rs4JCgpmm5_1G(9-Y$-odZTP3%Zf#E@pXZk##(Q}HIGBE4_ unq4qTkJxZ{;Kc}z|518qgaa_+*GF#AW4Slw;-vLJ4uhwwpUXO@geCy=d?sQ5 literal 1107 zcmeAS@N?(olHy`uVBq!ia0y~yU~UJpzi}`D$ybu87C?%#z$3Dlfk8|agc&`9R6Z~; zu&{c%IEGZ*dV6yt?*Rq@Cc_i|tS56`dL~`XvTCvi1H*%;$vMU>3=HX>x9q}z+&NmT z3=UJ77#c?DK_3plDE|?>J(7{3AzH46fgwbbfnfzOVNjc9U}(_y-E>xffnknn=Iev( o3=igwCXPX$IAEC=lt?afe=X#?-FVdQ&MBb@0LUKVf&c&j diff --git a/Book/bg27.png b/Book/bg27.png index e519b3471b94345f6c2409d11e15e769d85f087c..a5ade581bfd8901e33317ab2b2f0d61f0bdc237d 100644 GIT binary patch literal 5644 zcmeAS@N?(olHy`uVBq!ia0y~yU~Xq%V2$Ts0*bU5aqR?BoCO|{#S9E$svykh8Km-o zfkAYir;B4q#jUqDH}Wzw3NSeq{I`94hxJF?ubDy}VM>e)4cWe%&I&Lv%u&t!y%A{G z^AJr2hE*aA45ReO4TlxL^aYClQF>^E0|Uc>-6gX{85njvJ;=`BFqMg+L5p>i9--mD z5XuFP|51A6h6A_?2c`qEXa4PRU?~H`f>C+S7PJ6JrdZ>h?c7v8f~eO(B@@eXsFMal-mX@=yg1!`Ry1OzK?eI zhE{hE7apt0xw1ehp9}X^Z3j;&C=dG#_j0`)L1DyhD(u1OAlpfsS z0F1tWD{rr1U^t-5Z%1B!M9-h2{Gl6;z;v)z?PeMWaDZmgmao9#wZMP0Y#mZ{3ot|9 sTRJcq8dx#k9Btzd)nO4}!ujAIU;9;c+RE0n^FSVhr>mdKI;Vst0M7C4$p8QV diff --git a/Book/bg28.png b/Book/bg28.png index 06af93dc2f8adc8551f5bc46e70526cc627c1290..6ec91b7503305dc1833bf11361c6c3b25eca9bc8 100644 GIT binary patch literal 3958 zcmeAS@N?(olHy`uVBq!ia0y~yU~UKET^vk6k;U0tHvuWm0*}aI1_m)z5N7lYQu)BZ zz^~!y;uunK>+Q{hyhj)Wm<)IPt5%D>3=HX>xBjhRU^rkI z%Ei#2#mc}iN)P&Q07m%-|GR0x$jYnyz{n7=l!0M^*C%=i^bD{BQtfiamkwYN85Q z)a+P3TF#94@)ne(K=sWiJv71rn2q->y$x#Q>GIn#Fsu@R)N7+O`QZR;Kljc`nXSmc zVBvk~S~EYx0o&1b^Pq1x)4G2H&RW29FiHc9n4u63z%aSW-r_4ejQUS>uCCdY#RwvV~y{PTQ2Q>Y_MiIJfp+jrAh0S1OSs+qqx0u6f} zqRGIpN`!%7lpg%yz`$@|@~*SML~-ZS17?N=UW^P5Q<+9-3c>-Hjqa`R+$PDy(6Cu0 z*Y*c6XoHtBFsuM(xPVc5NQ46eL&N_|xnT?p52mrpGcbe#vj?a=8>Pt)2L^@@Zt!a2 z^+9%q2lKR8!DUUuC_U)I0a&J01Z|H5*7ebHHIRxORGxt20}Wws&%gN65{ zYt8%&2W)|P4wOJZd2f^++~ELBBp;UKZ3eagx7z?~z0nGf@(LfAA{L|9C61Ff1GcfG9rgEEyk>Nn(q;2}z z3=9Q+Q<)eRcrh|KjM9TX9DuR@XIb86U?SLV^Miq51u$I%EFGmO4F_Pb`e#haZDU|~ zpyL_MZ^yv!Jw%g%VU-92!zev8!T}g{^)Jmp<=N?Geuf4uRtAPpu2GtjaA08g;pV&P ztN;VU9M#O%2iX}O%mW$+swP0eJ4%nta2U;2qs0oiW&{?mLy8905XN`Yfb~LN5&%>qrIKcUf*alhWgDoU{|WbZE}t=3j;&C=dCJWNxNhD5GiJXPOtae z9?8hi5G_{&>G^>=mY^QsC{2DiFfcTzo18Rr26oM+Em_Mh&(Kf}>R1o8=EJCasoUHm gWnhJY;eda>`!7|w4J*}`0JABBr>mdKI;Vst0O{2Oc>n+a delta 290 zcmZ3kwLxowrST(A7srr_TW@b}%w=H|adIs9Z~M4JxV=0+?(7tYFDgO|3_Gr=+~#3q zI1o8$n|&Aq!-F}S=d-P5WMN=n__0}<$)AyxfuX@XYjZL4E=FDkh6CoMvqgcLo*rc1 zypYWmB+IZTaPmHZZJTqsV;CnE>i`uo*uWJ{UdR>+QuD(bw;G^9KN&Yq;yB1Oc{SGz zpy>~UXQj+mWMHuHzI3gbpW%RQDA!~=)@4AGfB5e@%f-NO=hFk`jd`w&B0!Vxt?=9? z$;8mGStZx@2T&?_vo@16<77Lg1Cvv^b)gTe~DWM4f DF7slL diff --git a/Book/bg2e.png b/Book/bg2e.png index 38015e97aa7e4633635935d86453d7e494911e04..7fc587e7e9ab218896ac9013e9dc76833b553ed1 100644 GIT binary patch delta 188 zcmdn1y+M0|IF}a(69WUoRn3_bCn`!vCV9FzhE&{odvhZ%Got{LW5Ivh$6Ry%dA{Em zbcUH@MG#OaLqqyzNuhU)B0%P!&1yH(I2ahtP1^GH0W(8^|7Hb_?aY()xdJ9Di^NRU z7YV?EB{s+K?PQ)<7qB^xX#?ZrIwlboprOx!hNdwAm2 literal 5565 zcmeAS@N?(olHy`uVBq!ia0y~yU~Xq%VD;u;0*c6$dYJ$z&H|6fVg?2=RS;(M3{v^P zz#y9M>EaktaqI2Pjl9f^0!)qt|7{<0*?sl=H&du1Oo@@9A=`J;Spf!yIjWhzHv$cN z9-_&>uu6o1VU!-Z;jjXjzCiImN)L^2U|=|~yJWT~1H+D|2iX}MrZO=!Xt9pc!!R6x z#r&S|$vMU>3=HX>x2ircGVECH#mEq_l!0NvC_Q4s0hHxI@jptB+;A8z@`qlP2Q1Ei ztj*gDY($81RF~v pW-JMmPDa&1#@-kh9_+VayzDGLKW?{}0x(lCc)I$ztaD0e0sz%yg{lAm delta 296 zcmeCxnWi(r(&U7vi(^Q|t+zKfb~-Z(I6J=l^**wX&(6YB=Z3MWM%4lq28MN}C(WE0 z7z(B>c{^W}fx%+==3W7Lrpb3X1$Y@47;H*s0|j?HJ;=WK05>Dk-;vH_cq3H@c9SkEyzpGgL!XFpJn6SEXhPtA03t9sRGHt8N+ PKpumqtDnm{r-UW|lLcu= diff --git a/Book/bg36.png b/Book/bg36.png index bb0569fba620a917403c79f5f922515477690227..f93e77d2505e4a8748adebeeb2e5945af95fc5cd 100644 GIT binary patch literal 3407 zcmeAS@N?(olHy`uVBq!ia0y~yU~UIuBMv5@NMMIDJCNcm@Q5sCU=ULUVMfm&l@CD0 zjGiuzAr-gY-rUH`%qYO*Sn%KWGjGkC$!}%~b%ZG~GBjlSZaOQ#z%WNO^Y=!eVb4P} z85mZHFffeLgFhS?7!H`1&K6~0*zxorJA=biCWZzr)=_$dh66(=7dZZ@K?94E56e8a zNdi;UW|dsq9}En4f|oKdtN<1~0i*PY4Tl9@jNtemrH4j10JHJ`rMK4r>j_ L^>bP0l+XkKu%n-M literal 3421 zcmeAS@N?(olHy`uVBq!ia0y~yU~UIuV-6;u$gC?L76B>F0*}aI1_m)z5N7lYQuzQ> z%>7#SRG_Ma|4zMsVtTR1n=FGrQFm1`(WL5@- zb1Q*HhiEb|tQe(7Y&Zlgg~b0TJ#xcgffpkKDE>$3p%o6mdLaICZWsf@gK6yY3=E;b z8e^5nC_Pfc0aTTP;(xf%z;ta7Z?UWertpU9(d0dvy@yNk9`y(L#not!h4h{q14Bc3 z>1 m&7Gs&*P+#o2WI2{PkG%Y$*q37VX`TZ$KdJe=d#Wzp$PyzaoK4A diff --git a/Book/bg61.png b/Book/bg61.png index 2ef83cad5c306c8e43fbeb9a4acd168a6dbf5a3d..28734c2bdc22bd35a9ebf745a0b713ff3dd916bf 100644 GIT binary patch delta 350 zcmZ3aGfiiLrO^pb7srr_TW@b3ox9;L(6$85RbH1NxgK8CNkf%5Od;Y{xYDgQx@+%nMZbLw9pG zt0t4s9+Q)1&I}9%)0V7dmuG0GUL`X5BFnbP_gPi|u@5f;!-L7Y&T=s@-1+o?d2<0j zBh%zcK?N}e28Nn`wVP=iKxa(a^7R2TLxKNPCZPOEMxe_WYJw)m@pvIQ4dz6AG{?l! z1ruv$fRV}Og{)r~C$D7{m|V*5Ap$gVU*O~%W1zd!J#STgU}V^_eDf^U-yjtnKovSt dKoxtcnQSstr@b@?$pG>gJYD@<);T3K0RYB_dgTBB literal 5666 zcmeAS@N?(olHy`uVBq!ia0y~yU~Xq%V2$Ts0*bU5aqR?BoCO|{#S9E$svykh8Km-o zfkE_&r;B4q#jUqD4YQmX1)Lo6x*PB-&2G-$ChFobfA(t|M^7#M!o!&BKcU~C<* z9gV6HpHvxEiGZ{0kf9kEKIq&{1C}#+l^+LacQ5sZFjKpwon92n9H#QnrAJ=40 z%57s{c%b7M&2PuR@I6G60i4iB>A@ck3=9XXOJ|ERFzk4GkevY(!Jy{FC_OU6fnc)| z*u0VP-E>v}*mzdWd<{%759SS#C9~4;=x2%TB^j5QhK5#pps7?o3=v;>JtbwAh8Z z#3%^?Bn1rHq6HeT#}pF68~8BBjZfkm_$0=k(-Vx*jcq#fotZgvO952y3WfZ++pxlp z+P7RlNja8_I8o1*OQ@)K%VqMXAVIDHcX&+*xck=5kAdOMbtT zIhz!DgpYu>z;4&aIg{#iaig h?myps-l@mxLT8-K6K;n!y+Hn#`3q+jcxsb35?y&S^?m>V delta 491 zcmVJEJq(Nt91Kh#Q2-Qd3M{jK4;=x2&rZTX5XQenFnW-KHxmz&ctK5@7C5L! z2#^p_Q^0U7SfByBrjQWcz=ttjd=lTlCoz6(HyEQA+jQo)GqdwA1yIB*6td@j%L@DI z$Z`&ORIM^U|7E|5Ph@1mGHXQayS^YmhFZCK$@6)fklr%o*Ipr^`~^Eg(2 zZ56ina&K;l*jVG*;BE|$$EFmbv<6D8lH{(lMhl~=`;8L~`VuTs*uCSnvX$z6y z!T4NsOw^6>XOWwT63>ar6tPl>ImSF`BYU(BsQc)mfq+ubqQ0f&j;B**L|s3v(|9sn zO4;)&jzf7V!?o00X@{ekUM*&^gvo<{wB3#?H+n^5EG3=DFq($*vFNe%qJi|gji4*7 z;I@C)J!Rf&HXN{#M>B-ap>f>_^kbO##2P(wj)t0^Q#Q>MOQTcnEHWE&xh26Bzu(E6 zZHg?yH@mIc?fST2Qk^WDI-NvPc0IY0ZFy%?lm@@zR5`DI@mIIs1@QCY=KqTx*yV!z h&vu`6>an`e8KsMu+hI+wD*wy;1!co{XaJKp5?$I`?>Ybg diff --git a/Book/f10.woff b/Book/f10.woff index 490a1cbe1391b7d167c0b7dab4e79aa74c8ee64c..7be18ce4b5aee72ba651d922a235d6ea71ac23c3 100644 GIT binary patch delta 526 zcmV+p0`dKzFPtw7cTYw}00961000-9kqoH=Sp0;MxLXmc00090+Q{$~aBp*T000*t zvm^oA5+}#0jr#HYHeVUInO}hT*S^PGgVWsqjhG#o4g$Fx3``(V09o`5XtO31QUQO# zPUAofeG}RWq+P^qFC2UXi9~71N|eJMK!8+HKq+1II)!N)wauWksOnenBZx2HTlfWj zf!E2vq1;Fm``Lc>*q#8`#tRh6=l>U0*i?T!4p38(#~V0MPaapWquxBOVmtWlaSc1c zKQdKii`KKtT46p89|5aRs7YJ+5L`y?b1P1iLte#RHZokYR`s<`6Ux z^F2h!x5Q0)`(z1D5K*?EafdN;7no6J^l9X{cd-a<$GURylDT5+(av2Z!;>^77|^m# z-qP2j?xKS;q?CdS>T7y#XzjBiPVK|8$cCf2G~)O$3@Mw^U&=`&Eqyn(i`joT6P@2n zD{4n_Wfyd2vS)MYn~|Oj#17=v^rYK4OFMFrUUzRg`>cD(hEp~&bwf1iXs33nbE4G@ zg$qn**kY=w&)pz%rwgvlxTQs0l;D`(dcBaAA@7kzG&4$89SI|eUveEsENt`nxh;l9 z8c{6A^4Uk2n&IO_7j)H=FySiT^`q}?uOEZ;^wsZZ7?|-o%Bv{5j@gAUXo^|JW%2Ad Qk)PE6075l@LX#sGef~WCo&W#< delta 530 zcmV+t0`2{rFQ6|BcTYw}00961000-DkqoH=R;A35xLXme00090*~jn|aBp*T000*x zvm^oA5+~<5dh_G?ZN4&aGrs`wuYEJDg45jpjhG#o4g$Fx3``(V07p#=ezPVNQUQO> zP9i}N{(1!BCa&?e7Y}vBWM?w`Y$6`^pb--yY6dV|8*E?#Oq&5icnV*{>=W#>>?`am z_|emPU~fBwf zI0=4|sY+jHy}7I%R^*pG4sfKz;{$&T)enzL5cS*RGEUWBk1LSi6j!i##uhnJOfkb6 zf;wWp4TO9P+@g0xmf#W*Wd|B#%$d8viaMoFBg2!6Md&)#or@RD9ivJ+bCnEF(pX?Z z%R1SoZ%92r57$U21vk|9^gPfyV?|uq=WU)&XKSg)aU%>VTQb_pWh5Ovp4)%TYMzSD zo}?3XBe}C1I#a3IOh#s=7Zb4)>6@Vpde=!$Zj$@KL+^}rZ`p9dMwV`f79HKhE_Ft< zn<00B1r3`oHFet!vUWP>+KgLT#6<}%`0dvVX&LffSVS|UVAb4;n|{ePoU^da)@_?l zjnt!9F65(+Ffr4Yh0f`!HNq|?2d|y~+xGr3*iYa6j)s91ucNq%qU)Gl2!keHrCb)z Uj+^p7_1^(N$bdiq0FxgVeZB1TWdHyG diff --git a/Book/f11.woff b/Book/f11.woff index e8dea1dd75cf7f35b1f728c697991de1d65c7fb4..c530a8e2b307fb8ee3e89e9dab020d3eb6e8f2c4 100644 GIT binary patch delta 497 zcmVasEL4S19-#CXJ*xid_u zQ*tpfJQ<&d$V6Qme;K)m*r%PDN(no~m|#Fl8+k|Wfx3q-F3_PATv6YUxutc$ifHQR zd7chOh17lj$aN{tq(7I2C$0E#tY_14DslECEq^ca2rn0Xy=_jLjG7vqGyW~N7 z-HT3Ft~xip+wKADwmEQQhSS6a0v;LdDAJj37XfjDjtNhPhMrJfn%KhVoNG(W(mZAf z&iVaS&;2e^#smn-g?7aOPFYrG#ih=NiPSw`&gEwUchQ$j5V|2x9i09>^G^@_%3b`3 n2_9#i@*>JhDChM#fzX-c)0AssUq6(87ykl$zIuxQlkyX0xBl^} delta 497 zcmVtE zaT)vS-GAZ=_SC1vE7*5-(1gYm3uH(z#0WVARrq{saQPPaoZdcJf(AUw79u=h%-lI< z)CqkNQaqcOhtRNYOuS$&8Hcn}Qz>Sr2onrwX(R9Hd!+86i%WDU1=rNK^xV-pVnsCd zbde>)Q7%>AuemPex%3y(@T3(zjrDvsP9#d7rGMpxp4{j;orxUkRQmBKnhZn_bc)V3Qk}aT(>I@aK^Ga&98JejHT-Nav?txxXZru1U0wLQwL{%&-~K^zjBv9 nVjj#{XS|5w5{h|!P9O}%*(~9j*w?Sizl(nXdtQ2plkyX0)h+B; diff --git a/Book/f12.woff b/Book/f12.woff index db587d5228cc69db6c476f66644c83e70e8e2206..84809c6cbb0893b8af6b92b0e81329ba76dd8b08 100644 GIT binary patch delta 489 zcmV8lPWOfhbMxxly_Or+K1i&udp-?@K|FOcR`r&bahKfAiz>)gp zaSeOwug7)l20I=%uowI!Q`NR;{dQR^tjMo>9AI0C#~bLY6OU^U^~d8nfA-af#|=oZ zk4sp*Vu=ztMi^rbK@&0GV}yJwd`9npEWrgL$`&-9Fk$WjGwPf^jRMau79n%2wu@KH z72|+*;VK!Pq%p;imUZ%hzCLviU0k6iq9C=aGDz3x?~D>t3H-hKCwb#K{l z=9;reI4*9p%oa8wTFp@6#dV9eEnhVCwd2m6F1a@2mKHHnaL#YNUdTZVd2cMDnNhJ4 zq>Q9~$q7zb*cS6^TaJu0qgc-6Umsz|jNYcYq$^3ol!GUyU)x?kBL?f~tKZQuFynPp fS5b8xvkPI+l(U@6;@NR3->Lrz4FY~*lfVQZLDTFp delta 489 zcmV2>OQq=1drft-c zL1|Idui!@zU%V`H5GZhh2QGg z;|liFyT?`R20uNnVK4YgrmFm)_2RPDSdm}#IKYk)kGC*Te>|>0)SJguf9$Idk86-% zAE&T*#0mv6j4{Cif;wWp4TOA4d`$0XIdw*#Mvi+Ii;y~2$HhzL znsGooca;oJ(wJdH%Q|^O-+;Q09?sCE6kJeW(Q{4fkQH%iA6G>-o-Cvu$Bi(gJeJ`~ zT9LH%-PA7U(@b=JFYPFef23oVbY^m3a~Yb6o{hwglq3>xNgz0#e=3kcie^31=nWW(jsOGPWWxs3pt1(?}zewyimuA~t*Ie2pPZ`+&4BVaRq{W}^4=Dd#b fD$1^7b|DO!VxDnXJUed6|J45k3zdFglfVQZ2;b|l diff --git a/Book/f13.woff b/Book/f13.woff index e5d565077f1a48d2e94f658f944eb2b77e79317c..23c9b9309e8057031051eca2c40cf04ae7f1e9f1 100644 GIT binary patch delta 524 zcmV+n0`vW(AE+M;cTYw}00961000lDkqoH=8~kIDxLXma0008hb(GUm3WWUx4`6zQF`{G~_n2%f`7Pv0miqL#ih5A-xQ4BuMW(9! zrSWn^(98WG5A$6>diM(X2iLDSr*x7JeOu1x5AL}L!rjGI`*DG5&b|4bIL2Se5?Q)u!_P6G)eiJxx+$4qPU`K2vJMw(G9 zr{aqUyJqw{)df9`BuvGga7 delta 520 zcmV+j0{8u>AEX})cTYw}00961000l9kqoH=8KtX{xLXmY0008v3dM8(ixt+@j>iEi>d50Y9H}>tOW0Ch9+y!KN*-6R6*S0Hr42^! zZr2hkR8`sI0Gn#h<2Br?y2mB#f2&WA%h*-l9#^m*Y~vgjFIXT)iXldrK~P7`w}Fsv zflrw2lO;GqMB9SKBgWi2$CN&0P9wvUTZ@o5R@2NfYdK@>xkoH9S3ptCVr60$3J{_l`f3qiPMM)%W zJ7+SL1Di?TjPzt6b|81=L3-VbPFJovH@(~LA?sdKaN@*SwuqO_w)EZ%vE!U1$CIzpaft9_>ztAv0nAe5C8yWSq#Oq%NJ1rf3%el^i(btnqv^MWe2wcjvx{d#Q`M*adm=|SP5R_ zSc>uy{gbNqehQz!U-WssAQet{<(W6LZ)V?)4PXaL_h!#SWLSN( zUolHYlW}G`B|Is{5>rOn*c;~V=tmgh0s~q>hyIG0Yeom`h;#k8$^m?^OCC=`pf9pk_^!1v_RGK=IaWapWQ_)koN$zAcyci6nGq@UE4-eS4 zN5PR1rxEbF=tYsvbU;+zA;*JJi@weuV*0k>7RKisTVjUhu~Kl#_iaBHmt>bMQVyfy z1PGZA?T7;$v#rjGw$5jXv^-x<iS;Wh9!b}jlA#WWVzt{Z#BN=#8TmFa%wXV2Z feS}J{PX)rwBwwW*6VLTS`Ec`p*xP$ele`*$KIQAX delta 489 zcmV{+E<%bYv*#f+te)8~ znFXW4I5nMOo)lq;DI;y{19Ok`Lkw_*KCR$}{*IY@Mn~+3OZ~FRlG!|$rti00m-bA? z8@ceL8%-8^y;>v^rBBlJe?m`sdd*}a4V}t3o=3~6=&3x!k1`xw^#^j(zZ>2Uj@b8> zf49`X_dOCZK=&uboH$LOoVly<4m4b7=pZmG!kX^J$IE<1L zm;tx#hy$Fmtxof6oy}rtdcK^?9~EvVkCw@VnV{vidF$ZxU(FxSBfzKH;zx|Bb;aHC fBb0i5DiChQ*(%|fc&^`;|8D*c*L!GQ9(GIT)Bgq5x*o4J(sI2BiWyhO_Mka{)y1fA>HMu1G;;OKLVUiM7m6 z`e>8sXgZqcl%m48zA*cZO9CbKZX)J5hR|7=Vbnce}p91Kh#Q2+48fBJ1BC*LA+wGHbpb@w{p~BoxTOfqt!Z0J5-C}F zi-dSSolg@L-{OrBP6@ylXSSoM#=Wh5^=nsMQC*mz+pcVCQR+HUDv|%|`~@#Of`0&$ GM+GS!wL_Nx delta 152 zcmV;J0B8U33h)Y$wF4BT&yl!W2h#um0|w%Avl;=#0VvDL8NcHBZN4&aGrs`wuYEJD zhSR|eoJ`voUo$Wa*ZkX8ig8O3np@MhmLyWL z^cD&6e0n`iRD6p!LO3M=U!2*FrW*IQ_SNUEx}v%;LAPDm)S}cpQYw-E>-+^SMS^{k GM+GTN0z)GJ diff --git a/Book/f17.woff b/Book/f17.woff index 49a6c20e8e2f3c411e3bb23a292afe240817b525..7dcbc87e4650b596f96b42c0671b6b72b644917f 100644 GIT binary patch delta 427 zcmV;c0aX6@4fG8RcTYw}00961000K`kqoH=9{m@QxLXm-0008+vpmdaaBp*T000Ke zvm^mQ11W$2#kH^E`E9;3a5KLEaj$)kxeli_|G#E@$utwlovZghx)x5Fje6#1x6WKHRn$eSEzI8nedoD0*;pyB7nO~x% zt;xK@9sAp^9cwMKU_*}9^?l}d%gBnkmDBs^sx{G)S~i%G2g~|!YKmQMWRMLdp3iSa zl0?y59!lL5Sz5_DHMuTRLuW5fbyjF|lEH0m%waK^bX^ywWgFJb?ru1et}wZiJ_bxe z-QT`V%s8y96$NWa!blcQ98EkOPsd3V&+wN5_6qpq1hy1XyO*?YeC;|$WECdprY-79 VqUbt|qD1~@_zl!Nf4P&;1}NUA#L@r& delta 431 zcmV;g0Z{(*4fqWVcTYw}00961000K~kqoH=9Hw89xLXm;0008+vOLUYaBp*T000Ki zvm^mQ11SIlCbj68cz&C&4BX5wK>Tap46EU^=Kt4>FPUZnxf~2kAW;A}6ATEGjs%Gh z4#ajtNHDl3=ior^LSAH(CIv2ka*qS_)n|_{AnKdPJ@nLz$Cr2)h{t{Of)C78y;tAD&FIN7-?|=#Jr|g3@O18k%rDW> z)@06c$Nsi!$6CuQ*pQ=jeV_T=GO}WB<@7$fYE87HmJMd)!LmM_nj+sB8Dv9==kuG9 zBvCY%hf+61mR7P(%}$r8p|h8#IxDm}$>4Tp%waK^bX^ywWgFH_em5LRSD2lXJ_bxi zam~Mdo0xG}St|)lM~odNbO$IzVXy`jL0fX&`n#^ Zl|<1rjG{#TXZQ`%Uw^j%005KB1}LA;%Qyf4 diff --git a/Book/f18.woff b/Book/f18.woff index 1874f44e7c18a26157b898e7d1c7868d7c68d85f..274a3de9efcdad907da47d17e1bd981d8b388784 100644 GIT binary patch delta 153 zcmV;K0A~NF38)E>wF5@{iIKQl2+;rl0{UgRK(iYG3;`$`9~<4``E9;3a5KLE@vnW4 zxdEpm7#=e{WE5mzV&DK`AOHY~j}2v$PXc%X97D6o0(AjI+}}P>%si~JgqpQX!blb; zef05kG#yQ%c!pOjaHqgmC$piP$~~!l>`T`-BD1hS*G*oP5=EC`6iwtmB!2wF5+@&yl!W2+{xm0{UdQKeHPF3;`%x-wbxe^V@u7;AVaS;$Qn_ zSPiEm7#=e{WE5mzV&DK`AOHY&WDI?iPXc%X>_D^00(AjIaLK=YpqP1BWeGKFnS_xn zPWtHM>F9DaiQ*YvvA~@IU!BZ`aw_+v_OYj~Z$xHcfv%gpDkX}hVH8c|KO}zv+L(af HlY#^$M^i&d diff --git a/Book/f19.woff b/Book/f19.woff index 3e0be3eaff56c505fe9644b666d8d6cae5a1c0d3..0e77bbda9273b1e7f107014f8640bd73bc15172f 100644 GIT binary patch delta 495 zcmVo+5 z@Psugm|lWY1U&o5aF01-S6EQyIYNqa40#GJDX+=gP&;5ooSCO}l}~52bi?q-_j#VkcrB-a z^t1c9SuN(dWaWeOgCvlFS$~ntW#5!C*0Zdbh?&T(zLQaUK1}6ucs;sF5199g4JWoa z!%~GErAEZTag`*dG-;8QbwqVDQiVs`JO-wE%qTBxXl-T1Eo!^NfZ>83zqix-oKQ1j zY1zv8M~G>O-S#6KvxF(@3sX(Cbc0ZO@>g5_P*0adR*{clKjvDZ<0$ur`nM`x&9?b> lHLVNYU2|{EOd&fH8g;eExmorT#_}J^{RVqMjs%nY3q=?J_$>ec delta 495 zcmVe-b13kc-+F< zpyP2H`@z8D4*4}bRqGY4uP$nb72c_~#{pie_a5(Isy=$$!ioCsaT^E0fq%yxoCKe6 z0gD%GQ6a}13)B#F5%cXKeh)=j1d>Jh`(7sq-4S^Tu=M zaYVaxnG7pw6qwPnPTrGypq?PZCB~G3YwBAvceIX~5f}DlTjldbE!{Zog(2mcOt*3# z$xuHo?Pj&iMVC)9jM7L(c7H=Mmm^!s)GTx{6FZZ8^B|M#a-7Na_;zxa9W(C@8%|ww zmZb_eN{xhr<0egQX|qC?bwYDDQiW&NJVv&9*3?%nw064U7LD6s#BjlY-`~@RoX{|0 z?byouCvNwBzx@QKEMd#~%2snD-6)oU{L)r9HuH6%EAmM%>~k&2=_tR3`n@Xtm~Hp( l8lJ9rcg?*uGsWyocxb9s&dsu)xG(>q+z)w^jslbW3q_p(_j>>U diff --git a/Book/f1a.woff b/Book/f1a.woff index d241c5e0b93b760c9b436abe6108e746689c863b..c44ce787eb1f5b759983fdd31ea593751ae8e67d 100644 GIT binary patch delta 524 zcmV+n0`vW>39tzacTYw}00961000EAkqoH=82(X_xLXma0008F`{G~_n2%f`7Pv0miqL#ih5A-xQ4BuMW(9! zrSWn^(98WG5A$6>diM(X2iLDSr*x7JeOu1x5AL}L!rjGI`*DG5&b|4bIL2Se5?Q)u!_P6G)eiJxx+$4qPU`K2vJMw(G9 zr{aqUyJqw{)df9`BuvEAB7)_b-fLsm+CXgrqXjTi{lZFCfe@#on zKoET!+lnCdAl_8ws7ONkaZrzn3dK}ut$5w)whgUWNh_s)!QUbt{VDzge}}J|MX)y$ zGV^Bk?d+S`0I1>v3dM8(ixt+@j>iEi>d50Y9H}>tOW0Ch9+y!KN*-6R6*S0Hr42^! zZr2hkR8`sI0Gn#h<2Br?y2mB#f2&WA%h*-l9#^m*Y~vgjFIXT)iXldrK~P7`w}Fsv zflrw2lO;GqMB9SKBgWi2$CN&0P9wvUTZ@o5R@2NfYdK@>xkoH9S3ptCVr60$3J{_l`f3qiPMM)%W zJ7+SL1Di?TjPzt6b|81=L3-VbPFJovH@(~LA?sdKaN@*SwuqO_w)EZ%vE!U1$CIzpaft9_>ztAv00008|F{%}^aBp*T000G; zvm^lz0w@g*mxSZ_ZN4&aGrs`wuYHfX4X1Vfe`aoE+Qz`dzyZWS004Px4ce1i1B3z` zL$l!na{)wgfBQf&E=fUUD{9s<3nN(^_0h-k$$T=4;!C_@fjb4hI+-oy)b2^`W1qXe e5t)Srx@n8Lk|;V4qi81oA^8i0qkuV+oCPd}ib*B_ delta 180 zcmV;l089VG3&;x$cTYw}00961000HZkqoH=xu%SfxLXm?0008|Fsc-?aBp*T000G? zvm^lz0w_(cjm`1=HeVUInO}hT*S;Cn!)cxWpP3t(wlOdYdGY)FEqiOzn)H8JHM2fEWk>HRKBk0F##jcmnJ|vk?Py0YwBC{M!eLaYYI$ zOQ~7QER1Av(nlZ9Cl`}h6kp*53*0I2#mQ_br*=gp~*VCO*=z>Xk-Kp{vZL2OMjv8|H?1R#I8bLRqhhhL~*{r#@|^tggo)z2PRQLldU zxQ6ZOACK#JTkCkdfj6}qk2mq5_LY&9`fC#Xa9I{t@V>h6xJv#n9@lVH{qAucpK2dH z-XKrc<4tVUCOC%10uLyVB1VD|f;O65d)R%#2SisTAJMLp+!3&m3+WSCLYPL621;l3oJVkL$+=B{a3P}_ElBj%;fx1y&YuXw#+ zR>nVa`BTSaE3#a|8zn@7Q;abri=gLfu{Z6LVM1^2G6eyba9PdjwjU*HI7EZ1ByY@G z?CCM}nddRY*)t|mMSXvqvEwJyhLj<5?_C`;$0@GnlJ`i-XXwYVUOW_O zoRrdTHurX|JdkcE=h0-YS7x3{luzY6l#5UXdPQq0TRN9pl|0&P23zezJsHrUTsVbyQl$?%-BkAe9lzuu3IT!`~v*VM&@FXnnOPT3HrmBq6%&i@zY9M3G1PzE3w|6_#! delta 740 zcmVdrhJrF3aKy-d7hMSIPgy;{b!|caLlM6nyk} zgFJ1IH?b9raSV+G9#9}ff*DE(T4-?XVfP6i615RgULeL8b7rkzxTmzm$T4v~8*zW> zWY0ycV{Ob9^_=@H6syF@Fr}uQ9MN{eeMv^eP7HCvUDL9lw(S^4%uAhbMNdIq@p{3m zjDPI%CyvQ>WVwVVnh^<3afKmS1Rd9lJ!zK=V|sI!DG0fQ%W77)_ffKkBh@R8KwD>&kFV76_pRJCMw~|Bd&mo>@QGmUZ*qb|?DMxX+{6JX*>8u9D``ay zIg-cPp{+>0xfkw-tw!_UWuGwr*zqh2xb`!f`U$uF;hGno@*Nt)eG>Kf@Mj!|o&OQ{ W2fg#NtDWcke*x&h&rAT5Oa>r$3}MRv diff --git a/Book/f1e.woff b/Book/f1e.woff index e5d00283e365349afa41284e378295c206a61faf..00efc991c3710d949ef361b797eeef23634ed8ed 100644 GIT binary patch delta 173 zcmV;e08; zUn<03SZT(!yXzcaCi+z>YKwg zY^h%k*Rkn+akzmk@05|MwodE2%__0NwyHbqVMB?-Yj{>C4%e`+emY#of1dj7a0C0^ z4lZHvh81$87-ND0f)+xaWB5E3Zj&7_N^pUIvIC7Frp#SpL7kG*$na`?0lGHo-ukP^ zGU9-CW-BGUNn?f)Eo0>qxfkj_dbmPNDY&72AoED;kQH%h-d1@!o)ppw!(-p4Y|CIJ z7lCy2aB7x|X(~ESoDE1xLg`ij delta 488 zcmVq`DvAKOazFC0CEW8x(QBVCGjH1 zQj~}2n;`Cels-b=qMz4Wq{0cWJoC*rKRYuvfIU1zp?vOMu);_6)nN}c6*#==*u$<8hj(zNzB^pOf%@fee-+=BS4dpz#9^DL&Soe|* zM{Hzehv<+PL}sN^qGE>3I+ip{w$jvRc97iajBAVS(gH3@aKiU>Js%g0E=nX^Mj2DL z3vRg;*U@HKljdh8o5j)yLOGFtUHBKdUM3SV^`_tA)b;k;p8vlCBCm3bA2DXHYkJF% eQ1%?K`hSn%H^XHh TmxF-`BnkkEk`7F>9rDMF8^Ir$ delta 61 zcmV-D0K)&|{RQOx1(3-D9HE}E%qsCGt5@;G^V@u7kOv7cFkJg)SOKS*{@-Kx&2SmW T}#q-;IW#DFh0pef# z9&;5&|9|@5gvFof6ay0j2M_}R0I5z7W0RZ-$A3@|{!VNQf=KahVPOaMMqv|@nv3e) zDk>JMl3MBQX-(VEHb>Gx>1+5Li?86b>?`aO_~qmv?9bKakeP43`8hL_0NBSX6zb>k z11s#RPY!!%smS3Sd{ZwDH_%o;9d2UZYdhRR+xyN))!3!=!)8@j;XpMV_OPeEI=q9C z>VG=ifT%ZzoA|7LIoyJHUvLhCXKYa*!whqj5Ofgo9K+|S@d?>6qXcIND0|SDV8PrC z*3=m}jT}$b7ocyWZmqwLtRfC+=eAPHn>3b~(lS;)kQ-4CF~9{9O2HNN9hrMtN34i* z^Smvx*}Rla7#{mR<%x{9au!HWPZnmgUVmhw^C#&A{XlNbhGZs(CYNzK*UPDxsXU}3 z84fOzfm|hb!~4Mz>)x>8gpI815D|yQO+PU!okxV#7=`sMX_#WAsW0s;rPT#Dm)gAr z+?C*z@82bTTr<8Zl5rz-RD_s(?Dia?%fcovFHJE^r4xj5Dj$vb*QH)&6H-y^$19vY w>i(<=+>D3>Zvg0+~_1CDo4%vm!nHKAe`{LbUEdNvg9r8tf&65iZK@!6Gwg3PC delta 506 zcmVqV(#Pi#HW#DFh0pef# zW>^8E|3Ce2!s5?#ih+rN1BihD0GJ>Sdy||A$A3T+{wB5sL8R=RAb4PJ6gDAgdr`ep zQL$K+)Goc9*0c?6Gm-{MU&H5E_7(P7_7(OC{4yDY)xFvbIp;gSbIz9l*vC&ORL}Q! ztgx#N9QM#qk;6Oqrd}Pcp{ag5T*toGbhv@0cg{>z+okoxR+U)ci>f>9VNZQ^cn2fZ zb$_@9QNJ9n<52x^xB>Bwa0!DKY>^|y4099^v=H*N;qz4Zl-@D31Q!S>d(fC*!P*Vh z)G2)$8J=w{K;LHF+jx~(W*pPbY^Q`bX)H0NWvqOnZ$v%B09S}91vk_W^gPl!VMkn= zmu;TT=7qGvuwFSAe1wCAH=^c^fH~$6}9~icPo#& w|C;>oYw)qW{38=iyk@xi8r9Sxrw|5{e4Uan-W_)2fBL@x@YsIK0Fw(0L3yzCBme*a diff --git a/Book/f4.woff b/Book/f4.woff index 4850097718fe74759647b90101d6978bee4fc665..2a8e82b662aa3296dc75ab1342f229e30b526ebd 100644 GIT binary patch delta 507 zcmVHLF{xLXOb0009C5Y3s@vm61i1t*j3SI6_)d}ZKf zegWcN`yO)@P7D2KV>-?B4#?$TU;>E(0Ejvb*^~1IvVX!N=s{T6L!k(Im|-T)A$n9) z3`S*Q7TH@zJIRn_S|*W@_t?i+d1jNyo}6K-zN-4V{(1mx-~|fR^Ya}m ztgG)H2WY6o<28ipx5qVXs=prBu@P*0+`wjVNv5i;)B591t+2wDs(T#Zo7(kw4Zl>& z;~I9tWg8j~81w7` zGwPf^jRKD@7NO%<*DhW$SB!nyh0A1ENn?TmE$ieRefQKoba94^QgA_iL(eU(17^gj zeOi|Ja5R@@93O@u<&pH4auP{fKaA~SHqJ#CkAKpRI+0x41)aI<+d}$gq$dNh1GzKz z((9gOUAf3^dbiyJ=DlLW85^0pArcOat4?O8x=09DW0Wp7p<&CZrapJG%$+W|Ipg*g zaaV$4ejihYv<;chOrv?G;w4BKN&Ti1w3yl!^K)AcjWnZJj^(|TFf+sFi7x3&(lF)t xNhs^H=KrsR4;fbfrD0^od#UcE>OE#B!k{Tvm61i1t&A#D#r8Md}ZKf zegWcN`({`Hr-lBrF`Z_52jp@vFo8q?cM1&g0F(0uvVVdIdJqH;h0B5-W|&EGh#nP{ z4Mt^RM7(vhlMG3wWfBQ_k9~~Ahwx#129Nutr}3bB+8L(mtE#W-uLr;;UZGGvcb`~c zUF~`tpr#U!*AS}T9#^oX-aW2jGuZLChOOWinX0l*>yJCN!V24}>T!S#^~2*eJgAn( z73`}wkAJJ!Qy(7Jupj)yDJ-6`M1c%Lj4+3wj+k!)A>R@o(c33WaDs@k4UI>Pd3J#r zbw-~?jwct3&~dCQ7cZGB#sTfzWiqU!F~NYAb@GknFMAFueW4oA*Gtv2zw11;cBv*DpXC?) zx@T!uF4F7XP4|#_FWGR)My76vghS)9liI1y6T;OPg^NvS*kY=w&)qC@rweY*xV=T( zmEf4)_mm-RL*@(9Xr3u~iQ9A2Z#qGXsck+#x5dy%J&NU6K3fS>Gklrog1)2?HaULM x`Y2cPUn}8ThSh&*7@6^2$~!50kJ*VZXo^|Jt+9UGl>aR87e^|A-~f|K2|BLX^@0EZ diff --git a/Book/f5.woff b/Book/f5.woff index 8bffc0439977f864a2de9391f6a248d9f80dd52c..79f5b84159ccb97c63472d564d850d73f6e1b733 100644 GIT binary patch delta 67 zcmV-J0KET**bRu-4UowLAoyK@%!SMWwafzQ&?f!wm&fzld}WXa2{15R`yO)@LI1zQ Z@Sou(kjufq1X2wEdjk#px7^VJESjU`A?^SG delta 67 zcmV-J0KET**bRu-4UowL9-*ay%!SMWwafzQ&?X~u#pC&HzB0&z1Q-~ueKV{?(Esl+ Z{Aaic`Dfm8zkJkksgx7^VJEShg3AM*eJ diff --git a/Book/f6.woff b/Book/f6.woff index c9a28dc77139f7fc5e0eb6319bba5e24dd3524e2..72b6bced0dd664ba537b41671f640be13ff25a50 100644 GIT binary patch delta 215 zcmeC!%igk=ou}O2&5ePPfq{YXUdu$D?ezvgrWv2okJyZi)IXQLt1^IHu z)V##pRG`=wpx$Bz2IeJATwH4k@{3Ct7$Y(m7}|sw7}tiqisA}wD=10@YQ9&~?8CU- zhmmogpIU!X)T5ud`;1OBvq(s+tL@*(wtVKl`>8+9GdwCbFlY>6W~k8TeY)KwfH9;G E02-D;qyPW_ delta 219 zcmZqK%ighu6yz6|Ffc~sFfgylWz|Lu45c4}Nf^+%IfA>>=oG;)#@iZZUX(by&Y5>nqpiSEi I0vJR304PF3egFUf diff --git a/Book/f7.woff b/Book/f7.woff index 4987b97e1c74f4138fef763be2be7f689512ad5b..ae829917876c4489e2471014e4d287619b147abf 100644 GIT binary patch delta 501 zcmVh39tYF0|^Stm(Q~t0hk#m+mA5E^V@u7;AVaS;$Qn7 za}7rSzww`q`6JUiAeV!I2_y;trcMvBv)mfd0e@i-bRi7P;-Uz;=%zdNBDz#m3`V76 z2AN$&D@l{2OFEH||CrAh{0Kj0zG0T0R2MErS9a0&p8I}O0ocF`6sqs%J62d%-#re{ zP>IKD2-R+u?Xsg}nz?5J0d z>woy6{(0QMPOyhlSUh2g5;=w#VGcnPG0!1Fo(dmP+ozY{1QBT)8V?vVc7YjrPMt=9 zM`w%BabDNXUU{xO_9+)GlVK%|2?ms`qj%KZllRcY88TAA1^Ep%x0DW;5vTTPS?0sh zT$*uw7>1-r(qGC+ByIgLwu{*~7hOC`JAdj#a%~q>=CW@K>6?+B48#uP&fH6{dzN+O zBD?9`b`O~MiVbIMWa@@UI54g{nVsq)AzY17I@^STEvK6N+|4p~yyWJL+grp?!7=}j zDMQMJp3h998B_TsNNGv^rW3T7+7|P3TMmshqgamRy_GOC!{>=EsY}u@<@ibKvnJ;M ruY?a7R`1f#GUL5ecT)8pvlF4wl(U>$WBoXlFP3-%J{*D4lTaS0G$Zuq delta 501 zcmVbzW$mL*Q0*L|ulphYsv)mfd0e?XRT?m4Ui^G5}y6H}`h%ObC2}Y%3 zMBG)hk~B%Wq!S7GkNJ$jkMLvs2A6YEUAWL$O&5Ldx$j36fK9wYq5SSXvBJ9A^*BIH zB_6LKRKGp0U`xGwT*YRv<8cjJ!7qBM$~vV#E^37pwpG>R02}Iu$7^^{EsrbMS8pCy zv45vNJg#9s_=!_kJY$Ih8HN~P4nZ9;PXi%OiI1r5(@SuIh_nrjM~oS}z>GYjP9w*Y zvqk7QuPbLSJy#wFlyjHKu#(0E14`D>Tk7t~d+6c}DXHLs{F<5@N{7sdQ~SIuvf*eh z^*C;XA?cCymvRzGTR)ENVm8i1=TFj(I)9N|*#(uE9N1j?W~3(ru>-j^_tNX0rCqs5 zuX{J$L*~6?!zmk?x*-w{jLS}Hr#epvS7Q{;HlbjPsU|;nv&R4J zkg}oY3)5)ElzxfZbJK4+L5rzvK0mj`&`3Rsh39kSE0{}XMKPR&s0Sgl;ueZKjiRZWZ%D~P10>r=e zJ?0vW{{Q?x8%qk)I|e2O4j={s0N1n-d$Uj!O96jS5dKbV3xY`TZed{u_C{e7lA4R^ z-6|>;tCCvj?P*Qh&^AZXKSzhnx7UemUHNcwcZ1gJ*0}Aj1rEln`_f@*KnGsqqQfF{1=$2q=5dm|(%& z4c62dIgK1o))$~}qi(Igj;taMY3H_5%9}Knn9?#7<65=y}p^&OdeT1Tvi zbMw3{ve~?pP8c5hKIMsww{jLpPfr$RvtEB>qVp%|1^qy7&4y$qhbEVCI@imon5jIZ zBN+}Zl7U<$cf><|$L#!WvlE1gG#)fk2KEoqoyrKvCNETz>2H<#MI z1xyv3^8LG{k88$PMKW%rj*1YIkKLXlbXnNs<)tZRsdR!+PUWK!|GL!6Y(grE{g^AW xN8NvQ{`)ofGrjsFQ+B+jyZ#z=*CD$QI@4mEabLVUjOBmozXRwUe!Y`J7j*`j`40d9 delta 507 zcmV^WM|3ClF#*)JHj)94R1BihD0GhK7l(SG2O96jC6#gc*1wo|jogjE%Zxl8mX?sz< zQ&F*4mDDc1oz}DsZ8MSvN?*h0SoRh6S@sq73H&k{gw?&;3_0gJzw@1w0NBS*C{)k) zcdW3h4jlH-P?5ts_@-VRuA!-ZJ6y-U*L1jnrgzRvRokWY!&a48;fty}>|sxRb$ACO z)pdWk22sBpuH#Vsakv5Tj&KQs7i^Iu#SC*45VR2TwBhqq_>|r;vji6iD0|SDV8PlA z*3>C|8X2B#EI{98-P?GTS!Nv5&TOZIH)$*}rDd#qqHjb!!~j=_DFrvw5A;0JI$=j# znwM>!&gO-*!m#c8l&3P@%0(bOJz1E|dXayM&Yq)JQ(lGf-Q(xOz3afK&F0p$H zSSmQ<`?;l$TjrNdQf{QmitLs!001@+Rs4mKxLXIG0008$IPkL?0r>|h;F%#8;`wd9GH^4$ z0P(MVkGTe?dH=I9TQj|5U}WH6U;>E(0B~yz@RK|VxPQw|!cY)~|HH-TLKf~!TukD| zOWL&9g}THj2>~Pp4BMgw8nDL{62cq!Fvg8f;v4uR#-Gy@jM0s4I`hq(Ide+^RPYLg z{JGn(!j9UvTtG=VmWw!1&z4K5sCUa{@~7o3R0^kzRHYqSFXq;o74}rwask`w&~gzy zRkd8gfq#0lTqb{5-oim)7gx}D!U`D@j4{Cif+{?|XK?uDd_nJ!QGyy=$_66bW6HZr z%&8OlBBXdQXD(VMs%_5m$aTaK?bKw7St-H{BU;+X9(@DqKDxL@NGYgO-_p~eb3@SX+?FeCy`(ddBb~}HopZ_E@6qciR-HXCz! zNpQ*UcQR*_B9HJ9&==V4`Z#A&oi1*4Hjbt0dU7e7^3J*_9e&^hoYz19tK07a_<3>t n{~pEca?btdyU#oISY3D+XY+*HVNEZP|7HFHUB-A?laC8QusQd+ delta 497 zcmVDw1xLXIF0008$H}A6=0r>|h&;?8`@%%Pl8Mv8W zfcV$G8CJq+-v4aO)=cjh7#TPim_VWcGj0nB0FyikxPQ-1!axwlzeO;5kb^f950iL7 zO`8@ts7DBp5K&XWa4lG%0lTJ<5Z=ItF047)<_X!f+>~|l;QEMz~P(mCA~vN32JaD+XykjjCWU9 zP{;IzNbq3JTy#v-jXBREHxVV;iOCePQiwUmw6u{u`Ucc}bkRUSDQHpO(sM`alo?Ui zPwOLw1SDY&6^)LSF_PYRnUfleD n5gxl-aR1rvvrau$7am6GBIb5j)2qt=GJgSFb9h()laC8Qw0Y~j diff --git a/Book/fa.woff b/Book/fa.woff index 71575b45938aaf8e03f3f9c401c2c22845d89812..4fcb5e7097f57fdd870f655281a6138bfa8a2789 100644 GIT binary patch delta 498 zcmV!001@*A^c*IxL^WE@Ut2LfgC9d2aa>b^V@u7;AVaS;$Qn7 za}7rS|MOp(Ns?(Bkjufq1QG=Rp5hMYv&0>+0e=c4K-~7i!AFotl$0O=hdqD*sUiin z6!kiVX&bdtuEhg4ruyM= zfQE`Z-oTOi<#7#r>aWLj>;^j?H?SA{BvaM4X#I9sE3C+`dmLa}iN_o0s}qlF5cS97 zI)C=nhsO;_u#ZbvykdzGIYt;`4nY$!-(!S)D||-pfGoiUBFYvto-kqV0yFBIK8*s; zE*2qkthS3+%oXE+cHt@+o}@9wkd}4wfxbR<4_#cLLn*kSzN6=!)*&n6(!MUsd^Da* zGmekLkn&6hOSy=orJp8tF`ML~i)U#?S$`yLyPz|d16#~FTL(nrzC4~wk=;Y^|j;9oi4dH#5~Pfze#r?=S=biyYg>+tG^1F~lx}+;f!<2(3r(fG%KO+X~ o>8sz-FfikFR98`T9kUBz(3G>B%i`H_D&ML92@L{%Vv`ghpg+*@w*UYD delta 498 zcmV`DfkXj}I}QB+v&0>+0e^~>Sj25F9DD?66D4g|0uFm90;Gx* z)Kb*z6sB#|l0j)v)vw@35MRKz@C*C`uakj8_qK^*Kikh9+Y;^wQu3<0uOQx#)p!MRi)>x5W^*F$e5|6hqP=7qGK-8PZ zRe$WO507h*U>~Qjc*F_?GK?|70)jeXz72$YOMFc4kSsw95oH@1cbGDFi8*yfpGJ;* z7mJWOR>#Fl=9+OpJ9m`~PturSM9VsPL*Ib9j~>p@r4(FHU(s_->yQ<3Y9CicHl8e` z9>sDZUwwpKGk%)sg07?yHaU25^l#gn$0J}f oef>Kc2Ijnu@+!)%V|F17nqr=DSv)&#%Ky~=1PhgZV3QOfpc~EZ?*IS* diff --git a/Book/fb.woff b/Book/fb.woff index 4bc72fbd27ba0c619597d366cf19369dffabb1cb..84470edc81ca31694f5043d33a1090a7c1fc9f60 100644 GIT binary patch delta 498 zcmVb|;wF4FWUy-<539tYF0|^Stm(Q~t0So~qQIGTE`E9;3a5KLE@vnW4 zxdx}dGK4dUGL{3m91Kh#Q2>PI4GWV_0&9O^5Og67%;KU5y6C1m_9D7eR18L?V+NUB zMJq{@q)R%HkpGy^82ku7X1-yTo>UhuMpt&x_n!NHQ~}t)3lysF=Q~zdSKmDj&`^oT zYY5eEk89Xee?6{aBiQ!1fz9BOo~pJ^>5q$AVTCPK_c*{ewd?U3eyNtnHSDNYkL!Q< zq5gT?z)rA-Q&>DDqLN77%)NhEFkFt&@?I2Tm7A|YIjQ99d%f-R?-{M^klcf920jN4npP{A?(k10dS zhMvz%qZw2AB}i#W{iYMNnA#Teb6XCLG^1FK<-L_KGsEYJE~!h>Fy;73>$4{2|F47( o8CLJo&@$t_RCiMK9b|;wF48Sr;)f@39kSE0|^Ssm(H^s0So~qi4z{i^V@u7;AVaS;$Qn_ zSOurQGK4dUGL{3m91Kh#Q2=r|3?Y+F0&9Ok1YHP%i;Kg6F1qPXvWPAfl?g_rV?^9l zw30MQx}*~c`H%UG!H@7`{05hEQeC*vSxpyx@44?s6@X2=LZSTbKC!~O+Vwa(X0KQ3y86}DB?;{Y4#hsSGpP%V!u*jH~JSFwMm zK0K~rKlq7LSUh8i0vU!FVGcnZF;4>_Pl=DH?bAzef{3&YjYo_byTFV*qfR5ole0zW zIIk;bFFjWt2b6P{$*_{f1OrOe(Oc^7$$RMH3@NGLg8Z7A8%l@Fh*SH#EVAKfF7-HW zgdypX^p|oHNn1aT?P500MCVV^jyivlT-gPcnH<<$`evjj1F-|SHTTl%o~2#6NUwW0 z-9zTRWWy;NnYtko4vfoAYNt9+2v=hi&NiW7i>W3*ceBhLFSt45_7*WzaLoUE%8;_5 z=L^$l#*}`E+jG-zIzfx6Z9YG@#n4DSise{7TM1J$e3|Hix}*^{IeyamSMw%cE8$y) o)w?vb%y=*5os_-D>_liZ#Vq62SU+ycf0p4$`v|4iy1^6fKghN=#xfaT27sWIK*!TiDhFS;2VM z4{G~O{gfPyhCoZnsv30fx$nmefIfafq5ZzSVTHc>?68NP`s(ljV)fJE4nBE(hr8%| z1BZLmf2XJFe4zBhMm1RBP<0*l@KMDMA7G}24tH>(emmU7q4&k%9!|Uz0~kDGj|v5U z7FeQ&AV$b@3ZJLN=hRN=CAdUDI)cU%R*cPWgsK{v@*Nx zst{eyWE6}8xivc~3pp~SO!K8)&&AAtxgnQRb^e*6il_zgjd`^#xMKDcCh~tOz5;LJk#v*85LEz@^q2qu delta 491 zcmVW%kzyZWS003Ku4C%8I4iy1^WG|AeN=#xfaT27sWIK*!TUgcvS;2VM z4{G~O{gfV!hC)lpsuH^Q-1kcW`uG8b_WAM~EA-VzhduPvXNQjvtM3kX@WJal+(q9T zIozZED?L@`9i?wJs=*4!s_U?a_bPVy2n#iKxPvqG)8Q_Ty-yDJaONc#!Qcf4RLHS^ z!WuOMF+#or_b=jHQp%J(16l;u;C5U`&2b%>$)VX2i(69IAY^t|bn`f$x)E$owEzflT!C#_V^S zTy(jRNiYrM&g`ko<;0XS&(^wFido8kWA-Go^g2mpoZQbI(o^QWWy1*@+1epeHrDVO z5l6@EG%;IUriCu+h;lPkWnBvjrrK)q8#`KUdBsI$c8vk!1(*EZs^HU-G3M23D;E*j z0}R~>BAl~`DeD_ktul#&P%h=q&io`>y%xHnAsYBYE+;yFd$hj`4Wz{!hhUZYPm)005K25LFVn>S6!@ diff --git a/Book/fd.woff b/Book/fd.woff index 501da0792a6127834ee251fa7807f8584a8fb29d..40dbe9fe603d087d1d97d22593cae51f2d5c31e1 100644 GIT binary patch delta 152 zcmV;J0B8TG4X6!}wF8>{F_E}i2hsol0|vcDvl;>M0w^81d#}Xv+k9om5fdhzv005j~4u_L71d#%YA+yE=bpb@`{`Qq(TvLSR*0il9iIgn8 zMM6BE&ZmiruklU@#{}S;GuzQrM0w`T2*)H+?HeVUInO}hT*S;B6 z!D;FLUzrP;Rx>a$Z~!q7003U+44#uS1d#%AAhX50BZ%z@35 Ge+DV|8A1dA diff --git a/Book/fe.woff b/Book/fe.woff index 56def17dcb2e2092c09854cbeab0c9c2b40f2203..559cc38dfa934d9e006eccecca78a960b13b11c5 100644 GIT binary patch delta 502 zcmVQ11D1-GnwQ0ZN4&aGrs`wuYHfX z2B+ozzh+`)S_0&9Fff5c0e;~Pd6PB;et*qQ+dvTh)+A9Y6~v7ThdF{&TTU<%aNrO` zkfH{VL#kXiut}^WUgQKtc?w>n;t6<`zCvH2pV!+S!VO!V`DW&upPe;;J-k7odVc=L z3SZQL#{n8D@^}Z|)vL!f?5p1%*RdDudfdQ%a7m`BeWmrwWtCWwU-vk`HzgkLV1KAi zJ+492yT^4Lsy`k#Ai*K7VDXF%3S^jIiWLMc#C%T>@~!YWy(6*&ZA6q^Xgp%Z+%=Ze z8GRZ#o?I+K&#`V@ykeG&BigyEWY|e#jxjCkH+$=MoKBTp}wQ%p4Krd;>td6 zifl4nNh^*|!jSS@MjL5I($$YMyMJEJGST^ybfaD*w{}fuCPy}xk(uiGSnOCH%uojX z>$ER7>D}PIf6Tf+IB?2A7VZ#dbo5fY&^b|ghQbBrG;FcZ)E#$_mD2^+X57*uE=q90 zZ@XSd%aHfNBAOW$tBHh>#4ov7_U+hw)v?9INGpovLjKJWre^Xo*9Be8Br8mK@aEaa svA5e`JH7lJ4FgMFM|Bm|)G?Q11B>-#ERqjZN4&aGrs`wuYEJD zg41&UUo$Z?Edg>l7??n!0Bkx8kCQe9et%0&<3JF7ZIXzQW)M3zENThT*m6E20Sgu& zf)q^vIb@V=2RezB#EqPwD5u~eh!b!YuD})Mx!te`J8Ze?Rn@CcR~x_%UZ7Au|30z8 zw%YSJKutv+Z{fFk^0VJ>N z6^MHExQc!C?r{wg?Bg634_G5diZLcwLeN0Ww~3H%iI3?Wk|j7pMA?DH9j44(VL_eJ zr;*{_#UgYa>&nGTX2Ce1ow-Veoit_`(Xvk7(l?;)qlXJ5l!8m@YkF>I9kL?M?ZY}x z$CITr;PB*9S9GRwU^5w-iJpzbj^x%1q~E(p zdUBau_iuWKtoxS(Cmdw%4sk?BH?eb_5fx|1U0_DT=5tNmb_ZEHopWu*EiK}r1SkA9 z>xHxod50Fzt?EdE~b0ssI2 diff --git a/Book/ff.woff b/Book/ff.woff index 2ed5eb01edd4100eae2608092b43fd47fe5c00c0..03c3c4058250f6b08c6636a844d8d6f5f753dc63 100644 GIT binary patch delta 509 zcmV`DfkXjnD-AvXlQ#u@f5A@UKn#5o+6p8<-1fr3N03OA zmaqa2djJ7aMFFK0^*V)V8@0`#w5aM=?2jP6fN$X!_yt}k1BdQy6UBbEpFOrG0JiZ4 zh4Oj$!3yi@m&XBWD)M*@2kNiK73`=FkE_@Ywmhz3C-_6As%+4Dby-WS$gg@FU{i_5 zYv`&Ye~&8=_3m*MyXw>98YI}oIV_&BK!FSc3^9YCftc?hLcS$Fp|?kt;0zIE6B>^g zF?WtBbw-~?jwct3&~mIB7cZGh#vbk5RWdwDV~jp6>*PIsUFr_nxIjuNxT3zL=Z@As zE8^TfFN$n1oJk{&55ti1M0yK3i=?R^M|M6Pe`TWcCuv5lNN(($&P?`fEPeVz zEAaa9ziqD`gVprq?`Rm9@;b_^D7%i?g)nG}X~t#o>^PDCss9Bs;eaXtlUxTZEeZ5u delta 509 zcmVr=e&9Dki>-~StEkVMT z^BDvzSb!i>L;yKtlx+t(iIv2SoS-PD;39|aATdsOl^{Tq6+5mR& z4u#_R{f!m2)Skxysw(ohgd_FpaT&YnkH;141V25lVmCM^QA5cT141^eo+$5lwMk4soQV}%?kMi^rOK^-yQ2133CKBad+mf!*rWg8lg zm@s#VIdw{(MusOBi_mebTNf{wYsLZX%vCZxNn?s3E$ie1eSPX4y0}6@DQHpO(Q{Ah zkQH%hpI3Q08ZV?C$Bi(gJe9#pE+T2`$BA9ee`B^DCz4ycq%)NRo5{e8^>iq9 zC=aGDz3x@gl~!`syYC*d?hPAG*vQNcaZE=iu``_!t!KzxU`oU0GfjQ%23a_rb8W^g zE#jgCXZ$wng|rNLFD#;&QLt)m#ZABD8ctZ)W{Yc^kBro#SkC0Dk1#Q#m#NO_sx`tU zD+jNg{M+{CG1yFB|Bi-%Ij^I*ilXb7T?m6FpQl_F&yJh&KlMKWF?4_^lUxTZ=5Fzs