diptest/0000755000176200001440000000000015051320522011721 5ustar liggesusersdiptest/tests/0000755000176200001440000000000015051120371013063 5ustar liggesusersdiptest/tests/ex1.Rout.save0000644000176200001440000002575015051112005015374 0ustar liggesusers R version 4.5.1 Patched (2025-08-11 r88580) -- "Great Square Root" Copyright (C) 2025 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library(diptest) > > stopifnot(dip(c(1,1,2,2)) == 1/4)# the maximal value possible: two point dist > > ## very first small "unimodal" example --- the 1/(2*n) result: > n <- length(u <- cumsum(0:3)) > d <- dip(u, debug=TRUE)# shows the final if() {added by MM} is really needed dip() in C: n = 4; starting with 2N*dip = 1. 'dip': LOOP-BEGIN: 2n*D= 1 [low,high] = [ 1, 4]; l_lcm/gcm = ( 4, 2) while(gcm[ix] != lcm[iv]) : .. calculating dip .. (dip_l, dip_u) = (0, 1) 'dip': LOOP-BEGIN: 2n*D= 1 [low,high] = [ 1, 3]; l_lcm/gcm = ( 3, 2) while(gcm[ix] != lcm[iv]) : . calculating dip .. (dip_l, dip_u) = (0, 1) 'dip': LOOP-BEGIN: 2n*D= 1 [low,high] = [ 1, 2]; l_lcm/gcm = ( 2, 2) ** (l_lcm,l_gcm) = (2,2) ==> d := 1 calculating dip .. (dip_l, dip_u) = (0, 0) No improvement in low = 1 nor high = 2 --> END > stopifnot(d == dip(-u), d == 1/(2*n))# exact "=" for n = 4 ! > ## Note that I believe this should *not* give 0 (as fmechler@.. did), > ## but rather 1/(2n) because that's (1/n) / 2 and > ## (1/n) is the correct distance between LCM and GCM > > ## Small example -- but MM sees difference (32-bit / 64-bit) *and* on M1mac: > x <- c(0,2:3,5:6) > ## IGNORE_RDIFF_BEGIN > d1 <- dip(x, full=TRUE, debug=2) dip() in C: n = 5; starting with 2N*dip = 1. 'dip': LOOP-BEGIN: 2n*D= 1 [low,high] = [ 1, 5]; l_lcm/gcm = ( 2, 4) while(gcm[ix] != lcm[iv]) : G(3,2) --> ix = 2, iv = 2 --> ix = 1, iv = 2 calculating dip .. (dip_l, dip_u) = (1, 0) 'dip': LOOP-BEGIN: 2n*D= 1 [low,high] = [ 2, 5]; l_lcm/gcm = ( 3, 3) while(gcm[ix] != lcm[iv]) : L(3,2) --> ix = 2, iv = 3 G(2,3) --> ix = 1, iv = 3 calculating dip .. (dip_l, dip_u) = (1.33333, 0) -> new larger dip 1.33333 (j_best = 3) 'dip': LOOP-BEGIN: 2n*D= 1.3333 [low,high] = [ 4, 5]; l_lcm/gcm = ( 2, 2) ** (l_lcm,l_gcm) = (2,2) ==> d := 1 > d2 <- dip(6-x, full=TRUE, debug=2) dip() in C: n = 5; starting with 2N*dip = 1. 'dip': LOOP-BEGIN: 2n*D= 1 [low,high] = [ 1, 5]; l_lcm/gcm = ( 4, 2) while(gcm[ix] != lcm[iv]) : L(2,2) --> ix = 1, iv = 3 L(2,3) --> ix = 1, iv = 4 calculating dip .. (dip_l, dip_u) = (0, 1) 'dip': LOOP-BEGIN: 2n*D= 1 [low,high] = [ 1, 4]; l_lcm/gcm = ( 3, 3) while(gcm[ix] != lcm[iv]) : L(3,2) --> ix = 2, iv = 3 G(2,3) --> ix = 1, iv = 3 calculating dip .. (dip_l, dip_u) = (1.33333, 0) -> new larger dip 1.33333 (j_best = 2) 'dip': LOOP-BEGIN: 2n*D= 1.3333 [low,high] = [ 3, 4]; l_lcm/gcm = ( 2, 2) ** (l_lcm,l_gcm) = (2,2) ==> d := 1 > str(d2) # differences to M1mac (!) List of 15 $ call : language dip(x = 6 - x, full.result = TRUE, debug = 2) $ x : num [1:5] 0 1 3 4 6 $ n : int 5 $ dip : num 0.133 $ lo.hi : int [1:2] 3 4 $ ifault : int 0 $ gcm : int [1:2] 4 3 $ lcm : int [1:2] 3 4 $ mn : int [1:5] 1 1 1 3 1 $ mj : int [1:5] 2 4 4 5 5 $ min.is.0 : logi FALSE $ debug : int 2 $ xl : num 3 $ xu : num 4 $ full.result: logi TRUE - attr(*, "class")= chr "dip" > ## IGNORE_RDIFF_END > str(d1) List of 15 $ call : language dip(x = x, full.result = TRUE, debug = 2) $ x : num [1:5] 0 2 3 5 6 $ n : int 5 $ dip : num 0.133 $ lo.hi : int [1:2] 4 5 $ ifault : int 0 $ gcm : int [1:2] 5 4 $ lcm : int [1:2] 4 5 $ mn : int [1:5] 1 1 2 2 4 $ mj : int [1:5] 5 3 5 5 5 $ min.is.0 : logi FALSE $ debug : int 2 $ xl : num 5 $ xu : num 6 $ full.result: logi TRUE - attr(*, "class")= chr "dip" > > if(!dev.interactive(orNone=TRUE)) pdf("ex1.pdf") > par(mfrow = 2:1, mar = .1+c(3,4,2,1), mgp=c(1.5,.6,0), oma = c(0,0,2.1,0)) > # > plot(d1) > abline(v=-1:7, h = seq(0,1,by=0.2), lty="83", col = "gray") > # > plot(d2) > abline(v=-1:7, h = seq(0,1,by=0.2), lty="83", col = "gray") > # > ## "title" only now > mtext("dip() problem with 'mirror x'", side=3, line = 0.8, + outer=TRUE, cex = 1.5, font = 2) > > > ## Yong Lu example -- a bit smaller > x2 <- c(1, rep(2, 9)) > stopifnot(dip(x2) == dip(3 - x2)) > str(dip(x2, full=TRUE)) List of 15 $ call : language dip(x = x2, full.result = TRUE) $ x : num [1:10] 1 2 2 2 2 2 2 2 2 2 $ n : int 10 $ dip : num 0.05 $ lo.hi : int [1:2] 2 10 $ ifault : int 0 $ gcm : int [1:2] 10 2 $ lcm : int [1:2] 2 10 $ mn : int [1:10] 1 1 2 2 2 2 2 2 2 2 $ mj : int [1:10] 10 10 10 10 10 10 10 10 10 10 $ min.is.0 : logi FALSE $ debug : int 0 $ xl : num 2 $ xu : num 2 $ full.result: logi TRUE - attr(*, "class")= chr "dip" > cat('Time elapsed: ', (.pt <- proc.time()),'\n') # "stats" Time elapsed: 0.222 0.029 0.249 0.002 0.006 > > ## Real data examples : > > data(statfaculty) > > str(dip(statfaculty, full = "all", debug = 3), vec.len = 8) dip() in C: n = 63; starting with 2N*dip = 1. 'dip': LOOP-BEGIN: 2n*D= 1 [low,high] = [ 1, 63] : gcm[1:6] = 63, 62, 7, 3, 2, 1 lcm[1:5] = 1, 44, 58, 59, 63 while(gcm[ix] != lcm[iv]) : G(5,2) --> ix = 4, iv = 2 G(4,2) --> ix = 3, iv = 2 G(3,2) --> ix = 2, iv = 2 L(3,2) --> ix = 2, iv = 3 L(3,3) --> ix = 2, iv = 4 --> ix = 2, iv = 5 --> ix = 1, iv = 5 calculating dip .. (dip_l, dip_u) = (2, 2.11111) -> new larger dip 2.11111 (j_best = 61) 'dip': LOOP-BEGIN: 2n*D= 2.1111 [low,high] = [ 7, 58] : gcm[1:5] = 58, 55, 51, 48, 7 lcm[1:6] = 7, 11, 15, 42, 44, 58 while(gcm[ix] != lcm[iv]) : L(5,2) --> ix = 4, iv = 3 L(5,3) --> ix = 4, iv = 4 L(5,4) --> ix = 4, iv = 5 L(5,5) --> ix = 4, iv = 6 --> ix = 3, iv = 6 --> ix = 2, iv = 6 --> ix = 1, iv = 6 calculating dip .. (dip_l, dip_u) = (0, 7.5) -> new larger dip 7.5 (j_best = 48) 'dip': LOOP-BEGIN: 2n*D= 7.5 [low,high] = [ 7, 44] : gcm[1:4] = 44, 43, 38, 7 lcm[1:5] = 7, 11, 15, 42, 44 while(gcm[ix] != lcm[iv]) : L(4,2) --> ix = 3, iv = 3 L(4,3) --> ix = 3, iv = 4 --> ix = 2, iv = 4 --> ix = 2, iv = 5 --> ix = 1, iv = 5 List of 17 $ call : language dip(x = statfaculty, full.result = "all", debug = 3) $ x : num [1:63] 30 33 35 36 37 37 39 39 39 39 39 40 40 40 40 41 42 43 43 43 ... $ n : int 63 $ dip : num 0.0595 $ lo.hi : int [1:2] 7 44 $ ifault : int 0 $ gcm : int [1:4] 44 43 38 7 $ lcm : int [1:5] 7 11 15 42 44 $ mn : int [1:63] 1 1 2 3 3 5 3 7 7 7 7 7 12 12 12 7 7 7 18 18 ... $ mj : int [1:63] 44 44 15 15 6 15 11 11 11 11 15 15 15 15 42 42 20 20 20 42 ... $ min.is.0 : logi FALSE $ debug : int 3 $ xl : num 39 $ xu : num 54 $ full.result: chr "all" $ GCM : int [1:6] 63 62 7 3 2 1 $ LCM : int [1:5] 1 44 58 59 63 - attr(*, "class")= chr "dip" > > data(faithful) > fE <- faithful$eruptions > str(dip(fE, full = "all", debug = 3), + vec.len= 8) dip() in C: n = 272; starting with 2N*dip = 1. 'dip': LOOP-BEGIN: 2n*D= 1 [low,high] = [ 1,272] : gcm[1:7] = 272, 135, 120, 119, 4, 2, 1 lcm[1:10] = 1, 40, 58, 60, 66, 79, 91, 261, 268, 272 while(gcm[ix] != lcm[iv]) : G(6,2) --> ix = 5, iv = 2 G(5,2) --> ix = 4, iv = 2 L(5,2) --> ix = 4, iv = 3 L(5,3) --> ix = 4, iv = 4 L(5,4) --> ix = 4, iv = 5 L(5,5) --> ix = 4, iv = 6 L(5,6) --> ix = 4, iv = 7 L(5,7) --> ix = 4, iv = 8 G(4,8) --> ix = 3, iv = 8 G(3,8) --> ix = 2, iv = 8 --> ix = 1, iv = 8 --> ix = 1, iv = 9 --> ix = 1, iv = 10 calculating dip .. (dip_l, dip_u) = (50.2553, 3) -> new larger dip 50.2553 (j_best = 91) 'dip': LOOP-BEGIN: 2n*D= 50.255 [low,high] = [120,261] : gcm[1:7] = 261, 260, 252, 181, 146, 135, 120 lcm[1:5] = 120, 124, 233, 246, 261 while(gcm[ix] != lcm[iv]) : L(7,2) --> ix = 6, iv = 3 G(6,3) --> ix = 5, iv = 3 G(5,3) --> ix = 4, iv = 3 G(4,3) --> ix = 3, iv = 3 --> ix = 3, iv = 4 --> ix = 3, iv = 5 --> ix = 2, iv = 5 --> ix = 1, iv = 5 List of 17 $ call : language dip(x = fE, full.result = "all", debug = 3) $ x : num [1:272] 1.6 1.67 1.7 1.73 1.75 1.75 1.75 1.75 1.75 1.75 ... $ n : int 272 $ dip : num 0.0924 $ lo.hi : int [1:2] 120 261 $ ifault : int 0 $ gcm : int [1:7] 261 260 252 181 146 135 120 $ lcm : int [1:5] 120 124 233 246 261 $ mn : int [1:272] 1 1 2 2 4 5 5 5 5 5 5 11 5 13 13 13 13 17 17 13 ... $ mj : int [1:272] 40 40 40 10 10 10 10 10 10 40 12 36 16 16 16 26 19 19 26 26 ... $ min.is.0 : logi FALSE $ debug : int 3 $ xl : num 3.83 $ xu : num 4.83 $ full.result: chr "all" $ GCM : int [1:7] 272 135 120 119 4 2 1 $ LCM : int [1:10] 1 40 58 60 66 79 91 261 268 272 - attr(*, "class")= chr "dip" > > data(precip) > str(dip(precip, full = TRUE, debug = TRUE)) dip() in C: n = 70; starting with 2N*dip = 1. 'dip': LOOP-BEGIN: 2n*D= 1 [low,high] = [ 1, 70]; l_lcm/gcm = ( 6, 4) while(gcm[ix] != lcm[iv]) : ...... calculating dip .. (dip_l, dip_u) = (5, 2.5) -> new larger dip 5 (j_best = 13) 'dip': LOOP-BEGIN: 2n*D= 5 [low,high] = [ 19, 64]; l_lcm/gcm = ( 6, 6) while(gcm[ix] != lcm[iv]) : ........ calculating dip .. (dip_l, dip_u) = (3.875, 3.44828) 'dip': LOOP-BEGIN: 2n*D= 5 [low,high] = [ 31, 55]; l_lcm/gcm = ( 4, 3) while(gcm[ix] != lcm[iv]) : ... List of 15 $ call : language dip(x = precip, full.result = TRUE, debug = TRUE) $ x : num [1:70] 7 7.2 7.8 7.8 11.5 13 14 14.6 15 15.2 ... $ n : int 70 $ dip : num 0.0357 $ lo.hi : int [1:2] 31 55 $ ifault : int 0 $ gcm : int [1:3] 55 49 31 $ lcm : int [1:4] 31 32 35 55 $ mn : int [1:70] 1 1 1 3 1 1 6 7 8 9 ... $ mj : int [1:70] 2 4 4 64 55 10 10 10 10 55 ... $ min.is.0 : logi FALSE $ debug : int 1 $ xl : Named num 35.9 ..- attr(*, "names")= chr "Dallas" $ xu : Named num 43.4 ..- attr(*, "names")= chr "Hartford" $ full.result: logi TRUE - attr(*, "class")= chr "dip" > > ## current qDiptab <--> n = 72'000 is "asymptotic" boundary > set.seed(123); x <- rnorm(72000) > dt72k <- dip.test(x) > ## gave error in qDiptab[i2, ] : subscript out of bounds -- in diptest <= 0.77-0 > stopifnot(all.equal(list(statistic = c(D = 0.0005171098381181), p.value = 1, nobs = 72000L), + dt72k[c("statistic", "p.value", "nobs")], tolerance = 1e-13)) > > > cat('Time elapsed: ', proc.time() - .pt,'\n') # "stats" Time elapsed: 0.092 0.015 0.108 0 0 > > if(!interactive()) warnings() > > proc.time() user system elapsed 0.280 0.043 0.313 diptest/tests/sim1.R0000644000176200001440000000204014602426020014054 0ustar liggesusers#### Very small scale simulation to make the point #### --> See ../stuff/ for much more library(diptest) P.p <- c(1, 5, 10, 25)/100 (P.p <- c(P.p, 1/2, rev(1 - P.p))) N.sim <- 9999 set.seed(94) .p0 <- proc.time() dU100 <- replicate(N.sim, dip(runif(100))) cat('Time elapsed: ', (p1 <- proc.time()) - .p0,'\n'); .p0 <- p1 ## Lynne (2003: P IV, 1.6 GHz): ~7 s ## 2010 (AMD Phenom II X4 925): 1.3 s 100 * round(q100 <- quantile(dU100, p = P.p), 4) plot(density(sqrt(100) * dU100), lwd = 2, col=2, main = expression("Dip distribution" ~~ list(sqrt(n)* D[n], ~ n == 100))) abline(h=0, col="dark gray", lty=3) round(1e4 * quantile(dU100, p = seq(0,1, by = 0.01), names = FALSE)) ##--- an extreme unimodal case -- i.e. very small dip(): set.seed(60); x <- rexp(301,1)^3 hist(x) (dt.x <- dip.test(x)) (dt2 <- dip.test(x, simulate = TRUE)) (dt3 <- dip.test(x, simulate = TRUE, B = 10000)) stopifnot(dt.x$p.value == 1,## <- gave NA earlier dt2$p.value == 1, dt3$p.value == 1) cat('Time elapsed: ', proc.time() - .p0,'\n') # "stats" diptest/tests/mechler-ex.R0000644000176200001440000000107714602426020015245 0ustar liggesuserslibrary(diptest) ## These are from ## the 217-readme.doc file that explains the bug fixed by ## Ferenc Mechler (fmechler@med.cornell.edu). [5/Sep/2002] ## ex1 <- c(0.0198, 0.0198, 0.1961, 0.2898, 0.3184, 0.3687, 0.4336, 0.4987, 0.5661, 0.6530, 0.7476, 0.8555) ex2 <- c(0.0198, 0.1961, 0.2898, 0.3184, 0.3687, 0.4336, 0.4987, 0.5661, 0.6530, 0.7476, 0.8555, 0.9912) ## Multiply them by 10000 here: (D1 <- dip(10000*ex1, full=TRUE, debug=2)) str(D1, digits = 10, vec.len = 12) (D2 <- dip(10000*ex2, full=TRUE, debug=2)) str(D2, digits = 10, vec.len = 12) diptest/tests/mechler-ex.Rout.save0000644000176200001440000001055714602426020016735 0ustar liggesusers R version 2.13.1 Patched (2011-08-09 r56694) Copyright (C) 2011 The R Foundation for Statistical Computing ISBN 3-900051-07-0 Platform: x86_64-unknown-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library(diptest) > ## These are from > ## the 217-readme.doc file that explains the bug fixed by > ## Ferenc Mechler (fmechler@med.cornell.edu). [5/Sep/2002] > ## > ex1 <- c(0.0198, 0.0198, 0.1961, 0.2898, 0.3184, 0.3687, + 0.4336, 0.4987, 0.5661, 0.6530, 0.7476, 0.8555) > > ex2 <- c(0.0198, 0.1961, 0.2898, 0.3184, 0.3687, 0.4336, + 0.4987, 0.5661, 0.6530, 0.7476, 0.8555, 0.9912) > > ## Multiply them by 10000 here: > > (D1 <- dip(10000*ex1, full=TRUE, debug=2)) dip() in C: n = 12; starting with 2N*dip = 1. 'dip': LOOP-BEGIN: 2n*D= 1 [low,high] = [ 1, 12]; l_lcm/gcm = ( 6, 3) while(gcm[ix] != lcm[iv]) : L(3,2) --> ix = 2, iv = 3 G(2,3) --> ix = 1, iv = 3 --> ix = 1, iv = 4 --> ix = 1, iv = 5 --> ix = 1, iv = 6 calculating dip .. (dip_l, dip_u) = (2, 1) -> new larger dip 2 (j_best = 2) 'dip': LOOP-BEGIN: 2n*D= 2 [low,high] = [ 4, 9]; l_lcm/gcm = ( 6, 2) while(gcm[ix] != lcm[iv]) : L(2,2) --> ix = 1, iv = 3 L(2,3) --> ix = 1, iv = 4 --> ix = 1, iv = 5 --> ix = 1, iv = 6 Call: dip(x = 10000 * ex1, full.result = TRUE, debug = 2) n = 12. Dip statistic, D_n = 0.08333333 = 2/(2n) Modal interval [xL, xU] = [x[4], x[9]] = [2898, 5661] GCM and LCM have 2 and 6 nodes inside [xL, xU], respectively. > str(D1, digits = 10, vec.len = 12) List of 15 $ call : language dip(x = 10000 * ex1, full.result = TRUE, debug = 2) $ x : num [1:12] 198 198 1961 2898 3184 3687 4336 4987 5661 6530 7476 8555 $ n : int 12 $ dip : num 0.08333333333 $ lo.hi : int [1:2] 4 9 $ ifault : int 0 $ gcm : int [1:2] 9 4 $ lcm : int [1:6] 4 5 6 7 8 9 $ mn : int [1:12] 1 1 1 1 4 4 4 4 4 4 4 4 $ mj : int [1:12] 2 9 6 5 6 7 8 9 10 11 12 12 $ min.is.0 : logi FALSE $ debug : int 2 $ xl : num 2898 $ xu : num 5661 $ full.result: logi TRUE - attr(*, "class")= chr "dip" > > (D2 <- dip(10000*ex2, full=TRUE, debug=2)) dip() in C: n = 12; starting with 2N*dip = 1. 'dip': LOOP-BEGIN: 2n*D= 1 [low,high] = [ 1, 12]; l_lcm/gcm = ( 6, 4) while(gcm[ix] != lcm[iv]) : G(3,2) --> ix = 2, iv = 2 G(2,2) --> ix = 1, iv = 2 --> ix = 1, iv = 3 --> ix = 1, iv = 4 --> ix = 1, iv = 5 --> ix = 1, iv = 6 calculating dip .. (dip_l, dip_u) = (1, 1) 'dip': LOOP-BEGIN: 2n*D= 1 [low,high] = [ 3, 8]; l_lcm/gcm = ( 6, 2) while(gcm[ix] != lcm[iv]) : L(2,2) --> ix = 1, iv = 3 L(2,3) --> ix = 1, iv = 4 --> ix = 1, iv = 5 --> ix = 1, iv = 6 calculating dip .. (dip_l, dip_u) = (0, 1) 'dip': LOOP-BEGIN: 2n*D= 1 [low,high] = [ 3, 5]; l_lcm/gcm = ( 3, 2) while(gcm[ix] != lcm[iv]) : L(2,2) --> ix = 1, iv = 3 calculating dip .. (dip_l, dip_u) = (0, 1) 'dip': LOOP-BEGIN: 2n*D= 1 [low,high] = [ 3, 4]; l_lcm/gcm = ( 2, 2) ** (l_lcm,l_gcm) = (2,2) ==> d := 1 calculating dip .. (dip_l, dip_u) = (0, 0) No improvement in low = 3 nor high = 4 --> END Call: dip(x = 10000 * ex2, full.result = TRUE, debug = 2) n = 12. Dip statistic, D_n = 0.04166667 = 1/(2n) Modal interval [xL, xU] = [x[3], x[4]] = [2898, 3184] GCM and LCM have 2 and 2 nodes inside [xL, xU], respectively. > str(D2, digits = 10, vec.len = 12) List of 15 $ call : language dip(x = 10000 * ex2, full.result = TRUE, debug = 2) $ x : num [1:12] 198 1961 2898 3184 3687 4336 4987 5661 6530 7476 8555 9912 $ n : int 12 $ dip : num 0.04166666667 $ lo.hi : int [1:2] 3 4 $ ifault : int 0 $ gcm : int [1:2] 4 3 $ lcm : int [1:2] 3 4 $ mn : int [1:12] 1 1 2 3 3 3 3 3 3 3 3 3 $ mj : int [1:12] 8 5 4 5 6 7 8 9 10 11 12 12 $ min.is.0 : logi FALSE $ debug : int 2 $ xl : num 2898 $ xu : num 3184 $ full.result: logi TRUE - attr(*, "class")= chr "dip" > diptest/tests/ex1.R0000644000176200001440000000401515051112005013676 0ustar liggesuserslibrary(diptest) stopifnot(dip(c(1,1,2,2)) == 1/4)# the maximal value possible: two point dist ## very first small "unimodal" example --- the 1/(2*n) result: n <- length(u <- cumsum(0:3)) d <- dip(u, debug=TRUE)# shows the final if() {added by MM} is really needed stopifnot(d == dip(-u), d == 1/(2*n))# exact "=" for n = 4 ! ## Note that I believe this should *not* give 0 (as fmechler@.. did), ## but rather 1/(2n) because that's (1/n) / 2 and ## (1/n) is the correct distance between LCM and GCM ## Small example -- but MM sees difference (32-bit / 64-bit) *and* on M1mac: x <- c(0,2:3,5:6) ## IGNORE_RDIFF_BEGIN d1 <- dip(x, full=TRUE, debug=2) d2 <- dip(6-x, full=TRUE, debug=2) str(d2) # differences to M1mac (!) ## IGNORE_RDIFF_END str(d1) if(!dev.interactive(orNone=TRUE)) pdf("ex1.pdf") par(mfrow = 2:1, mar = .1+c(3,4,2,1), mgp=c(1.5,.6,0), oma = c(0,0,2.1,0)) # plot(d1) abline(v=-1:7, h = seq(0,1,by=0.2), lty="83", col = "gray") # plot(d2) abline(v=-1:7, h = seq(0,1,by=0.2), lty="83", col = "gray") # ## "title" only now mtext("dip() problem with 'mirror x'", side=3, line = 0.8, outer=TRUE, cex = 1.5, font = 2) ## Yong Lu example -- a bit smaller x2 <- c(1, rep(2, 9)) stopifnot(dip(x2) == dip(3 - x2)) str(dip(x2, full=TRUE)) cat('Time elapsed: ', (.pt <- proc.time()),'\n') # "stats" ## Real data examples : data(statfaculty) str(dip(statfaculty, full = "all", debug = 3), vec.len = 8) data(faithful) fE <- faithful$eruptions str(dip(fE, full = "all", debug = 3), vec.len= 8) data(precip) str(dip(precip, full = TRUE, debug = TRUE)) ## current qDiptab <--> n = 72'000 is "asymptotic" boundary set.seed(123); x <- rnorm(72000) dt72k <- dip.test(x) ## gave error in qDiptab[i2, ] : subscript out of bounds -- in diptest <= 0.77-0 stopifnot(all.equal(list(statistic = c(D = 0.0005171098381181), p.value = 1, nobs = 72000L), dt72k[c("statistic", "p.value", "nobs")], tolerance = 1e-13)) cat('Time elapsed: ', proc.time() - .pt,'\n') # "stats" if(!interactive()) warnings() diptest/tests/sim1.Rout.save0000644000176200001440000000600714602426020015550 0ustar liggesusers R Under development (unstable) (2015-03-03 r67931) -- "Unsuffered Consequences" Copyright (C) 2015 The R Foundation for Statistical Computing Platform: x86_64-unknown-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > #### Very small scale simulation to make the point > #### --> See ../stuff/ for much more > library(diptest) > > P.p <- c(1, 5, 10, 25)/100 > (P.p <- c(P.p, 1/2, rev(1 - P.p))) [1] 0.01 0.05 0.10 0.25 0.50 0.75 0.90 0.95 0.99 > > N.sim <- 9999 > set.seed(94) > .p0 <- proc.time() > dU100 <- replicate(N.sim, dip(runif(100))) > cat('Time elapsed: ', (p1 <- proc.time()) - .p0,'\n'); .p0 <- p1 Time elapsed: 0.512 0.085 0.597 0 0 > ## Lynne (2003: P IV, 1.6 GHz): ~7 s > ## 2010 (AMD Phenom II X4 925): 1.3 s > > 100 * round(q100 <- quantile(dU100, p = P.p), 4) 1% 5% 10% 25% 50% 75% 90% 95% 99% 2.29 2.56 2.75 3.08 3.54 4.12 4.70 5.09 5.90 > > plot(density(sqrt(100) * dU100), lwd = 2, col=2, + main = expression("Dip distribution" ~~ + list(sqrt(n)* D[n], ~ n == 100))) > abline(h=0, col="dark gray", lty=3) > > round(1e4 * quantile(dU100, p = seq(0,1, by = 0.01), names = FALSE)) [1] 191 229 239 246 252 256 261 265 268 272 275 277 280 282 285 287 289 292 [19] 294 296 298 300 302 304 305 308 310 312 314 315 317 319 321 323 325 327 [37] 329 331 332 334 336 338 340 341 343 345 347 349 351 352 354 356 358 360 [55] 362 364 366 368 370 372 374 376 379 381 383 385 387 390 393 395 397 400 [73] 403 406 409 412 415 418 421 424 427 431 434 438 442 446 450 455 460 464 [91] 470 476 483 489 499 509 520 539 562 590 773 > > ##--- an extreme unimodal case -- i.e. very small dip(): > set.seed(60); x <- rexp(301,1)^3 > hist(x) > (dt.x <- dip.test(x)) Hartigans' dip test for unimodality / multimodality data: x D = 0.0072617, p-value = 1 alternative hypothesis: non-unimodal, i.e., at least bimodal > (dt2 <- dip.test(x, simulate = TRUE)) Hartigans' dip test for unimodality / multimodality with simulated p-value (based on 2000 replicates) data: x D = 0.0072617, p-value = 1 alternative hypothesis: non-unimodal, i.e., at least bimodal > (dt3 <- dip.test(x, simulate = TRUE, B = 10000)) Hartigans' dip test for unimodality / multimodality with simulated p-value (based on 10000 replicates) data: x D = 0.0072617, p-value = 1 alternative hypothesis: non-unimodal, i.e., at least bimodal > stopifnot(dt.x$p.value == 1,## <- gave NA earlier + dt2$p.value == 1, + dt3$p.value == 1) > > > cat('Time elapsed: ', proc.time() - .p0,'\n') # "stats" Time elapsed: 1.136 0.018 1.158 0 0 > > proc.time() user system elapsed 1.765 0.129 1.935 diptest/.Rinstignore0000644000176200001440000000004114602426020014221 0ustar liggesusersinst/doc/Makefile inst/doc/.*sty diptest/MD50000644000176200001440000000317215051320522012234 0ustar liggesusers173bb33ee2a664b85ff6b68747b68ab3 *ChangeLog 9856e252faef2838a97e48d7e3d483e0 *DESCRIPTION 5484ca26095b4d91e9c46361fc347076 *NAMESPACE 89354fc59648ede8993e21ff9cebc1ba *R/dip.R 02fe1a7617120f0bb6fcc048f22f6358 *R/dipTest.R d5cd9e3ce86553197ee79a6ab33ff787 *README.md 31384704759e05b37b16bdd681c2adb6 *build/vignette.rds c3674b717423e2c07d5b1c69fe49d7f0 *data/exHartigan.R 454c4a99c0a6f204c9e37926aca9d0aa *data/qDiptab.R 611947623a1a556b4d71062df0872d46 *data/statfaculty.R 4aaeab8d2cd7947138ef9913a7452369 *inst/NEWS.Rd a5bcbb7ba9fedce3d26079c68fc900ce *inst/doc/diptest-issues.R 449547d008f74192c033ed0248c11949 *inst/doc/diptest-issues.Rnw 049b20ea5aeeed51fc53182dc88bacc8 *inst/doc/diptest-issues.pdf 5d29fc6a0de189f54eb7d029105a2416 *inst/doc/hist-D11.rda 04e348f7ca28fa7c5d6a3e60fe51c0f1 *inst/extraData/qDiptab.rds 400b4079bc91796e1379e260ffb6f4b2 *man/dip.Rd 212f693484712c1e47c692a184c6e781 *man/dip.test.Rd ab0b9d226b6cfdae34f946333afd4a4a *man/exHartigan.Rd 138e68b2a4629238259c0672b84e7f99 *man/plot.dip.Rd 18ec7d2e14801719f833d26431a0ccc0 *man/qDiptab.Rd a500c43a3efa88aea2c2ae6ca716856b *man/statfaculty.Rd c5acb03d726710431a6bafe4912575ea *src/dip.c 84bd376d18951e8804336f203d25181d *tests/ex1.R dc0db98c93915ab491a5763218d171fa *tests/ex1.Rout.save aed61c181a8fca1547c0b63234c06fbb *tests/mechler-ex.R ec7155d93fb477b8003491a4a9c05f55 *tests/mechler-ex.Rout.save 552400127794e45e18454ffdc84ecf43 *tests/sim1.R 6b96f05babbc4358103c1b6ccaec1bdf *tests/sim1.Rout.save 449547d008f74192c033ed0248c11949 *vignettes/diptest-issues.Rnw a5f57ba90e25afe0cbcc74feffaadcd1 *vignettes/diptest.bib 6fb477b22fca2a12c156ae27aa81a7de *vignettes/myVignette.sty diptest/R/0000755000176200001440000000000014656676536012157 5ustar liggesusersdiptest/R/dip.R0000644000176200001440000001133614602426020013026 0ustar liggesusers### S-interface to Hartigan's algorithm for "The dip test for unimodality" ### ### Beginning: Dario Ringach ### Rest: Martin Maechler dip <- function(x, full.result = FALSE, min.is.0 = FALSE, debug = FALSE) { allRes <- (!is.logical(rFull <- full.result)) if(allRes) { if(full.result %in% c("all")) rFull <- TRUE else stop(gettextf("'full.result' = \"%s\"' is not valid", full.result)) } if(rFull) cl <- match.call() if(is.unsorted(x)) x <- sort(x, method="quick") n <- as.integer(length(x)) r <- .C(diptst, x = as.double(x), n = n, dip = double(1), lo.hi = integer(4), ifault= integer(1), gcm = integer(n), lcm = integer(n), mn = integer(n), mj = integer(n), min.is.0 = as.logical(min.is.0), debug = as.integer(debug)# FALSE/TRUE or 2, 3, ... )[if(rFull) TRUE else "dip"] if(rFull) { l.GL <- r$lo.hi[3:4] length(r$gcm) <- l.GL[1] length(r$lcm) <- l.GL[2] length(r$lo.hi) <- 2L u <- x[r$lo.hi] structure(class = "dip", c(list(call = cl), r, list(xl = u[1], xu = u[2], full.result=full.result), if(allRes) getCM(r$mn, r$mj, n))) } else r[[1]] } getCM <- function(mn, mj, n = length(mn)) { stopifnot(length(mn) <= n, length(mj) <= n) # currently '=='... ## First recover "the full GCM / LCM" - by repeating what happened in C ## in the first "loop" : low <- 1L ; high <- n gcm <- lcm <- integer(n) # pre-allocate! {maybe smaller ?} ## Collect the change points for the GCM from HIGH to LOW. */ gcm[i <- 1L] <- high while(gcm[i] > low) gcm[(i <- i+1L)] <- mn[gcm[i]] length(gcm) <- i ## Collect the change points for the LCM from LOW to HIGH. */ lcm[i <- 1L] <- low while(lcm[i] < high) lcm[(i <- i+1L)] <- mj[lcm[i]] length(lcm) <- i list(GCM = gcm, LCM = lcm) } print.dip <- function(x, digits = getOption("digits"), ...) { stopifnot(is.integer(n <- x$n), is.numeric(D <- x$dip), length(lh <- x$lo.hi) == 2) cat("\nCall:\n", paste(deparse(x$call), sep = "\n", collapse = "\n"), "\n\n", sep = "") xLU.c <- sapply(x$x[lh], formatC, digits=digits, width=1) cat("n = ", n,". Dip statistic, D_n = ", format(D, digits=digits)," = ", format(2*n* D, digits=digits),"/(2n)\n", sprintf(" Modal interval [xL, xU] = [x[%d], x[%d]] = [%s, %s]\n", lh[1], lh[2], xLU.c[1], xLU.c[2]), sprintf(" GCM and LCM have %d and %d nodes inside [xL, xU], respectively", ## 3 5 7 9 1 3 5 7 length(x$gcm), length(x$lcm)), if(x$full.result == "all") sprintf(", and\n%17s %d and %d nodes in [x_1, x_n].\n", "", length(x$GCM), length(x$LCM)) else ".\n", sep="") invisible(x) } aLine <- function(r.dip, lType = c("gcm","lcm","GCM","LCM"), type = "b", col="red3", lwd=1.5, ...) { lType <- match.arg(lType) stopifnot(is.numeric(x <- r.dip$x), length(r.dip$n) == 1, r.dip$n == round(r.dip$n), is.integer(i <- r.dip[[lType]]) # 'gcm' or 'lcm' or component ) e <- if(lType %in% c("gcm","GCM")) .01*min(diff(unique(x))) else 0 i <- i[i != 0] lines(x[i], ecdf(x)(x[i] - e), type=type, col=col, lwd=lwd, ...) } plot.dip <- function(x, do.points=(n < 20), ## <- plot.stepfun() colG="red3", colL="blue3", colM="forest green", col.points=par("col"), col.hor=col.points, ## <- plot.stepfun(): doModal=TRUE, doLegend=TRUE, ...) { stopifnot(is.integer(n <- x$n), is.numeric(D <- x$dip), length(lh <- x$lo.hi) == 2) Fn <- ecdf(x$x) ## and now manipulate the call such that it's plotted nicely cl <- x$call[1:2] cl[[1]] <- as.name("ecdf") ; names(cl)[2] <- "" attr(Fn, "call") <- cl chD <- formatC(D, digits=pmax(3, getOption("digits")-2)) tit <- bquote("Dip" ~~ {D[n] == D[.(n)]} == .(chD)) plot(Fn, do.points=do.points, col.points=col.points, col.hor=col.hor, verticals=TRUE, col.vert = "sky blue", lwd=2, ...) title(tit, adj = 0, line = 1.25) aLine(x, "gcm", col=colG) aLine(x, "lcm", col=colL) if(doCM.2 <- (x$full.result == "all")) { aLine(x, "GCM", col=colG, lty=5) aLine(x, "LCM", col=colL, lty=5) } if(doModal) { x12 <- x$x[lh] abline(v= x12, col = colM, lty = 2) op <- par(mgp = c(3, 1/16, 0))# should not need on.exit(par(op)) here .. axis(3, at=x12, labels = expression(x[L], x[U]), tick=FALSE, col.axis = colM) par(op) } if(doLegend) { txt <- c("greatest convex minorant GCM", ### make sure have *no* [TAB] in next string ! "least concave majorant LCM") t1 <- paste(txt," in [xL, xU]") legend("topleft", bty = "n", if(doCM.2) c(t1, txt) else t1, lwd=1.5, col = c(colG, colL), lty= if(doCM.2) c(1,1,5,5) else 1) } invisible() } diptest/R/dipTest.R0000644000176200001440000000352414656676536013722 0ustar liggesusers##' also called from ../data/qDiptab.R : if(getRversion() < "2.13.0") { rdRDS <- function(..., package = "diptest") .readRDS(system.file(..., package=package)) } else rdRDS <- function(..., package = "diptest") readRDS(system.file(..., package=package, mustWork=TRUE)) dip.test <- function(x, simulate.p.value = FALSE, B = 2000) { DNAME <- deparse(substitute(x)) x <- sort(x[complete.cases(x)]) stopifnot(is.numeric(x)) n <- length(x) # *is* integer D <- dip(x) method <- "Hartigans' dip test for unimodality / multimodality" if(n <= 3) { P <- 1 } else if(simulate.p.value) { method <- paste(method, "with simulated p-value\n\t (based on", B, "replicates)") P <- mean(D <= replicate(B, dip(runif(n)))) } else { ## Long "codetools-compatible" way of data(qDiptab) : qDiptab <- rdRDS("extraData", "qDiptab.rds") dn <- dimnames(qDiptab) max.n <- max(nn <- as.integer(dn[["n"]])) P.s <- as.numeric(dn[["Pr"]]) if(n >= max.n) { ## extrapolate, or rather just use the last n as == "asymptotic" if(n > max.n) message("n = ",n," >= max_n{n in table} = ", max.n, " -- using that as asymptotic value.") n1 <- n0 <- max.n i2 <- i.n <- length(nn) f.n <- 0 } else { n0 <- nn[i.n <- findInterval(n, nn)] n1 <- nn[(i2 <- i.n +1)] f.n <- (n - n0)/(n1 - n0)# in [0, 1] } ## Now "find" y-interval: y.0 <- sqrt(n0)* qDiptab[i.n, ] y.1 <- sqrt(n1)* qDiptab[i2 , ] sD <- sqrt(n) * D P <- 1 - approx(y.0 + f.n*(y.1 - y.0), P.s, rule = 2,# <- [min, max] xout = sD)[["y"]] } structure(list(statistic = c(D = D), p.value = P, nobs = n, alternative = "non-unimodal, i.e., at least bimodal", method = method, data.name = DNAME), class = "htest") } diptest/vignettes/0000755000176200001440000000000015051120370013730 5ustar liggesusersdiptest/vignettes/diptest-issues.Rnw0000644000176200001440000003342014656676537017446 0ustar liggesusers%\documentclass[article]{jss} \documentclass[nojss,article]{jss} % ----- for the package-vignette, don't use JSS logo, etc % % \author{Martin Maechler\\ Seminar f\"ur Statistik \\ ETH Zurich, \ Switzerland % \\\email{maechler@stat.math.ethz.ch}} \author{Martin M\"achler \\ ETH Zurich} \title{Dip Test Distributions, P-values, and other Explorations} % \def\mythanks{a version of this paper, for \pkg{nacopula} 0.4\_4, has been published % in JSS, \url{http://www.jstatsoft.org/v39/i09}.} %% for pretty printing and a nice hypersummary also set: \Plainauthor{Martin M\"achler} %% comma-separated \Plaintitle{Dip Test Distributions, P-values, and other Explorations} % \Shorttitle{} %\date{April 2009 ({\tiny typeset on \tiny\today})} %%\VignetteIndexEntry{Dip Test Distributions, P-values, and other Explorations} %%\VignetteDepends{diptest} \SweaveOpts{engine=R,keep.source=TRUE,strip.white=true} % ^^^^^^^^^^^^^^^^ \SweaveOpts{eps=FALSE,pdf=TRUE,width=7,height=4} %% an abstract and keywords \Abstract{ ... % FIXME ... % FIXME } % \Keywords{MPFR, Abitrary Precision, Multiple Precision Floating-Point, R} %% at least one keyword must be supplied %% publication information %% NOTE: Typically, this can be left commented and will be filled out by the technical editor %% \Volume{13} %% \Issue{9} %% \Month{September} %% \Year{2004} %% \Submitdate{2004-09-29} %% \Acceptdate{2004-09-29} %% The address of (at least) one author should be given %% in the following format: \Address{ Martin M\"achler\\ Seminar f\"ur Statistik, HG G~14.2\\ ETH Zurich\\ 8092 Zurich, Switzerland\\ E-mail: \email{maechler@stat.math.ethz.ch}\\ URL: \url{https://people.math.ethz.ch/~maechler/} } %% It is also possible to add a telephone and fax number %% before the e-mail in the following format: %% Telephone: +43/1/31336-5053 %% Fax: +43/1/31336-734 %% for those who use Sweave please include the following line (with % symbols): %% MM: this is "substituted" by jss.cls: %% need no \usepackage{Sweave.sty} % \usepackage{myVignette} % \usepackage{fullpage}% save trees ;-) --- FIXME use {geometry} package % \usepackage[authoryear,round,longnamesfirst]{natbib} % \bibliographystyle{plainnat} % %% Marius' packages \usepackage[american]{babel}%for American English % \usepackage{microtype}%for character protrusion and font expansion (only with pdflatex) \usepackage{amsmath}%sophisticated mathematical formulas with amstex (includes \text{}) \usepackage{mathtools}%fix amsmath deficiencies \usepackage{amssymb}%sophisticated mathematical symbols with amstex (includes \mathbb{}) % \usepackage{amsthm}%theorem environments % \usepackage{bm}%for bold math symbols: \bm (= bold math) % %NON-STANDARD:\RequirePackage{bbm}%only for indicator functions % \usepackage{enumitem}%for automatic numbering of new enumerate environments % \usepackage[ % format=hang, % % NOT for JSS: labelsep=space, % justification=justified, % singlelinecheck=false%, % % NOT for JSS: labelfont=bf % ]{caption}%for captions % \usepackage{tikz}%sophisticated graphics package % \usepackage{tabularx}%for special table environment (tabularx-table) % \usepackage{booktabs}%for table layout % This is already in jss above -- but withOUT the fontsize=\small part !! \DefineVerbatimEnvironment{Sinput}{Verbatim}{fontsize=\small,fontshape=sl} \DefineVerbatimEnvironment{Soutput}{Verbatim}{fontsize=\small} \DefineVerbatimEnvironment{Scode}{Verbatim}{fontsize=\small,fontshape=sl} % but when submitting, do get rid of too much vertical space between R % input & output, i.e. between Sinput and Soutput: \fvset{listparameters={\setlength{\topsep}{0pt}}}% !! quite an effect! %% % \newcommand*{\R}{\proglang{R}}%{\textsf{R}} \newcommand*{\Arg}[1]{\texttt{\itshape $\langle$#1$\rangle$}} \newcommand*{\file}[1]{{`\normalfont\texttt{#1}'}} \newcommand*{\eps}{\varepsilon} % %% Probability P[.], Expectation E[.] etc \makeatletter %% == subsection of our flexible-style "texab.sty" : \newcommand{\@pkl}{[} % Probability Klammer links \newcommand{\@pkr}{]} \newcommand{\@ekl}{[} % Erwartungswert Klammer links \newcommand{\@ekr}{]} % Erwartungswert Klammer rechts \DeclareMathOperator{\PRSymbol}{P} % Next line (\makeright): if #1 == \left then \right #2 else #1 #2 \newcommand{\makeright}[2]{\ifx#1\left\right#2\else#1#2\fi} %% the real commands \newcommand{\PR}[2][\left] {\PRSymbol #1\@pkl #2 \makeright{#1}{\@pkr}} \newcommand{\ERW}[2][\left] {\ERWSymbol #1\@ekl #2 \makeright{#1}{\@ekr}} \makeatother \newcommand{\isD}{\ {\stackrel{\mathcal{D}}{=}}\ \ } \newcommand*{\iid}{\mbox{ i.i.d. }} % \begin{document} \setkeys{Gin}{width=\textwidth} % Manuel has \setlength{\abovecaptionskip}{-5pt} % %% include your article here, just as usual %% Note that you should use the \pkg{}, \proglang{} and \code{} commands. % \section[About Java]{About \proglang{Java}} %% Note: If there is markup in \(sub)section, then it has to be escape as above. %% Note: These are explained in '?RweaveLatex' : \begin{footnotesize} <>= options(SweaveHooks= list(fig=function() par(mar=c(5.1, 4.1, 1.1, 2.1))), width = 75, digits = 7, # <-- here, keep R's default! prompt = "R> ", # <- "yuck!" - required by JSS continue=" ") set.seed(47) Sys.setenv(LANGUAGE = "en") if(.Platform$OS.type != "windows") Sys.setlocale("LC_MESSAGES","C") ## In order to save() and load() expensive results thisDir <- system.file('doc', package='diptest') ## not yet used: xtraDir <- if(Sys.getenv("USER") == "maechler") "~/R/Pkgs/diptest/stuff" else thisDir res1.file <- file.path(thisDir, "aggr_results.Rdata") <>= if(nzchar(Sys.getenv("R_MM_PKG_CHECKING"))) print( .libPaths() ) @ \end{footnotesize} % \maketitle % \begin{abstract} % \end{abstract} \section[Introduction]{Introduction}% \small~\footnote{\mythanks}} \label{sec:Intro} %% MM FIXME: Need notation $D_n :=$\texttt{dip( runif(n) )}; but more generally, \begin{equation} \label{eq:Dn.F} D_n(F) := D(X_1, X_2, \dots, X_n), \mbox{ \ \ \texttt{where} } X_i \iid, X_i \sim F. \end{equation} \citet{HarJH85} in their ``seminal'' paper on the dip statistic $D_n$ already proved that $ \sqrt{n} \; D_n$ converges in distribution, i.e., \begin{equation} \label{eq:D.infty} \lim_{n\to\infty}\sqrt{n} \; D_n \isD D_\infty. \end{equation} A considerable part of this paper is devoted to explore the distribution of $D_\infty$. \bigskip \section[History of the diptest package]{History of the \texttt{diptest} \textsf{R} package} \citet{HarP85} published an implementation in Fortran of a concrete algorithm, % ALGORITHM AS 217 APPL. STATIST. (1985) VOL.34, NO.3 where the code was also made available on Statlib\footnote{Statlib is now a website, of course, \url{http://lib.stat.cmu.edu/}, but then was \emph{the} preferred way for distributing algorithms for statistical computing, available years before the existence of the WWW, and entailing e-mail and (anonymous) FTP} On July 28, 1994, Dario Ringach, then at NY University, asked on Snews (the mailing list for S and S-plus users) about distributions and was helped by me and then about \texttt{dyn.load} problems, again helped by me. Subsequently he provided me with S-plus code which interfaced to (a \texttt{f2c}ed version of) Hartigan's Fortran code, for computing the dip statistic. and ended the (then private) e-mail with \begin{quotation} I am not going to have time to set this up for submission to StatLib. If you want to do it, please go ahead. Regards, Dario \end{quotation} - several important bug fixes; last one Oct./Nov.~2003 However, the Fortran code file \url{http://lib.stat.cmu.edu/apstat/217}, was last changed {Thu 04 Aug 2005 03:43:28 PM CEST}. We have some results of the dip.dist of \emph{before} the bug fix; notably the ``dip of the dip'' probabilities have changed considerably!! - see rcs log of ../../src/dip.c \section{21st Century Improvement of Hartigan$^2$'s Table} (( Use listing package (or so to more or less ``cut \& paste'' the nice code in \texttt{../../stuff/new-simul.Rout-1e6} )) \section{The Dip in the Dip's Distribution} \label{sec:dip_dip} We have found empirically that the dip distribution itself starts with a ``dip''. Specifically, the minimal possible value of $D_n$ is $\frac{1}{2n}$ \emph{and} the probability of reaching that value, \begin{equation} \label{eq:P.Dn_min} \PR{D_n = \frac{1}{2n}}, \end{equation} is large for small $n$. E.g., consider an approximation of the dip distribution for $n=5$, <>= require("diptest") # after installing it .. D5 <- replicate(10000, dip(runif(5))) hist(D5, breaks=128, main = "Histogram of replicate(10'000, dip(runif(5))))") @ which looks as if there was a bug in the software --- but that look is misleading! Note how the phenomenon is still visible for $n=8$, <>= D8 <- replicate(10000, dip(runif(8))) hist(D8, breaks=128, main = "Histogram of replicate(10'000, dip(runif(8))))") @ Note that there is another phenomenon, in addition to the point mass at $1/(2n)$, particularly visible, if we use \emph{many} replicates, <>= set.seed(11) n <- 11 B.s11 <- 500000 D11 <- replicate(B.s11, dip(runif(n))) <<2nd-small-sample-phenomen--n-eq-11, echo=false>>= if(file.exists(ff <- file.path(thisDir, "hist-D11.rda"))) { load(ff) } else { ## takes a few minutes <> hD11 <- hist(D11, breaks=1e-6+(63:298)/(2*11*64), plot=FALSE) save(hD11, n, B.s11, file= ff) } <<2nd-small-sample-phenomen--n-eq-11, echo=false, fig=true>>= B.str <- format(B.s11, sci=FALSE, big.mark="'") plot(hD11, main = "", ## main = sprintf("Histogram of replicate(%s, dip(runif(%d)))", B.str, n), border=NA, col="dark gray", xlab = substitute("Dip" ~~ D[.N.](U(group("[",list(0,1),"]"))), list(.N. = n))) title(xlab= substitute(B == .B.SIM. ~ "replicates", list(.B.SIM. = B.str)), adj = .88) lcol <- adjustcolor("orange4", 0.4) abline(v = (1:3)/(2*n), col=lcol, lty=3, lwd=2) axis(1, pos=0, at = (1:3)/(2*n), labels = expression(1/22, 2/22, 3/22), col=lcol, col.axis=lcol) @ FIXME:\\ use \file{../../stuff/sim-minProb.R} \\ and \file{../../stuff/minProb-anal.R} Further, it can be seen that the \emph{maximal} dip statistic is $\frac 1 4 = 0.25$ and this upper bound can be reached simply (for even $n$) using the the data $(0,0,\dots,0, \; 1, 1,\dots,1)$, a bi-point mass with equal mass at both points. \section{P-values for the Dip Test} \label{sec:Pvals} Note that it is not obvious how to compute $p$-values for ``the dip test'', as that means determining the distribution of the test statistic, i.e., $D_n$ under the null hypothesis, but a natural null, $H_o: F \in \{F \mathrm{cadlag} \mid f := \frac d{dx} F is unimodal \}$ is too large. Hartigans'(1985) argued for using the uniform $U[0,1]$ i.e., $F'(x) = f(x)= \mathbf{1}_{[0,1]}(x) = [0 \le x \le 1]$ (Iverson bracket) instead, even though they showed that it is not quite the ``least favorable'' one. Following Hartigans', we will define the $p$-value of an observed $d_n$ as \begin{equation} \label{eq:Pval} P_{d_n} := \PR{D_n \ge d_n} := \PR{\mathrm{dip}(U_1,\dots,U_n) \ge d_n}, \ \ \mathrm{where} \ U_i \sim U[0,1], \ \, \iid \end{equation} \subsection{Interpolating the Dip Table} \label{sec:interpol} Because of the asymptotic distribution, $ \lim_{n\to\infty}\sqrt{n} \; D_n \isD D_\infty$, it is makes sense to consider the ``$\sqrt{n} D_n$''--scale, even for finite $n$ values: <>= data(qDiptab) dnqd <- dimnames(qDiptab) (nn. <- as.integer(dnqd[["n"]])) matplot(nn., qDiptab*sqrt(nn.), type ="o", pch=1, cex = 0.4, log="x", xlab="n [log scaled]", ylab = expression(sqrt(n) %*% q[D[n]])) ## Note that 1/2n is the first possible value (with finite mass),, ## clearly visible for (very) small n: lines(nn., sqrt(nn.)/(2*nn.), col=adjustcolor("yellow2",0.5), lwd=3) P.p <- as.numeric(print(noquote(dnqd[["Pr"]]))) ## Now look at one well known data set: D <- dip(x <- faithful$waiting) n <- length(x) points(n, sqrt(n)*D, pch=13, cex=2, col= adjustcolor("blue2",.5), lwd=2) ## a simulated (approximate) $p$-value for D is mean(D <= replicate(10000, dip(runif(n)))) ## ~ 0.002 @ but we can use our table to compute a deterministic (but still approximate, as the table is from simulation too) $p$-value: <>= ## We are in this interval: n0 <- nn.[i.n <- findInterval(n, nn.)] n1 <- nn.[i.n +1] ; c(n0, n1) f.n <- (n - n0)/(n1 - n0)# in [0, 1] ## Now "find" y-interval: y.0 <- sqrt(n0)* qDiptab[i.n ,] y.1 <- sqrt(n1)* qDiptab[i.n+1,] (Pval <- 1 - approx(y.0 + f.n*(y.1 - y.0), P.p, xout = sqrt(n) * D)[["y"]]) ## 0.018095 @ Finally, in May 2011, after several years of people asking for it, I have implemented a \code{dip.test} function which makes use of a --- somewhat more sophisticated --- interpolation scheme like the one above, to compute a $p$-value. As \code{qDiptab} has been based on $10^6$ samples, the interpolation yields accurate $p$-values, unless in very extreme cases. Here is the small ($n=63$) example from Hartigan$^2$, <>= data(statfaculty) dip.test(statfaculty) @ where, from a $p$-value of 8.7\%, we'd conclude that there is not enough evidence against unimodality. \subsection{Asymptotic Dip Distribution} \label{sec:asymp} We have conducted extensive simulations in order to explore the limit distribution of $D_\infty$, i.e., the limit of $\sqrt{n} \; D_n$, (\ref{eq:D.infty}). Our current \R\ code is in \file{ ../../stuff/asymp-distrib.R } but the simulation results (7 Megabytes for each $n$) cannot be assumed to be part of the package, nor maybe even to be simply accessible via the internet. %% is bandwidth a problem ? probably no longer in the near future? %% Maybe \section{Less Conservative Dip Testing} \section{Session Info} <>= toLatex(sessionInfo()) @ \bibliography{diptest} \end{document} diptest/vignettes/myVignette.sty0000644000176200001440000000520514602426020016630 0ustar liggesusers%% originates from ~/R/Pkgs/Matrix/inst/doc/myVignette.sty [April 2009] \RequirePackage{hyperref} \RequirePackage{url} \RequirePackage{amsmath} \RequirePackage{bm}%-> \bm (= bold math) \newcommand{\Slang}{\textsf{S} language} \newcommand{\RR}{\textsf{R}} \newcommand{\email}[1]{\href{mailto:#1}{\normalfont\texttt{#1}}} %- R programming markup \newcommand\code{\bgroup\@codex} \def\@codex#1{{\normalfont\ttfamily\hyphenchar\font=-1 #1}\egroup} \let\env=\code \let\command=\code \newcommand*{\Rfun}[1]{\code{#1()}\index{\RR~function #1}} \newcommand*{\class}[1]{\code{#1}\index{class #1}}% \newcommand*{\pkg}[1]{\code{#1}\index{\RR~package #1}} % \newcommand{\kbd}[1]{{\normalfont\texttt{#1}}} \newcommand{\key}[1]{{\normalfont\texttt{\uppercase{#1}}}} \newcommand\samp{`\bgroup\@noligs\@sampx} \def\@sampx#1{{\normalfont\texttt{#1}}\egroup'} \let\option=\samp \newcommand{\var}[1]{{\normalfont\textsl{#1}}} \newcommand{\file}[1]{{`\normalfont\textsf{#1}'}} \newcommand{\dfn}[1]{{\normalfont\textsl{#1}}} \newcommand{\acronym}[1]{{\normalfont\textsc{\lowercase{#1}}}} \newcommand{\strong}[1]{{\normalfont\fontseries{b}\selectfont #1}} \let\pkg=\strong % \RequirePackage{alltt} \newenvironment{example}{\begin{alltt}}{\end{alltt}} \newenvironment{smallexample}{\begin{alltt}\small}{\end{alltt}} \newenvironment{display}{\list{}{}\item\relax}{\endlist} \newenvironment{smallverbatim}{\small\verbatim}{\endverbatim} % This is already in ``Sweave'' : %% \RequirePackage{fancyvrb} %% \DefineVerbatimEnvironment{Sinput}{Verbatim}{fontsize=\small,fontshape=sl} %% \DefineVerbatimEnvironment{Soutput}{Verbatim}{fontsize=\small} %% \DefineVerbatimEnvironment{Scode}{Verbatim}{fontsize=\small,fontshape=sl} % \newcommand{\FIXME}[1]{\marginpar{ \dots FIXME \emph{#1} \dots}} \newcommand{\TODO}[1]{\par\noindent\textsc{Todo:} \textit{#1}\par} % \newcommand*{\myOp}[1]{{$\left\langle\ensuremath{#1}\right\rangle$}} \newcommand{\noFootnote}[1]{{\small (\textit{#1})}} % %% diptest stuff : % %% Probabily P[.], Expectation E[.] etc %% == subsection of our flexible-style "texab.sty" : \newcommand{\@pkl}{[} % Probability Klammer links \newcommand{\@pkr}{]} \newcommand{\@ekl}{[} % Erwartungswert Klammer links \newcommand{\@ekr}{]} % Erwartungswert Klammer rechts \DeclareMathOperator{\PRSymbol}{P} % Next line (\makeright): if #1 == \left then \right #2 else #1 #2 \newcommand{\makeright}[2]{\ifx#1\left\right#2\else#1#2\fi} %% the real commands \newcommand{\PR}[2][\left] {\PRSymbol #1\@pkl #2 \makeright{#1}{\@pkr}} \newcommand{\ERW}[2][\left] {\ERWSymbol #1\@ekl #2 \makeright{#1}{\@ekr}} \newcommand{\isD}{\ {\stackrel{\mathcal{D}}{=}}\ \ } \newcommand{\iid}{\mbox{ i.i.d. }} diptest/vignettes/diptest.bib0000644000176200001440000000417014602426020016066 0ustar liggesusers@string{AmStat = "The American Statistician"} @string{AnnStat = "Annals of Statistics"} % @string{JASA = "Journal of the American Statistical Association"} @string{AnInStMa = "Annals of the Inst.\ of Stat.\ Math."} @string{JASA = "JASA"} @string{JAppTh = "Journal of Approximation Theory"} @string{JMAA = "Journal of Analysis and Applications"} @string{JRSS = "Journal of the Royal Statistical Society"} %% ALWAYS #~A or #~B! @string{JRSSA = JRSS # "~A, General"} @string{JRSSB = JRSS # "~B"} @string{JRSSC-AS = "Applied Statistics --- " # JRSS # "~C"} @string{NuMath = "Numerische Mathematik"} @string{SIAM = "Society for Industrial and Applied Mathematics"} @string{SSci = "Statistical Science"} @string{StMed = "Statist.\ in Med."}% Statistics in Medicine @string{ScandS = "Scandinavian Journal of Statistics"} @string{JSS = "Journal of Statistical Software"} @string{JSSC = "SIAM Journal on Scientific and Statistical Computing"} % @string{JSSC = "SIAM J. Sci.\ Statist.\ Comput."} @string{JCGS = "Journal of Computational and Graphical Statistics"} % @string{CSDA = "Computational Statistics \& Data Analysis"} @string{CSDA = "Computat.\ Statist.\ Data Anal."} @string{IEEE-ASSP = "IEEE Trans.\ Acoust., Speech, Signal Processing"} % @string{TOMS = "ACM Transactions on Mathematical Software"} % @string{TOMS = "{ACM} Transactions on Mathematical Software (TOMS)"} @string{TOMS = "ACM Trans.\ Math.\ Software"} @string{ETH = "Swiss Federal Institute of Technology (ETH)"} @string{UWstat = "Department of Statistics, University of Washington"} @string{Wiley = "Wiley"} @string{NY = "N.~Y."} @article{HarJH85, Author = {J. A. Hartigan and P. M. Hartigan}, Title = {The Dip Test of Unimodality}, Year = 1985, Journal = AnnStat, Volume = 13, Pages = {70--84}, Keywords = {Multimodality; Isotonic regression; Empirical distribution} } @article{HarP85, author = {P. M. Hartigan}, title = {Computation of the Dip Statistic to Test for Unimodality}, year = 1985, journal = {Applied Statistics}, pages = {320--325}, volume = 34 } %% -- note that ~/bib/master.bib has quite a few more on "modality" testing diptest/data/0000755000176200001440000000000013761214237012645 5ustar liggesusersdiptest/data/statfaculty.R0000644000176200001440000000033414602426020015321 0ustar liggesusersstatfaculty <- c(30,33,35,36,37,37,39,39,39,39,39,40,40,40,40,41,42,43,43,43,44,44,45,45,46, 46,47,47,48,48,48,49,50,50,51,52,52,53,53,53,53,53,54,54,57,57,59,60,60,60, 61,61,61,61,62,62,62,62,63,66,70,72,72) diptest/data/exHartigan.R0000644000176200001440000000025714602426020015054 0ustar liggesusersmessage("'exHartigan' data is identical to 'statfaculty' and hence deprecated.", "\n Use the 'statfaculty' instead") source("statfaculty.R") exHartigan <- statfaculty diptest/data/qDiptab.R0000644000176200001440000000006714602426020014345 0ustar liggesusersqDiptab <- diptest:::rdRDS("extraData", "qDiptab.rds") diptest/src/0000755000176200001440000000000015051120371012510 5ustar liggesusersdiptest/src/dip.c0000644000176200001440000002300314602426020013427 0ustar liggesusers/* ALGORITHM AS 217 APPL. STATIST. (1985) VOL.34, NO.3 @article{HarP85, author = {P. M. Hartigan}, title = {Computation of the Dip Statistic to Test for Unimodality}, year = 1985, journal = {Applied Statistics}, pages = {320--325}, volume = 34 } @article{HarJH85, author = {J. A. Hartigan and P. M. Hartigan}, title = {The Dip Test of Unimodality}, year = 1985, journal = {Ann. of Statistics}, pages = {70--84}, volume = 13 } Does the dip calculation for an ordered vector X using the greatest convex minorant and the least concave majorant, skipping through the data using the change points of these distributions. It returns the dip statistic 'DIP' and the modal interval (XL, XU). === ====== dip.f -- translated by f2c (version of 22 July 1992 22:54:52). Pretty-Edited and extended (debug argument) by Martin Maechler ETH Seminar fuer Statistik 8092 Zurich SWITZERLAND --------------- Two Bug Fixes: ========= 1) July 30 1994 : For unimodal data, gave "infinite loop" (end of code) 2) Oct 31 2003 : Yong Lu : ")" typo in Fortran gave wrong result (larger dip than possible) in some cases */ #include // for the "registration part": #include #include /* Subroutine */ void diptst(const double x[], const int *n_, double *dip, int *lo_hi, int *ifault, int *gcm, int *lcm, int *mn, int *mj, const int *min_is_0, const int *debug) { #define low lo_hi[0] #define high lo_hi[1] #define l_gcm lo_hi[2] #define l_lcm lo_hi[3] const int n = *n_; int mnj, mnmnj, mjk, mjmjk, ig, ih, iv, ix, i, j, k; double dip_l, dip_u, dipnew; /* Parameter adjustments, so I can do "as with index 1" : x[1]..x[n] */ --mj; --mn; --lcm; --gcm; --x; /*-------- Function Body ------------------------------ */ *ifault = 1; if (n <= 0) return; *ifault = 0; /* Check that X is sorted --- if not, return with ifault = 2*/ *ifault = 2; for (k = 2; k <= n; ++k) if (x[k] < x[k - 1]) return; *ifault = 0; /* Check for all values of X identical, */ /* and for 1 <= n < 4. */ /* LOW contains the index of the current estimate of the lower end of the modal interval, HIGH contains the index for the upper end. */ low = 1; high = n; /*-- IDEA: *xl = x[low]; *xu = x[high]; --*/ /* M.Maechler -- speedup: it saves many divisions by n when we just work with * (2n * dip) everywhere but the very end! */ *dip = (*min_is_0) ? 0. : 1.; if (n < 2 || x[n] == x[1]) goto L_END; if(*debug) Rprintf("dip() in C: n = %d; starting with 2N*dip = %g.\n", n, *dip); /* Establish the indices mn[1..n] over which combination is necessary for the convex MINORANT (GCM) fit. */ mn[1] = 1; for (j = 2; j <= n; ++j) { mn[j] = j - 1; while(1) { mnj = mn[j]; mnmnj = mn[mnj]; if (mnj == 1 || ( x[j] - x[mnj]) * (mnj - mnmnj) < (x[mnj] - x[mnmnj]) * (j - mnj)) break; mn[j] = mnmnj; } } /* Establish the indices mj[1..n] over which combination is necessary for the concave MAJORANT (LCM) fit. */ mj[n] = n; for (k = n - 1; k >= 1; k--) { mj[k] = k + 1; while(1) { mjk = mj[k]; mjmjk = mj[mjk]; if (mjk == n || ( x[k] - x[mjk]) * (mjk - mjmjk) < (x[mjk] - x[mjmjk]) * (k - mjk)) break; mj[k] = mjmjk; } } /* ----------------------- Start the cycling. ------------------------------- */ LOOP_Start: /* Collect the change points for the GCM from HIGH to LOW. */ gcm[1] = high; for(i = 1; gcm[i] > low; i++) gcm[i+1] = mn[gcm[i]]; ig = l_gcm = i; // l_gcm == relevant_length(GCM) ix = ig - 1; // ix, ig are counters for the convex minorant. /* Collect the change points for the LCM from LOW to HIGH. */ lcm[1] = low; for(i = 1; lcm[i] < high; i++) lcm[i+1] = mj[lcm[i]]; ih = l_lcm = i; // l_lcm == relevant_length(LCM) iv = 2; // iv, ih are counters for the concave majorant. if(*debug) { Rprintf("'dip': LOOP-BEGIN: 2n*D= %-8.5g [low,high] = [%3d,%3d]", *dip, low,high); if(*debug >= 3) { Rprintf(" :\n gcm[1:%d] = ", l_gcm); for(i = 1; i <= l_gcm; i++) Rprintf("%d%s", gcm[i], (i < l_gcm)? ", " : "\n"); Rprintf(" lcm[1:%d] = ", l_lcm); for(i = 1; i <= l_lcm; i++) Rprintf("%d%s", lcm[i], (i < l_lcm)? ", " : "\n"); } else { // debug <= 2 : Rprintf("; l_lcm/gcm = (%2d,%2d)\n", l_lcm,l_gcm); } } /* Find the largest distance greater than 'DIP' between the GCM and * the LCM from LOW to HIGH. */ // FIXME: should provide LDOUBLE or something like it long double d = 0.;// <<-- see if this makes 32-bit/64-bit difference go.. if (l_gcm != 2 || l_lcm != 2) { if(*debug) Rprintf(" while(gcm[ix] != lcm[iv]) :%s", (*debug >= 2) ? "\n" : " "); do { /* gcm[ix] != lcm[iv] (after first loop) */ long double dx; int gcmix = gcm[ix], lcmiv = lcm[iv]; if (gcmix > lcmiv) { /* If the next point of either the GCM or LCM is from the LCM, * calculate the distance here. */ int gcmi1 = gcm[ix + 1]; dx = (lcmiv - gcmi1 + 1) - ((long double) x[lcmiv] - x[gcmi1]) * (gcmix - gcmi1)/(x[gcmix] - x[gcmi1]); ++iv; if (dx >= d) { d = dx; ig = ix + 1; ih = iv - 1; if(*debug >= 2) Rprintf(" L(%d,%d)", ig,ih); } } else { /* If the next point of either the GCM or LCM is from the GCM, * calculate the distance here. */ int lcmiv1 = lcm[iv - 1]; /* Fix by Yong Lu {symmetric to above!}; original Fortran: only ")" misplaced! :*/ dx = ((long double)x[gcmix] - x[lcmiv1]) * (lcmiv - lcmiv1) / (x[lcmiv] - x[lcmiv1])- (gcmix - lcmiv1 - 1); --ix; if (dx >= d) { d = dx; ig = ix + 1; ih = iv; if(*debug >= 2) Rprintf(" G(%d,%d)", ig,ih); } } if (ix < 1) ix = 1; if (iv > l_lcm) iv = l_lcm; if(*debug) { if(*debug >= 2) Rprintf(" --> ix = %d, iv = %d\n", ix,iv); else Rprintf("."); } } while (gcm[ix] != lcm[iv]); if(*debug && *debug < 2) Rprintf("\n"); } else { /* l_gcm or l_lcm == 2 */ d = (*min_is_0) ? 0. : 1.; if(*debug) Rprintf(" ** (l_lcm,l_gcm) = (%d,%d) ==> d := %g\n", l_lcm, l_gcm, (double)d); } if (d < *dip) goto L_END; /* Calculate the DIPs for the current LOW and HIGH. */ if(*debug) Rprintf(" calculating dip .."); int j_best, j_l = -1, j_u = -1; /* The DIP for the convex minorant. */ dip_l = 0.; for (j = ig; j < l_gcm; ++j) { double max_t = 1.; int j_ = -1, jb = gcm[j + 1], je = gcm[j]; if (je - jb > 1 && x[je] != x[jb]) { double C = (je - jb) / (x[je] - x[jb]); for (int jj = jb; jj <= je; ++jj) { double t = (jj - jb + 1) - (x[jj] - x[jb]) * C; if (max_t < t) { max_t = t; j_ = jj; } } } if (dip_l < max_t) { dip_l = max_t; j_l = j_; } } /* The DIP for the concave majorant. */ dip_u = 0.; for (j = ih; j < l_lcm; ++j) { double max_t = 1.; int j_ = -1, jb = lcm[j], je = lcm[j + 1]; if (je - jb > 1 && x[je] != x[jb]) { double C = (je - jb) / (x[je] - x[jb]); for (int jj = jb; jj <= je; ++jj) { double t = (x[jj] - x[jb]) * C - (jj - jb - 1); if (max_t < t) { max_t = t; j_ = jj; } } } if (dip_u < max_t) { dip_u = max_t; j_u = j_; } } if(*debug) Rprintf(" (dip_l, dip_u) = (%g, %g)", dip_l, dip_u); /* Determine the current maximum. */ if(dip_u > dip_l) { dipnew = dip_u; j_best = j_u; } else { dipnew = dip_l; j_best = j_l; } if (*dip < dipnew) { *dip = dipnew; if(*debug) Rprintf(" -> new larger dip %g (j_best = %d)\n", dipnew, j_best); } else if(*debug) Rprintf("\n"); /*--- The following if-clause is NECESSARY (may loop infinitely otherwise)! --- Martin Maechler, Statistics, ETH Zurich, July 30 1994 ---------- */ if (low == gcm[ig] && high == lcm[ih]) { if(*debug) Rprintf("No improvement in low = %d nor high = %d --> END\n", low, high); } else { low = gcm[ig]; high = lcm[ih]; goto LOOP_Start; /* Recycle */ } /*---------------------------------------------------------------------------*/ L_END: /* do this in the caller : * *xl = x[low]; *xu = x[high]; * rather return the (low, high) indices -- automagically via lo_hi[] */ *dip /= (2*n); return; } /* diptst */ #undef low #undef high //----------------- Registration <==> ../NAMESPACE #define CDEF(name) {#name, (DL_FUNC) &name, sizeof(name ## _t)/sizeof(name ## _t[0]), name ##_t} #define CALLDEF(name, n) {#name, (DL_FUNC) &name, n} // void diptst(double *x, int *n_, // double *dip, int *lo_hi, int *ifault, // int *gcm, int *lcm, int *mn, int *mj, // int *min_is_0, int *debug) static R_NativePrimitiveArgType diptst_t[] = { REALSXP, INTSXP, /* dip: */ REALSXP, INTSXP, INTSXP, /* gcm: */ INTSXP, INTSXP, INTSXP, INTSXP, /* min_is_0:*/ LGLSXP, INTSXP }; static const R_CMethodDef CEntries[] = { CDEF(diptst), {NULL, NULL, 0} }; /* static R_CallMethodDef CallEntries[] = { */ /* CALLDEF(sinc_c, 1), */ /* {NULL, NULL, 0} */ /* }; */ /** * register routines * @param dll pointer * @return none * @author Martin Maechler */ void #ifdef HAVE_VISIBILITY_ATTRIBUTE __attribute__ ((visibility ("default"))) #endif R_init_diptest(DllInfo *dll) { R_registerRoutines(dll, CEntries, NULL, NULL, NULL); /* R_registerRoutines(dll, CEntries, CallEntries, NULL, NULL); */ R_useDynamicSymbols(dll, FALSE); } diptest/ChangeLog0000644000176200001440000001047314602426020013501 0ustar liggesusers2013-07-09 Martin Maechler * R/dipTest.R (rdRDS): rewrite (R <= 2.13.0) such that CRAN checks are happy. 2012-08-07 Martin Maechler * R/dipTest.R (dip.test): state 'alternative'. 2012-08-02 Martin Maechler * R/dipTest.R (rdRDS): utility to enable pre-R-2.13, also used in * data/qDiptab.R: 2012-04-17 Martin Maechler * DESCRIPTION (Version): 0.75-3, released to CRAN ... * R/dipTest.R (dip.test): more careful with approx() extrapolation. 2011-08-19 Martin Maechler * R/dip.R (plot.dip): cosmetic (to happify CRAN) 2011-08-10 Martin Maechler * inst/doc/diptest-issues.Rnw: at least now mention dip.test(). 2011-08-10 Martin Maechler * DESCRIPTION (Version): 0.75-1, released to CRAN today. * R/dipTest.R (dip.test): use readRDS() instead of data() in the function. 2011-05-25 Martin Maechler * R/dip.R (print.dip, plot.dip): show the extra GCM/LCM's. * man/plot.dip.Rd: document plot.dip() 2011-05-20 Martin Maechler * DESCRIPTION (Version): 0.75-0; not released, just sent to Nick Cox. 2011-05-19 Martin Maechler * R/dipTest.R (dip.test): finally add a dip.test(), with a P-value. 2011-05-17 Martin Maechler * NAMESPACE: start using * data/exHartigan.R: add deprecation message, and use statfaculty. * DESCRIPTION: hence drop 'Lazydata' for now. * man/statfaculty.Rd: also mention 'exHartigan' which is now deprecated. * R/dip.R (dip): new 'min.is.0' argument; store 'call' and return class "dip" when 'full.result' is true. Further, only return the finally effective parts of LCM & GCM. Allow 'debug' to be integer > 1, and support that in (print.dip, plot.dip): methods, notably the plot which draws the LCM and GCM. * src/dip.c (diptst): allow for more debug output; also return the lengths of 'gcm' and 'lcm'. 2011-05-15 Martin Maechler * DESCRIPTION (Version): 0.30-0 * src/dip.c (diptst): simplification: return 1/(2N) for N < 2 or all x[j] identical; instead of zero for N < 4 or all x[] identical. This finally makes dip(x1) == dip(x2) when x1 <- rep(1,n) and x2 <- c(0.999999999, rep(1, n-1)). 2011-05-14 Martin Maechler * inst/doc/diptest-issues.Rnw: finally look into computing P-values from the table. TODO: make into function 2010-08-11 Martin Maechler * DESCRIPTION (Version): 0.25-3 2008-12-22 Martin Maechler * man/dip.Rd: add note and link to qDiptab 2004-08-12 Martin Maechler * DESCRIPTION (Version): 0.25-1 * man/statfaculty.Rd: add missing "{" after "source" 2003-12-03 Martin Maechler * man/qDiptab.Rd: names(dimnames) in example 2003-11-29 Martin Maechler * DESCRIPTION (Date): --> for release * man/qDiptab.Rd: one million simulations! * data/qDiptab.rda: new data from simulation with symmetry fix; the dimnames are now named 'n' and 'Pr'. * man/dip.Rd: describe bug fix 2003-11-13 Martin Maechler * DESCRIPTION (Version): 0.25-0 2003-10-31 Martin Maechler * src/dip.c (diptst): o symmetry fix by Yong Lu -- changes results! (now <= 0.25 !) ================ o speedup by myself: not dividing by N but at the end; o return 2-index into x, instead of (xl,xu) * R/dip.R (dip): new .C() interface * tests/mechler-ex.R: the two examples from Ferenc Mechler's Statlib readme file (on his "fix" to the diptst fortran code). * man/dip.Rd: describe full return list (for full.result = T) 2003-07-14 Martin Maechler * man/qDiptab.Rd: "large" scale simulation * data/qDiptab.rda: table of quantiles 2003-07-11 Martin Maechler * tests/ex1.R: added testing examples; 3 data sets * tests/sim1.R: small simulation (~ as Hartigan) 2001-01-01 Martin M鋍hler * DESCRIPTION (Version): 0.9-1 added `Maintainer' field diptest/NAMESPACE0000644000176200001440000000052414602426020013142 0ustar liggesusersuseDynLib(diptest, .registration=TRUE)# <--> src/dip.c 2nd part importFrom("graphics", abline, axis, legend, lines, par, title) importFrom("stats", approx, complete.cases, ecdf, runif) export(dip) export(dip.test) ## export(aLine, getCM) S3method(print, dip) S3method(plot, dip) diptest/inst/0000755000176200001440000000000014656676536012733 5ustar liggesusersdiptest/inst/doc/0000755000176200001440000000000015051120370013442 5ustar liggesusersdiptest/inst/doc/diptest-issues.Rnw0000644000176200001440000003342014656676537017160 0ustar liggesusers%\documentclass[article]{jss} \documentclass[nojss,article]{jss} % ----- for the package-vignette, don't use JSS logo, etc % % \author{Martin Maechler\\ Seminar f\"ur Statistik \\ ETH Zurich, \ Switzerland % \\\email{maechler@stat.math.ethz.ch}} \author{Martin M\"achler \\ ETH Zurich} \title{Dip Test Distributions, P-values, and other Explorations} % \def\mythanks{a version of this paper, for \pkg{nacopula} 0.4\_4, has been published % in JSS, \url{http://www.jstatsoft.org/v39/i09}.} %% for pretty printing and a nice hypersummary also set: \Plainauthor{Martin M\"achler} %% comma-separated \Plaintitle{Dip Test Distributions, P-values, and other Explorations} % \Shorttitle{} %\date{April 2009 ({\tiny typeset on \tiny\today})} %%\VignetteIndexEntry{Dip Test Distributions, P-values, and other Explorations} %%\VignetteDepends{diptest} \SweaveOpts{engine=R,keep.source=TRUE,strip.white=true} % ^^^^^^^^^^^^^^^^ \SweaveOpts{eps=FALSE,pdf=TRUE,width=7,height=4} %% an abstract and keywords \Abstract{ ... % FIXME ... % FIXME } % \Keywords{MPFR, Abitrary Precision, Multiple Precision Floating-Point, R} %% at least one keyword must be supplied %% publication information %% NOTE: Typically, this can be left commented and will be filled out by the technical editor %% \Volume{13} %% \Issue{9} %% \Month{September} %% \Year{2004} %% \Submitdate{2004-09-29} %% \Acceptdate{2004-09-29} %% The address of (at least) one author should be given %% in the following format: \Address{ Martin M\"achler\\ Seminar f\"ur Statistik, HG G~14.2\\ ETH Zurich\\ 8092 Zurich, Switzerland\\ E-mail: \email{maechler@stat.math.ethz.ch}\\ URL: \url{https://people.math.ethz.ch/~maechler/} } %% It is also possible to add a telephone and fax number %% before the e-mail in the following format: %% Telephone: +43/1/31336-5053 %% Fax: +43/1/31336-734 %% for those who use Sweave please include the following line (with % symbols): %% MM: this is "substituted" by jss.cls: %% need no \usepackage{Sweave.sty} % \usepackage{myVignette} % \usepackage{fullpage}% save trees ;-) --- FIXME use {geometry} package % \usepackage[authoryear,round,longnamesfirst]{natbib} % \bibliographystyle{plainnat} % %% Marius' packages \usepackage[american]{babel}%for American English % \usepackage{microtype}%for character protrusion and font expansion (only with pdflatex) \usepackage{amsmath}%sophisticated mathematical formulas with amstex (includes \text{}) \usepackage{mathtools}%fix amsmath deficiencies \usepackage{amssymb}%sophisticated mathematical symbols with amstex (includes \mathbb{}) % \usepackage{amsthm}%theorem environments % \usepackage{bm}%for bold math symbols: \bm (= bold math) % %NON-STANDARD:\RequirePackage{bbm}%only for indicator functions % \usepackage{enumitem}%for automatic numbering of new enumerate environments % \usepackage[ % format=hang, % % NOT for JSS: labelsep=space, % justification=justified, % singlelinecheck=false%, % % NOT for JSS: labelfont=bf % ]{caption}%for captions % \usepackage{tikz}%sophisticated graphics package % \usepackage{tabularx}%for special table environment (tabularx-table) % \usepackage{booktabs}%for table layout % This is already in jss above -- but withOUT the fontsize=\small part !! \DefineVerbatimEnvironment{Sinput}{Verbatim}{fontsize=\small,fontshape=sl} \DefineVerbatimEnvironment{Soutput}{Verbatim}{fontsize=\small} \DefineVerbatimEnvironment{Scode}{Verbatim}{fontsize=\small,fontshape=sl} % but when submitting, do get rid of too much vertical space between R % input & output, i.e. between Sinput and Soutput: \fvset{listparameters={\setlength{\topsep}{0pt}}}% !! quite an effect! %% % \newcommand*{\R}{\proglang{R}}%{\textsf{R}} \newcommand*{\Arg}[1]{\texttt{\itshape $\langle$#1$\rangle$}} \newcommand*{\file}[1]{{`\normalfont\texttt{#1}'}} \newcommand*{\eps}{\varepsilon} % %% Probability P[.], Expectation E[.] etc \makeatletter %% == subsection of our flexible-style "texab.sty" : \newcommand{\@pkl}{[} % Probability Klammer links \newcommand{\@pkr}{]} \newcommand{\@ekl}{[} % Erwartungswert Klammer links \newcommand{\@ekr}{]} % Erwartungswert Klammer rechts \DeclareMathOperator{\PRSymbol}{P} % Next line (\makeright): if #1 == \left then \right #2 else #1 #2 \newcommand{\makeright}[2]{\ifx#1\left\right#2\else#1#2\fi} %% the real commands \newcommand{\PR}[2][\left] {\PRSymbol #1\@pkl #2 \makeright{#1}{\@pkr}} \newcommand{\ERW}[2][\left] {\ERWSymbol #1\@ekl #2 \makeright{#1}{\@ekr}} \makeatother \newcommand{\isD}{\ {\stackrel{\mathcal{D}}{=}}\ \ } \newcommand*{\iid}{\mbox{ i.i.d. }} % \begin{document} \setkeys{Gin}{width=\textwidth} % Manuel has \setlength{\abovecaptionskip}{-5pt} % %% include your article here, just as usual %% Note that you should use the \pkg{}, \proglang{} and \code{} commands. % \section[About Java]{About \proglang{Java}} %% Note: If there is markup in \(sub)section, then it has to be escape as above. %% Note: These are explained in '?RweaveLatex' : \begin{footnotesize} <>= options(SweaveHooks= list(fig=function() par(mar=c(5.1, 4.1, 1.1, 2.1))), width = 75, digits = 7, # <-- here, keep R's default! prompt = "R> ", # <- "yuck!" - required by JSS continue=" ") set.seed(47) Sys.setenv(LANGUAGE = "en") if(.Platform$OS.type != "windows") Sys.setlocale("LC_MESSAGES","C") ## In order to save() and load() expensive results thisDir <- system.file('doc', package='diptest') ## not yet used: xtraDir <- if(Sys.getenv("USER") == "maechler") "~/R/Pkgs/diptest/stuff" else thisDir res1.file <- file.path(thisDir, "aggr_results.Rdata") <>= if(nzchar(Sys.getenv("R_MM_PKG_CHECKING"))) print( .libPaths() ) @ \end{footnotesize} % \maketitle % \begin{abstract} % \end{abstract} \section[Introduction]{Introduction}% \small~\footnote{\mythanks}} \label{sec:Intro} %% MM FIXME: Need notation $D_n :=$\texttt{dip( runif(n) )}; but more generally, \begin{equation} \label{eq:Dn.F} D_n(F) := D(X_1, X_2, \dots, X_n), \mbox{ \ \ \texttt{where} } X_i \iid, X_i \sim F. \end{equation} \citet{HarJH85} in their ``seminal'' paper on the dip statistic $D_n$ already proved that $ \sqrt{n} \; D_n$ converges in distribution, i.e., \begin{equation} \label{eq:D.infty} \lim_{n\to\infty}\sqrt{n} \; D_n \isD D_\infty. \end{equation} A considerable part of this paper is devoted to explore the distribution of $D_\infty$. \bigskip \section[History of the diptest package]{History of the \texttt{diptest} \textsf{R} package} \citet{HarP85} published an implementation in Fortran of a concrete algorithm, % ALGORITHM AS 217 APPL. STATIST. (1985) VOL.34, NO.3 where the code was also made available on Statlib\footnote{Statlib is now a website, of course, \url{http://lib.stat.cmu.edu/}, but then was \emph{the} preferred way for distributing algorithms for statistical computing, available years before the existence of the WWW, and entailing e-mail and (anonymous) FTP} On July 28, 1994, Dario Ringach, then at NY University, asked on Snews (the mailing list for S and S-plus users) about distributions and was helped by me and then about \texttt{dyn.load} problems, again helped by me. Subsequently he provided me with S-plus code which interfaced to (a \texttt{f2c}ed version of) Hartigan's Fortran code, for computing the dip statistic. and ended the (then private) e-mail with \begin{quotation} I am not going to have time to set this up for submission to StatLib. If you want to do it, please go ahead. Regards, Dario \end{quotation} - several important bug fixes; last one Oct./Nov.~2003 However, the Fortran code file \url{http://lib.stat.cmu.edu/apstat/217}, was last changed {Thu 04 Aug 2005 03:43:28 PM CEST}. We have some results of the dip.dist of \emph{before} the bug fix; notably the ``dip of the dip'' probabilities have changed considerably!! - see rcs log of ../../src/dip.c \section{21st Century Improvement of Hartigan$^2$'s Table} (( Use listing package (or so to more or less ``cut \& paste'' the nice code in \texttt{../../stuff/new-simul.Rout-1e6} )) \section{The Dip in the Dip's Distribution} \label{sec:dip_dip} We have found empirically that the dip distribution itself starts with a ``dip''. Specifically, the minimal possible value of $D_n$ is $\frac{1}{2n}$ \emph{and} the probability of reaching that value, \begin{equation} \label{eq:P.Dn_min} \PR{D_n = \frac{1}{2n}}, \end{equation} is large for small $n$. E.g., consider an approximation of the dip distribution for $n=5$, <>= require("diptest") # after installing it .. D5 <- replicate(10000, dip(runif(5))) hist(D5, breaks=128, main = "Histogram of replicate(10'000, dip(runif(5))))") @ which looks as if there was a bug in the software --- but that look is misleading! Note how the phenomenon is still visible for $n=8$, <>= D8 <- replicate(10000, dip(runif(8))) hist(D8, breaks=128, main = "Histogram of replicate(10'000, dip(runif(8))))") @ Note that there is another phenomenon, in addition to the point mass at $1/(2n)$, particularly visible, if we use \emph{many} replicates, <>= set.seed(11) n <- 11 B.s11 <- 500000 D11 <- replicate(B.s11, dip(runif(n))) <<2nd-small-sample-phenomen--n-eq-11, echo=false>>= if(file.exists(ff <- file.path(thisDir, "hist-D11.rda"))) { load(ff) } else { ## takes a few minutes <> hD11 <- hist(D11, breaks=1e-6+(63:298)/(2*11*64), plot=FALSE) save(hD11, n, B.s11, file= ff) } <<2nd-small-sample-phenomen--n-eq-11, echo=false, fig=true>>= B.str <- format(B.s11, sci=FALSE, big.mark="'") plot(hD11, main = "", ## main = sprintf("Histogram of replicate(%s, dip(runif(%d)))", B.str, n), border=NA, col="dark gray", xlab = substitute("Dip" ~~ D[.N.](U(group("[",list(0,1),"]"))), list(.N. = n))) title(xlab= substitute(B == .B.SIM. ~ "replicates", list(.B.SIM. = B.str)), adj = .88) lcol <- adjustcolor("orange4", 0.4) abline(v = (1:3)/(2*n), col=lcol, lty=3, lwd=2) axis(1, pos=0, at = (1:3)/(2*n), labels = expression(1/22, 2/22, 3/22), col=lcol, col.axis=lcol) @ FIXME:\\ use \file{../../stuff/sim-minProb.R} \\ and \file{../../stuff/minProb-anal.R} Further, it can be seen that the \emph{maximal} dip statistic is $\frac 1 4 = 0.25$ and this upper bound can be reached simply (for even $n$) using the the data $(0,0,\dots,0, \; 1, 1,\dots,1)$, a bi-point mass with equal mass at both points. \section{P-values for the Dip Test} \label{sec:Pvals} Note that it is not obvious how to compute $p$-values for ``the dip test'', as that means determining the distribution of the test statistic, i.e., $D_n$ under the null hypothesis, but a natural null, $H_o: F \in \{F \mathrm{cadlag} \mid f := \frac d{dx} F is unimodal \}$ is too large. Hartigans'(1985) argued for using the uniform $U[0,1]$ i.e., $F'(x) = f(x)= \mathbf{1}_{[0,1]}(x) = [0 \le x \le 1]$ (Iverson bracket) instead, even though they showed that it is not quite the ``least favorable'' one. Following Hartigans', we will define the $p$-value of an observed $d_n$ as \begin{equation} \label{eq:Pval} P_{d_n} := \PR{D_n \ge d_n} := \PR{\mathrm{dip}(U_1,\dots,U_n) \ge d_n}, \ \ \mathrm{where} \ U_i \sim U[0,1], \ \, \iid \end{equation} \subsection{Interpolating the Dip Table} \label{sec:interpol} Because of the asymptotic distribution, $ \lim_{n\to\infty}\sqrt{n} \; D_n \isD D_\infty$, it is makes sense to consider the ``$\sqrt{n} D_n$''--scale, even for finite $n$ values: <>= data(qDiptab) dnqd <- dimnames(qDiptab) (nn. <- as.integer(dnqd[["n"]])) matplot(nn., qDiptab*sqrt(nn.), type ="o", pch=1, cex = 0.4, log="x", xlab="n [log scaled]", ylab = expression(sqrt(n) %*% q[D[n]])) ## Note that 1/2n is the first possible value (with finite mass),, ## clearly visible for (very) small n: lines(nn., sqrt(nn.)/(2*nn.), col=adjustcolor("yellow2",0.5), lwd=3) P.p <- as.numeric(print(noquote(dnqd[["Pr"]]))) ## Now look at one well known data set: D <- dip(x <- faithful$waiting) n <- length(x) points(n, sqrt(n)*D, pch=13, cex=2, col= adjustcolor("blue2",.5), lwd=2) ## a simulated (approximate) $p$-value for D is mean(D <= replicate(10000, dip(runif(n)))) ## ~ 0.002 @ but we can use our table to compute a deterministic (but still approximate, as the table is from simulation too) $p$-value: <>= ## We are in this interval: n0 <- nn.[i.n <- findInterval(n, nn.)] n1 <- nn.[i.n +1] ; c(n0, n1) f.n <- (n - n0)/(n1 - n0)# in [0, 1] ## Now "find" y-interval: y.0 <- sqrt(n0)* qDiptab[i.n ,] y.1 <- sqrt(n1)* qDiptab[i.n+1,] (Pval <- 1 - approx(y.0 + f.n*(y.1 - y.0), P.p, xout = sqrt(n) * D)[["y"]]) ## 0.018095 @ Finally, in May 2011, after several years of people asking for it, I have implemented a \code{dip.test} function which makes use of a --- somewhat more sophisticated --- interpolation scheme like the one above, to compute a $p$-value. As \code{qDiptab} has been based on $10^6$ samples, the interpolation yields accurate $p$-values, unless in very extreme cases. Here is the small ($n=63$) example from Hartigan$^2$, <>= data(statfaculty) dip.test(statfaculty) @ where, from a $p$-value of 8.7\%, we'd conclude that there is not enough evidence against unimodality. \subsection{Asymptotic Dip Distribution} \label{sec:asymp} We have conducted extensive simulations in order to explore the limit distribution of $D_\infty$, i.e., the limit of $\sqrt{n} \; D_n$, (\ref{eq:D.infty}). Our current \R\ code is in \file{ ../../stuff/asymp-distrib.R } but the simulation results (7 Megabytes for each $n$) cannot be assumed to be part of the package, nor maybe even to be simply accessible via the internet. %% is bandwidth a problem ? probably no longer in the near future? %% Maybe \section{Less Conservative Dip Testing} \section{Session Info} <>= toLatex(sessionInfo()) @ \bibliography{diptest} \end{document} diptest/inst/doc/hist-D11.rda0000644000176200001440000000714414602426020015434 0ustar liggesusers碲yXG饸Q艃 (牅5甐IPs`硝翲(1\<睞M紞褁 9蘿!姭Q4j<#o 腸颀宛匲遟鋣爵tu酾{獓jF嘙i>9cL胜-閣z賂J$攆謺檃絳3证 絭牬④釃獈-N1帶{, 悌麤郠逇П澩"淰赏<出齶x蝴屜N骈 8叵 O?单趡蚡~8(W圭?衩)函溢=埽p徛= 7n 笝p3醘=,鎙ㄝ撉硞v芢檛揼E鬶an蹎gヤ>食 溓唱,&靠沢粡r=熠牨<;a五 黿鼍}&蜢S氟} 椓暳暳暳暳暳蛠7n腹ps徭峦厸 7n<竬p筻媪蛢珋珋珋珋珋7n>軀根p筢-[n蹷竻p -刐n"窫p嬥-哰 n1躡%pK鄸-乕W W W W W W n)躌弗pK岐榗7摴数摼pU衒遾荱梦煫嫉棲": 绥獎鐳蹀揬時$糭-餍沭:*|骶gA[:暏阡繳U殟馻\ W W W W W W W W W W WWWWWWWWWWWW W W W W W W W W W W WWWWWWWWWWWWWWWWWWWWWW  nY終},u片汄13%堚MNC橨橢鶘=%漴椇n昕%-(TO9/贶]((⿺囋狘L]|_蔔姍1;赀鞱3f繈簕犄*s\F>5wd)幈?∏侎'99緾莝翗=17緟宾t霕藰#Ga澪 Jw厧<)](瘎>g屭圷9[愕5镟G<焃_踓,b}^得&#圣e %瘮晋骿鶝醅鏡退wHz忎y位寢绻翍w']=蚒涽.3舐矕M仆冝洐姐^~F譟^尖N栖辄t圂礙}O蚴:彻 ?}鳍^聎[JG47'_敵怕oq帕'jx曄縗鶜邼孱愁=~o噈摓K~螣糳蕙良鰆坾闏 搦戎Gx荻娯e榒5髜tWH餘陴qG阳b幢i?呫嗯/L头剉j鷭p趎级B膵>妌: 绮賶I⑼;U焀|#\3vTF呟i隓;膣汵憮諹服佛h钲鵨o釕+=籑.$f>2啢埉;9辳@庤8;箖鑯dZl>?猃}愝q覧+▅渤P舾#s鲼*7苫鮆楓艄祣|枛7"z眗庵p褯地20縓 莅酶醅9[6娉f_>m惖^&鷐峑夔湥x譳H:^焼艈ub⒖_竽繫乹'\C舺爪遆頁#紧91x撂=z=C=嫇咏_卣5\笵圓稻mfC>守窎b桫怉舚獷瘱/\?ZO鑍魨5颻<眔炟$u祆G"佝嚹嬥G"傜拙 t塯D*梟睑LA枯毈8M]*4)闃騲唼fyS襞"輸bOX^除朕]D帙鋏AO葺U 眶MV/鐋f*"%Pmp\6N2B鴩G:6K啃崖囝埡?岱{怦g鱯EOe\魛%㈢踣5蒏-㈢痑S响#z$:vV麴璡雚琑魀郳氮R+,!|{嚙{譣>憬瓙?>闾觶 颩薌?Rx弖~&Jt6^ON坣挚剹wB嗌a德q!yㄨ9򃊆Kt绅灡}婮t欞2K灈 5诅廵!;xM#螬规鼔6+鐝l餆饑缍W'后荕朌I╖棒縶p蹤]I屵%4e紌鋲;?v第缧敋擖起.嗮浿鞯縙进 埤&|瘋_[堞术)7雞掫鎃杔獋_+栰弸鏃织]杕>k9u葚i2?#v*?齺釴檲Unc螻鄀盈實i諊Wh糇蔏租䴔浪C7n7Z簐筞蹫l麽,甉~p0咃雚缧殢-~屨s巆湽蕍萑鍆鹃鐥溌飈Nz鍿舠o蒇R6単兕5<雚[隗冎齏.n,oX顕筑鄽S鉹庴5蕃云 ##妚誳骶軽o9首`} 秓苸ky簊@志讫m鮳蝛墀帘湛匦5謃勴嬥唯_o皚齐圻邁捃秕锞搽埝鮩}劭卷_喏痮U歫汼Y蒘1j汼掠ls*;x鎀襩s*cy:鎀襪s*a陶锻誜鴄陶亄窯厈n 笝p3醘=躢p砽c'x菩0啚1,<c筚侗<c筚浵曝|秏l.++++儧7n9ps噫峦厸 7n.\9\9\9\9\9\9<竬p筻媪蛢珋珋珋珋珋珋7n>軀根p -[n蹷竻p -刐n"窫p嬥-哰 n1%pK鄸-乕W W W W W n)躌弗pK釚耈9Y菐*/陶糶;v悛Q槴橸?v琙9爉誓愞:&絿.a鑹uL簜j鄇鄇鄇鄇鄇鄇鄇鄇鄇鄇鄇醞醞醞醞醞醞醞醞醞醞彡嚓嚓嚓嚓嚓嚓嚓嚓嚓嚓嚓彡彡彡彡彡彡彡彡彡彡釟鄽鄽鄽鄽鄽鄽鄽鄽鄽鄽鄽釟釟釟釟釟釟釟釟釟釟醃郱郱郱郱郱郱郱郱郱郱鄸栈苑:|夗k9kB~韐vq憇€睆 砜X甙5wa\B脷SL\Bt\|LBLtC懨t[羈63絘撦譜+幯芁弶OxG魄縬尥fR殴3D巍暫7鰫尼)B"|*^'C冣m镗Viㄧ蔱║讔"diptest/inst/doc/diptest-issues.R0000644000176200001440000001135215051120370016554 0ustar liggesusers### R code from vignette source 'diptest-issues.Rnw' ################################################### ### code chunk number 1: preliminaries ################################################### options(SweaveHooks= list(fig=function() par(mar=c(5.1, 4.1, 1.1, 2.1))), width = 75, digits = 7, # <-- here, keep R's default! prompt = "R> ", # <- "yuck!" - required by JSS continue=" ") set.seed(47) Sys.setenv(LANGUAGE = "en") if(.Platform$OS.type != "windows") Sys.setlocale("LC_MESSAGES","C") ## In order to save() and load() expensive results thisDir <- system.file('doc', package='diptest') ## not yet used: xtraDir <- if(Sys.getenv("USER") == "maechler") "~/R/Pkgs/diptest/stuff" else thisDir res1.file <- file.path(thisDir, "aggr_results.Rdata") ################################################### ### code chunk number 2: diagnose-lib ################################################### if(nzchar(Sys.getenv("R_MM_PKG_CHECKING"))) print( .libPaths() ) ################################################### ### code chunk number 3: dip_n-is-5 ################################################### getOption("SweaveHooks")[["fig"]]() require("diptest") # after installing it .. D5 <- replicate(10000, dip(runif(5))) hist(D5, breaks=128, main = "Histogram of replicate(10'000, dip(runif(5))))") ################################################### ### code chunk number 4: dip_n-is-8 ################################################### getOption("SweaveHooks")[["fig"]]() D8 <- replicate(10000, dip(runif(8))) hist(D8, breaks=128, main = "Histogram of replicate(10'000, dip(runif(8))))") ################################################### ### code chunk number 5: sim--n-eq-11 (eval = FALSE) ################################################### ## set.seed(11) ## n <- 11 ## B.s11 <- 500000 ## D11 <- replicate(B.s11, dip(runif(n))) ################################################### ### code chunk number 6: 2nd-small-sample-phenomen--n-eq-11 ################################################### if(file.exists(ff <- file.path(thisDir, "hist-D11.rda"))) { load(ff) } else { ## takes a few minutes set.seed(11) n <- 11 B.s11 <- 500000 D11 <- replicate(B.s11, dip(runif(n))) hD11 <- hist(D11, breaks=1e-6+(63:298)/(2*11*64), plot=FALSE) save(hD11, n, B.s11, file= ff) } ################################################### ### code chunk number 7: 2nd-small-sample-phenomen--n-eq-11 ################################################### getOption("SweaveHooks")[["fig"]]() B.str <- format(B.s11, sci=FALSE, big.mark="'") plot(hD11, main = "", ## main = sprintf("Histogram of replicate(%s, dip(runif(%d)))", B.str, n), border=NA, col="dark gray", xlab = substitute("Dip" ~~ D[.N.](U(group("[",list(0,1),"]"))), list(.N. = n))) title(xlab= substitute(B == .B.SIM. ~ "replicates", list(.B.SIM. = B.str)), adj = .88) lcol <- adjustcolor("orange4", 0.4) abline(v = (1:3)/(2*n), col=lcol, lty=3, lwd=2) axis(1, pos=0, at = (1:3)/(2*n), labels = expression(1/22, 2/22, 3/22), col=lcol, col.axis=lcol) ################################################### ### code chunk number 8: sqrt-n-qdip ################################################### getOption("SweaveHooks")[["fig"]]() data(qDiptab) dnqd <- dimnames(qDiptab) (nn. <- as.integer(dnqd[["n"]])) matplot(nn., qDiptab*sqrt(nn.), type ="o", pch=1, cex = 0.4, log="x", xlab="n [log scaled]", ylab = expression(sqrt(n) %*% q[D[n]])) ## Note that 1/2n is the first possible value (with finite mass),, ## clearly visible for (very) small n: lines(nn., sqrt(nn.)/(2*nn.), col=adjustcolor("yellow2",0.5), lwd=3) P.p <- as.numeric(print(noquote(dnqd[["Pr"]]))) ## Now look at one well known data set: D <- dip(x <- faithful$waiting) n <- length(x) points(n, sqrt(n)*D, pch=13, cex=2, col= adjustcolor("blue2",.5), lwd=2) ## a simulated (approximate) $p$-value for D is mean(D <= replicate(10000, dip(runif(n)))) ## ~ 0.002 ################################################### ### code chunk number 9: interpolate-dip-table ################################################### ## We are in this interval: n0 <- nn.[i.n <- findInterval(n, nn.)] n1 <- nn.[i.n +1] ; c(n0, n1) f.n <- (n - n0)/(n1 - n0)# in [0, 1] ## Now "find" y-interval: y.0 <- sqrt(n0)* qDiptab[i.n ,] y.1 <- sqrt(n1)* qDiptab[i.n+1,] (Pval <- 1 - approx(y.0 + f.n*(y.1 - y.0), P.p, xout = sqrt(n) * D)[["y"]]) ## 0.018095 ################################################### ### code chunk number 10: statfac-dip.test ################################################### data(statfaculty) dip.test(statfaculty) ################################################### ### code chunk number 11: sessionInfo ################################################### toLatex(sessionInfo()) diptest/inst/doc/diptest-issues.pdf0000644000176200001440000033322115051120371017127 0ustar liggesusers%PDF-1.5 %亏 1 0 obj << /Type /ObjStm /Length 3387 /Filter /FlateDecode /N 55 /First 450 >> stream x溳Z[o8~達q蕈艩纨V 奙殾筏-溵媦Pl:謳,y$箺y剡8藮8i Y瘒鋡>孻恅Nh欣様` f搯F並藔10`剷a&A2G)怰+`けE睖%皽スNAS3惺h磿猫.羆=\1譧)永 Xf8p V軄u渹犩8 抢 ppZ艓 宩罙(`2Bc@(u殏袄c8e )塢1H喫仈p茢T q$`蘕 kv趥t8S 乒礌p0%U80巆0%乹c(孾僣;c踥@蝳潓:e入瓜廎uZ漯T;Mk入E潵汞@&跪缗yW鵨j埉@AIO捼媒搰渞奵杍f~J惯+J竪柤醄ZOa鷆钏襉y|+蕅諘Ga蹥R)澹FF╂Q>錧薯b,釻#3鎚込音k搓決監m ]躐帔YC笽#Sg怠7} 镸<鎖eQ8炵砒骸|S闩葪p镩3x:-曢F貆 嬎鳴 黝y浿檁l貺劇<3.<植cM1卟4v澡8a`摘6_H脕i谀築蕉W# 唌gR&滻锷瘿E縻b懽`糒钦R媡Q外繈/搙秸櫒F鋣Qce&/呔>~褡丑a1Kr葥|T層 崋怂獈jpQB撶,i瞤n:住al灥R腣?ゃz娪鑴 #妖 &致篓e溡b绯YV&纉蚙&Ck僰6崦h尨聛普唑瀙鞳I(J2傔Q錮a7C&晜 '淈1粝堼驹鉰凘7斺"?嬗玦9MJ=rD騽<#仙9'o葠\惙$!8酯奬Y憮Q1%dL<檺$%擊'揵Q+2%螬螴J 檻と=檽/觔L㘎/Q R拪T螴晘'5┃V鵍緭鱽 蠷#r厲K@鱭!峇エ輼z歠7砇醀商颰溺u挜#*驚仠曟WA[ 洧龀骼旇jXG7{?|蹰W藛鑳】ZdI貿鸂4kJ蟭痓6礮礮 +J/密acl謪!o袊7u裀kl( 哯0渻磁]cUH殎b2擛絬棠2鴐qH屝A⺁CIF箥蚗觝郾ヘJJh邆阤|太xc跿巸@ 6{孋饙著縼T鑽K(荮!礜Cj儐":%O /!"瘲巪 '騳崬捹軛U拸%,撗疚n脩p  ~6N)駓|H2饪彶dw-缅i頦4嚃Eh:刡胹_bYp|檯岉G綱馷獪iVJ糔潒鍫|%邜F蒧/_kl#繈MU 僊&涱&箖 曧'詪#$Y遨\+蟋歉Н_遷剦2t梶H螅糐W+暾狾絩儂gR瘧b婻D籫MM鬾蹏俠,Z0z4赑頉+ }/殗<*,抯愒眫%H|的UВ栣常/IW齮勾2雸初錤| a笂蒝剐能&膙侮C#y+氯铅荝>氜}<}q蠃yROc[q倒+跥掝!垽贞笽聳cH硞m`G泊惝y憧t1V勍,X\s)i5蓘d嗢Q狽)yF迱w#I枌紟瓎.珕潲A鯜饦j-跙bk籪8{鮰鋖璾 f3讎櫧=虦簕獳歟Xt圢K尰^~g{0襈(|.a' 怸s⑴焦衋蛒╮"l"'锧劯]K] _}xx^渑V 诜≌J魜(Q竻妾! u毵-搝v屙且^^邴烤禑檫譨殝齰pn爝j敠u殟=I闧Y玖譂軌-埘M齎4ミg爎反6豜芓%6湾洑籗{6原h桫偕笾l倨鑬刀oB碷[j-蜊aJ+仳w髬Kl梅増多鶹燠縣ゴ荻嘇ki岁/6瞫堎厪霌OO汦溻庆踩&%踈膣飉N亍~!t⒋畼昁&?-J萱:戣殝6n.)悬r威趃~+<夢eづ蘔U 暽8%┮Y%e墄k'峣}Z}蕿[l蘓鍼4灍P膢慹橑愮xv4( #9: 廡虁渑誤湧m敲1[锾M奇ロ今;8 M蟋蠠N_4L{眢*-v(,;Q:垣rl危\[u.+2胶Z臭0b彤薯vLc"兽r隗K_?d嘮wY鷓魌u逞豈圝鰱> q匠灪=腴輓m5彘2蔌^啉%髡駑>])n芕卿べ  s?n睲Y枖{w雿炮辶剗;Z蛖緲]J漈统E9畩該陫m濳m夙/辐7l驮:tS征胼‘筣聚羠騨鴟i寂k!贽串 梢薃U'鮜4[ 黿A9~翁齚S6@Y熄銪 鸲畆z爩)乩⑴B鞞櫭屖! 號1騪敕 悭6鞝戒5 赱C糺脍p纲肸B肆C潳《 _Y岔"tGW:袄嫾?c>筚W_Вd髱V邧莩h町'k6L阙- "uo ^嬵詜酎=}}|t 鳚菕QlO蒻1ak vM凉Q C技 鉣񱏅n 璖i(餶|9萪h92O骤裬淶泩滕g枻Y]<%~4蛗@B长|=齥0氜渵s%粥m:恱鉔 劚頸嵬!!s_3&1鵲r 岍嘀 3 嶿ii鍅裃s(闕:欨溢菶_耬蜕$艡碥踃]^柣M鍃呓1隬F債/疈s慓付溯圎嫢 > stream GPL Ghostscript 10.02.1 MPFR, Abitrary Precision, Multiple Precision Floating-Point, R 2025-08-19T18:06:17+02:00 2025-08-19T18:06:17+02:00 LaTeX with hyperref Dip Test Distributions, P-values, and other ExplorationsMartin M盲chler endstream endobj 58 0 obj << /Type /ObjStm /Length 2595 /Filter /FlateDecode /N 55 /First 445 >> stream x溑ZYo8~達Q3"瞲s餸县濴;嚀`趍-l[騮玤(J曛i/F'JU_}u悢隼羛 zFB#義FF⒍` 犜ja8@+瑗薃p+" X(V俻迉U #X R*謤栽 -*こ沤茿)橇!(98'A+盍)袉p碨胕冓s`$Jp2H#$xc 殡O ^佸蝸譧%WDkQ倃`漲=X恠癪Q羜I N r NI 89 奏@捸[ -x悡 Zr^Z鸡閳鄭p(繹$怶z豝禢s袄撳*'Sr;漅潖1斑柱"If钋緝.芢~P嵶褰R\[萦坨勸4 仗U俣4歩lm勚碪搹▎=狪凉摩HJbn瑺涥 ]*拨渟轀蹎'@夊*K赗砀怗谺疷y忁3{﹛$话℅`=拌U蛫Ao尛┎.k漩卝鈤b廀Vl禡叆崿璔剪_]鬟rJ亝{ 賴閝] 3g訹萑紩W<塈e謲'碝谠潒]郅丁Fe崃Pb*W劀旸T[kGK逴蕽4万|!$鷥,樻q毌e傻厨:欘f?;P佳^G聛S9O3J&*[/g ?颍媩毲!貒嘫殗坃Z2沒膭##刘_記疙D>躱!o怑鰽^艗z尐Bfu!?r悀剋滰!/協5⑹Z|湕話5j&オ橒)鴶^ZDF簬i毆>?朚U禤致z\F屳*c'Э靯}sz6深)蚍毁谹:水擊貤$軮W肾B圗{酚%(_衪?^蜄蓕-┒蹌0籜_鍋ツU([%刮o晒%钛縀k?=锳#>:NYJ+PO+B羓|;`{欲8构酚%硅Ol嘙洷y禴,嵸挱X悟踖8蒯bzCA 愳V1勵; 9 K竺dK@)1鈢z汃$.捹Nz硤;KV$ 悆p谽遾猲敋=賓也崄 Bw兞>.椯逰呵抰灓I顥蒥UA姓^Q-脙[戢耳gG熛逌灊M筵媷猾l眗o'裢z1]巼A:nsyv渤Kx焑iv?蟧ha衠鮮:麶z嫤骉齤T囀穆Cwc苉硠雈$\a7)趩UxT藀簃!GZ腾'y玊讂'梴Щ7觮<󹫙漣檸茖矞宀'川fhQu{LjV鄷 屩频羑f稬`&c鼝:槦<:8"斮:鐙S峩罭cF羄谎 谻w{柶銇譢圌-鄊鳤D茠_徟燠镎淈s憋F+芹袹郒玑G怞>;蹢簫/Jm\浘UΥ蔹/閆yt趧k=_:钚f筫)痩筫y僛囲籤贄瞛榚wwx珈嗇槽圎8e [;柌屳硔*t圱5澣昺 (,憺H碪[M榁m +=坖瓸:+戽害]-濇昺O[aE[#濃諗ㄕ瞐u_ 蘕Xl戤峡薸筈S<KA:噙^倗A阒鄸w 燭cOよn 6("峳:4廻貮t謨廱3独骀閘娵sC勺<硼氮.lw=c玟嬗艎裙<襹S&l呙fS罏星&^觵|# 謈_=普鈿Q 猉iTG;}泿?N.&鏴閵紘豖呝-焑7溞wM>司x拀J揧v榗h烈 1TBL鑞:薱⒆"庲鰠𳸙Hn胹Z4飈 4掅j堗s韡键uo怀跫8映覩颅>墩咭Ju耳[┗毙鋢鞲朞鶿郛@粨];盷嶿HY:燢跦瓻wz眻浍嵃:騌咷磹镬 16批'n k涉廷攱iL沫羮ら,#动_V攂┆(嘌7QUO咃∈X=P揪R欄蚍be爳钕,5_y$'髖紝S虱 $乃4X ~塟w隕炣/^闄敜Zy1endstream endobj 114 0 obj << /Filter /FlateDecode /Length 3236 >> stream x湱ZKs撅)瑰89撘葱h<)Y藨%︹勈aH.〾鰽E鎳,佸抸嘏g睒F鉉?緉煜l$g藱l.g?󑵐俨耢閗%t犘桄鴅朸褋 緌 A/g'鈟跧悿%'啱#g@"娿6劆禈o[ 襀襔嫅gh6渑'閌蓯7瞄8琖遴撻M#^u颷磗\N螈_漡}腭輡誉瑛eu)剙^7晴裾/Q,錴鞭魗鸹 刞宐lk4A{/幙n;")I:~Ae涐琔倴F蓟鏤:烗繩殒r;#竟櫳姣3彶辫8j3T萸澎兔芺*[趭r學 紆l+馑禹搁掀鲽縤痷h,5M礂;纒茇梿o'F_M xI榾鶾kP蘯\鋬7隡k$幺儤k*轌攓/_E)讷膵譴d_悝哕色猕6髕蚱7^湑嗧癪b呸#^枃嚝蜚<玜蹋+IZkt靌C e %肢蠳糥瑊6谆E.籛 )怷霻銊伌5;胋+2* H?Y阳馫+ j mUeF趤捑盐俼楤B)AⅧf諕鉬輛幕#%委县yp囍F"0洳暇菞_噟斚駗򷄮^T'鐳壻z尡鉔Z#T蝝羺牏Y?廎M8N漂HR挌翏娩珴U 蠺篸'u勖`Ur1xSH⺄ =(T5l110迚a徏 r**2lx夁mef'夑魦逴rI斳ǹ鈵 哩Z&O夨3集嗱覊襂父後`簇r傔嶤赦噈 uN@蜘且糞]SL<&{}崺犢#塁砟鸛#饳虣% >敍=u窵奤圛雈紥枉*7Wq郔搵;悔贂餐 (讗U瑳 昑嗵n銺48杋4 p昐 怡琉辶 8?x乧4M1馾怏墶M6a^T=sY6尤憍Zo薝q1P銇!颍傛C"$迍ˋ{觮蕚拱X 栚h呣7潄8uQ(f@ r"腃9=8&h戶礸& 懻禮蜹P べ峾篣(o啦L謇=0=扨m%燫畄嗉%z槮un ▋J埝鈆阠炧誢嚢+G嚁C+罽終*%蠳+6 燞f皴Tも畼u趻(物趋壠庐柕X邱8璫批"?摣#邪潑Q,K赠U~}5?y1*#謈跖TY銁]/U蜑+i斫3UB熸鴌Ym烥J隅曻怮A瀀镇鱾埞獛=*渣3( i1甤呟v氁憇,&閥vR峌稝i0UG缑8哝.摝rⅠ擂滄>,州煫t 猝*K魲蠖`s熛-2牆葶柨 cd]0F怫濑J茍嗁柀羆艸_\1袅*R曬W馽>$铣 R陶;2彀Z 她fZ2玂)漦"7v )[蟪肘E塭胪窱  $鉊蠌╰w鮉M8,┉楇蚉艕%Ⅻ!埖鄦YVY玕鋨N乼阪tP偕>匵L[粬M宺茒浤乆鉣6l譙'葕e鑕gE)Z紀嶅鐿魑.-猲鏇2R鲢 饨uc租柋蘍h葛M~+溊s1芃碙M 駯C|[鱿幅婡B'mД嬢f A菑&莜魶*^籍酆}P欲>\1暡6R⿱騬os嘦-斥搖8琑oHj攚&z^wt#s帮萵g镑#Z芄跲掊"輣Ps' 鱺圥曕; v(囀釼/3錵W2汇?Vo某't1绂Yv蛀.竵贵矞)傐<諭姚醘棲~45轨4茈Y頙d須X雝凢:遲^鷲A{搲hGS噹7秈絏璠覉沬倞%C>f蓯(瘘t;宻6袬1"'"v毒辧鏞 LT帿C→蔟;qC燗%)氟n瘞>] Юg薻槦_?(闧4瑽皲}故I艟%8絝ydV:_輆sH?郎胉眲錠驍vp樢嵻.鰆3繕o6篌:d&日[L>:Q姩1"餦%螄m爪!0铔幟I?2?lZq`2 %郛Sh寠\I守EJ%F6縮齸_N%:*撺\E J(評攋Ю=;艂塭穖L募遧'1Us坱燠﹌%觵0嶻/+婵 踧:薈%F岐烔翔!He页5=V鉕&1&|+k9_祿6c?,聵2)嵧!磰" ,3躩濅y$q沕饩腚虋1钳罴鑷5,溒endstream endobj 115 0 obj << /Filter /FlateDecode /Length 2450 >> stream x湧YKo倔捽f [h婟~豵d迥6彆鋊0(j睠憺述鶨vS&嬂醢縵鷆E怴凝73R璯gZ?讻嬞鼕眾茨襧q; GhehゥF薳地虁諎湘WJ浯枲愜V芴廾e帆Z甡Q巹!HゅD'G鈜8\v4tj匪5%鲑z甓髻鏧7 羺g骰 c爕ēDk﹢哆g駌C20鷵 曅嫣o④依v核6娿C堇腱娤;GdZB_S$膔邸}ぢ~d餏(4訲 梙 [7\ 趰[r诽ym掉v\o粅k:%鋍,鋔53H(a疣W剅Иg(8L輋櫢瘜蒟d奃凙a祅艏婄蹺&B胢3茰>嚺Gg "襟諻3樬辂甆0鵳芾簯蕏A咿疲t遞77j˙畼蔘 寺珅 剅鑡K%7偳 b97箳6D鰠乌qR:駐榵~-zTa)4╮U艽n圏`巹竘噉5偅庖V峛(6丼摷倿犮趇(0瓡芚h鹍;輋W7L帧b栜B  a 悘~齯F蚬酤桰R }懗翶W憲︷冯868幉饊趋`刾o"F0]-緹-~j"Y啘5Sh9鵼辅aT涝]︾猲凾H?&\Α絯7\鐪读ζx<癮吂\N澴嬞3傄衢 蛮 赂B*h%璄k峅#w哟{1燋码W7鹹籹焥F邓3徂煗'h斘/|迶囬糶E  |p鞞k櫿e,鈑0揵J1澺;  QF幣澘[H= -@兛茓&Sh慇 羅0s<湩驴D䱷羨3V锊侠鯚Q苲譬ㄎe *R謄釮猘躰E, +珑\I#\&h 梿邗搟m}暨奁:& Q.淴禅5谋,g~舤F(璕>@kX輓囸!H屟殪S?U莠儎E磟Y7R(R}泂榭D铘:1 殭砱,⑦硱h 饢A鱙m.k.霝银棕X)嫞,頡揇E靨=冉q-`:RQG昪蟛箢&,桾侂~骶I< $嵡h,$$M\嚘$鞩M旖婓rxz霌_69~骸s轝狾娢恩9妏Mw轈樠払; e^D臤SPNR刢扖7曆箍M,孲;剟^騍绀鹾s m挄>J┣廹5迤噒%]9蠇Z说5蕪D 1"阐簙b芹襉R(儖行ヂ2攎 Bh l妶誱B (摣投8硽鳧XTnj_.s}槸斴绐-[旈偂&z騟?N+峍0OB酻C})<猃945菏 1矓K*Ps*佁J頬琛菢_1Q檣訉T1)8R]1K(騤3c+46限=76H 鋷♂艇i咈:璾┑U植姡Ve邴泂b祙: 媩p秗媭锘蓋獤翖,-n躦\篃!B&簂 ""汀g/=欺懪E琁詻亻滜D岼e諉E&.3痼媓櫾哣MFA谞R谳緍凾B T9u9淯宨婮Ug陆忉棢B纟啓S嗆瘠礣94O $δfaO峑**;=跛s) 湞( 弚.亣斴 íQ厸k钇4#倚访:%y採喸Ek7m咦曀澳8b!汢) 懇(駌婤闠f 纂靣\鉧&O4y>蹗べYj左U剙6锢J煯泺鐂 汨(槛p殜C桞n*r>鼮=3 ]h 鉡t蒘l{錔L闼[Yd\3芻h榑)搧碼枹6nY渀^n$ 呠苞革喺炦t籭5N蠗帝晘xHh(捶觠H蝴qj籣'^ ))`芌碦覕惑/錻&梙譿醉碯%剱嫞 7輓 摸净]倀5聿>t9牖n湒p)/&T聡a政8劲踏墕M腙谸聺a覧线t愦]?#抳?擧R 鴐捫8'嗖~ヴa韲4腼endstream endobj 116 0 obj << /Filter /FlateDecode /Length 6310 >> stream x溄\輷7n擐华华<洹s/妞40A_r椣鱍I失葧T愍*c鞪毣龕gV桚擐纍r&G稖鸄唤hA祜& 8i遢厼^_|w侀榇騨寵PCх.鎃p 8y!挐炦](<肱状Q[姄灋__\/鱫7["憸z Z砈7洯m#i择QH/ぞ鹢7騑颞W腐~=n:$盤_Э谌!k!Fd祷}W齛<`pA記 仗筸P弌?4茶A鈬稡贍応v儬u$籲 /Y':躥%n葿pnV宄辧Q[#鈌k C i稽嵅Z﨣<!Z嬘箈䦶折_物Z汹4n揶頮o炰!P]镞^┟畸+u祽~駰嬶.陦-z坒bF1c峀r:躄1兄Z涄謱譧瓭豮p~681r4疿餠髄rj歠殩cu6K鮡!駹灯謠鈏1&J挠h,亭>騄嵠e o桻巢辿墅錔m4悏哫].堆r 瀦 -<論煛愥,6楆厴4k懺真$鎎 d"f4@d}>W嚊镛蒈奎Q芃V糸3糜脬雽秤 滯|佊_/趑 次A,: 枾 读亶迳砼亏D鶃> *Ⅱあ"雃7VT錓E禆8矴v纍釮@濪W桱6襢kpQi@瞅[E4}跇H苼蒙倨I!#6持z*悒~襊qp馈4T烗娮颏Z菛W~襊"kE繧"檣縣!詵娼M蝬mj笟[z狏1025再褴k:;悂=憰. 霢黧縛N"9攴' 迋5!"S{ 傽>.DQ3酊62"Rv`羠-Lg&p倇 {擂tI;06跼t听N"辠[娹傦5@1a諑S0`恝⑼D拦8"蔇)9y蹦2s媟&%誺湰绽 -艉4f3M詟兺3# 躪纘}2^冣{鉼袯塘臓颊l K賀 :譳@稅乾Kb侩傜摜寊浣qPB1毩<佒rD1FT0;趚龋"繟匝栄 j蔏'踜嗔儰櫲;縞8 慼`鄔Hk萵螑fp 愺 0!桸nB6I.買聴壺0瞆BO 瘝)>.D鰜j衁u拟d鱢 诀_I3.t宒簓'穔=鬝骲H厪CQjO203榽=a%怲'Y V3劻,\FD计 Bf墍覩崮H恶惼$r澄酓 N岝n浼蕉'ⅷ瘤 pQ菈".r;寑#h泧sD澜q籤罆礞湻@?沓/q蝨xA蓭鬍n袬縫帴啈M繣 n0k> 椥i^弎浼I`蟼{`垖%闔飧 )4厷繼6R紈)扬*R!妟浼澲@%4m; 没嗱F褚=憜牫0犱CF霼`Y~(293蜣pq粱!`豣奓Q瞕 Mp-U霞#F郶-犗rG睕^8 9寬]f]M.鷓蒐`9痮鬾X衝)j1.婱Z蹜鹒M'蘃ZJ僤/x缹I`9@]8txA8Y┹篖銵R!r徜l6 }&%2JFL(え毨<8 &:#僰 D^W!Z0蝹喂3例 荢H%鬾淅 塝 M-$F(顀1 0(2儽 )颛豅c? &鸖J@mT爱prf旔⒊P騮(钙 犾Ov郋&-$z4茲4@GIJ晊磘2衻<)霙D纞 竂唖fPp>kI犩0$x乻'8r蘼椁諺 鰵S尷阡杀h爓81堌贈0q楌 ' 宙104〝硤漎;o毽P椉埥=B刃82Yp钀誺|@ 尳寄珜>.0,鑑+欆捌b焐焁颎 瘯)0X狫Z浯筼JI嫓IiF媪`+幒媊K1k纐7;鷇(\斋饧:p#靕{橷"+ TXL:)I)曺{\0|)瀽缧セ3'娌澕\X 琨 K )U憰|腝m\<撋88◢S0韩岾躴頢 C *U蓲嚒 'G抿腐 %(E帰qX W"X盩r(J.:G_ G壔馒\席#8pPoN(:棋 г(z?蕍W2E鵱肸;桼堰d袬縟.y錌D怯媢y繁嗬um\6C"懀戨渡栄硷繠 O兩酐uJ&;c,CJ',厛竤鄄盵"#ぐ"掗鳙f辚e魚T7@禶8*'_搰3 J褦L棈R鐵34瑘8嶫悝:?c9踈W茡H恂9y?蜊+F.傛r热R朹洓f怚e'@p]穘拰堍蚄GG巤%敚.覯B5D迯爞b颪鉋觓$8刹0RT亲TF徥泮旐3a NW麕%5殥$z濎&蓻 鋥k猦胡x>^OO*.Mdkpp;|揖u{&駄槲h羠扅摮P稁Fe5:l8Vz^\=G#nGOVo-s\褲L偓sdG橇}G濞2Ki窳f桚擌<藮Nx6B骹d蛚嬲逸]白M宴v簸銥x ]~剹製mv}+骿镹槐U'; _GhLL@o矱FO殫瞈-儋訅酧X倻5 隨冔釗霏yW-報罵H-埬K}1攴嬂dBn甥|詎'璷R業烪衻渮鲉瓄骕:椁.愻引歃⑺IO謤説摓/r`諉棜葖p晓pj.:踣-O\圦鯮j杆噅诲IMUjI诲IM躞z蠥xV鬮}隻V毹)昮倕獨r罂\>}Rd+疳c 丧沲t傲蒼睒2鄩cLe檾 J邭隹╥'Q觻薋1FF 湦c:1[S腨巟O驕B/GJ沽}8T臋k╔蒀F鷆@" $e郚炗~邓~n|亰8w鉥:鳡s01s咐鄅r娻x4瘂 ̄k獒%獓2┫y5|z||麝乍驱蓥n踽醄x6;⿻擫'~"$[)Dk7m揕!蘭臟=斯猢檗煋!e探D4圯鰷HA~nEhィ觼硚楂M0cl磚]/0乨証.3H梖鮮!扐d朳捑6f醐t匓t(\洹.-茐cs * yf塿誔go(蘆4綫劦`冁祁惠蓓壛騈縭]崠nx$鶞苋{醺{芩#2r齶2OZ眢矒囪u蒏 $踵d棺蝶Jg%颯S8Y杶"藂x暌$稆蓢鰆3f侏VN"l:阫.:o缏僼Q%举(V閑b&6z鱜簪C鮰腣冖绩儇YW笨"*樊]1橠si鎚髎2=k鶾,$h+銃'别娝,!GCVf%m@cX鳆紥梕"xT嚻黽/7B棉┏7oeq◣z挿?薀b瓣J絁}`V圌%璚W惥O鉋嶋澐韟J奔8旣褌蕅{衑玗m)kj骤腐鼁!B唔媵袦敘祘芡)8uu"袬m~6殎椿潲&- 湈〇I~顿cPO7砷氰髲焟F桅躜g菙cH宥J{铃褥c戜Ч実惜)机叹\涣撏枟Kf藲j4矐騔锓脖%篨醢c謂搝替N阯7邧悠-椢堕D振?<邴僕Q罨:頽梜s3脬蛭斾青k_2s%圴-②拉珿融袙5蔍f2Q樘坅趻]%D[豯ベDzz&Ah/b交Y|jpV瘨抹-蛖?=Q=緫入璡\(荏嵻蜒珱c躜鉷《E6#絴茨{xL菾毥 dK;F3R爯铕蛜[7n鯽≌柙梅IO蝀觚緌糖棠7acz烥 犟a屺ln\癉l!愬=魐磭--2]欘e摉U笽p墝駄VG缠W醅 黬 秶&隧L择褡O鎃⑷q<-K胿W軲飒E愌󚑇/淬扼4桢槷吥wK4榤艴fKFZ¦% ajp篗;觰穒gv幷+%燧¬Z:|鍗◣鲙 蹪$嗓鲂O啈偱飚 殑F嫚I桅禸pR"9tRj幞:廸诬 >,唪&櫓 辀褔>菜]谬6/RTo揖エ~|8糜0髽N8:顝O枙DI蝜蔈锪K<菳7v[v穻祋洗Bd, 6眄檯b`义傳g昳布`9f~赎a磃湋+5嵊Q窶汍EJ涍 X%褆H:z5FAr亁舚 -镻\厮琟譠劢9M#掫鶭祣惘g&鎡套榑 鄄-析殓僝"m逼6捎酴豣B9銉3[翼峰%銴F蕢墶Cず4;旣職趯楂蚔0存敼滗A交哌=\/F恢覲忠腭bsж*-H丷L佈I圽{u;糿澰f松跚葆q簎鳠\)屃 毀T詆;紐坠㧐W_/#盰①u梭h赿 掫W痢 lR庵y綣洶颡醦7槭端魍橪楯嶈R]n厄iGg2買 | '黚瀸擰J,櫡迿X"痼牽Jo皨/+KN;[ij癛晝O;j[S鍷眸 縎炪慵P 熅 覻;.*栆列78箑^0S夹/,窷鞍J悮趭1鴌k滱蝈f>\1斊萌迸i: 鳭_則Q/#G濟? ?5姨证v`8犲 y!3魯>x袶2壚%饼虷詺E絹己R歬亁w r鷏H=R帒銻[醴4 &W<│杚|l\岙Fv魾穼~ 乂5煬i諷$1%尬 >胧V鈏$琻蚯{骧>B4犋蓳奄披Y铢驛猷倣z縊p;跣惑僮邿A檽嶇蚦皮,婐)I鷝)PV醠UV9齬什m}3堖樈s +'Z升qE鍮鹜k怽霊2尴R5嵴f绰襖O捕BP氩.穹碶攛┺Oウ胿m2醻偔酹;玍k>>ga棐]贬 邂閊~喗梛{╳.钦曗蝈-'軚*鎇贯D鈬"p畼c畽k ̄t!9 愯{s2紌篙=铒_鏩弓j鍤玓y愊鵈*贩7銚 Q熅A鱁c=/k0穥穵p &9"忪暬 7 ┺辕鍯f;W >檽s応v7r0芜;暚卜復.剖zG-抓瓚靤Ⅱ对mX鶥咚滳嗼$}艘溾④蔕>T繷頀|-靳墽\鲓s+升Q}9毠仲_JD97s﹜r鋥y扵V乻u拻*步夫龐0晴躂譛脘|囥8滃帽#圢蕆徨\分z扣齧淓3=e湺妍憓基H&乽:9麄櫕撧$rF%_塱2猲$辕唅狪w> stream x湱榠Xg肚玦韩Dl暡YB 7\5墘F=AQ1 * 埐貮w焠擼懲枼Y簆 jb&領;5&F嘗嗚$DO崴<蕨'蓾{?軂嚎颊颯鯙;?%m(塂2x衮昋S|7*|玼閁 熷u繼 龆莀u瞦纮(|ae齲蛵寶穧䝼铇潒v-V,嬤瞸攵@煚鄷!精侣#^{}cL8i试i9A絆鵓 j5汄Qq蕮颍蕙>犳Q﹗詜j祤颚RS‥詁j祫歂紽-S颭帞錖筊 uD)臨( 5艈扨禩*%yOr觙ネq㏑歚;芕m鹷賐Y含C.'礆nb^gLPc7襈c魍缽靇房3h鸂舓婏|i坴刑>fmY-v7鹔X癜昗熏x.]。@@/A+閚s&$痆9;.褷K啄C蟂gM琚囱 L糐~镍 T n@厧鑍 Ⅱ3s羑苓帋蝀&縃糳U:c'4BU:哱羣%+"St薂@撔$DP軇'6W靦急橚>郈b3oy饻N6r;2{烲E [y驒穵0~G醜3xc娃@陃鉫1飌聂劭(炢LMσ腤虙Z辞礂&孯㈦銰d 1}$q$Nq 胃8b煣 !J8囝)鳶iW迀鈵A闽挩肁舠閯d*I腊X孮c 軪僂跐俼蕭4脼H謘ヾQ鶰%0韾锱嗥皊黀t阍鵎鐫哰凕k葇cj.S艼# 溶磐欑{zQ錦p!$2G啤綉F隈妌Y#(橙Q ](,磜b噲_a笽埆馅匕-氻$s塯O膕]但5`p痯4O扫yk棯T濮9苔賏7筤距C測舠棣b Ad臰馯iw3>TL懒膰霗矣楫g蓂幣蕮W J 鲽o薷(t 0腟霥O鶀,涓_u@: Jk蝾GXYX,8:, zZ-N斐5X◆棲筛蕾鋆`Z.o鶞駵渕翂`^RD攲E)矠烾Oz:躑2光逛R蝉&僧疅恞b菽wDZ冁wt齕!撖{9=J屐u2蠓0迋 w燫觪 蛶5g4理M朱唜&兰华蔦衣)濳N稴if|囎\畱4^脛kRq騄8矫{(>$ku抟筢4s敗4kA磻3$鎄(兲 谗ら u棥M证k硞 濦G鄲]甸)轀歋洠翢y 詋wFqi圂嗇括A粨'4殺l#鎺敒> 嚴-@^馶b榄Z@遆Q鈕罙'禨疵!蕍?zqDdp祩脄愈彪菐󤼴{⿻贿甍磐煮79舠iT5'<詪3轋gi鱙G羃靯"袘:7 p僅#B戂x梓隫婅j鉙hx :Fpx洔孩[杅辬M┆%橸ez歺褨f湍|哔艮9U8A痴/_M∏\峾Zy溼 笲溠宵Ht枈N;裋爟tc黙 邛t[輅| 袄ch钑鞹盳$q斠篕饸裏E浭5呼 yD夣瞫倈l嘓X;寣"嶓{r銓郣 9栖8 鍦]?"Xo0鈑*图$7;T?!6+薘a/诽臥羆8蓠瞌妮椮ハ鸠7誘5杍砦缣箷P 痰杕厨-4橨&R/db錍K隺瀅rm虿(鐗PN.纜騩H政p;%鳯悎74檷*d%`n蜽"袚u憼(.-K譆z狽荗7,#/勴!嗜>а嫭$巇L襘峟&辅栾屨`仯:亷S0f琊廞哛*骔+峎(訞;'Bd贐透和~ 蟓橹'>$9鰩l c4LB棓枖n[s.錇苊Q<7(a瑢 _!% B嚅藉孶"=N;s肉奀皨y舠浭~誋gi7+\2,芃霥AN|u丂it閃虖榫( f癫 )G壌] `4$j礽zd諼亯-(焇`.迅糶Tz肄若$酽0I悳e4@#c)廞噇h漕贈瓏9  麋\叏Mk$峢 袾*eA2$桴I闇&n衫w '. 澆/枰A閥6qD3猾灪K璎漳{aM^齸2幜)等ds婄躲G覙Sb贗熷  ≌ ﹋㈤9鍸4獗圆TP Q=楣*嘳z龓寈]>槤*y咇M硭蕈稉:埳屲7@9#3蠿阵鬇rVJ 笖@V迊|秖6X.7粻辍 L塰g普V-眴 薢LK膐~慺厳!涜]!#FO#nd洌籽遘㏑s颎硈炡拨鼽&箳!鞎S皈騀决鼌 h佒x骹kK蕨蟹6;X嵥鑠b"盥盛=悥犠&;,V唽遥難鲜贌+矤狥sk)捱鈡p叺/>8窡紁新+lrJ,戾zwT^鳖Hn傿癤夗cA祆Y{飊瀎>樴髜豮z12機_歊7鼾溫k螰Y侵3膙魡卆 \伦 嫋聏餥甞萧幁嚤J顪箈紎嘴?ü劲鑃氦嫦q璨f溳j'蔉樆b:塓桁:$婩塄D盘鹍鴸觖耇帲Y[j_ 奬Y)U 琳栚3'爞9I爡幗覟皅]帛隞X熆c道$A蕁灤襮恷8蟞人 Z&5F捔佀 ? 醂7`s9隙S ;L●9r溤囸/夰,mp8,aQ TnA謮}&鎐洆另5胢萫pp麢 忇1\唧洫與hW+A_眛;+I怽d軄$c魚].忨棁怸鋯紲螶騭尘俠`p睖0=1!芮0㏒`敞 r fgs嫛Z'㈨臶鑹 漵罄敘zzH1Nd-〉[穯樏洑痰-i俘軿過q佐顫.E欜J9咄跜U潽>T敁瞄f.鬏敽O瘒 & %莧杪堭璖耑tD 壴蕐绨傍XG聤暻脧FE諨9芶镏鷰N婢8簵5暿K鏦絫螨9}TY 4i:烖啵{ 恻I禟2蜽v愽婶/╄O肯B# 垯楼X 頔橳寀萷]瓋0n頡"稻(婼暿廇{V驛Η滒*e/ 9.鑳盲脭䌷璟愠'e焒6哃枺D閃宗.h琏9q&2膝{*j蔔Z滤瞒s'埙友:g揿5T< )儀椵釲鶨5!穷0嫷熊 @&!6N捙|\▌?'揗邭)|绍歸戰膙栂4%>Vz"C6giY<飯垖峚鼛簃$}>C棪 d0怀0wZ幎0r&p'攝qf齴^-獏%:c5s##'?^崈q謼{炭/蕒_KZ'謀敫cr材鹫 喨坓膹吭So|哰圂tU>'穨{'ㄛU懞G 犖+Mf&搻囚僛醴K阾&N慣 怄脃r%9;踀Q3 櫃!';柦=E7thJ昬ndstream endobj 118 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7936 >> stream x湱zw\g做, ;T&+籮fc7禭c塅Qcl豎) Ho"棒=籏飖a恇锝凞岻琗1艗槝3x笃7&O'唧{迼?ы}滊\绾慞擠"盰皃壏讍G峏忖韫罯稼堮E\K!7, 壏翄=pP敷)駉壿謺3糤汪Y=索C抠⺳ (x命悕 Bn埕眿诫"7%洍.髉痿Z1厩{鶱4亙>錆宙5};帎弢譱澡瀋茙(~=5夑O-&Sㄅ喳訞j 5圸J QC(j95擹A R3ㄡ*j&5俍M廷FRk﹚┵(j5殮K停芌Q悒裨=j!15戧IS稊偛爺T/7諊扱4臦 禉闐u︻R)諘鷢拨缉nTw蕩闍貾Z姤蓼湓R JBYR≡sI暸i炲 (薵V琻>挐k乒摛应N{;韁詄Q棷逪旰㈦]k;氙篗靨果邦鹻L霶m6剀`/均懠耻璯繛俣Sl髫>S様谓揄但髂迏給踬早錥逬8穨]榧軦莤?懼X耵*?s㏎煯7-傡0腁傄k)鴓瀟雕2喖塱r(CK糿eb槕^扳&锤.條賠、'O?许dp) 鱻鳜羡Rf繸'飬/4{夢U[y覘ScW獺絅 s9O瓕h).h雯p蜄|邃 K8䥽Кn戰拻%覗-=z%衲 ?W郲鑘U熏W4慾渁 8暈t澪フ篇墝LU9:h嶑⿶▌LS=糜顨ぇQ醂@焵傌o\@x橦饷兘佉揊┍N@礔捎廁m; 覍)]8喣 燪Bd6'*鉛A霔(啾褎导 獨痿Om賫-*/圎摼$姨G.听wo摓\珔g夓欰恙j-≥搓8O @鍍骘T;迲蟔=丠92u睯C凰豮彧轠*!M験+& 郒賈mJ Kq蚙>i9We-h詅a擨R謩;洡n戙泝煋荘"!=堻鏰 箕Ynb芾!p}嗪鮗W/蛸锓蜛5月駫;(獌桨'霸┰  髗p=iKP僳r烐:雦蠪']瑤婬圫慖堂儽閌$e9q怯n癌}3蜷 U濍嫯鋥Y Y雕 訠-\乯 h襨U鐯~Zs頛b(璤Z\橦-#x缮g傁Ni 棫CJ猗t\ $"鎐瞨粒竍󭎖" U唒衐 "F褃悽NHn暆k跏妹@I焐x28g|弻茝q耤T!/矞轻&A蓢沵瀇萝&[痘悘瀝d>!朣7 i 艜敻酹V髯閚iD媌 滷'58| v1蔝{挳N皊v)崧婡 鞗G閩踯Xb%粍選蒊A/Na≤OCT!#菳`菵櫊^R敼q痰.摡I爼Y杺V;o酓`p船U貸b諣宥$(鈩 2霔鋕猚椆{嚍b腟i l栥G搃熉2渹罞=丠C燧V,Y<楢愆*歃鄄<\ <2k息瘩0Ung_:,僬劰棨B Y.顯I8H粚(踴醹PP覔魓4櫵鮷蔒*2郱y釳9x剒鶪剓f魄虷c椝M_躭穃劗\9<诉鉸/>透趯锰F炒錷虗葊d:0D貿e鐶铹虡'蕧曝庘斔p靀朘T孻鎹乂璯_鉙/d/% 黭唥搌鼮-@ =炲N3苕:卻h!博觑豑f瑑P駻礉6#iv葥嗘疪 3p]p$2轊跰 晰黧6丕俟鵉碂麤m醀a嵓m丙篨7V]囑搋餗[n≠%!獼吅{榀礶7揺;鞵!谩`^欿8弃鏚㎝丮錋躼0酄-;[馦9筅櫣S陠豫s赤4SUZ-扚{8}t0Y怲狕杯@愕羒ⅱ4.ea;0内e頡鱘仾 卟赶霆)醰靥^+轁p;u7動d墍豍Q雄 6#I/( 0燧癘W 饮?齖e齊邶萩8/ l銜鳉-/鏸b璹嗺劳瑺债4$l戴GduU连<7I郆B狲P拸蓒d 貮682梊結zf*+拔94H蚎 61晰$鰇Jm器1喦6?_3c/-颾w)縠礉棆隲&廋た豬蛆蓆摷迆' .)棏n逨V_)籸慿鐈苷烖G洢-N=y1珓黑恞+醗;p頕瞥刵A巄??;-泉宊纍 _B晢y槂GI芜?覰瞛摎?茹蕹岬M媩搑H匟硔揉咚d6=n蜏遑7.椭愤1*2敒 絜缢寡歹K涉>(甇秕鋧)殠鑽7窻1)沗J[dヴ cGd蜽\ 祊蛰蜶锳禄激@ I9Oh逢`溫kt掩魼挭 朮室Z如x欻4>喱2(= 楀*捗 馳塱夐h嬜i舮{踱OJ睛Mhh倄泎礈彇?蕹eW .m輽5`,暈蒸c坧W诞ミ]祎9泅媰9鄓歛蛙YZ韂璀bgn_痓令妢驩W/櫫镾a] 个逈$H^掃b'mYj爒.F姟V隠“釦1姢)哷EB;j汩/刳h 鋔#掆2糝B茡x舙,屜$緕朒4#峍烎a仍dz 鵘n1$'e堈姛HM激R'讥?蘥UQ櫠駱犐︹:_簀秂#勦f鵌骏鬮8鯑剗Ij輏6债蔧踏賙鐈n+-/,蛯痶垣vT狮嫘㎝cTJ蛧^7 珵顱泾;9q菃綃蝒逺戺徣Y櫅篆轝u鳧CNJ娆_J;濤C翡iJ糈K吗[蜤辉詂Gn墇譝>K`硲%orDCXTTL,i$GxY3id鐟璐圱zm俙NT笚;n7q眒 x汱Ao薺劕<.rPC@9閰v姖粀*)瀚雜埅踂毳/Xn埿34鹶65"凟E那-湭橔c( 摃悡揤╣,&&株}拇 z'D甔k诘K,^ 茡.5瘊R鴁`ivz16+樖+蟷`E:+ :z粡巃54RP︰綽晄 x苿 65 蓶=小蒉yBdS澲唵qx檔梟m砸櫘>邪 P疽hz9竕矸 騮兮 牒躂黭聥 nぁ沟'O>-q)輍\+18X友挶趌藒"躧陙幛$;猐4恧wA鲼\%/c噃蹻疗逈`j砏騟rj)槃跫M[v達鶊族n?堃i#潅H褦惍M凞ei 鼔Bd汇蠽壜oQ2镔驛蒦媷社SM愃攩Fx璳p;|〓冤g 覬/宴姃]r萕ldk$迠嘡a,v懅G&Zу稁(樺c鬣x減会X漑昷& "唿嗖衣紳烳魓桺;y笊d癢緫.U.脺2尯%}!龥綟κ|t薄幕醅倄 БM%欪Z ihX;@擼潓豂噪嗬昉1,"挗覣圃 缘tU鑋^Z嶑扯鍿;9槄7M2T場r?Y4礊0缾2鋮72贖/+B9rU&悱滩錈 j斏HEk議5h!^6蓗飻'y氓蟣賍[,8!_摲8螯#蘅i 8暺7惡鮐5犵Z 吮[嚺眢Q 荁哒;A6銙欲妔#媘p鞐%|i艘j!T"蠇>n%晔 寔紾螢z搵9H=t 竷g l客 湙橭枴5v弱#+烁錯嬦c'堈{$馪塒淲X隴)孥K棶談狰wU'泌R括S'墨!捹櫅^怰虘Y剴儚蝐籣Ld30汔i}E嶻臹Tg椪蹙Th掩E0k;僨9w蚟#wFv-a缄担ㄍWB鲫?榡`絵Ce匂6旝omg锤跥試<3嵫霏唃秎A嬒昨d葓PCt瑤嫑!鍴7WW.+xTr\g~ ;d0G>鼵6癧蕺y蒆庸U泈粊'虆徖罐卆徃諢堐冫z揄2 剖g鸒&C8"臠Cι榥(嘊`爀ú~)憻m/ <饭銯[謱袚х%$摘)蜑"o}穁EL0VA晇桸* ?蕎攝m鲻)鲚公疤痰颩 8?倾2缮嫙^~,嚙髇O($o驃9泿胕骝駍遵}櫢.櫽茿\F莯妿m#^琋斯/*遆?擠:al邏莊\鱍e$壖糾G煳2"唪-皡櫟j鎰-譢訳胍c@骿N]6Е )1彬岿30亻鎐碢+p鄥弮p9/6cj3-v翵y8眩,ね樯岂98 颉业E 爢Φ勣 猃8gOY今'詋迿倩> 厫潫榓 gK6Z +f篌/km&!'O籅 #,蜵 裆`勀+g覵/i0墏p&剂 翬AX燢WC嘒颇捑腪!衛者缁膱}衲稻 K!T-!刱y錚+*璠y<爙疂渣輪:kH椬m<俊_K:泀 '豇h璁4閶 慲|嫴<蝀iP青U龅uy嚖隲趆酥K鯖h挈mlR盢2捋h釶笋m.狩2铸羾旷圑2﨏Z睌灔tA耤迯m騙+_牡领ヵ詙" 蘋u匸 4182磚"t壼dHR< v褯g'瀭"萾3} 猇;2^P雽0们緞镍LW\圳0F2  )塝8IHR噤咒鰦述 ; w騉鞩サ ,C嬊脷p m>|靅d2~渣7鄄ov蠶嶿&=%0w7W,SWX[籡&+Y玝;Q堊G kA9僣授c俬b被嘍AL槉!&;臽LN2rk庍偅`vL 蛈5l俇鳋7国: Xrl啙>]g42zW鏅KJ稒穭磺:"砒KC櫉~@柍<吇%咐動MR(軗燉哏赉霙鏢]槤灉涕 =嗮徹 "#A &6)!)i+焯狎蚹mH 龏浘񞃄<@l賄濅葞鶃H绺甛虝袠屳珡4膍6q蹪a漡蓈S钗蹿畴N$o掁DN|I!2尘U'Pw≒嵵薬 骀e 离l\N 鯅r髅B炈w厱癦滙uA陆k滜P*劧($AF珹洉P励啥悕Vf17鞡VfJ騯漞膾Mzo!*▽倁镁t ''R'g咣{{E歨J1咡\偹ZF+}騷}}B穚淡k糅1櫊Lc>彥%d妣%[氟鹢軿鈅^^RRWK7长醦補 8E贞}. !Ea轶>9t檱cN<賜d╝]肸.#财霞m裰馣a喻Ч繝征M縭仇'9,俅妻漷咯p軝 驑s4\箊q臠U.窙綽银欑汵W\納胣S薆x燎PN3<难孑怄=李l侑G-G?砽u:'n愫 0!=緙-险7.3郈Xh^v4$/(榠&怤る鐡考z-翅@蠶'畤惬+8''陁奦Juztz!1#-q蒳#$+沍o藨^t譄>频 C鋭Z1sE鸺,湆扷t靾]?N皁鼑;}7;+| sM6 M/$1-X婫沰0T 砭虀s坃T|琋6tу9D俹璆傧緜FfX蝇卾塌nH瀁55t潱8(禽^痄顧=5%3a+竝蕄忨搃μ卟`忀麖諁FmcQU碁i道Er鰩鍹顼雜Ssx鍺]E誝 \Ik䲣叡蘩L xt鉍UΦ9^{xWqe趦Ce幀摐l!蝖O鍏!蔚 佮萉 呱r 燩E朳喞v;裒鰗*Y秞=祫qbj塋蝇戎躶t東尬姿劌蛞m;軅茫忖8漋?犕N琀聐U:F&%>1^=q閘_瞡OU䦷R懐涀趶Hh袐砹'Дx嚹柿唌y趚郻3v 靻=:緭`寢=嚢嫺暷"扝aL ]Oほ綇襾IN4ΘvZ h斆u5v]哣鲐m'Q滥%$膇@[獄< 4W2媡'6韤%&$? 3慈D)荠氡疫媌慑循G迼l俟鮰爒;鐻夌翟?癡j2Bh晽鹸嗿爨笸晤鶙kt楺蚪M诺腉蚻髾儙齙驮滄橛l5仟5砞ň備? B島/喿I皊S塓^7襞餑u洵叨d洬3L嵍靿6哗]霬ibsR┱i!\4毿J贫>筗w~guT@!稱 a號覉傗廛漡5貚$]V Gd阸H(齗昢1酤攬*R鷚驐<纂漘hNvrzg樷qq:$碪e鎹H).uRK岒凵[螐~>訷_H =yz&%湨K-?訟躱;t{苯 aa"姏]觅奎熔/饙-鸅pr?Y糤禚1 2W鳇嶣铎qx狣勹浤歑俳;f閍0鎁e謼問呵hAп?9^s榦鯨灓b?侘WMY稅,#[j褣鮣Z& 姳髲缤翪Q銶撁蒉q2躟n=9l4鹖[L!鍇々Z匚駠唱仼?8:R回w绞k蚮崯.F绡崊]u 鋛{e穔婕C藓辤zwUU> stream x湱VyPSw!烥迸镯Z牵UG诤n禆ZO 翓0D 拹$餂 @ H慃斔獂T+趎画嶨讽n圯;递_冂 ;葳檝祈禧f~窟鼢9具1屒v磙棟櫂礷跏韞壡干?袎氵'劼\&虧漾#G釓輾wl騝o墒 r w姃 揝R痈麖eb",蹕Ea谹0 嬃禸必玐 蹃vc{'B060辒tC2镂=磊6沬品圊斥g3;{|违筟賱毭&B?婖(`9䏝 邸q雌庹 ,蔒睦僙⿸褀钶\橉r傶╒FQ窮Wj4繩!爄荑桵 ┮ルF{E鮷(|!眑鬕挂DR;: 蠳碄&;詯臬▽MРt#4l"dL畉3傮显\`o賄(K@[&|(绤敵襝鮖晟赟]h屸7竎_<)*!攦堞H噦 矫佀^ br# -+=9uEF笯.,V) ‰YE2I+爦剂贘wRj$湗驿O2膽髢*譢p湽sm龜9;8椵"鮣 蝌J蘆搾ㄏ1餈杉EEI激7wuW桕m絛7鷥蒻韯r嶮,萊Zb-RfSB恜d6妧oy喵$.\鳳?a誕z檍欿}e9a覃躥愉涫鶔2唦r\ 讻阮覶CZM梦碞98輂M6島燯p 衊_1冾0え|!/谂<|曈!愸斳2躔獂覮z6絺^簿?鈨洲毫N&l685眦8組腣饁縯7鐨嘃hVM7楣?x':(E哅0睆1饛3鼘嬨硖踍 篘j桗铔卙Zy5v洽酬7珝Jy腝H5pW晙HVA蒍蔨(,*椥哐 ,嬪m嘣U@峂¦&i 匧$C属F\~i@珫愻S:\昩p膿獍仭剿d'ti:7邸啤剛(癟,c 賯#图KL艩 嚄J((3k铜h# 爄悸R顪4糌>Bcn譬踙63X#2粯擠 憐[忓y=S9;}8餈$Y5鑠=隌F琀N錈彽_z恀7蠻I咔#潃7候抯ケd辥崞H鄅 *,p鈄々D f珲47U蝶e^揽FO謷a羷)鶢磏歽癔0凂;i*W茹譖澄牱p*T匜NQb橞J(qdV+坋鱄J#O俆物环 虭承sh)馺_d詝衃岩圶す粑谄析韤7~f黎D7 p匘珞:m%舨礠o鐃'm%梌^觯+毥烵I,/W枼憴覗IR2(啶'峾褜+'<十+vg騲莤鵘缕@ e|uC馽蘞 *eC2+' 餕 +D芻ez(]?襟E枚-9擱漁P捫葿l]u91倰u:攕彩(JVJ捻O跪8<欰希gF嶒I撈璻% G-氷B浤轼闙K譶捃z鞲裧:SōTR$$裻猇Ii@肣&砃o67`u糡<8 GL$ '& &s彸_済㈡柀燣C(E⒛l帱*椥忀覲瓴(jMhyDuK%0郺5顼狁﹛>顸vT1耨檮鈐+"!6凔5傓^󭄩z饉8\蘔fiK淬亵孂>躩C国*7=b鰧賡g 候烧Q]n;摸>勿膃ndstream endobj 120 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2785 >> stream x湹V{pSu緄趐罵5挔迡:AG篩饼Q 7劄ホL 﨧5G櫰 辆vP樍bR 飂-8>營模眩T捽A棏挷Y@R0佖.ⅸj:p賧_q>rU Pe("-&;蚇 *⒔`疺k5U槈騡$?9噅=蛾!#蚸畺*!-j厸h冔ks鞤$胍 弢問\:f~l鑭魋.羰[獆%"G;系嗰庢?k9n 臯7辳h ,蘻鍯U噾8=mx╀I&箁5孒垀SK'淬M掘尧蜉[G鱙A+胵X6侮陰癰{C\鋫bhp6'場箋頌K纎uA全奷睿.潳譒峘',n+l礟晖 與Ns螤*w/睐嗫.)t 釉愯'9k聳F嗷| "y%∮ L嚩PnM娟哒艞h曯巃c缂c扈枚+)ⅡUl浪叠a逹W賻0:嚅M瀪p 昻暕訸'2'}+5韕遊砜n}燈u:j!鰁.0 uS露9垨啧黪町杋DF)XR ;馥飲O庽囯 镛炓眯MMu]踅䎱饠蓜倬踴.玻*_Tろ紕j 呿.童i;T箅<2昑J>Q踤罊樘lf1砲侃M噹W_#]=耤w悪徶r3 ,*%?k坜奲3+O<迏f5!#g嘂扶iQb礆鈹4c毎eO瑤将歙6R澟l蛮 烯桕;棉!=鋖m簔h咶u盜&2悸+o w5 淗-貟."你="偈p舚2]摧m'化彿t煅m侬|A捞'+R蟪忱(鞣8聧袔稩]"qi岙悴● N氿 zs(舛膩悛)n慲?盂l'袿%艔爅┪$鬡 詘庆-A63)铲7瞃准~-墵 a秩Ut*;鶩l6魅/+苧J[铺7鼙 9蝁{揟<5鄾A 騿#椿x撀'/Isw:5p佽z 痛諏 +湊缰丵扥q姬镩昶趮N;Xh刯h厾"爽.i 秜匊墧佚A铦+f妚p/o鷲橩0恬稿诌p嚶?嬭$礆 擧9~檽椆{> p鎍蝭2uF鄚:R!N`嘅鲂餆`}2vx實鷅I躊e潳い碊^玪n阬$7丝/ _筛錅礛o旷u萦苭吘S芑遶m牫pW=释ZR_簺+鰄K誃(莀镂?v-t) 1L壨嵃蝊f莑'格5鍿P@~朶洙誟R,*+禍夞 榶檀'緌n鵘c<郇6Jた嘟聙T犫3)_虯砆 &j椟勬;|禰验眑L巕Y瑞腿遇^]低6#虷珠-蕺眰讀 p苔攲檚摙4T鸱=戥'鷠cq0鍈盰駊浉+\ 熯vW>1堌0娍籵p碲尙ta鮏菖外艬柮帡觝v珙;+_濚W]@燐?苖薄X_D3竀`5陝|矻W&<^q秚箞1d#(眬豙惙5涐纫I]橸不9;1k搜鲭,)蘁Y6罡鴃嶱&.. 瘗偠踡8丨曄鎜 I嶆V08'椦糅嵿:胧u66马(k壥蔇㈡矌庢"%J1婒*+q:菲`爩咙駉&5肺毵k隄苆i8鷾纂GEaNx曝=膶膍派用6;M豁u刀-9摸?晚endstream endobj 121 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 965 >> stream x淯抅L[u喯i扆稶Mu嶀埠▼^ qd寜乤 寲r蕠Pj)怼]?V-m:局(T╨:萏渂/tY2輩7<&2.艚}o<颣Y$社N枖葯尲M震苉e&]沑慧H窯臤H倪曄鼟S7&v撦Q◣D)q毃" 塨釯b焵 ,yW炁s9;偂a宻t滀灲碥r枈&菒:d:邤+攢鶯轝鮺D栺>笂钊 d帐vjh硁欯唆祏eh型z 搉蕳}h谣挣ZzL-tWA#旐7k仌0a?豉軘缅檞Fbr 巂3芭骀耀朔%"]5錼>户h3 牪Uu蜥"西S9;叶强紞W秴G 颒<臩|腞渿1E$男宣幢琝Ut棹bk_验#S3谧闇翙C1紘K沅祜B.?5蒿擴 ē34願8/皅9'LBD_鳌U,覎鮃sc蒶'Gk- 喴ed醶@爮藐C昖駓鷬&鵜惏]佋$P7犛3授t莦媸'!*Z漛a:螎镆^|,+W蠕]!7崶b6琭瓩覘魅樍p<q鴌Ls涊8賸秏厥P锉:<鬔瓠亂衛j眛S占lp=y $麬⺻炴_栟*骀鷛}c魽 b 灡馜鄐竴xe掣狧终 Y赬濟+篖_2綌魎-珆跑A詟狰>寿!U雥溻缇怩GY鈎(友辻N7浖41M妖g 鎄}} 兞95鵪铏頇韹1 孖>m竆yT午<>ニ霠RS觻^嬟x^o鄹渝穻D/~ndstream endobj 122 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5764 >> stream x湇YwXW谉uav鉎裲&1[-姎* F膯 妳.掺瞭8HQ",(翀5X"朎M崥僆FD鬂I.秣|喜喇o鼠畛苜击茺;縮物軕QF(橪f禾)pG嗷S'籰 踹>綃DJw4!rb粞h~V殺箟f8,摧a竛罭穮A嫈隽婥杽:剠o庰\古)j跺?趄v馳殛肥?`娆鱢媳?涻6N炩裎詗彎AQcㄥ試5&祩欿紼筆c⿻8蕰O蕈VS5訸蕩ZG-&Sn訠j 禐ZD紺賁S┡曰蕘歂9R32j錎9S#)s蕚菠QO Q疭蟥≡0蕜病哠臨#(姡 燿KI賶斎羊/宭嵹崸W裇 sE9c尸g 0疳狓A? ~o鸾!訃<篵鑗 5167:鼈閨忧ff坎戊#R干\跞1#J鍶嫦-fY腪R栵[哰禯薇J癦aUj鮸斶絭%<0L童轷p賬\椝5叐rR睟!萈┞"駩*v@4$n#C+-T)轳)) 訟).uc8x 湛,胡 c痯▉2]Zj佁堑睜?孟峽,c嚻Uc鰮埉9{\蔛s岼堟=0嘅e硌yK軁""xVl傗-:(帗вEu犞鹄E4垧∮g楏$|g迆砑=濆0 簁虀1F\遚< 鐁 j]~リ鑐n:w9O耯UB壈縖涤纍蛦狇ギ;禄厥y9L噙Dw4ベ玶*汕溮g饎0鋓骤;禎恢~恳任媂+%/翮衪3bD對'齫?>E3迆7派浦珠鲢甞今签|$旻-}5C4*茞x読k湞PiYS峧%?譆塒I鉿r褬,U*鸁醏焊在%.^4yq糉讷瘼("pw C`G:燑秛'0Sg䥺痦u]:费篐葕*+%P櫄悳失飩鬤姷+釮枹甭懭|啧Pk(5鴰rL淖Ds諦娧俥2礴鬃籊痨硢簪m痯;䁖贯I穘>氊 蕕Y羱淠E帇鎨?鴦咯`.^8{z/夬(桞[笹妑駟皃~¦`汞ra熷罰堗蓕7)蒞癝D@鐰頇槸 澼 1 >UP毋K灱&∵@e娔O91'K瀤鰉縓V呹G鐸y| g #衫膭腮墥)嵠砟0篙阸V(W?埭Oi!⒍;<隲!FoM",㩳竩ⅴ篟 ~n#&嶄\苕瘫u件鹧u耦磴;鑐翽 z裟肮x\ 毘H璡/{R仭h勮鎯PU?铨-趽'骅A抄樉氼瞀1e=悗烐潢nUI犢zuI'(;sv- *鈳蘜4r+P羱粘"乷H嚨~凟t睎&A#6傔|r)3僈胟仼(龠k蘔麜q磝\擪盧 追aSt珅 7E[kG壟h襞, ,尤%4遴W耈,.柏懡>f隁糤斉gF韼j 8'迋w⿸觵廕喬 欍跷栓G*-閚,琭秓鳚篴e%焃+? 奾PJ2[ 6轷类处{熻N奏1嶌悎uJ芼N1<G屲6弃N钧;蜅CU*鞄蕧珄5)劌汽酿揸-艣!C$Y+蹦羚彣+凱譨咉5招貨@痠dZ烵逡*4闶犚7#,娤prI鎪8S+`"蜼鬋Ofw引瑴3CWjx@诣壸糿搡鎕oPd鱁錜哯AJIUめ檏;馞鱓頬慷[ピ廭痛a鐼聰鎍!]典6:渂/阢s6F蔾"荼擃≥+u褔f坜祹鬀歺琕鼀F=Q 举诤単7鴈VB侉泃IW兒猗{\KI* 忏>.戧V蔪|╣瀡ヒ0i怓V冸:q漒J撧訟H陱ZO筂dx鄹竵zㄔ4*茹 藃▎ɡ'陗寁}墽5\姿-N %搰綑粙2 !/哮/娶4b&2l箭e-{O颥'嘑誛A媰砂匭^類4噬筻莔叻郲冽襩?Wt;媙d簷砡I山轇8io|.谶珂亇rb縛;鰞_岆鷦镮:Mu樒Ad<Nfo≠邺8P缧0綠.bb谇=Vz螟5矡DY菅裣钗ッ! T则P\薗&b娭喍8U@7剣聆$ER+羟灔g_K穓粇$ 榀$B銓fi狡讘%漢忞蘗泫=%2龠2僋-O琇.焸M鶩菒叱 @鵡瑨a搘竮デd0悡W(6祽eJ=3*2h罅-m蠌~秬颒雿鵆[kK懙а %泙!矇+癥d 康龠P铣蝆:眺鎕2咩劓曨尺_更F子隬痏i[楠鉽 k桲蓕]岭唀(0&摔锤1Y;羠盇V裲J 踏qYwZIFX  Rn瑽O2隔%1cwJ[{I檾懱嚠]6`s*鷞O訒逍傯覠蒆2x8b"-d/c慍嫇k鶇8#錿淹嬬鑀娼婶w"鍜7^囵HX=q"Na;蒕r':岵x劮香 漂奯6 2頣躨鐮(钾X 贰9必礰貈3覩 4杖p欨觹逛 }蔧 裺哌8僟=N/~!c j]嵕&幣f兔N襴>5+oksEuI}Xα礊\.圣蓡{l麗(x騱J9綅\啨427>霨d?觺礯輷"/№鵶楌僈椞.D."..W\0g嘢R甦罸G4畩w损偃硟h矧崳&/礄旦苑8B`eT|tbhx)筲6y腑;,幏汏G鄨唏kyj睨=洬f睈碵坼1鞓*皞燧E冫惨叴箬];詨 Q鯐5賲櫣;珦SZ] %D喂xx琘爹鋂灲歴3侔欸蚊f痈q6G彆55U鸬%yp.4啓絘}埜婒抗E@缈%窮鴒.z雏":垱 褱齉*5C|Bd餓檑崮偎7睔弅㏕3焖蟌5璙蠭馾}镄鍫啨@嘄* B7[#旣訥鎟蚲2 殴汞樖/@/h峨驯作g綶贤戌節h蝚降L煀$c 榤L:萈~u霻2F闏CC獴腚z容g:'E膍W蚘9糕u$箴=笏,6lk啌涕禣n酄馍|Vh~JE_G`[R抶湘U罾雇糦KN8 P庇-甇>胘挺篹镞耾蘅際FYFiF檁oC,zZ槳堍<䅟& 0葇駹K痯?墢D箶j芯嶛薏[灯5桡$Z稼蒨 璹鰰=姶h毤崼仆Zz妬跔,2_甓悒O莔*7翣檛麊緖 搘tWm=/零5R欶v[膞Q.旿wz[5 蹛'鬹k脂v<罂<>Q+婋燪莩砏f=升w?Mx|麰苦折$憫}5嶭3埉戄*,籮涛躲`碜渕 {詣彥 @zZg熘@>鎌`/鳤*8攁縌C(?軫+#乼(悸z鮼0p眰m雑=賈]迦"/歰2︳6繊湬=1C擪慢蟒蟙惙Gr'.榣衚V丫蓧~)WDBHSYv尉近植 纓穝溁p鵾並鳛 rr鲱 !$,& q腱o>{坮]`醼4昀9吵7~嵒綹#毘'%?\!=綃 X&视/伦焧>働煋殮殮慙pYx]mE┖碗 膴X憽臐$爲3瀩埐熆!傹葯. 范i蛮剼5P膖\:蹂7g椮j盹 .hd悄=玏S恵tJI$$骆迗)睌&禿 d哝乙>[p2趇.V旐 E翰幓5窺cvLt誢Tio'I!h橇m菋稌wo凅L绗;d0蜣jR8唼迮筷'8W i坏y欕8摿篆o==偠WIB2 '鎑 Y屆%决疔 翵 瀣輂6m貄槲'9~l叺v5靠擪岖{=轺7p拋杝蚩*黶蜩燨\:?帟愠ZN初c-!~r鱠钷们8m垘蹠 酟LqTi計Oq乊(莝浌邨2>q0H驌檇0v鑟>辨篖蚱媆撤钟78o瘀n植]鞋4)竹g唅这\*拟W懚>+) M帀M嵘'Gg$YFGUT).体褶秭{J2鯶鰦鮏"~,圣Z鳖殦膆\-矿 b需9Z#o熛戱巇悬鶐8倾X褓瓫走&銁蹤a.肨Q.9鱒棭R))qq禮k#遥3乱!怮枼椃:苭[OU鑕T禔4fg篜)唾4煽暙雖#y扝趁/瀪za唥|过臅籚8d靘2 7g嘱沂暌鷤月=|駢搷鐎辄j泗En+\D揜RAe﹠Y某9鴪f>穒筝t訕隯轚貐兡-9籆楍nl歌爊<|受阐(葠E腠}kUZ僂)缠破赱Ъb紈 ~A蕋痶梋1;-K4伙匍%+淲.浐妪鼡ABN螢\╜j"*!1~觺Z&hGZ%G枷暷擠千う$丄*Hぜ貍芈餔 佈!Q1;B!拤..上蜕菝隞奰霱,+尛;兢捍⒏ 蕑[*J#齇 o祑此$\痵遼愪>|  贬$傸a 硒%7驑C('糄奛H蓍}a兹%岼|a<,>_Z悘篌丑i q0?热5p壤C%箼贠NEv類!Aeendstream endobj 123 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 767 >> stream x渆弅HSa七彻潛-藣愫罊昲T篐塟$垔輼.:噁跉f谥嵨EM迻u*0矪韇XawR$3襸 )?觖<("AE癸垖NKM8}(閄JB芢 圡'O薂!吽呈骶泡K酊絑赖㏎0 A頗塗圗Q闸4J%$yXp洉惄j瘳沣hs螛86嶦尒UH唐:橹}=F _輟\遯)T倱荹'儏It丹馫!+蒖払2b淪矸碈缗钝蚆7Za橊薵a2撘碟:CC幟豧}嵦u鸳/s鯠垏]屰,邈厛9彘ゐW媵烌$>39bc垙鲧導窎铇tuP-#竕D*驸~~[zu6^璤nZ 踡揄洔沖g輫v*秫扌o乬L`) Q`1 5@2刉&,]0濔^3x∠;馕"?pO淤2騀嵤泄誊誛}5w侚糰鯑P釰i垝x萒協 X3枊V bF&咞逪E甭J1幃"由技躍闊> 3鄾At"o 釋9霾a/^&兢A3H ,)斻BQ&s3倥8.\.鋅]b 鵶鋉(闞(宐lXendstream endobj 124 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 970 >> stream x渳拀hu秋.鱧W鉁 $逸+L砥ul嶯輑+8_6j捍&%m于ド]^.蓳%檩瞪X覘m蔗^lhU67'膩堷O2~楟B+&!|帑}>鹦Ti E哟ゾ×謠煺A鐟N囯櫑捶9l=+朸+,5Pa娨髬欟戈A竘祮ρ啀UOv睫画邹c镱9v梜u楸韍9\螏旽夿m锎W7tY(獕z媕:LG( TY ES喓F7覹K狵矄5鼞I摿~}hJ鞲i禅茽!~3ˋ郼m Hp- |u鴉蓍.?吡4蔓S灉滫VN膁扝髢ws踽K C轁OWW綀('A峳椕眶胒Dx:孚.;况4:gZνW)2乜x躆愕y轋滄& Y<霷 銇乗瞚鼍C猒秋;茨w屆贺駻濖. 呓3~ ]lV阢>埨1D0鄤?v郌鲗彅w>鐳d?敌珀靧=/啟A銼A襟垤-壟u ,缐佑轸3譭擩臫未\9K垫覃+C|蔂遶泂郺6#y髧?岕萜tr++6庘J\線+犴灿H稉*b"籋 ~尙;9糲晄C5妉逃厳馃fd>Q溑i藀*a@>A饄撫 怷q扝(0l)&K愒X}gYM括地Z鉲1o舾另蜝氂?鵲諒f 慕赦嶻鬒, cVMP|}l 绅≌&皙!E早H脾%i姠q鋶碲:荡g/ 9虫W嫁pd嬒.Q絉$` C阆Y|B4 " 萣2.翀挛袜柒婭绽z$9曆鱕Z, tO [绫i灋熤颪 vy< |x垙病7_唞8ra锿/尬6谠痂摦?ヅsq.佈韽u冈?衉_蔟3駄>QX?=3a虠缱插咰OU擬膿J\Rc筛t偄k騟ndstream endobj 125 0 obj << /Filter /FlateDecode /Length 184 >> stream x淽O 荠 䜣GX*!杢尚猨LN摇肶:踳>硚)Veq/4匿 V垚訥W喺6诌l~2PI=劃唔 )T-眿茆a椭A眎97:C 戁c860.輖儛糃* BJ唄 俿バiwZ3 u[)*緟盵跇圜y^rSQH瀨\|endstream endobj 126 0 obj << /Filter /FlateDecode /Length 1518 >> stream x湱X;s跢頨9呟 蔈芚摞*騵ibKtc+DB"b餫rlC3Rd缿w樔檶F"伝坨穥哧cB&凝 燇談$讚诮M啅*y<汱蠑H(AK,MfW據MH凩丛h筁f{8碗禱 -Wp@鲊羒拗彗!蛿6皎v犘h嵰懅!"赐Q !衂>C2p-H+寔紬E協s捩ou铖神y`離N窪!鶒6W汪f菏孂*觊亵榇味y;_嬮sA2%瞨荽营紅縢桿轥9P瑰>-萝埕撱砖酘p渧Y`烖4顑d(7迖洣v)狺V6纅)C2n≧v<$磰袚鱩螂 !▎苼. /刾 6Q5=憨塓暦粆=糙嫜P矲羥4Z黅蚊莌,冸:[稐衏w嚷*#<4tV蔰d磦ν觵詎诓j頤疅Wg艥Dj磦>慳軀經窩斸6>襷縼犞麩k㩳/9T+熓=$TB铖%③ _Em馗z(("0粄R竴<敱勃x$z遇q污v/W1=垈砌"韨.慞結匭/獺B韀<擧wァU6U愠#鷯灅悇 銪.銻"q硗X.黆媵ia瘁P鬩u睘威凵╝▂蟙d蟙廾K铅嶰Q^ 珙怆 螫籱@瓚)焊1$岳冑璛画DQxZn髟m值`%孉6W~珌冯濯9夒塓仟识電喢椩t嵪[GR;n軵L!##8暣霕雞^Yi匹BkMo兖哇瞚藋3J2-C┠  &- 4韭蜓*d(呍帤RW薘樉?i蛐熘)A# KD脾<钭艩B & 鏰KB:lу6.硦幚茠巇_吔堂h(釙/M翭`8伓G韕郒壷=幐c聉[卝`Z愧摀q+ '2勒勩l違d8+#听 湋嚋I u揜诇2搔I& jb;榍遅e-曮ov2欭p{傆鏔1媻q6蘯茊嫀e^贴輐萮81#戽*8騑饶(2 CX^> stream x溚ViXW棰T@ 3N4茦hM0j誀QQ .垹i怓A杅轭,*K4 孺h峓H$8寧d欩:&y8_荤G騵阦禁絯=鳛se敡%撋, >~﹋}|颏梌 嫀Q'箯鮠/掰 饢兎g|針徇F?>~k蚂9I蹝)雡l圸1zq戽e /RT(禈ZB=K崶朢栓pj9祩欵蓼fS9診j5彋OMR(蕳z蕛扱灁懞-+嵫 (囩蹫(.训^摻殬堤l?$w)颋餆|8l鸾1轑()D嵱圅嘈!整[:楊簀摎缠%0 伦m\X泅恎4:(人Y童%庈H 疭!mF筦C@呿|.P胞~,弘|90呯刴$荦h潑C诂饡岾z),窫槔S 脕xY &蔾鉸噜2S 曏槣瘌祋懌鉝:坮扈H=\t浦T衘?!捱駷 Cb]藕%趆>Z瞈 N3\~W{B{揞琶0獢d_籄AA3! b+葀裓賹鄹朿'兿燾'H甉 鏊D欎w巛旝[癘Y廰D啌 x:暍娋犙芁ㄢ1z蛅`豆K4勩D\<鐭J漶%, 蘕: 秵o沃`.&}>R肺nX瑳霳`熁鸫xU 袿蜿W G苟爻T踃琇拤背 `辔肵蓕C_刍a責5.0+掕);U/3塶<虢7yT银"/#b\諍佊O倆e礼kP熡緒ez馫6\咁精煊 i敢Z煾o虃鹾 羿2闣}ー響 冤兴澬*餠Q態f蹥猶"风粕/L`2u.Q康< 錚Sb玤|锸 墧苅獝FU萷蛻瘡去8Bi?濼梋扨]浮0紉~i)埝W= {抆配鎽e诽e :葒,絕摚对nt 景:${6禿隵umb嵍'茅jg譀+譍 '鮓 K6d!OHU y臽o吷&GE篾v N~\颟;缂k斊叝m荺l髅7z奭锘v貦x)'I4{,gY痔M褯=邭:Q漯**3磮 Itw攒z 贄B唦浾麰h籜|`i駡垏D誂?6錇喬伡鸔﨏D跮LK<櫅夥f栁瞒栭+兙儛2烡^ N 'Gk[夕O鈢飠 =MJ;v濒4Fi擉 衫O1隩蛦俤a煙#鑥,)滏c骄,嫉柿*r腃H嵠8蟐雪蝸Y[ㄢN袙a詴_ 6坏釛\蒦住n#阒)g殘{9怍c$]熞蕙H杅/I詊杤5#競兌著-{迊0=B3OW朧 掂ùV汮燼嵄a扁z8 6蘦7o篷6o^懛朼52綩: 芹j:vF擯咕3鐅砗虗汕敩fBz疰壤豢=]8推墀堶D8牀l濼阰焘pH3碡7gr-Gk珱镱4ZE.1_eH8Xa4闠鹴e-3О3+S珴-簳[d4m糹w櫧胰皏獺dB 1&榵7笷Cs((肂!?,[殶 +鑄咋zc5)蘃1隞M-锡 焳s淢S从5鋎'頔L\-喓|o9:q覣臙津噐=!VF霩=82鰍搷鴁幄;螙$7黈rlTj7e吰D&ㄖm 嘓x*9fsy#n,`,輘传 凇>,簉C^X鰼MtT脀. 򝀳昊V掁!JSQ6俕蠪N 哨酸礐8凓;5鞁a刭M\~.q黯Z▎絜:唌n媵@枫y* K!#6困鄛61緒鍁駚7嗨礡佩]楀咳輰n'邠眐Rgk_﹃摒訅嗢T=p#盲:衫撪'貊佊%銯尮缙兺Vq vZk>㊣a<虣鏈"鄫罵h+茻鷠8#=~噔}℃軧輇Z乷厪xB篋墰懿p琏~纍訦U忰釚簦傒捇n姰 恹| Q鲵8め<k滋阖旿!諓煓瓢m;勋针#彷甏栱 N5棞nj5渶柧70 騾郧T9p朣&v皹k夜Y 顾荓俵X眜;浾G娀mM 钟N0冑Qv#-坙L 濴炾{}<释蘘鋾$聩k瓼 Y$0o鉩僲┢s 螽[蘅B*鼽t嶞r鐆旧9匜*r﹐僫艄\v銦慗(22抧墙鼾烇2蔧侭m頹>8)7飮泣F销uH窋枤躁8 I[鮅簞娔:hW錐~馯鱟婻p硅噐嗺\ `擕嵰Je厈+A:尐.Nq4鄕(噅扮;豉}2&T6 彚u獌Cp谲藾眩良粟劝1驻*sW箙/1誁鄕皁$S槆胞e6c:輺`{~橙烑鐕唲栯棷鼰:)蓴柂唇 u抆璒*K.薧琥尜齁)~G嗴渞\kT烵;睈湢O'$4羘豰+-蕑=z褗<< %疠W桢緁a8叀b9)尿謥1TYtJA蔵鰔叝)結嗰6'-2r扮箔迌FIh2&oo婜譱蕶endstream endobj 128 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 229 >> stream x渃d`ab`dd旘聃M,蓀(I+翁34 JM/虸,蒍w藎;鵦阥謓鎛桋咩吘 ~g,览娜(爯T敇湞Z挀歏挃櫈e L" 岉 虒,:!咦瘕g? 箜!帍亏b1U孥I袰縎d8>~O9魗短穮扈陫1_ R'{v洒欙SB伫P欚C~j_踗 躵\,!< g鱊隀赜7ix嶽甧ndstream endobj 129 0 obj << /Filter /FlateDecode /Length 513 >> stream x淽粤広0呩=O7嗲vl愋貺7砲U祡亹槉0嬀}u咸t雅噒'>忭芋楃躜哆镒鵪 缢很蹴>麽_滞. 薳~|$课/觤硙:輣! K?跨o覭唼貢裲磙妥タ蕈惯wA求Y浘.}T篼娪) %m) 鍒E〥e惼圡〦芩 #d')釯q朅#.2HK.冊#瀍愇32菵苌 "&(槼 r蘀9 鍽9 娼 r4鋒'鋒擮2妊(2妊(/2妊(w鋒T Jl斬U偎犇6蔄%禥f敻Q2(q11蒨峂c鼈鉏cT尡绾揂嵙$棯Y5[ jTǎ j 禫鄙犉6阇5 j舡 j尳瀌Pc蟯朅峣訣 j eP銖詯A媃禎 Z鬽I-,}[慉嬀m擜嬀燛咧d孝o鬯燛遶怉嬀爑?覠蟦<輖N| 命v亏踽媚嘐椀;on譡lr:>endstream endobj 130 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6266 >> stream x湑YixU之&棰X挷H青2妶! 鹅潉l軮簱铘朜煠楐杴7d\" 2矢呇QG脚\|撅㎞圛鼫櫙燏u界烍烑肩秬G傞胫疧NJ$逎旫挞'7F興坵ofも, 耫橃y`茻抉F-^鑹M氵OK蒆N廕婯G=暈 A/&$%%5-}mF怐;s虾鸅ⅱCcb7仆峅'n}n偬宄^樈怦暙V蟵b~膫;瀨觊E,~6w A糔"B 你腇bFl& 髩D睄x檟'^!O伳3腪"坸雸鮀睂楴腃'酖I蝾=踟F1叓阺吂aQ隒穚キ尮-d@E拠惣釴錄+羨-棏I裭毁X蹲/擜*枘耗F(阭r+FD蠏バ嬷徨Z!蒡C忹[r揠QX*7<=砩誀u陂蚓脰袄⑸靚謬~+F+嫷'O佧淲哆@a )燢詨&r狺1H: 嶷@蓇j7阛4{vj6賶v I庻簒j?>抹妹C卛 #$=顂 P镤碛盒.H淘 遚O< 鰭`/ 8弌k7鮦1#蔬%x 炉曒..羍8,_/哠]鑙喝嚕烳e'謬濬p5 |'垁埇}b姙M礃4犄 拟{ 娭m鎀慁複蔋 黹茌_$$裈鄑:X {!x嵾*愞u^裗食 '嚣]厀銴兠甯坟ケ\;:4%!h> P殿HdD{H=謩灒 +馮> \庰[ 鸍15翧W]盚6皕謬謕E81伐 'ostv曆T 鷏mTFKt鉌wX&.擿Z偋]煆屏E8演PG痒bp0湐髒%昴<71V膻 迉礩A,"歮3幺泓鸶;}晡苐_J eN 葋d 殷㑇~韀魛>璂礟Wnn 吶蹍..y1腲5bs怱攄 r25v穧[! 蹛]`1V;YQQ供!褸洠嘴〾凩+ f6F鲷徺9G兆sU[囱烩羦仂P\ * ) 絋6_濮秱 +贿9Y h1俭W胙!.杭Q蕟狈Y簮婫迣币T 駹撹硶隒笠a5豊(z譨C +姉4Uz肵e瑣遆蠯鬜蚘.\2 R衾Mr炙襞\攉p笸瞾QL騱秳峝C賝謬京銵褤]描今ぱ羒 沭N!%閥鬺恂 姙I礄覢鎳'2Ha折D;RG彛I7K%3剾gb(,讫]#厾ш蠸>魚1乏@P;捎鑶-究c'み~F綥戉,骣稱漢餶陊_锫6賯耶o糹飅﹁ 5P閣,鐛i麔 悐-a=腑糋慘竇妶1>H蕠hz穝01f4~ 7%m粊秠p绻禀'寁R3墴亲滦5a髽HN睃V 緈壂瓠:ㄨ@o⒅>w 䦅"䥺"<杆茔尮5 瞼裸,~璂澑獉:F闻菂u镨z早 嶺葍L壬衖轴G4R蔃犮耤d%曰MJ囂Q嗽@+橉(鋰沵G4識卍J<m水't儱躗(4 j厷!骰眕慑M镡jx v兪1@b戙肄橡l弮"@梄%珖2hwY 珛J K扁糉廍踕 (Z<縩8W|G 龤/鼞学鏚vgQ2{逳P囏N!郾[蓁q0/z罚p<厸Q8瀼聖+\0:鰭s衧鑁4Ox,叇-さ嬫圔4簑<坂)咯喢鋗</老 鲯t栓Wh0 $ 哶蠺袳<52@'鼋焽 猬.$t P'腭蹔0[栟宠.痦c倒a案幀/瘉崧j?{徜9SU窖$秳 ьa屨7蹂KEk荸誎臆h-嶒nwjE&`硻圯e5偧#]\勊&趩眯6m茂筈t6m蟆䥽#xZ蘦U朆蹄絁W揰E裗6愻兡hV"掱$Mo"Qe~殆dy5麨螻 .妋E%鞳4樹暕~糅忢iV~奻w愚c\@"筛Q+I覨谣籋 X. sshAyJ:w鰲`)嫁_龅蹊4鵄 僇[慡鮌WanWf罭俐蠍?+艙?~yz摭蝀1渽y鑨_f赊d}h(N䴗滁'锴嫇[⑹w/鲣 E+4烧?聭堁䦛x1崬g璁Me^亪Ke暹~鶤?渿C汿a髲饺针羮舽|?~ r褰d溍59讫帑曦7X綟 <秡齾K抴铋媍 嵿 %F肆9嫧aT鍌?z=栩s掅`d丣煑欨&U2鳦谢_P8YU`楫Bd膚x:郔=鏙餞婎芐虯A遅j;毶*柴逝育p韦猤騬y-l6jM囖5q+@+`閹%-⒐c哪;$m跍1暕~tA汣襨O>!2F)$鮄甚 締|憔.▎唕s髳m隲Ht謨;戍3宸C柯銇麻mu q寙fF洅H丁u|(根U賛*p簔KX>=H/鼨U[軝燉>z榻语逴|呋霯+c钒§[,溬繨胃{廗湀1斟磎%镀Q魠}帨劒~O麦9K5粶駧蘚Yn.QkO-V,擤|礍欝7!鐰酂駗[篣飊o披jj ﹩\葾 yオRc-E 圔摡詁ц囚E濋屈n羚椝(zqü5縀裓绗7畀肇滄 G`F祋k銿 qGl')i镔徔u嘛tnWmb蘦"楋 s嵴7嬤2V柕wU7椲 P49H蜱釴`伝鲽份p 2昕閲鄎瘕醲⺮kXD瞜Y3批J6cnO%銩:h jUt6$凊槹+碴暝-5 清WqO雘鄩@5c夃繏P拣:Y擻%上徐﹁B琄,M犺o攭Yн9楮傍 56,阤魈$q :Czodds稹Yn装D9B氢檆扨鑞烉c忤}誋羡陶2︽dH啍岦d]reF34Cc韅H﹢浨]g妀錟锧槿t4[洰\gV喀O藡>蚡2貳帗斡'嫭F{╰倠巯_7=d 稹Q瘧蘣.鹁輯G 歂辿 [%唗HEQNES吰垄耣妦ベ$瓙唗H臀O蕔;8簪蓭韚圎鲞l愻&辜Q^"餭絸"BP迠"0蓦C燈珈胣摌B[蠰4^5=e9鋨1吞7塁衤宠А#彯 擒 '閕泥8E 碑数蠸猛抷╕5D8YBZE芷O <"#6qD0躨xp忉 OQ[G鴞0瘭v虡#J引&㘎/毮?>1畳_^1袃t"cu"C"焓嵼шL瓕H菼螤鐿[峈闰KFg O掃20M驥盯WE舯伈cGz缿 迖sD#S陲& ;醩4晗$7"袙餍扻茨嘵她猱h$+;儌珌湅咳 憁%H御]]: 洝蝇累咫)Yh.*:U=&'渫`獝斶6闹|mP %咋廑(譹橈gv栥cj#炅褏炲狤4酛js$\頤謨+D檴;!哚 ;5;3谘F覍轱j蓌P﹖ 懜Jは蔕o嘕0沵鰩龇*侠 P绗x狨!諿3O[潭bc倒EZ.J *砭渆椬 O@^券獝菒)E.疵鍈呎癏善>魘蝹槖k浳樵1踸7^疚珦0e 獚蒇P魰晵衆冱胂騥z/7N泞肔奁廊犺攸董譾恻芽纔8≮J裴C2鹋M藔⒚柫kw辩締[鹞杭7s}妿竆K︹迶 z烷GK 3柈XPD%澬柈×(峸tg劐+U抆威?GW m6 淍] w9吗褍嚾<諣術9瞜 -&4E翥进h 螥A 夸l贰< /劶躷螕)頝iL(H肽氳茢v8璵6 |鰪_騛蝡i]Z/2謈婏馽M漢煥#H庻 P珀覭$MP峃Kw汕.c蕁蓣zb萇账碤",蘿衽軛蛴楡蠇0\i壀窐淰S潻YR!D鏺v,{{5"曏h髡^/裛,!铼緋鯯82a鲰璆O>g剧猫挢=Hy%壩鐅鞹緼?滒7岂aj{膧8Yv儗蛖2痴Z絓葷P ?潽B烖滤>わC锄蛃v_6:徒菙\O陯p堌狆蟏詹(儯g溩(T=c琓TH! 25妠讏磞z滱O,慤E擢{ヅ六迃Ud蛥旁秢?3%W鳠踐{h頚姉欱邊w崛Y鏤 9+LOVEy初-KO]k 擛I叾艹2毴待 P@NS馵址隁溹劜H,滛k芚ゴc; ,.珅Mu貼ˊo惄嘟<璡,鹊(mtG塉TE擟嵱T缙酥缤X孩O鍬<妊縃't饦M KW<烮鴂釧珛韛灼锷Rs椲緍t)*:T砒8)l鶥菮⑷O譯:詖 层 钋A o無~z參l`*,硄+瞇J*穪|撱繖)*託dN<畛4鋄<+~p_W:⒉B:K癶禝瘠秅毝|癌‵癠/%肓虴g檍4I䎱鱘 頜僒葥r浧珿s癅仧Sg蟷?婄/饰S u懘@$z佘嫏>T鐲鹲J+敹偮寠i釿QIqi北dn x扑"KsCsK⊥匣-逘%"6s孆芒妻父阺浑eE`卝(4柟!锖;%鄴 嫗$ww-S儐 }M涷:丅A#鱂咠;7麸梓⊥\':{焛馤挦暄"'?嗨觕亗⑼ixM榯 欼隐ixV丅綸`*rRtM=%D3锍 袕 屳昿(鯞r.A諓(.ガ&S+鯔:絫0圹y湭D銅;;:簺A暂最爰1枫 I<钭YB紁蘹袌.T/pq/>4骤泒枴+wqJ渖展6(蕮罓謌9倡靍n幂@懡鲍tqV梹獷g6qé鈬q噟倉=ME耽`j瓋I朋栤壂`霥屑z4鐙锆8鵇;Ц7z蛚yx涆4,慱r僥7 峛胍蚃iE2儰@棞焃+*屮罻罱 Z4 4虦濭#肓ヵ0c昳锜橪]2匲渑銏个钺私餄/M~x"<p鏥賛7:T鐺Θ\Q.%htjm\r,駺cS:驤瞜鈆?坋┵轵 }V佁)+舊辜霵瑀(瑰扤h偠蚱娳矌Zc錚譈父嚗掼侈ㄞ狡^:歬@鰿緤<媬瞭h璹鄾L螑-艊窨D蔦C乛獚穓邙k.d&is&勲莿|韍jYO伊晥^繌吉嵙$闐NQ:笚h暶 ]買廘 K<醏攻櫕M柹 _8endstream endobj 131 0 obj << /Filter /FlateDecode /Length 3852 >> stream x湱[藃%7r葸鸷<): 买bB~膭g"F/証pZl壷%)憯鷂菵汁B9;z裊抚 $'8服狺O?瀙)澲>躉縶w+ 鋹qz黢t'2 :E崘Y鳔?<杰=\]3d儿 瞕櫩 #<無d2E灍胼颫ETWCnVu 踊oN3_禁镉?;翥)a$a扞 佤t;麴善D洂4pL 坹妱`9yc粄~y殒~z8MO?滐>芗芫𾰈勷亵洼镧>緹觚斟--E澁(艘/铡^橙,& 勻锣_瀗鲠/ヵE2}鹼2P#娱N?徜嘅鮿b&%H6轃$B去鋦鷱獢p蕫tA2C UJjT Ak訴Rb纛貿イB J啇j鯷I:川jc厇调踾賨R翴壚:`负Q馟e待1旼 藔^ 'U孈嫰讙垜逡#=妼霋!禆4p猀kI2蜩珸kAcs)h01Ah-iP 宬訸R6响ㄚW]蠔癇尃倱J備1縯碚5 (抡5ゝ8沐B覚7龇爷{${|憀 #'HR&%H[』v83X@浶0@p#н漀(Y旀'幚萍v秳!hHe┋Q +[YAz#X募驁絆Q岨 鰱 h`+E.瀳擥熨 摉6F!{卨“9庁{7F軥墐徳#y @;芼H=BJ *!踔Y凣()ge觘N>瓬F躘gQ`谺 )(SH^9R,G靁A﹖bYQ>蔀衛棂 w聬髨x8滠稛z@/j&角3D诮臇F溮@% 梵H菋s.^VJ|)m#^h染 TR6邇 lQ趝O-俜,饒=e`琍囲踧l1 鸾鐔夾F緩粌D免DG򙹾r稘裶#楾(N`=赅}鄢om鍫#z僕t狃#B6溝廤讛 梭泖想Y鐩騦筝酋Y尹蜉盏+)*螊枞!蚈穾!栨熃2Ⅲ旺;挈鏙更﹝陀縏*w蘓嶁e袳硱W-b漮 +戼6.!b[鏜魿qX窟毮筝篥岓簌纸4a4遼S粄╗W.竁睄軋粡K0x覾1A臻菘熮覭'?j  䲣貯5椙z肛uzi┳乮~~;熥谞=啐+2訁,軵髻c應s3烗 n玆齪烝c寍亅=quM裖Ds簉m5ni蕫嵦考^钉湨k4菾_盏扏4欥嫁邻蹶酾剆-\禴:j栏uU]藈w/镧/觔E/a駎{簖H0涅Cao鑆鏾姕爹胥5 -走.輾Q皔#铞F歼_齠%_ePs騣;; !$賮綦i燿@(痙埔"Q鰨鬌$\6设菧礰疡彉R1骒搜);鎌邯k屈:m0 N8滓|RDP殃eぞ锢J}鏻柰玼 店蝃I儾弭\V-碆%5)'鹊淳4(%譛≈刀˙UmUs歊Q蛪山.燝颁s苏5J蚺翦佩詸阓H鮸W妥戲头~"漇)$倻Z敜 3;d閘!g@*R.閼卧渖嗀2,\<"E╠`悲8乺眅(憒沰E 鱽┓vAM椊裱麘檝-?-"[g+ 銹]H霓VD扈G呢:⒛@驎碤ho=I'r疸褦改煀﹦渖儯- 倦-嶩,齗僆 哥S8)&噢]瀘嫸a9mY"棷7惎*椒矺*}+狌註着骄汞 1x6蚮w{鶝(^Wc ;*.С沃乄^T" 畠扉 \rNG[褧抻睈A谷翔}谇O:嗜wI挮#%蟊,潻洄辎e息M宫[i>` 萅dCE;1樓諉Z莍0d辳f鋜 f鞝婦輽"R垾塴Sm厜= 抻+AB俔娦I$^@掿誊; 鰀奃8{妉CetO婻T缿穁清祝-褓 O崌伔槜Q尽覓胱EO OX4瘢晾Y~炚2﨤l飡,u★(谚嬕喪 }I紦敕切快x眛】冈閦C〢t廸縂茬擱鷭'扏*霺]/m兽啋_l榉(9罏矻"0Z#0铴蘁∵擱吘峽 (糅鍘2(鰸;肀烾F毕1:_rX6 }?&>sC4妢⊕7[( b焳4晧拑P稵;阘蕠G=湥'@ *Y鹡+簀QR%Sl!麧α痁W5b轖線RF衇跚瑦 丧摬ia翝-=0豨痹飈8>枡黵籗v=<z求─"8丕7鸑f蝮恣櫝d尳%縯缸绡僝zs.(g颿7T邹>匠fq韜緦裎K朘Ro4Qz浚彘闬*魕`pvhN+膦4屨秵U"p-詊3叹W硳倖=翗逊 齁P圬慅rU"負o茓S5叻Lk,P鳌l1C?冰眕逳r K粳3厏*"-鱩鷷V,三翪>Yo 硁澗l} 铮!υE邊m(克{寊邫-LL]豞禥u .糝.紃駃訅櫬 潴%?攮4錌+泴"_ 8V橯~(顥攇$p沤焤鲑A倧幘厼┶譥 QF爼魉"邪BL]荀躋傦炦瞖杇)wo轃剛誂~:熅[{p籾傪C"Xu錋HC7A趑)R瓊9碘u柎_-疝罅Z c鏠Ig㧏|83旀NT[T糵膀rK`h举确竁X@G鐣%逌曞Zd;K诏 X&痸鑜蝴"w鶿O_&NZ;K诏6殆+8_M5耕揦繸;廕幤/竁渏木P踞T7T)偽薭潎%鞼匵 tc)"醳Xr4k伅2*#s-&瀲%鞼[Sj眷 幤WS 顣16c5鎈+撶aI鸘┍廄7\{p墣l齥52Bl筱K&?)L耗鶠鷡>讀Iwxňx鱗%$|古癬竂,)鞩O擧y獺^舝S耴Sl/4^7滈6 タ]徨怊緢狳x靼\@饅褆蠹m*泀樠g蹩7蒶J婹J_AT謱~撣纯e'|鈌4R许f利S~?☆ 缓嫬嵦(A.n?<Yr蚎 塤`窚.f/7鲱?7羸鱶I.Wg勞v/E琝j顭<譜V7坪q 咙掩耕泧_v?鷖U" n<54kw淲gl7V^歛蔝 \柱薓 讫*舝狴瀘o縴?#緙b>熳坲婓/j唊dendstream endobj 132 0 obj << /Filter /FlateDecode /Length 3171 >> stream x湱Y踤蹻}冂A侲殠X铥%X/燲揦 蒝1Y嶀5#欛<i縛?{捿G幈<"猾玁*~c cl疺#<}鱰Z湈灍S:& 6d<-dX 唹駎5B2淊6z~.y贾`鄠1O纾KtTn硿1 咺44尮D,莯卆XhT誺墋眯QY栈駽f2E癆费锖墁?,' 8杼唊嶒籐0唒T,o醦M丛╮;9`"P 絽F淂c"倬kT議q康 刺`lE沒袢剋X'瓯#┐>'鍸栆或Y.(c(zl1E嘶甄]=Ck<藶厙Z⑾G宥.>\柊蝦L蚜;w4!` 汩蒱y诧愶I迼8Cgw挪倜·yLP摭,钝萱~l桱魙齄窒f懄D幕喜o'6牂绛馏:冺 b4N高苤<哵t騻岢婦虾稧踌蝌泧o藿沞醃嫰涤A$橔{$:7c罉hlUC戓7殹埴鲔7/$圚硻b牁2~*}潽膲l+⿺TY鄏頴]F缹ⅸ噃4/稰/儁*y4' 7!b惬趵施艁tTU\2徾9ヂ灵锉;诗剔 U諯~ 3hU|矎1扆Za譎嚪qa皅錇s轱苁岌a/蚇帾M晟D、 塅,狟 w赆粳牝* 4忡峞e窤旺 B晀6"C曶W-J -薕>喔3鸛4P褆8琩 Dv乯!Q!(8澊 )Oo蚭叓浓轝侣G#~&~V£千6恌侭H叢畷ny'豧\贝衋4 莺-)勴匭d9%翽tX 罓R*斅!58)筺訦 f> cU/#匽 珅h螞Uh6hE翇b(旃53洣F;[鋹 V槏骽%獖! ═.霈仇Ja%\>(处噃.$FD9謳勻S:(鬚&[危2n(T$q樹q喕6┹隆8Tち+鉖:v鐷 %X囸s?+鱔3$nラ4E謠kF 鮰qk碋茞﹦鮦鞢Xnz鼍=f,0t榨J釙5B换m窴&I嶃瘨H軪薋kKzP逯p姫U盶6穐瑰 4Pダ愭J諧WB0(渱戝L[8捥*c#塌滣渒痉Q锶>鏒y诧Z捸]>He舤穀叜胮舄卣錗諄敃 IR(F{)B4妭T剬s"Iw螈.fí孃焊篯侊>袺4,ch[&s毘$肪鉿琗羔稂奃"晾%nsnn{覇p;暧r齥随+唍族j3/杄<澡y趋W匪篬岙`J峴世8烆+赈踴qy:碝襋#晇韱q.k涍僳E徎 XKE[∨瞊熘E]薜拜UY=\o謞cm{楩%,酄胫姾筄倴嫝WWMT插旧w} ▇茇伸a赎cvc噲 鋅珔銝\k0 戬^IS縶@e"磐镦蛶^iI蓻e岇s-R )翿P鉤1Dh_鐀狃読eXR;6uXCd焞D毲| 扻锔籸緡b⒔7*墛"榫g樒續%zI軇+6禑9抨財鯗U*羿荝#hb =朡/aP-@!=+'cF﹎喕?V踷銡<续I橋i|T鷯 F憹x:V3?0e往t莨6.8臥{Ix逝9nJuL筩_蓬夶欖H悕M9aR.K約~7榯jQT+B&&"{倦獋沿N7磺林M銁О镋鱹耓]隅4銖%'K ,We)ψ[竈5}8隳Q 呞fb刈u 幂B2剓孴膶銋錅Yy=騖B蝡0撈%-偦瘵ぱ溣=洽120*羖Z儋2h3q=檸~眆瘃M5饫澍<"R恌虜 鑨5" 獇]鞜m洝6盠适o_Ki9G Q!戨-A翈螮d$硵*Zx賹ou耳 锞v2O1BiЫ'丄枳K 攰ね2p態╮or"B錗<r*a 1v=p}熢~都/RLR缹,8漯nh㧐鎩3璖孾=跽&L;]!柽儅敬E琲纒鏤}{}V踻顂唘斬闒秋D〗`釛貖挳珦Nw鍛覰c{眆l潇aポ[,龓O螑<缭00掯*韎 7Wd榓!}劾IMK[~亭op掯艜3儳錶羷y前h<:7SM"#4W祗 搕鉒玻崮侀4q,渎w皯}9⺁\w奭饦閣r醺稕%K7嚤 6鑃q摪-3黍谠耛sC獲7s{泺P){4巖f 檓鯨瞈膻笑*揂囹‰垷预盬%鍂僭(裂]Y/v2fe磧(,醝;z迁c馊乹I}呱@r9螜%蕟?t茶h w)c!楄錰縔祛2I繦L愴2鎧g稘縱芤P4蛯絍;e藻i)`j鹻.歍読u延识 "慍嶡请雋賔餋&ご }> stream x=攜Lw舋`wf8\a噀KEEM#淡 圶G)G+-!.皞 畸]AD仴 :jT V埖1m鉗 ┉苵圏Hh癷邿餆楓>桑)E郁恼無溶憯5/rY骣詑+L##k脏 3揢O&P泸]3'7)9%j罛妟噴モ▁j禍ZAi JG鵼Q4アr〢贖唪婖館靅2a籪帖, d 棔zd X巂I鍒趖vCH&'鲅?2锏G'1桡鑴>8c 慪誦傺8A峃& W蠔忋鑶.x n G钽12萡沍3F\7烑,鮦_#ㄙ=?CY(tW鉡6皮lZ+牃鍑葒舑夗瘈T戶,报uxtXB鋮笢 5/栏;#賓hiq9}2灰;擨..拚驠e嗞犤郚;澸抆鲸娤狜纡烝=OF!辆譤$j磅P檁jc獝]漋2>!玜坟曟1哌譨網敫%sa自臁頑·鎈懶妿W刢N伔湭粣~ 唻1麛 莇5h_"#设+膣aE韩R2='s=躩胑幈k淊艑n鼴殭蠫活⺶悹Q;d\蹔趂袅Td艏>﹌,a懨t錾娵d)]愯66饭滅Z島杻麻r楜(p鬈I砚7 (岂鐏|鲕 乢都.2 G幛H 踘-貦愨預 缱\v1瘋菙笴 昀蹉| =煡 cC"煋癳2 9^`IG噀抖绢xm=沁.>|)$滪騱E 膃$o1 屆2顿}饱83>胴d受煲z000P?Sv甪煜穀 J勳諞 p鷧>繾怨,杍憦诉c+zu畖嚼;墒% y>玎{Ued,2蠿垀轏Q癓B!6Y酅懓x没淎j`j∽䙌=7ZCD夗q紗Kp ^C弲(儲nFFwbD N駎j塨"N湤鐓%J#~迣$巗:<漕G鲹┠o血従l蓑渙r澒_Uj堙{鳙c辗6f摥V[塵客`?轈0H锰 娄eo,k,禬65罽幙F漁oKLJ薐^:逍嫥6FZV6h o3X嶡zX嶱>`洯2髄督鵾鬝祫g MT雚<}忁|6L`灯Tガ#U岇媽熰珚唆鱥w8祧僥鰥婏nS?賍e騟ndstream endobj 134 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 612 >> stream xYLMMathSymbols8-Regular媫?   arrowrightinfinityprimeD!10%槛5嬇鵮鳹嬢f?3&10婦2dOz8媱厫墤牸Β棽毞.憐麛G鸋Yl俲q媬儜嫓鲊黛鰽鳗2^鹙鸼鹸K 鳍Ⅶv捯膑os鸛&抳鲄棍厀踲鶥w鷠鲙嫅噾厡8鐄姂厫剫z儏厐0;譜|?VW;z0憛拫憪寫△掮瑧審憢&伇 僻 鱨;$/G(JG蹔媘稬濼7 埯蜱项;寢﹕臺蕏聥喵 o&>C62K埙1扒蒗 %7黽tfO9! Q襁鹭余渌; 1鳓鴯﹐c乯麱妷噟媼~獋拺弿枑鱇:崘悥嫋仌硱Р  W/ 崘搶憦寪寲 - 鮡ndstream endobj 135 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 816 >> stream x淓抦LSW葡瓁{梛X吾肈I (壠-:5.慙\4Z^Z牬/k1訖掁s騺藮QfKo憾lY伆 fo763Yc8诽腄骺笋傾鹅<煘邠G@y&$B辆=n>藭痽\岾賨蔧唍繨jYA-y抑;呑.%>cS Bo諣輍/2洂驉&l螝愰m覹p1邎q僢3瑔Y投d,k撟Я瑻a錩%琼Ъ璛~)畣uGqrG u樔撋ИS 拐骁6嬅Z捜識n-劃癒L乏磺 d{褨7炫瞈睑5C蚖-芗蝥渙膠 0楚罓椯鋬鷦垅Jk栊i\扠鈸秉晗#_焈 ST鶥崜沠筪$2 t吇z駢贗%﨡犑Q8蓆橱1┡俦崃E?顗rQ僧鷟ぢ臆闪az馛<鐨弢J%7O柣06鎬dWo丮9OGO4 V腙蔑R〇螢'rst\K?薜駾15J铕撯沶呶诬_&咄 摸`V堟h庢l騣CO+蓈$v飰深\蜪^$衡虲MT猞瞨箯/鹻>齀b < 湙.^G频;`"v鼐砯O輱靜}齔蚖 D鍜S剓aO疶杀1↙zmm^-釢欽$葚γ6絖訇:飷遣j.薤-檐H艂3 乸endstream endobj 136 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 242 >> stream xLMSans10-Bold媼!鵍  镑TR3鳜救爒魉喻u骥$嬿$,!>鞫蕷瓯嬿鱕鹠媈麆鬵fg睍槷鳑8檚枊煖嫨+鴉P}U鱱燷Iu▲^滣i   To 罏憫寣帍寫帉 _ndstream endobj 137 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 196 >> stream x渃d`ab`dd赳 氏M3 JM/虸, Jtw椠┧谕密兔猖沪)零麲@褠丄垇墤%瘥L蒖 輿~踢t簻覃覈?z6%矮t蟈#c鲱\9Oo疹鬾謦輌粡/瑛铀炚]"棎聉f麽蠲7祍饡-<雥 6q葶栥b 社醆萦塾子;┃w騫E鉫ndstream endobj 138 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3537 >> stream x湑WyXW动f*褉R遁h^w怂(8壞%G饩 途園5輢篹mv Q寕鈧/3=c湙澞梃)s櫹鞯樺綏檤贶{9鐆~鐆%攪%慔F|竘*.4>p陫鹑Teh掚 骑熷{0w姹髡6_6鉃瞎釘脶鉛 I 揝R右C3秂唌帉奮笿穠忆)S)j9L}D&R赵j-祹歄偍 喳j!祱歂->爾PJ紼-O挺哖^+7屣FI(蔐=H緌媣鐍辌炃SO僼曯3:灳虅3W,r贙8:l税萟轺铗聃Q鲩幂掴@阑B锻=甤膗9hv:H嚼*=)勿l]槶b+T襑 7黏佫瑔8%}豖o8G燡Bj栳q 蜄=鶑蟅mX螒琠歹~&笴bM襷鬓v30Z嗱睆a'鴵慸你I鑳烀囪媒U&(i媕箧鬚X《攺霍':∠v牠鳂u/袅佖嗚鍼:e寂+d崁Sl仫lv8}焇铅踨v捀2魸-馴>u[8w慺煉I畽嫸Q4継跒 08蓊k.9'$芫'櫵i#3楡砠g:N5t嶚tB褶餦W儬祢}z黹熷l8D.k弅 Y,呌?柌萲繍*C/ 玌轸|mE'魜 湀RNO媵Y箰$4頷nl抖q尴蓐疭 郺{_麸噡8)g=E2淨6Ko麫=香R斠C .煅2B,=矒G推鱇T宁杦b滼鶾ul7KF薬}8l+k莤?棓GPjJmho抰鬮N(艖28旑Hm庌iy:眛~1硗]w懖蘊2r哱(,觞}蕆5:韧醫狐"嵅Ii(b姣嫮NlN;旣 {髙骿礛; l翁巽<櫵i缩鎈`病 '#恄i6觌sEUii锥 糸2稞\R议"+鄧榫O滅畠S蝵峗鉷Y焜5秊22r1幟6/愸娭蠆爀抙龀;J\棬`仡部 F]O#"S!霔煉n59凇]哳舛$摱柿罩赁fk9AQ :(u^N矠Q襗C7渽彽.zU垧/禢FtI瀆C踡鰽f1!秇STB2嚄锳b}侙亄N后及鍢$葹l*Z籑B %3 .軧C=*j:z幹靸n責l祇5C,3楪jD掂垧e翖r禪瑌佅Xr~陫DB1▼髪 &恷馌kQ5X需倹籚 +` n嚑^W檧3hERp隁鳨K/ vTi 鹥椓公c=&%)3+!+怿縰9章廛 {輥KF?镧掦(鬓muJ:n銝{钼飌ìR Z5鑦q) W&fi鄎渼泳8|.⿹O+N蠁x&!輓o.,7搶|轃 睬撗 鵹|{戼.バd.谭u󭩏U:nc鳢蒠R斌屿卩丏s葔w!>䲟墝岠vPwc繑f'Q(鱻L蓄LcX又彐尠1[!%+盵w卺谤剗St窿4Gxe!门Ω聨j羪/坪鍪`9?O[X⑶闲韯嵃蛻sT'm*吰G+&#砂ヽ蓀"跠鬎铮O淁E8ZF姤e鳩N凉P閞5菋A癤H铲㈢5+9;Nt{-緖菫'0x"O璺7䲟Qz EOy麒巬蕌迮y臲箰$謌u鮲W貸仩r鈄'^|潨 y&媎邔籆x帎莏铀*eMJ汖介衖闽隼i8z炍>缫轁鳴!@苋帉忙玲z_妬@蹷鳤2#/X桊m=潀#4緕c礈I壟釪Y}屸毝W3%h眼脍"kv:* 6CtM#揳铽譭匛l7+p$砟#Z笗{>)盤`7g8jJ璭U,ag0_z彐QUGN5颽嵍@檶趻裓]S奕%剴纓-繽茙挹喟:侀噣賷y!S9v墇騵嘜諗r/i;琊?═|夐%Tc~Y. Q蕰颣兕N童(誣砖QM脔)忒悮uM乌?v頣蓥?鱯J&:? 每o|/h6擛糒 %}Q)犙 纱丠-鎧猖d葱 韟乁P薥 陁;蕆勾塚戇 辑 衬潪 對梜煹}U:0(.-獎]八hwD 樚;寘锗W ユ襧\#~“r匚轰汯殦尨锍%/恒_H J郸" 憽譾\ 鴉鉶ptI壯ESR;=圚Vs_Od()鈛桒軟_ 尌茨復1鳍;鯾 媙k=}搌,<]乂c訸 3k褝 d惐塪#O畦磁艩a雌傭漱OQr;r垮喟楌$铴醞$改鎺aF僬奈鞶 {l垇肋q0sˉ庵 翕紵K諸R胳偆罡椛.2;礗  s揟痍蕐y琑 襜0寙沉`93lE7猠ndstream endobj 139 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1424 >> stream x渳T{LSg骏弼N`t榹蛗 nF漀蒌醟鈞h腅E"炊,濉躰?邨s~琰~縮>!q"D"扄AA*鶄脱{5娙$菨鬃8I t1窰ZgH]d萯w埋'$5懟vD瞧)霏#傌Dl!聢璂睔XC%園"&7聺樷D +%v蕍z,煏虗TJ䌷^顋燈"?%S懲U0$▏醗抠戅領O矏侫?~%釕槭Xl*S簿d 漶fㄥN4D>ˉd衠(渓谧瀡($|俤溈洽老朱鴣!ェ鲷t]铐Y縿u岡黸q細椵釷铷乨 t)殥k>M*[PypC5碤乾朑廕4z禭e 犺檓`j鄕)=P f:7lt胿H -Tm鞨>tkN变憅nl蔢镟ǎ=Z6螾P*訸n 众歳K{."B+穝 筰e熔>'=(!唅I勳 m〖-9攰K_) `奱檑胾V~"虷x笴眥XG魏{髜%麍!<陃Xp脋陬I+劽V苼翭;ろ@e赉掝Z秊*8弈"bD)灌Z鉂枎诧N贝呔R詛 勰嵳筢蟛硋け{裔B潔&@.蔛Y碬覐g顪 ~JcZc]恿超イ*伜{&>樏+ 翊p鴢⒊}{魽{7K5v兺艘6!5i)跂緒x咁秛t=oF铤Qq葔 瀤仑□yR 甓607 ]鉋7鞨瘾X圓"妯甊摃 歕6Oē雤渙M=RS_は-3缭e6?蛠p尳c拽髳氄衄鰰=叉戝呀6N锌8Re {{)潎蜧D绌#,恣麸貿燄磳a籚 浸鞬缇 迥\E矧鸔U焁3J+3薃+y驠葐M艾Y麆B潳';f矮<9ME飖>l鋦裭W ?_i7噤蝦?蔝0(/7窀q話隙w.邫廷峯qH鬅/?&9斉蓃i漶G渣W 5翱悺緑O饡暠〡蔷?x伅銗3钇蕌5橇恃 馶(cQ汿*礪2-撋4i靊Anel墣羈1RR蝤cl彈1铧5弅2剹澘凥秋Iw X錒崁$媟v蓝輑ai隀0PCe"E/蠦歐Z8-嵳尵 囻 Z#セ顫<觓8拟ti畆斸7傼'd窸D5;倶iS樺1 yLS偟蛙de蓜粦瘫+揬cP蔖絍tQ 1CSjmZrnjN>孄 8E7]轄玱.cQP@E琛|簁v蛋}VS'鵌錾$曀;'戟酊忖R龖 傴:sendstream endobj 140 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 553 >> stream x猃LMRoman9-Italic媭鵎  tehUFIU Ww $杶媹~妶}oEaU[z嵅攷憎湒嫕榿媨;镑'彊媿嫃渵杮puzd06z媦~晪D媶x|^猐起瞒%;k7吟姶鴙嚇倯厠唻墘剛RB:u]G佔畵嫬浰謰繐瘷学斆嫚竐碐%*-鸌蔍噻憬杀Z鲾$3婮棍4顜檵窢mm 'f麒菣#梸媷}妶v乬o:U儈對珦澔戴嬆蝐睧T_rfh痒畮檶寢嫎倣z#|妬妺z~晪満媰倠媱噟$噠媺媷|杶灙懁⿸椂媿暣柎煴┅殮翄睌jkQ` z^j墔媣U眔搓镑'u▲C桏t寷  To 崒實弻彵湑 /鳛endstream endobj 141 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 192 >> stream xJLMRoman10-Bold媼鴤#  镑"1L鳜嫼鴧核w 鴤蝴 晀墜剛>R$媣w\泲聦茷鼨\穾鯆紜紜鯆穲桒P旝^爼   To 瑤帉實弻拻 鍲別ndstream endobj 142 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 306 >> stream x'佝LMMathItalic6-Regular媮鵛鳰  nO各伀鵛$媻檡}妴x{VbQXx儦牊挏敔毑各嬅軲?YK{> stream x滌桔蝝蓱漺繜v礩玤g hC`R媭/X绩捃l柎WYU7~*?膱#VK荻|怑`響+22r齥嫣艋冯Q.鶡皿蒗鰓飤鳟溤7囩痼w7晨曤悲]迆w殽颊Wo鞲粛窡?啐恺岿蜊锟诚[珡萱罂吻罨蚲足.讆殂g譪9J{韌奎~鱓S+S彭o综躅扃彷_齅kog漛駓o鉸遫煼馲s娸/Ⅻ虺想}?韽睫忴鐚揆軣}^藆=綷焳^%箤鴚ヴF砖社鉗踰螷*DV鏴荦摈鹯]鈵8偑nG:Wi球Hq規)蔀鍈<樽>}у~磌辗O飤䲢縳7藉脔孙涳縳踝彑④觜wo騩蚧遾珶}駲~砬堬g?'?~7?+谢瘃廸{调?僝y=鶲O狚~\w脀乎;瓦'鼔3裼焲_/>}體舧军赳W奎夲艨徶鲲?}p耨徔鉾遾跬譥挤z~駲V驘?徃鲖傀抛奎焳駲r婿C/鯚黥}}/繌縰鷘ǒ綜遼~愤}O_7遾髡邁_语?喠鹫骺 {|剧椷}髋g?誳膈帘袼o?="轱覹\蛘鷽o#/唼絶圍铢濮O茸孅粽繈_$揎闂鱓_集煽遼椏铥遼/滹?~闛~z=W}窥Y晨踜鲴[腲讼銉/縶|缜o窥鹋~7葵7峻莜~駤燑踥⒖簖覉E[!O蕈F 錧焳捩=轐{爉擖称?砲' 酋,嬵朁沛脷坞1齙7鏫,v臹裣-恺锁翄8享8^麸<猉,vU洊阿辵紨|2惴Z㩳痈╡71婛螓0霃a鰢忷覹7:瀯_}椩~}_黀优狳52邕戬菌廀砡骺?军犒?|?}锞'昌鰶⺗[og4(煼B鹖>|*&均3鶩訐焴炳洄⺋kA騖?峋屾癁翦^緓錹7捷Z臊_/>O嶊-輄U抟j鸰n|舿/非蹚魁粽)^啧?崁蠠鲔Wj瓖}MT蓑7雞j捨齘07F鷛鼜?黠ぷ诌;::臣調Iw飙秃k綍画顷o邁|鸰蘧~7c9撖甬箭雡屙?蓟撖栈襣y\醐]>贳骫韣岝之s絵zW势[蓣F狮廬揸跹4e=哧n祝WI观~圛⿵ 4Fou)?+霍G竭楛饔粃曻仉sKJU猥.f雨龕剗=z搫1鹀I|讙虩拚u涨摗链R鎐U塮>歞jm鬐窟戤譪洷耄J膗>啍增5哄'饕趻r?折*徴萻焑?贺旪('e誦冠c紏z黠邥>_{$軓>轏C*债ON購蒉蔴U京v.轳僑]>頝覜c甇'嚗\1闧x肝o.蔖-9,%<鋤h蓥u4{灁埠eH[z=i/C典@癅旔愲[7NON弝繒箾~莔?盅h螏W{鞯吹0'嚗择ㄣ-<噪惫 誖7D Di^阸陃-O?谫'к衣暬5戤E#祮Y邴 2桦19p}89,搴濮*\缷P) #鋃h玩x苒螲/梮/鵲晇和7脴杛柞鑔拔L['R蔯橇Z讦;L礵苈6鏼d锝'髣頺?Jwy7逖漭Em徎拽 蓙>膚x钘er=鹾歾7鴵S杢O陁莕徱哜澂鷥柱-j=颽鬣鷶!9恟疭杮耕%嘰廠芬钚yr婗J燆k]徎綞顴橄湠CX蘲!盍u扬4R<拒兇瞈唈蓙(`(!足原mW璠蹁旕*齡裑簵;蛎*璞M2h1賮隨纳a)k湡瀧X座s晵11翧┵'聓囅H愡{{玞l 譣柱 xwRve袜顝F鵐cn 韡麞[緯A頜嫿仳O昻{0瑑麑攠]覇讃邚vt椬z&?H J誢9"$嚙\6r蜉(落噖 "ju餜 ℡+篆鞱?)閂稲N燇秕]{薜"?扙u噞2NG惯旅5鍡e穣弱8uk}溓蠁ON袶[黸颗 E鹅觢概D<惕d蘻r G;>蛢E阤r=N萜9儳'ゴ" mk>鲅娽栮2互随:疨鬣Z锁饚R剩熸≤徛e2,陖穨,况/疬' ~馰鋆稗<伃烬蝽z祘弖彿胙j};犽o䶮槯惗y<[ 蚐燧びM{w嵛1O旬 ?鰕&cy'h掁椣$@莑EX豛剓p}薁賷-w蘓H: h毉p D <[侊)鼯沿鈸柎,8}芛撷S┶g+锣蘁D~圈醋蕭&莝梫(被Waa!姛g+型}r-R传椼齜1[:BW5A傚-<w"T苐x屾啷<[a蒗'' 訕&hg!趚 ̄1Y:\_廇s韏%Z9"T荺EX HxH掂 ;灁"s脚*勿è帺姲袎堭璭腡E护向趷nF:f*A殐\ 灗鲤镮)Sg衟&.0啠1袜6 \k1Q旬辒 d勌e◣墛梆竿COT` 攦51I挟y癵 U鸇E4D8p}妶墛髢?"}(AuLT竻莌^j>9鍠b姞]髉珟墛靶i堭嗪隂=R-0;<柽 蔖a(!變'*04r蕐籧]娄鎇 鎁跠E|戄u优#憿齜宿粻:&*!{OT/<9eL措lgz :&*翨!聝腩S栆芳砺儸XiT嗞槰 r=x犱I)蟋劻$翂歼o乂T荓EX鐳Dx2bD舵[x鐲汍(CuLU嘰鳿o秋5 齖弙戏氡婞+沸82寷伏r骗 ncpQNu茲n誥z褢瓧F攥]娧荧|鉌乩0n怐鉪<崨穞悪戚E眪4贰義念f|榳7>位Kg鱣鱣*;酶qF巵疗B磈茩叄6筻,突e^憍攮殔Gr-2娪謻Q茌s冚馔矹Fq0hh-俀淟Bq銓O凍-`I莵f郠泝\媽怍(n-槁埘=P 卩纔%'憆哏wSJT3媰b剝\ 唓x=9e灷普K捐x_猣 Em崃)#`躨$怖y鄧譑 A矦旔愲0锺'j仉鯤溬沖58X(j 衂F栏i 酶}掼4誻s 徾<鋤d=唓醮 阙 佈噄X-0o疣薳=1慵2鹩胆嘰 愦s0訉9霔飴ヾ68p}伃!莦K4o攧鸉I,羊:$=DBq齸 "q邪爛f侙= S8 L犷. :圥`l疣^mO夈澟qD鷨芵伆(!#S8$L嶂eKs瓇枹;RQ`l璭0厸$巜鲚趍#h 虲+叧Es疨齰=芞orr5r芳樖kmPv:磌;僵".:#荴Nzj=a筿)鬾6B屽町掏{ 獻{薠nWy2栛-塁;.鏘椴9磤錴篘舟峳)昸*摅_漡聄挷鐭避煴X<蹖邃8藵7a筟汬聄f勯諲Xn泽,щ-跠X,薸+臷NQX 眪R漤歫鎟f嶝<钢2汰&虭x笚4OQ唈s梆刚肒=樚×}RJi8儕澱*y 2萛(w 衂D惞1ns{蓯芰淛s0馉5s96灉2 *;沭Q哜EZ筡(u 畫$y7w 痌.Aup拱@宲恔懝溇䴓藆=蚶塜焔堡0U3梼<@k体攡賉鐋僠 岁殔莔r=2椨9s筤7\甇鶏鴽H9睠k 錤y待tCpd 9#鹅櫲ig剦倈儏閠3u_禢YOx<妇t:!R憾黝鏰2T3憙嘰廘浯_臘n斡:俞漺0 68pm#蔋g籦xU^奮凧Fr0@宲恔憳渧壣蓰癢'cK逕TMX迱+咇(4掏.}蟨瘹,,>銸駁6=\fsk倨y鉨簧+禄*櫷渫刵鶹潌嚮"n劾1榿莌^j戀滝詸晚P"矓鄁凸<府 mHY蜕, a氀,9鹊萪NGD$NY&fc &2戚8湒羋Nw橻穞3c,赜i1苢>瘨/Gk靀w聁鱺俨簃仦鱫鋣l漰鞪-R踕鬘竚賳峪 產k纥O乏䙡曂鍢 O翐R屋U庂 f2 [|緧玥v譠@06%M3=槜N礒fA珖桱d痞339宮n%fo埴鐚 `j疣2r)[蜸0迪薖-,%<鋤d痞3秛+葳錶桇哃536硃俧B蹔鼿恭+x姓驫V覩癅旀幞櫛楸!Fgp&炐$梨纆p嗪%害鉇譜;{"艳玠Fk鷰 &!炪Q k8娆%捶婇@kn`嗵屩v斋{ -諏謄酫泝\媽拄]Gh璡Wp祌!/旸震!3 ~Ξ櫒-] jk<#櫑夔賡 з淂)鬁%5E胂LNs 僥盍)僷殞躪 &dgs Ч嘰弰蝇像莘恊绞瑗犨0- 柟棕)e&&S訁(佞鏠Q翪瓽耰謢"&=鄐pZW(圑V仟&莍00X牄])2?0駹嘆 #鋃$湨紷耰饺幱: z稱54.C~撽焢Zo珈;>齿鋇54稝罇?艧q歷d交荙周塽ヾ2s贜粚賒I;Pe(3晫犹纁4/等8m谔WとE谼觗嶀&谣歩,朗浯9)J辋X2K繣╢ 徍g6}+ ,Ν Ec晒敃@梛唅*h-僡谲鎅Te╢ D ﹂塧趈k-景歛歒8*3 唅w kN蝸30 w k 唅g扒,M:yt \懀.漳襚RFi鳏雑Z箄-p[-B0 :d枽CVfik嗍8犹襚R疀藻)鲯酛x%紩蔖, r=2K[靥):9刳舙]#5| h嗢 ;=>7Z鳆, 7鹹@|葹k惿&k麁刞Z{H頏獧 牭 &kr5筨铴2T3Ys 膍r=2YS耫m藟礵#Q#櫕夔爁R3V[瀣3酎7㑇顃驔~鎽Z.l䦃7D熒衧 xe戧淘J罵7屷晷1猄W浥唷u輇韏0V揘峭Xm 檂>耧癫┐戍4iSig簓∈ [i[-K~a務j絣]灓* o苆礦鶟V镴?痓 ^傫趠. %'/ 剀馒檡}轷`憿鐤剣y^鄀╢耭x〨"l鰄?9EhG[g墊/晞尊晚蚋g甫 ybkG2Z诚A覑=菬葰5ND謑B謾 坭7h"k7#E 簢b缴莫C翻[条Hd挖Y俴2G秷哨e曁謄` !BCz%|/ #x替 !6{[0`;蟊磷贗幾媕鈑0_滁怹岬㈨电棗牃饸[x替 !5{1^k鳎`雲楯l9涘vY禊蛊ib+Bㄈ憚仞9Flf摩 嘀8麚=瘹,朽羥討Pご矯9<4琡垾d闹 5鲪霊涼?蓖M鑠k罴洽,朽Z薫&З覨R)脞2篯Q魌 tx弱葓韙吧2A&l矊p蓜 鄃p=u^锡娽@R *傲纁6壇i慀谝汬o韛V誽R55?C~H;吽n角癸.Y0蛗 颛3_.-竦z]i﹖qi㊣鈑n` 湨眈矉T檭聣o谕^骵) "+/_C淖琸N|M烘晇慫<:螵 肮咇3璭a撌/l{ 沯l梆罢A瓻鈑6膞r蕶)s%儑嫯@0M|-尀K蠍"儣纊UN"T^s ir-]筹涜 寽k誾萰 甌]<个縭 泼儈鏠= Xx苕!#5^撫篤e`@{HM]s僩]潙#騙g輙p:,"fu餜噭嘴鹽r9翓\璝J/觿总锣檣pm=Rd慻5{0誅总A殐\譴旣滙窾謇:}4鄽l杼郴.隈嫈r6}Zv圭嚱&告賡 \3岎鋽蠡r琔|&告單軆隨恋*o崭 楷(C5恋鞍(!#5"ONY;s豲]珃7葮~f靥3憾H)胙偒找磓T%5|幚,w廃O荸餙横磑埑蓀瘝馁嘇.#6 @8綀4矺S蠝懋+z攌辎7t弄lK俗銸{  谮5o衤殓瀠mrOE鈒=屹mrt,Z澧毚z瓗I齩 查o!沵0r򙋗u擦 牭 唋 > 齃/冧= Xx苕!#A6{灉r@樸璕蹆鴹JBl段漟輚Z,R孶!%蟠H耴龉嚙筥庀pM焔唊}(] 檉 5xp}a+R歯lsM黟y獕惫嘰 俅eb&%1d[^詵m}5"3 Gh!-_帞>魛0x械腝G癅旀幞 隻P书#鈿E/癡y%@2⒘侂簞攡幍 *O"T2fb剝\媽亵e翗mt綤,6』爥沉 牭m詍籋$[5凊檯Gmr-2h訔6]anh槃耇3kX<割v0煣-S獒A棙DB,%<鋤d唳痮n:X腝转嘫 _57XЯ冸朒欑J叼0泃k 躟(!#7韴0p摴覯續洗}47XЯ礀晾m閵噰[/82T3p儏莔r=p>論Sf贺T啫t暴I"nn`@./浭椓浭桝洑d 68鹊`鎓]胉n翼ot眎\殚}I樟苘@櫄7児8q桥︴3M掏-板O'鎓絒fn-rs擁uw07曁躟鎓\k能媆w0*嬥W "ju餜嬏艽椢汰浹0&v厚437X礀撂M起碋Th哕`殸沎x苕!#S7o0u'Q7]e販p@3X┝礀猎璳=穿豚P唈苙梆竿C瓽鎛g淠豰t\激/?墿f靎仗冸SS忿OoHW瀷P驮 祔H等许櫣傻P摖谻鱸z縔f`晰0飉 u<鐬y?P唜閱*71嫑M鱪汽趑怒霊椉散蜠怃糄怫鮆鈊嘫:董瞠U?靚z臆K,蝵BON9p布g觔4幽廛翲泏p]8嬠z@撼8=6X渏fq{儑\徧怍a`'ZUbq畴U泋|T3峴 僲媪禆8C H 蔖虳,桿律8岊N惖Jt9僇Fp9茬伋8欥郿俓0唚WTs 胟p%)駽栲郱鐖0/B57佛ㄍC瓻鎜趰b禲c`麺谟竔$7妨侂鰎棭MQ噰邬2S撃哕1翧瓻鈕7H鴐q携q~脑{:lq胟y=鳥S0指7∈ {W汪 騭緄w栣踈玷U_w}cG1z硰琳,w瑕籨"鍖-"栳X%薌杅{;愣螗1m环綫拦dg i,酪嗔u-n?疹8穑 踗静=d講屭职s rm愆D56Xち僰)侷沴Tnw9{誏赻 !"兌30b卸vm籫笑欰沋8G3← h?;窯m戳A翪狤mg菭m 邛滱沯m0G鑃兌蜻+6 谔"bV撮0旳逗wm{總6XA冸喘qN靣帛愃P蜖 r=2h7兌=e/!8W搮耇偛酑 4岁藏6DOY.D8簴r鍢3ZSL纋MnZo林趗~L[s 3xp]颠)雫衒Q-5*򫊙钒 虯瓻fk;3%頫K鈄储󍂍;淄v蝯:悱爇雽:,籋$,%<鋤黦瓺躊*7'1.'琕衒#D閾洞芃7 3V垌憂D愰脙猗椵畛,簮BBPM遬 罩詽笏銚hkヨQpi女6穰赫猈/x+转\慒`5膕[砭嗻F瑃@[kEkX兊濒035*恼巇琭焹!浑j{Gt:蕭氢v&喫藽鑶撓"oN:Mv毮脡'蕴拢4/鮄@',]鴈0K 4覦攒聙檣p 佋鲆S蓘贼膭@j8P!,朽!#!5k殲渞熡砫a立笥LR<劧﹎溾fHM徆0┝<荚##5me ^9+ hUE h朚SsCf ?P%U$*w轚來靐鈠f郠泝\ 瘴蹅欄^覂v%阺湝絕LSs38pmkO=AOqざN踱蚌詰,":$<&j:隓MNZ軩訲3Q<@kD詃矪絻ㄉf喭e&㈡穣弱菵砑╱斤膲Z?t%^鳘櫕, 鮿33猑樷ET E梆ㄍC狤唊 a6畛陨林<嚒E縠lc<讆R鶰l瓱仗謄;輩噢琲W娏诹链n鑪堇yN臽jf!颧攙q姎晫誤1泝\噭沾?H\m梩T泴6幽誤` 鵐k桘>%塬f \鴡R鱋d秃碠N2鰏菊畉T汭bkn` B&4剰j搧.說畚G盗罧-g钞鶕ShM淈j0暷仞4碗8懗Yw吧畱鳙怌轹9"C{耴6 局9扪桙皱m鉉漳总吗檣. 嬤<錿+妹祫YD 肮吳mr=a!覔S4R-腽鯪觿豟№柃H)鼯愎嬙(稚(`(!#A6d揁%Wk鉻~|t: Cs蠻K/贔z臹俌D蘔俷( Y 驳v@樸n/ W5A60勬牭 俵騼-- 淈棥 沎x苕!#A6|dk,手N/嗠獫翅c鉮黑匒攔:|柦瀆 粦(蕠匞l賡 r3痄旟!穨頚 湫鞦礍n0犳\_啿<[餱jI嚴&%<鋤$鑖(渖)骪め协衰軹3t儏!5鬣贺N^Oゞ蚡x愔熕PM型-%<鋤桢?z哞诤w9DZ摦鸑跥e0_}P$&k莖苆瞊齁か僖m2雙.堽.y毹V:灩󁡪佾4X摰9i雋浥R紏V文`mn%屟 妊+懙簧i蚅诸馠岼鹿蝸o>/躍鯵0kuD獧 牭 Fj胩;驠D盱r鈠f醧泧\從凿@Fp%洜鈋殣歔1s蠾j{- j﹎{S(

泳3櫼№*褹蹀塱耮n8祟P(;串歷嚉f D  穳 Z+]:弾癦礌煡($snq崝.o囵 K*晞衍溃6屟M唥D裠餿妖ˇ儮箒R2d7マ⑸痬噃驖鯺靲(昨ц3D宇+C4y因6t)*⒘刑劗竝)$殲槇嶵汤C渣/uM;釋袉甗r%伏耶M犹裛R怄H閄蚮KE 誏觍(!#4N0N汼 @謢z1Q8 e疣篨42I幌+1栜廆W榝 p2xp]恙GO檊(<&c(C54X Jx弱$M跮翌儑僤瓥Y譲`]呩cp2dw} `6 -欢>鞸 膰旃櫎 兇u.n劦& ち 燨萄魲9 '奝-,HxH等Mc4YKW圝懿窒Q刹Y`$h-1趠滽F醏9俕刯梆罢A忀y穑嬟 =讨骢!Tz%6+r敿r蚢Y \d^0b摡牆柈6暓l飽缮頸闅*43R 轮-分a腧Ig轮ky筟醋馠璚$奊-!局埘r礹椕氖跌=Cqa1街zY烘喲4ne魥(W&E梆竿C瓽m髗j兊M\媭_迆`k疣鷝*7澬fXD 饭嘰廘荇塦鈜蟬6/加5&櫣箙!5nA磔,-x獧粰匞夛/#7}稒纪3 %i夕i&oW棬"e荛.剆棥毶,%<鋤d颚梅1倈+/b涀"6硃篺B棗ElбE[y沬鎜癅旀幞羴}D姃`J6紖 68枲.聝 /#b丟mr-2呌S8YV埪眭(勅$g!7代g肺睼d亏6叒d焮笟9G熻浗鴪5'捴,u#:f汎沎^s衂8?7輫 {:竚亮裸6壛+ 鏎嘷耓xq檌Bpna=钢g"A3唭rN瑝"姖iAA翪狤pyr蔵缻婴G鏴X喿軆kk#&;<从龍r=2觀窱!淣g03婶 `ks哺%帞1l蓻e楒岦玠D9⻊薮[H鑝M僛凭93鷳蹘鰐|僰ig噝颅G!鱹灂p瘹,,>銸駁=[俹*v駙挴~ e6I鹜 仯6-傖劬!螎嗈踁婶 "ju餜媱攥嘚梟i Ul 抗吜5璭~隑p兙蹼阐0l竧V [鋃$鴉# 俹揭M= d10QM渫-尗iv鮊丨巳pv胱禀&戽眣5H赝FKON/ 繩=|通i耼T儑绣鍤Q塂p蛭2Tvs D  婚笍 阯篺捶37E捃览;>%y膈:驐〨础漳轥1珒\嚹辴鬔璀穝_Nc幂f湽厑5]u*%磗^;(gUHQl軭 徻<$餱o螨喹薸敶S4罌lX统Ck藓芟伽葆 脊匞苡乴^7# ON9鉼嘵絖iy檌"ona`=妇^曔 _ 螱2獫Q竻E 壗yr输;F%p^]f毿沎X棫"o謱唭Z蟷玘刯Bon!租O\壚W嶛jz铱\)涺H蟊k/麣L賒me錭譠!k濜b:孺;Q遁_蝉2l﹗龄8xハs黱`.瓌賤斟f椺0o⑶5鬸Qo蹻懡堤貴9穡hr7Eg6市e陊-灑q賤咗揳?僣20屾牨鍊R螢勷燵 lj(`醧泧\陟鋽uq蓆h]罫hs 胔盍u萤鞨)K|i 谲Q翪瓽m鯬<9eс$譇#x孴h 舎航&塌gp6欑o\膮诚=仇 樟K-2f訃𱹴┐繫 谇i0沎L琡鑩铷柫榤穝(鄄s嫘猕f [鋃$萬嵲揝3離f嚤Y肠 ,朽!) 洭縑@6Y%~s 补4/鮄愅赱俵m4鄱﹢珝グh佘;額H櫑c鹦 2+Ⅸ!e9鹊H愅?P蔔[Em04榑's罾-M]监tmC攢,#鋃d卅?唌:m癿i嬥oL 踐衂枚浑ef>/9z)_:R `醓w緧訩`驭飍bm2>誱槉筪|仕軱ks CihM薫&MB#囟FZ頵歛,7<鋤$趂=29{?峴I'z袮i豆叡4璭m胍∶貏杔.C56佛竿C瓽止"谥&渨鮺9飴$噫F攒A蘉苆r逓{↘^穅凧bnn郠泝\ fn諫|R傓 %=#含@e7|珸3C釬$萉mq傯戜|:w>p剹 鵖 竃梺泙僃繫@C 唳拋 芴乲-個[旷 砱T凧n0埁樟K-2p泳:穧?W嵒灚knn'墧u4垱減Ee榝 D  官ㄣ)觱B榛]嵍v&赕喺軆kx#兎]t)累丁s7X戳C瓽o6~"&戭郙FF哪Tv诚猎愝@訫聬.絊翻@药瞭 <銳$阥美'驼渭F9疈8+靥 尓做覎擪/亐9祪KPM 9x〦o6渳r蕔VDz 摱v&蜴周僰\侀)-潹餻閴騘唈Bon(!#7?9E:ro$襢柰?6皢.粸L):;5髡礊N%q7|幮7煱泀耼C6vu豊R# 还匒5]l*ず ㄏ矢luhD堐<鋤$靎剟皼66%o还卆5璭x覓託7鵜5.C57佛竿C?6箽T芺-a箉Xc箆嶰%,鐩*cl筄G%癨快6宒5.P考S.窋D邃b-轣*魬稐嘎跭G逨茳=o5辷2訕稐巙60昜C剫CN壥韘5S筣_湌'n'醑媪 幟d-煪f殸淸rs蠧 (崽'剝~诬"簼A缆6砷蠄戃詴胻7~x 7xp]m鶐爡o撳魦薖虷r=2捰倯\o)hX_7訉滠b;洪翿+儜\k)摇拗M搸翀僯q珖梲$(鏚)eI6犥玻缧,?Pr疣YG蔦Z7x0庘e8h(`(!#c9m松筸纮 e df毎,萼!湒罼n烝U`箄.韹5c9Xx荜幞 薸{;ヌ圶/7嚉$*栖軄ks(窏'@99So擲蒔pp愱悩溄5埳蓆稣偵4pネˇ兩箒7w璄摀块+歵犹鋊酫泝\嬆潇眵鋽栗緀lD锼mK}佋苈垱{p}賀_Oi<婎aI敗殸淸 Jx弱HT无鉒邃拡洦芗蠎NW蚑爎璭曤*軨??([-,銸',g漒聄b|モ慌怼& 斯丄78p7@灖2<舫1 :薅O b0儓Z荚"a9氍7钚2,wOi^瘹, 汗h-儼軜臯蕶噏勫e&,穣弱萖N屽d侚MXn 毪跕eY$,徉Z ,'?脹丁9█薖MX-gnG窛!缆#6T籑酖*曆鐷'旧]炬園顗L*舻p茒*瞅!謂合訥'2(亻R1/]g輆ベ賔╃5t句 W界r#鴫鄙澅屫顁!痘.-荹婊潟寗仡~ 禰:#-輹tヂ-:3秢ut|頌2奭j`kL籖轧P 牭 苉$鋎.C55Xx苕!#5=9宕蓙 淫O 紒譧a鹛=付C~ 笣5佔鰅搲7[Z鋢 幱藽瓽苉(0^汳~7磷嫱╠簡蠉v譠训.:岻跲M\僂膢糡!5}灆畻>j頃N`3蚻  g璭0[[韁讽 E旅V櫖i荒dM钍 d漿%阤毴,湜檱姓6搝屎8#kr𭤹誏謄(兔K=2Y&柸诟酤 P-Y鈤呸P揇周栏;G蹎 (ド: k 俳賍6徻鋃$瞗瘖'尜林hg鵹糪T[sCg罾鮡嘀SR!慨2T[s 刪鵶2Z59v5涠S嵙 \_6) 06Z/C55X Jx弱葇M_萏驻+NG缴玽9l \7;逽頪^A趾v*C55X Jx弱H|M;!ON O鼎偁璧T荒漆榌殫馱⿲赿G頋巬揗覞鳁巒+萣2沞B_餉I胭Υ&低蟵b鹟+'&o蛣嘰视l撍5f俶雔鄀囟籲n踔n]v硟7*v)1閽湇覾锥m呈C鰿k邳)鞴t6p=逸毫H 牭 唍So`l穁{+莜穣弱x乶vbnよy輙 #鮻nf輑>烺蓳艥j磍N徎鈪u紕 r-r矴馍)纰^r翣Ζ 簠6妫B7.満簧*4c7硃蝔^陸笡=躉N欑;r9澤f毟沎Us甇妮d命爏呶IT膽勢9BD鯸墑莠峼r室/丨U]妵V胬nfR柿帷4]妵2J胋=D Di^陸皼5穼萜a佪滠必_j挶 萼痕4=v鶄yhg⑦媓 b丟mr-2v幼c饭螐蓹篆'鷭嫫鶌纅0T淄~崬2柱9亮忻絼併=X F8鹊H嗤^蓼鑲S檑蘞b* 会scjZ `&{&xI彌犤懱莒s 6d5H韧^酧N2v )﹖沬Bnna@=妇l煣萢覄軇l5Bn 构嘰弻艽3绿m烚t喈麁茶鲸f 5xp] fy娂z'A稱硬9 輅(!#S7鞼u化z=亁葑<炀n鎚鷳4处秏i純瞪&岪mK疐 襢{牃9峭溚:劻貼3摧r.\ f:P(L簏&蓝粸Q︾.g頤rs l鵖鼔篩煐臂,+佰g*:*涣赝钢"埢绅S~涱∠s 奝I :x〦o7g鸲J %2]z`毩,锗Z薫&鱲o襊s剂Q翪瓽o:蔪鸲q艍!瘆坬啥浟X 牀ND)债J5鳝梘踁梆竿C瓽o:^b鸲凤 =' 诐臠x儏c5弘HY[穫辑n{Wm,%<鋤$餱#'kp渰璻壉b眿t诬腊;pmwx踘撤}︱偨m涭 鰂庅塘K-~鞊S至棇V殒Q唣箲5项鸿镈赁d》]t悳Jo98涘务'靎!v纍珳kzc援赝?6ㄦ佟耼哸7y憌訉輅[鯸儎輰#v(tw[r▲ (f毟沎Vs对FJ譳J後:踈塶`W璆埢N oFD灉綱紧60攰{ 宪锣歿p峽 <:'蛣囯4e&r= ?z,#懛义 c6晰J&o簿*摲Y唉蛦]撼葲%FZ&l=y[vU倃+r鰺z烵0 柬i[K瑿瓣mW栤5氦CP辑y苵拗\/I梌4舌頌很/aZok*r?鑊鷯x箫?R諽濁萲焴lT3x<钙!N佹魵葽wr=;)酂~頻胁鏙d軎?菸位l"b毫隆: 䎬)躗 蔸t攵/牄Y衦<>缤薫軎S1t涀儥蹜屲鸸67GJ焭>螂13Q巍搪4/U壤M焛n宠<.賉壤M57XЯ礀晾Mf >覧 沽裸6櫣M粍婻_j措.z诔圾m8E-湪檱肓2.鐐噏2FZE癅旀幞櫣iCK掏8锊.h橫ss#j (リ*>07菖鍗?6us儊Gmr-s茡St糼蔲JZ塮:槢Qs/恟 H'桲PM掏-#鋃d姒/>fnrP!荽09S,^曈  `6xvゴ鬄p/Q唈on醧泧\廘N傳鵞3y坨2詘閛5,勒z(鳫褤茌媒魐敗毶,e俒C{梍0tv搊D D  临葔芎=J佮伝锛曉>]Cv譻届%]成矚p /"*郒#鹅鹃鑿釠渽I靘滶01\TM `mR 舳铍t邞斡Fx 搅"bV/u辱M前屴謾&&qz[zCj7 佟o粌昍.=悟O#qHBo周9䦟辴舞M鷽嬓>鞳屰U;z们k阮洪鋊ぼ鏳n藒焎姑籮Bon侙= 7% 屴龉H3犠>變{豽]H3X舨+I(ト顂﹒攓%匸 n髳霊褯2Fo毁ァ仅9=(妀FoX鑕}>J9歉噰{貸8+C57Xx苕!足w遲*W诂柫坌; b`o%舙X鲭&&琴o緓-,r鰎^&垶观]oy!0w擁鰠笡约鈓溊踼毳軛绡淽筥獝褯>諏摁韵^韤jFoXh-冄浾觅萏碎T3y儏嚟r-x持樯)鏫(G^rv$(f毨,锗!t柬3郙97 轥衒^陸罌/1輛钹My藢F轥/l烢J鷈纼"袄(bb剝\ 摁吜郙鰇虚mC駣:7妇{J霃X&aM.@5s7X D藷霅臂yu籩jzu/0j颕覦蒈聵歿c;E0t摮A79珰0托 祔H礖掏^吣軇2M哼T鲺lZ韋殬沎Qs衂17砧7罫W2婍⿴(`醧泧\徧艽#绿懋i帝}焎龋雛跘鍋蘞衂3穳]a芤窫毫裸6壓Y煀佰*偤-!安櫡镚埔 Rl撻鸲渡ty,vSE {湒;峭ㄍ:儎邡>囦9j蝻紾談赻` !籡鎵劍|筟?梒竰談谲骡CFm窛)霚5榢5/蹸釥 i胬鮩囸R9#<蘳尟1頊邎 "ju餜媱诂_iU渜韗帺寧|眱,潛箙q48pi鏛h坨$mra欰,粥!"6_<9e潈還袱e.td沬mna=竛纅H 婷僞0e&墟r=h硲覔S螜喂v+A瘤Y顚lkGF2.鶧GJ檹刴楘`逩a苗蘲缛`1-Oh遁謨Ux 廻峍彖ZEJ胍Wu触1前知鋒 8箪(擱z5 9糩暍t庙o'[:杕鱯冒3飐帡蒛儵F<;tK嚥鞻!]毞烆n竀M@- 捕螾<钢》瓽;毣鬸噖8=馂Y83櫖i興硋焉>柩f瞗N姨C鑞yJ菀鈩:#^唈"kn(兔K=2Y涼GjM龘x髮繖c1浟乲麤y滦o<8暊捁 ":d/ 苆7n)0%蟮L絋V@k屨d蒨`祋聝贮 珡筞記牆3崡鎗W淄.J駭何睢U擰mQQ翪瓽&k覸臚娂[ 懙y嵶玝儖 牕璛K呜r鉻a媌#Xx仃 "q5雽W堅fp5Y妹\4q50j牭 鈐舱*q5輏\M5s5Xx-q5/児汌珮褳tv蹥黑眎蒺d0@渍9b腌4G/B%C6 F8鹊H擬粐D俣夔怟嶸h劻Te儊Q47壊楹蟷矬-竰誏賎亐-?Q6脶e踨(]嵃涇y=猓埍醕h软Zb埘:芰(l鰍墨筥庀|m豬枖2d/o丁蚔絷4lQ譾襠sex桤([i,%<鋤d聉F 劓92$兄]A蜥塲l>醉戹掝q烥菳銩E╢  ▔褛}误鹊.=G悻e揼伾搪)歽mt憘<蘠絔+c诠c,%<鋤d卅?唌藸x>-菆Q56Я侂f囃y虱Ln#(A53霘,Fs餜 輙诵M&袌鬼蠹评W5S7X獧桬{+憆;蹺O~C搅1翪瓻苚:g'釉椽m膑#鴐雼崲醕 6d囍律琷搊b铼铝#鹅櫭)S`废} `瘟Q辛崧 \溗啍5m渜窾m%潙仗彳垄剣\徧釘0囒隲遤琄彫gd辛崧 \7mM#E^猼炢^]畧uds$S8!"{畡^愷#棎 9潿垲慲[胀>鰸Wam0@嚒秬 E尕衔惕圻SwTz梄龉煡r裑滶廮CLfTVZ&報怆澉z頰+砡矔倧l隬zZ鑯氮l -[科m霔鼦磅孀鴿弒 R卸搑柶淘鬹=┸)J'Z鍖>w膄 節ng俷76;<ǐ鮨i溪YQ#噫%秢秚J淈紮G>M>'簴巋^柃冱閠Mu竩?Zfk9〉磜0Z瓎栟仓萎檟`氻 叉F姨C鑶恁 儾﨔h-飈c =叼 虲瓻鈐?9a腭`喆fi壂&喭軆膻抡2s=s5仗誤<ds5A'陶V?譡0仗仗漏檡p璭0W幌滇a巘渋鎗梆刚肒=2W弥糎褝uA祎銤放貦\ 鄁p峕s擱m崨y衹w^6鍱 0皎虯瓻Bk鰥xr蕫C蓘祅9峖);]7姀 !乘酥h9U蹆o%Z洦趹 侦s@4湮裧é8唈蚕bT[鉲忳棦j唈2鏒娹蹶h鑕L\溿Q缆6 塌)噆:蠏S5h鳓JBjx檊w}瀝r慱鲴#墽醩刧箂w僸谫4M麈DD54X暀椫 帞q 鉻Ia]r-L硚訐S禲| K~=虯*Bi8欑v蒴,滺箹轇j.l?0>Fp9G秃}裠ZC蠦 倖!n洆"Aθ珦粊鋤岚@瑬?厼鶛vZ櫉沓~)种粁阉U d胬m俞AG阇凧唄fQ珒梈0EC琨)^皤~沼褜顉诞(XX(# 疀澰)滓粥E ?G埲+ c'トj鎌h齤]^1關 -,憛h-# Z筷u茋睢淸rb阻F梆竿CS4寙灉r嘷醌W涶雕撽爃na屘=劗啔<マ恒ね2TE D L0畕r n<玙41溨 ed崂祦圚間范;鐼圂(≯<僘x屾啷L0>}r蕱V科閤茍Vu`窗PJ\骷1鍧A9n秋)屳穗d軸RI%) r ;1惷x戊L方;黉'|3胼鸮fLEQ珤~E懬9櫍盹襞c湒b1紑紕<鎕豬縋媎(窝谘w.嵷泈硕盇X\VJ!7K傾-К飕7fa1>4躢霝g 脆匸筑:G搶 8毷萄牎,,竘暁蝩D壯vH甦C遴h^翨s4pn佟嫀旬队9(Q14捁妴ⅴ-珎`Z悉畊:8  y_畩饏豨w跩GD痵j3趆eO眣攔儘锕R<洈呴泟攊盚枦r释&!邖+愂耄3秈[2a撯-秌 6vEu"lE6擸嵾賊zㄕ繚襨矱9匵~>->o)z.H浖y$姚o&壌閡5tw襢堑╁;禓m46;JMㄍ4躨硱'侄顜堉 默頊稘鬄稘閳╕ 芏蝱6F苖mf拗=pk3穛潭顜堏倯[;7靔Cs翥270牔\樃漊#痐@荫OBe&n^珔籝d洇?lfnB 拐漢5rp辫聙渵卉繯5濄黬莦 h8b3 y櫣 姍鄄C篎粍媢奺3櫂4湪檯悰暃;詳┹53谆r,4 蜹"燎 鎓鱖bnH+x(C俿"17W0㈡ 能$鼯ys[S"稗涯齃两6y櫣3儥郓軳 恤蕜轄恥oC幊F<4!>< 髭 鋂$鰂>boB|焱濃i񝨷0叉 剔众/溄I檛胐fok儏<徧摁)戊R~辆65欓4譧铃獘纇93 ,三幥P 4%,鋣$gbprH恝鬺験 S`箢玡O-鏵泲沐V d觡铌)佘0s方榖&得(%泤给 10螤.7:k慃C#&屷Tdi 綧[贕,虄-*Y桟蠯普$[i{秘w9鯦=[饲靶0?9拓 +nY花!嫽湁A  哲@萂DK !T 戽 睿笡E苙"g靨u胠喖d匩Hl 蒽:夯|hh戣镋汰k晱h.@.翨濪苙罕`6鷁:嬒mBf @5X琧0v粴鼤寐u煺mlw=^@谬6 y婚壉,ZE纊v+j洩 茜刑4獧梪 苙jvv粏"*3v儐鹠<v惩a"e F`"%堚(淅n甡P @!粫c'恜於>A軻G皼i勛j鄋婚睕諪s郩幒q豆&vs @5Xp龟o'Z.豰瀓 [i籄^翨濭苙糊f於鐾(白7X矮熵 招镭m铤W謢钴縿,9p 髫虹$靎伆泑暺豈緅 $f2a70ㄦ 勢浠画kWp歃2c7讇+1 !&w[=牘全斀 |RlM曦5 :7駆\拗N鄊Y:o衟客B炃獓馥J0"1贰?c;痚s,鐨oP薴能jC*睱LgH%%盼r脞k葁棛踶Xe髳跲@穠訩O跟瞏T瓂蟂]t+鯏2A稲J"n2>A贘電'&穻濐-军qo䲡闁X頶> n ~偢 + 6魦O掏4簷GlC儰穄/痢蹎/|簷磇蛦4;6磈[俷ef柚F唍m蹸62t+榘_俷}d柚=t脬K衜爅[*鼸0t 离jz!暀汗咥5赤矌霖- 膔n譙盨粰F燗祊7;靨Y/o淹q穄巺港e'蟼粰,0嘯 )&#穰)!7尤犿~ 假]娎沝d勦喹屽5紮,竆啠:碩MI骅nC倇覲]?觩空螺<2x.兎猴I尬覢溵∠q|oPV怿铜My5=Q 蹲PH玲)84y奸儍羀)=涗炩鬺&x 竆镆稠歾凛ZM橘Lf 竓2v忧c7=!丨 ."C7茊類ubn桖< Hp- 癊"n割[< 荇卫m勫╧対槭*3pp,@1竇麆!)KZ倆S_3 髹,鋣d唳nz蟳酃1磟Y jf琅藐6x,) 邱|坖莧 h繥X瘸瑞MWUL遞吲2}%G鏱,憲3(藝e蝌柋aa靰"7(繥瘸 䥺裴K4渆CA#a8w蟈M灃钟`Z(l齅瑬64十硜%5@[Fq壕e7 m擒kZ_( mf 洫(㈠|埓嘓Mb軦雧7吿岽+q8訇w鈖惭橝蒚$囯F偌;nUK阥n幗p騷兪提犪N泤<壞醠-sc亐暢Z>5蹪↙5尣桹#O轗芧:箙r棾1婑兖<+厠6J#mE梴2 翧 B鍶?i+G M{壿h繣Xd;?苚m% 纩爘27(d傫酃鉾蹳Eb=Ae耾垒,~,岱襴緶纎诫/{^緼绵歔琧~+碡┦苈﹗?}eA h高f!#7蹕~+碥眗繽騁“4遬讶汍叕謮綍笤 环d#覽$騿腩途g鹬-雺观u>u耼[d阥讈袁穻N魱秌F&e蠲壐鵸莩竨薽- 鄓ef27hЯ>锋-{谖\c磥︷罘Y润 |i椊鏾$&y3=鐧鴽$6HM匲眊欜6朲馯布可ui澯X褜KAヮS褎邐惂掟,O櫨i)Ep歸\-S彨璊;k酲腌^5 们悓pko-郘淵p芏 DK圹鵋w祉~|)慔4躱硱珩W=#89懭{5勒&lb|粃p歒苤 -鋣d? p騘m撿 荰f喿藼筀達%D栗藔@鶇x鹇4$_xGF腑j3 c:凓鞞ep衟7r 湈渂P>憄q濽#1k巘3 y篱m<竳d8廲3|f幾藼葒ノ驏乘9,淓迺*34 w笕N锔 鄗04僟(騇EpP^:竩*}t劮C^傫-嫛 h 畹瘸n?9樋蛻遃獂渊L 爇0鄏}束m鳓c攃 a !7}1沍岂譢鹓銸L暀繟  屶F?0嶿W'炇嘦辯/犪~泤<廌犰I-](渗櫳D醆沎pl'"礰樨╈UCe/a!#S8]0}{lZ肁 \辌0嚮篹n3 W贋*3噧紕<鎝X^絇速髻Dc`4咍槉玲BA)[珻圀) [rB培p∴^泚<嬆醫旽n钴莵伶.薐晧肁8鷽壝 M媶拮礭t*3噧二尼l←-;N)X痜"q8W0!W鸙y,($o媶P慔蹽3p7媱鈒廖(n霿墎馄扷-駰艼寖h,竱Uk箆睓皃韇31喪D鉢^翨濭{肓0n^跶莁R啞(S檃4赻铃驍Y芨6鋜Z裈bX擲8 8 i砰奿苄3矌聠V7鮉検L鉒胵沋pl熢rhItX衵1暧衟客B濭fr$&W廲/绽锚< 槱D 穣o7迪@n"瑻Nb壡m憅淾H壠賤杊\晫璽礘浦ぬd產-@1埰UIP偲U佘*峴 髹,鋣$gn欫6 $V%鄛33\2 癅'QK絞p胧 櫫]銥羃#3窫e|??娔圉'鬹肆蟞傚8As 08騺3壩嗪|3)尞h抿b羑姧淋月<荥y3;p-13 嗟葺閇訏褼遶﹞辉=逊n鐟兙檰7硱g愰涋綸茈簩瀑M眚刪`g︶l,杠璴5奠题a⊥b讗徒嘂铈戦[轻uo4 雷eI褥瞵"7(璝gq8-噮菣仸G 萎 Pp熗@濩bo鎏 &'+餗N^.术fr7W0舵 ╪-J湝轢ょx锊3M媒6y 抠硰饹訲撎_殘<枛ㄜY箢恥bo瞂絀("o[d餱纵a頋豈熮屳趜⒇%DwS櫓4涝虁婱#裷頮~悎2Be唍衻彴恎列 珢j)涳w礐輦纈 承P #8沍*丆7 D軹f 髹,鋣d瑕 *唍桩离红(.媂d 5珻0t臌靪X, =哖憽躪3恎列椭/詐砟g`^|3鉅(鋩n疇P望C,:=夆綇" 򦶆A70?鶡.m篯;錧痥j67[ _v!蕴溯騑P薸檗藼郄"}坒&S疧NCt%:A7弁;顠齍o&ts Cjn矌A型v骯醁{Y鋍↙型5躱硱鐟牄m6^竐'蕋郩邸m貫↙酝5 ノ癣趴脗T 1T&戽<2w觤s穟Y垯痾鞓N遠橪 N仗B菶_餑塑?培n愁ズo鎀f x y壔惞鄣,w混a-鉫鮥溂A  w+丆-V赥C C鵀粜`謕4麻n櫧6栙邾-鷍>6緓U  k訰,邲Yh肅*3{儐鸧R>8冑沶葯缴罭V$笌|讍戊"l榇J 鵞耏敏P C踰x喚禀L'0u;菭n璵&Bee棝>櫌ギgj7唂cTDF產^翨濭 F樅u蓙讳X" 2C7h->Z> 贜Cㄌ ,磩陼v=鹐侄匞内χ:-M 豓佛1E[扝絉 Q 皡嗎3颉鳏h懽鞚圮 +媄 抬睽Y笡`洑汿i!6订{lz甍汌v65c9奠刂S*装瀦鎘z蔟殿勛舢袈 C?:鉠鹶賰|橪t `gr}J棘Npm<5瓵0,鋂d鼎稺fksg % 僯/瓵  L桩%酚勭3;J铫 n "拥龢`6\ Oxf25(澚苏j#犪 Lu蕒@ebka !5}1Z臌ah硪右䎬紣 厌4牢`铃j鍀渐眙攁A幠*`s x y屫鹭~9尛>N憛"窗冠!.j礱§c`1F眱b4躱硱鐟 -@采k怣黾T2A60勬 讘k旑=飳榷V肃矃嘂m<d车 穼)愅D俵甡 讣 &H柬亾8jN ,操掟>[ %;(:猙 6\V傛!├傤<覽驃lo戻疀g铚Ce耴~泤<弰譴嘇xM>I罢d煴}橪x5 灩搈 耴$7,渟驆}洗4顓k高f!#5+^揰s2~頋舶橪x g班矌AxMn3蕯6祆rCe耴~泤<弰譴作-K+S踛 勈貰脺剠4嬆貙c/大-鵅85P 补14Y 手&檃ANSPd浬D賊谬6 y2矾綹|zЭ怷u9_洏浖塋醡Gif-}曥)辑事麥勡$ i能m瘻喹钲Uǔ,蓐,6狸硇}协铎芰塥D -物V舘n玏;4Cn豒幠5甖Z酸鯬%O誽r玆r*yp[昉=}(鏢?全摸_肅潡fo,蝱 总6d)tE濖'9v 滹轞枴鸦V1 .!琗 尌*0Y朿4躀硱g睏峢./4鶠惮嵈瑹h峥漱豝緖y鮳o菌褐WRI釾逭姫細掗h<嵸^統y鲲忩mn钞u鹢缜诅攐吆蔽сh醉{i<煄緖|-孰<禁`诃殤s攃>y噐傣2n熯 镅W坨徯耯程k>军幤囫>{矬鯪]:巭麔鬪W=腠鉯漡璫+囇_?惀鏞煙績眖{k賅浻?o>?;鰭乔}皌>考藒聃)aA弼l>柡c巑鷊舫/沩惴o蘒~X酵??践媜n?餩嚆算kY协課煘_JJ<呖冮豕"騗(}>緘躢|醯gM繣緉o~髉銢wQ^儸鉘昽n鏠6爰絳蠠m鷃F绘+贯譑,綎妪x鮖b第8辙鹤奎e呔葵q 8觏鵆\坨Ov风熆藿琢嬱v{燎摄|8膺髿?<}簏c祎駠岿G犴砻0z'?q牽,咂 g箎黯鲠潴觥<椋-汩鱼紩o懣,蝰麽// \旆{澘驷縹*k砮ndstream endobj 144 0 obj << /Filter /FlateDecode /Length 163 >> stream x淽1 EwN@惇,Q杢尚猨{bLz 抰鑐K_~柮x賕悘餎済沨 [B倝f息裛=鎐n&?慇%废w硱|6UW耟i)濱tJ鯘s 樮嵩m_K)軻⿺h8on)鏙ZI g=C,) 垛 -*S/endstream endobj 145 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 212 >> stream x渃d`ab`dd赳跬纤74 JM/虸, Jtw?䲟壍泧箾噀齱+;7  K驥R3笠sR鮆 Y警猁别诧皇吘>?+.滒彌 +鐣ts幢晅UUu杙O桷欌甄軸転订沜y锖騍賲z歱爂r显钌| 觺8O鹡; 躵\,!<gO 篼'蝠00M~endstream endobj 146 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 201 >> stream xALMSans10-Regular媼鵍  ,R3T鳜呎爒餮洒樏脶髭鸝髭颟我嬡铥恹#麉齁狩痒2鱌w鴲DKP $鳂$蚉Du▲P滣W  To 硽寣寣崕實帟 M揚雃ndstream endobj 147 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 156 >> stream x渃d`ab`dd蝰 氏M34 JM/虸,塉twX鶅浀泧箾噀齱&∮'鴱 0cC ##嬫5|𮟓<咇{琪-?V~藉u破扑似鎸篆[g诬掋+]y西糹箔夂-桥捪霉哀阀贩gRoo 焥5巈ndstream endobj 148 0 obj << /Type /XRef /Length 166 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 149 /ID [] >> stream x渃b&F~0鶋 $8JRD噍p妷亖猳軫C:* U辸狆浜"%?H狍 R>Dr粈I*"蓬僅朒0"A$堜i嬝僅&/皺WA$#颶9 抷橃霋憒:`觀兣浟XD恫佡o坤楾撨奇 endstream endobj startxref 111832 %%EOF diptest/inst/NEWS.Rd0000644000176200001440000000761514656676536014007 0ustar liggesusers% Check from R: % news(db = tools:::.build_news_db_from_package_NEWS_Rd("~/R/Pkgs/diptest/inst/NEWS.Rd")) \name{NEWS} \title{News for \R Package \pkg{diptest}} \encoding{UTF-8} \section{CHANGES in diptest VERSION 0.77-1 (2024-03-31)}{ \subsection{BUG FIXES}{ \itemize{ \item \code{diptest(x72000, *)} for \code{length(x) == 72000} now works correctly (with a \code{warning} about being asymptotic), thanks to William Davis, UC Berkeley. } } } \section{CHANGES in diptest VERSION 0.77-0 (2023-11-27)}{ \subsection{BUG FIXES}{ \itemize{ \item C level format: s/\%ld/\%d/ } } } \section{CHANGES in diptest VERSION 0.76-0 (2021-03-23)}{ \subsection{NEW FEATURES}{ \itemize{ \item add \file{README.Rd} mostly for github readers } } \subsection{BUG FIXES}{ \itemize{ \item Added Imports (to "base" packages where they were not checked previously) to \file{NAMESPACE}. \item Using \file{NEWS.Rd} file more. } } } \section{CHANGES in diptest VERSION 0.75-7 (2015-06-07)}{% CRAN release \subsection{NEW FEATURES}{ \itemize{ \item Started this \file{NEWS.Rd} file, to eventually replace the \file{ChangeLog} } } \subsection{BUG FIXES}{ \itemize{ \item . } } } \section{CHANGES in diptest VERSION 0.75-6 (2014-11-25)}{ \subsection{NEW FEATURES}{ \itemize{ \item . } } \subsection{BUG FIXES}{ \itemize{ \item . } } } \section{CHANGES in diptest VERSION 0.75-5 (2013-07-23)}{ \subsection{NEW FEATURES}{ \itemize{ \item add \file{NEWS.Rd} (albeit mostly empty) } } \subsection{BUG FIXES}{ \itemize{ \item \code{rdRDS()} wrapper corrrectly tests for R 2.13.0 } } } %% this is the *latest* entry in ../ChangeLog \section{CHANGES in diptest VERSION 0.75-4 (2012-08-13)}{ \subsection{NEW FEATURES}{ \itemize{ \item Enable package for pre-R-2.13.x via \code{rdRDS()} wrapper \item \code{dip.test()} now also returns an \code{alternative} component, e.g. for printing. } } } \section{CHANGES in diptest VERSION 0.75-3 (2012-04-18)}{ \subsection{NEW FEATURES}{ \itemize{ \item . } } \subsection{BUG FIXES}{ \itemize{ \item . } } } \section{CHANGES in diptest VERSION 0.75-1 (2011-08-10)}{ \subsection{NEW FEATURES}{ \itemize{ \item . } } \subsection{BUG FIXES}{ \itemize{ \item . } } } \section{CHANGES in diptest VERSION 0.25-3 (2010-08-11)}{ \subsection{NEW FEATURES}{ \itemize{ \item First version of the \dQuote{"diptest issues"} vignette. } } \subsection{BUG FIXES}{ \itemize{ \item . } } } \section{CHANGES in diptest VERSION 0.25-2 (2009-02-09)}{ \subsection{NEW FEATURES}{ \itemize{ \item . } } \subsection{BUG FIXES}{ \itemize{ \item . } } } \section{CHANGES in diptest VERSION 0.25-1 (2004-08-12)}{ \subsection{NEW FEATURES}{ \itemize{ \item . } } \subsection{BUG FIXES}{ \itemize{ \item . } } } \section{CHANGES in diptest VERSION 0.25-0 (2004-02-13)}{ \subsection{NEW FEATURES}{ \itemize{ \item More output in the \R object, allows \code{debug} information. } } \subsection{BUG FIXES}{ \itemize{ \item Previously, the \code{dip()} had not been \dQuote{symmetric} with respect to \dQuote{mirroring} such as a sign flip in the data. Thanks to Yong Lu, who was able to track the bug to a misplaced \code{(} in the original Fortran code, the bug has been fixed on Oct.10, 2003. } } } \section{CHANGES in diptest VERSION 0.9-1 (2003-07-15)}{ \subsection{NEW FEATURES}{ \itemize{ \item First(?) CRAN release } } \subsection{BUG FIXES}{ \itemize{ \item on 1994-07-30, added code to prevent an infinite loop in rare cases, but e.g., for \code{dip(1:n)}. } } } diptest/inst/extraData/0000755000176200001440000000000013761214237014626 5ustar liggesusersdiptest/inst/extraData/qDiptab.rds0000644000176200001440000001032714602426020016715 0ustar liggesusers崢 8U[闫u E!矻輨C咼* R2f&Cd℉2\d+亷谰剮@ 椨觊*ǜ癍尼霰 H氣E邚绻 鋦鳐x##eg橔*F=N懼z卙3FE/fu\骻群A^ˇV懵谎濎$!G騖iф匷淩隼R笚2羥{5A's佇z暙麽v &E9Ns歄浗鏔酼Q睜 A5=%j貱dk蔒U?朌篎sz棒茕漝Ⅹ. 芁#E;s ?椒还v坫梗-#.G滠v仏穪l晅惄炿zK査"弁襚t益O(帄|QM6坜K^9{缀鞏WA褕6讳(*餝縷U鵝7!GLy饯9dl 緄倹C'垙d肷-牴瀸<7jr-傏2誏衩w/Sk'x蔠譺P纠馬a]隵,擐雩 59l檈柎ZT鑦098輯迕Az7砪(H邔l^ ,bH.g?硎E;粣 籾%2)9缩u拹%e瓿q籅`侪儓Y廜<胑楌 s~u譂 ^弰譬屷.X.z猖kT爗u彤鉯N8+愄慃?s朜*娨鹾.z擣暕3dc虠漝箲 惪R)叔5:D 抷恦xU爈Z枱<墒爤(峿塏/趟 . Itrだ;h堺ルa8彮辕p[泈KY瓛鷔b段Y╖鷏 遶轻穉Bq5晸滬鬷u使=桭鷣淟▽fJi亳!?&佩7}歟QX9_~V 诡酿[渁萖*獾ozIA 潞坒荬挶WM蜣f灅G&Z滊跎甓O傠薄A$貆+*!s'峰Ga P曃4澇 遌湑q+Q榇EI/*T7妱燶O砹傧@*贁%玁O揋37yv驍脁c恑驱r螿苘奴*} 1g^ 鮋5笔驍`唎=)H闒%碉柑5珄雠鉏痐,'<啙v.踧代隣D悄彍Uc=c螾#鮚⑽斩8谪P德鄝靕*~~┢6俽森蕨甗w帧=(緵琲 鵺'ミ|虴VIv塪8R6'匩s 哆L樍 ao?乖&燨井_>pO)W 秲阄鳔甄[`YyG瓼8M菇<宑揝溍躱~洮赕}栒:繕馎&訨g緊R@礐А旺莹涕n,–螃+)芏'0佋挱;- {%貞C闲T$俆i>櫫Bs)PU閆Yp}忷靉\f#╀翺辔姃!渘p鮝!鹄i #V#A暁we`25豞xz戾轌鈤浃(幂泖Smu7參?GM逈;VTeZo~郙@怶 '事+8{P8∵$c-&L萿芗m圎;どg暱珍G|瀼^q$;j触脶奙徆齖2. b2(|徆猻l-滣8-浾男撌8a鹑SR鑋?!F齃廢:4 >YP樻>U2>x卟除▆(9uTw蒴~kI跩ZG 个亅!鉤I7n篦哗迆嶁8m8 鏓!輑楟5淗4s冫59琐?珼,涁民.筭墔梱EO.|^ж兔窒鋖<9fF鏴v卙帏凾O馤殼G_逤S)盩mz4姮wa魖蕐[+應3╛yPi|fu濬滙╱H8z苉䁖蔐U肞朮?^魑ぉ诘2玅 >冯*2_萇譃Ar安絹CⅥ懛De嶃陣萆O冀3sr*7橃酺讏4蜘6溰o=Pb 骉1闸)v攆震v卷欈hIi 9 M&qnGパ噌$*鍑+>晜rzV阢羏該 癩oF祃q嬴䓖(0(J趄R袨,6!/d嬠庿k!艝┄椼T僘" 靤筨A7 趒顧U芢腤笩l|<嶬 d`6皽庨L婁$筹}R瞆/Z栺X8g}脂<藶{咝D沩皵/}Ihh,:#獑hj jmZi髙邃3-b4"証薉駸尙}容" 囧Hy醚瑦冐櫔譙椥T崂,*FZ鹧-洐#9洯藶阍蠃m幚鷲Pp@.N顚Dg5[阎05嚃7踸S.∨釣冶C4o.]%鋰&櫱匦xが 曏9{氅造淳;嬺〥.>~敜m5:\尲S=d'瀣攀f瑛疂錑那/ xn螞6?5\净-紇荤*迊媟U颍疼暗g# NH耚EB刹$簄鵏Gq=UJY:m>狈嗹5\q;E{-忡戈蠰o繴M螚zD%A眣1唐晫1晹<鲸SR\憜R瀬長ㄚm棺l崒t殉d"tv!奫睦訐 WoL靴E*灺 鹓R;岷CsB6vc析蛋8Tq渨&倭kk:+鯌2o8谲'嫐驇\啡13顣骵C硊朎y蟩4ly聉$|韘[崻澫窋*暄鎁崪氕(lb醸j,]烱D$颇扅茲窕K抩>Ru寗縣閵滃睲|婚6鏗?S{屆R_%8铻K"犜该th=)i蒸穮赖$磶濸b贡砮囃.褁塇Ej萨h賝狆7/b"ⅩA`闌䦛P[瑆EC镧!=b'_Gq唗"谳q掻>戒桞炍箲 渒虌_ wwJ楏d$RG:Za會|e亞z鯸:貇5t呠莝夎鋼+ T踬A鹓w361l.G b霁,Z4●閨8/6(召q>崹Y餤m(~瀚cmP仨 9睿Y棗砬M藧X挹鐖99蜏W飪胭<摷T8|╭])蜗憁K頃qZW澹~渧孻晛鮑礍魷堐擷j$WK咘 :赦:鉊"5{瀂轹儂}M杫摧 ]S璬O佨 耯娸=见:幙,秇竼篣峜 )((苪鏡HR N!住wg掉U0t谨鵯t@3Z7w>,9粳,箐9 粢,膕`s*蠼鎗.翡竦解Q5 3qr]&本C䓖褳游)霆X收酇P^!諒3z錬裭)僃N/躞8P疛潏欓Cボ~+74g-焼[ I矐2P歒衋幆彋盀C氖$+$w峋4|礬籌N鍖磍勼射V%氲篻 舸0払螣5v$G5z洱;贕&塘∧r` Pg-A堟缒=7窄衳滱=ゴ偖}M唯<钍J塆I`跊 S渑HlUA獌書;膍蕤浫檧垟0%崭荚E苺6忶拮逩鴕-"霑峒喋搪( ;剑s颗裺O栞ㄤ1-鐒 懵t颭 L寂葫K鳌#d闓4J5mKQS];Z黖X漭颎悻8繓D!(=眝} x俱(崔x-蛲^>ln桭暧瓌:垪#)v麑]m儺Q雇x儠$. +渨yz趀竆%紝+艻33齑铳濱颜坨k@絨B襊t恒<$蛣疡泧q '斫:q媦皚5讧閁聼糂麘Jv囆簢蹌狩|4e蜃萼1%3*/諄麣n>Β礋;kZ f芉NC讗謔蟳 [-"惭Q碦| 畑遰腧M肊 Lp鎢校)蛤/M:{跸唖艏諶S斸″t缛u5BwU.〕晨泑沪 网>8庀6k屩&h&)(]睝冃涤/硽葀e5ny联)eB佮倣觎Hw℡2"埠芬舓p~檋迋嬩M.蔹馂$鑥HZ谜S骟闘k豾藤)o G E嗍1Z蝀沾L9禳"?A扦 荺栊5邓荇):旅笾苜丯5c坌痆┢]縕(肯h=玿邑&秒霡卉J因C:苋溽昃魱70.?呥{;y;"鬺羚嚨相镫$噑<.6_ 閜歒1陸滎骂=e寧巵@鸏^B,碕oi鏗郯蹼剮n鶙厵fq2s磖妇8縶_瞦AyTAu6}Q-#(償墳(~⒁d~奥/縴~卂牌_吺黯w冗淧^V烒 +嬿B//K鼔 ?Q'n鼔4S䦃*?Q'n鷜筂J堪/艰aJ 誣泞嶉/◆佃\RT\4/!⺧,1~H+a彦带挂 ②δ顲t 鮫#h渺diptest/README.md0000644000176200001440000000157014602426020013204 0ustar liggesusers# diptest ## R CRAN package `diptest`: Hartigan's diptest for unimodality (including p-values) Although this package `diptest` has been created a long time ago, with a first CRAN publication in 2003, see the official page of [CRAN package diptest](https://CRAN.R-project.org/package=diptest), the package *development* sources and history have only been made available on Nov.30, 2020. As with my R package [sfsmisc](https://github.com/mmaechler/sfsmisc), I was able to keep most of the editing and development _history_ of this package, using my [emacs](https://www.gnu.org/software/emacs/) backup files (`*.~`) together with some RCS (`*,v`) histories, using my `G2RCSn` shell script, and most importantly a `ruby` script to create a git repos including history, see here, for how it worked with `sfsmisc`: https://mmaechler.blogspot.com/2014/08/how-i-got-175-years-old-github.html diptest/build/0000755000176200001440000000000015051120370013017 5ustar liggesusersdiptest/build/vignette.rds0000644000176200001440000000036715051120370015364 0ustar liggesusers厬Mn0'?@ABB>d沶b林`[队椿灱F仱j;73騣 E>J恌%19瀰4灉_K鏹r臕5)Gr灂襶+_k/祌+禵皙&穊\ ;Y洱4暥麱 戜閰m{蛝wL緭蹙G/倬躸卿gjuS骓遾!劯鑋臸\t&哥刨 倒 odiptest/man/0000755000176200001440000000000014656676536012531 5ustar liggesusersdiptest/man/statfaculty.Rd0000644000176200001440000000176014602426020015333 0ustar liggesusers\name{statfaculty} \alias{statfaculty} %- uncomment, once exHartigan is defunct: %- \alias{exHartigan} \title{Faculty Quality in Statistics Departments} \docType{data} \usage{ data(statfaculty) } \description{ Faculty quality in statistics departments was assessed as part of a larger study reported by Scully(1982). Accidentally, this is also provided as the \code{exHartigan} (\dQuote{\bold{ex}ample of \bold{Hartigan}s'}) data set. } \format{A numeric vector of 63 (integer) numbers, sorted increasingly, as reported by the reference. } \references{ J. A. Hartigan and P. M. Hartigan (1985) The Dip Test of Unimodality; \emph{Annals of Statistics} \bold{13}, 70--84. } \source{ M. G. Scully (1982) Evaluation of 596 programs in mathematics and physical sciences; \emph{Chronicle Higher Educ.} \bold{25} 5, 8--10. } \examples{ data(statfaculty) plot(dH <- density(statfaculty)) rug(jitter(statfaculty)) data(exHartigan) stopifnot(identical(exHartigan,statfaculty)) } \keyword{datasets} diptest/man/exHartigan.Rd0000644000176200001440000000055114602426020015057 0ustar liggesusers\name{exHartigan} \alias{exHartigan} \title{Hartigan's Artificial n-modal Example Data Set} \description{ 63 (integer) numbers; unimodal or bimodal, that's the question. This is now \emph{deprecated}. Please use \code{\link{statfaculty}} instead! } \examples{ data(exHartigan) plot(dH <- density(exHartigan)) rug(exHartigan)# should jitter } \keyword{data} diptest/man/dip.Rd0000644000176200001440000001364414656676536013604 0ustar liggesusers\name{dip} \alias{dip} \title{Compute Hartigans' Dip Test Statistic for Unimodality} \concept{multimodality} \description{ Computes Hartigans' dip test statistic for testing unimodality, and additionally the modal interval. } \usage{ dip(x, full.result = FALSE, min.is.0 = FALSE, debug = FALSE) } \arguments{ \item{x}{numeric; the data.} \item{full.result}{logical or string; \code{dip(., full.result=TRUE)} returns the full result list; if \code{"all"} it additionally uses the \code{mn} and \code{mj} components to compute the initial GCM and LCM, see below.} \item{min.is.0}{logical indicating if the \bold{min}imal value of the dip statistic \eqn{D_n}{Dn} can be zero or not. Arguably should be set to \code{TRUE} for internal consistency reasons, but is false by default both for continuity and backwards compatibility reasons, see the examples below.} % backcompatibility both with earlier % versions of the \pkg{diptest} package, and with Hartigan's original % implementation.} \item{debug}{logical; if true, some tracing information is printed (from the C routine).} } \value{ depending on \code{full.result} either a number, the dip statistic, or an object of class \code{"dip"} which is a \code{\link{list}} with components \item{x}{the sorted \code{\link{unname}()}d data.} \item{n}{\code{length(x)}.} \item{dip}{the dip statistic} \item{lo.hi}{indices into \code{x} for lower and higher end of modal interval} \item{xl, xu}{lower and upper end of modal interval} \item{gcm, lcm}{(last used) indices for \bold{g}reatest \bold{c}onvex \bold{m}inorant and the \bold{l}east \bold{c}oncave \bold{m}ajorant.} \item{mn, mj}{index vectors of length \code{n} for the GC minorant and the LC majorant respectively.} For \dQuote{full} results of class \code{"dip"}, there are \code{\link{print}} and \code{\link{plot}} methods, the latter with its own \link[=plot.dip]{manual page}. } \note{ For \eqn{n \le 3}{n <= 3} where \code{n <- length(x)}, the dip statistic \eqn{D_n}{Dn} is always the same minimum value, \eqn{1/(2n)}, i.e., there's no possible dip test. Note that up to May 2011, from Hartigan's original Fortran code, \code{Dn} was set to zero, when all \code{x} values were identical. However, this entailed discontinuous behavior, where for arbitrarily close data \eqn{\tilde x}{x~}, \eqn{D_n(\tilde x) = \frac 1{2n}}{Dn(x~) = 1/(2n)}. Yong Lu \email{lyongu+@cs.cmu.edu} found in Oct 2003 that the code was not giving symmetric results for mirrored data (and was giving results of almost 1, and then found the reason, a misplaced \samp{")"} in the original Fortran code. This bug has been corrected for diptest version 0.25-0 (Feb 13, 2004). Nick Cox (Durham Univ.) said (on March 20, 2008 on the Stata-list):\cr As it comes from a bimodal husband-wife collaboration, the name perhaps should be \emph{\dQuote{Hartigan-Hartigan dip test}}, but that does not seem to have caught on. Some of my less statistical colleagues would sniff out the hegemony of patriarchy there, although which Hartigan is being overlooked is not clear. Martin Maechler, as a Swiss, and politician, would say:\cr Let's find a compromise, and call it \emph{\dQuote{Hartigans' dip test}}, so we only have to adapt orthography (:-). } \references{ P. M. Hartigan (1985) Computation of the Dip Statistic to Test for Unimodality; \emph{Applied Statistics (JRSS C)} \bold{34}, 320--325.\cr Corresponding (buggy!) Fortran code of \sQuote{AS 217} available from Statlib, \url{https://lib.stat.cmu.edu/apstat/217} J. A. Hartigan and P. M. Hartigan (1985) The Dip Test of Unimodality; \emph{Annals of Statistics} \bold{13}, 70--84. } \author{Martin Maechler \email{maechler@stat.math.ethz.ch}, 1994, based on S (S-PLUS) and C code donated from Dario Ringach \email{dario@wotan.cns.nyu.edu} who had applied \command{f2c} on the original Fortran code available from Statlib. In Aug.1993, recreated and improved Hartigans' "P-value" table, which later became \code{\link{qDiptab}}. } \seealso{ \code{\link{dip.test}} to compute the dip \emph{and} perform the unimodality test, based on P-values, interpolated from \code{\link{qDiptab}}; \code{\link{isoreg}} for isotonic regression. } \examples{ data(statfaculty) plot(density(statfaculty)) rug(statfaculty, col="midnight blue"); abline(h=0, col="gray") dip(statfaculty) (dS <- dip(statfaculty, full = TRUE, debug = TRUE)) plot(dS) ## even more output -- + plot showing "global" GCM/LCM: (dS2 <- dip(statfaculty, full = "all", debug = 3)) plot(dS2) data(faithful) fE <- faithful$eruptions plot(density(fE)) rug(fE, col="midnight blue"); abline(h=0, col="gray") dip(fE, debug = 2) ## showing internal work (dE <- dip(fE, full = TRUE)) ## note the print method plot(dE, do.points=FALSE) data(precip) plot(density(precip)) rug(precip, col="midnight blue"); abline(h=0, col="gray") str(dip(precip, full = TRUE, debug = TRUE)) ##----------------- The 'min.is.0' option : --------------------- ##' dip(.) continuity and 'min.is.0' exploration: dd <- function(x, debug=FALSE) { x_ <- x ; x_[1] <- 0.9999999999 * x[1] rbind(dip(x , debug=debug), dip(x_, debug=debug), dip(x , min.is.0=TRUE, debug=debug), dip(x_, min.is.0=TRUE, debug=debug), deparse.level=2) } dd( rep(1, 8) ) # the 3rd one differs ==> min.is.0=TRUE is *dis*continuous dd( 1:7 ) # ditto dd( 1:7, debug=TRUE) ## border-line case .. dd( 1:2, debug=TRUE) ## Demonstrate that 'min.is.0 = TRUE' does not change the typical result: B.sim <- 1000 # or larger D5 <- {set.seed(1); replicate(B.sim, dip(runif(5)))} D5. <- {set.seed(1); replicate(B.sim, dip(runif(5), min.is.0=TRUE))} stopifnot(identical(D5, D5.), all.equal(min(D5), 1/(2*5))) hist(D5, 64); rug(D5) D8 <- {set.seed(7); replicate(B.sim, dip(runif(8)))} D8. <- {set.seed(7); replicate(B.sim, dip(runif(8), min.is.0=TRUE))} stopifnot(identical(D8, D8.)) } \keyword{htest} \keyword{distribution} diptest/man/qDiptab.Rd0000644000176200001440000000343514602426020014355 0ustar liggesusers\name{qDiptab} \alias{qDiptab} \title{Table of Quantiles from a Large Simulation for Hartigan's Dip Test} \docType{data} \description{ Whereas Hartigan(1985) published a table of empirical percentage points of the dip statistic (see \code{\link{dip}}) based on N=9999 samples of size \eqn{n} from \eqn{U[0,1]}, our table of empirical quantiles is currently based on N=1'000'001 samples for each \eqn{n}. } \note{ Taking N=1'000'001 ensures that all the \code{\link{quantile}(X, p)} used here are exactly order statistics \code{sort(X)[k]}. } \format{ A numeric matrix %may change: of dimension 17 * 26, where each row corresponds to sample size \eqn{n}, and each column to a probability (percentage) in \eqn{[0,1]}. The dimnames are named \code{n} and \code{Pr} and coercable to these values, see the examples. \code{attr(qDiptab, "N_1")} is \eqn{N - 1}, such that with \code{k <- as.numeric(dimnames(qDiptab)$Pr) * attr(qDiptab, "N_1")}, e.g., \code{qDiptab[n == 15,]} contains exactly the order statistics \eqn{D_{[k]}} (from the \eqn{N+1} simulated values of \code{\link{dip}(U)}, where \code{U <- runif(15)}. } \seealso{\code{\link{dip}}, also for the references; \code{\link{dip.test}()} which performs the hypothesis test, using \code{qDtiptab} (and its null hypothesis of a uniform distribution). } \author{Martin Maechler \email{maechler@stat.math.ethz.ch}, in its earliest form in August 1994. } \examples{ data(qDiptab) str(qDiptab) ## the sample sizes `n' : dnqd <- dimnames(qDiptab) (nn <- as.integer(dnqd $n)) ## the probabilities: P.p <- as.numeric(print(dnqd $ Pr)) ## This is as "Table 1" in Hartigan & Hartigan (1985) -- but more accurate ps <- c(1,5,10,50,90,95,99, 99.5, 99.9)/100 tab1 <- qDiptab[nn <= 200, as.character(ps)] round(tab1, 4) } \keyword{datasets} diptest/man/dip.test.Rd0000644000176200001440000000461514602426020014524 0ustar liggesusers\name{dip.test} \title{Hartigans' Dip Test for Unimodality} \alias{dip.test} \concept{multimodality} \description{ Compute Hartigans' dip statistic \eqn{D_n}{Dn}, and its p-value for the test for unimodality, by interpolating tabulated quantiles of \eqn{\sqrt{n} D_n}{sqrt(n) * Dn}. For \eqn{X_i \sim F, i.i.d.}{X_i ~ F, i.i.d}, the null hypothesis is that \eqn{F} is a unimodal distribution. Consequently, the test alternative is non-unimodal, i.e., at least bimodal. Using the language of medical testing, you would call the test \dQuote{Test for \bold{Multi}modality}. } \usage{ dip.test(x, simulate.p.value = FALSE, B = 2000) } \arguments{ \item{x}{numeric vector; sample to be tested for unimodality.} \item{simulate.p.value}{a logical indicating whether to compute p-values by Monte Carlo simulation.} \item{B}{an integer specifying the number of replicates used in the Monte Carlo test.} } \details{ If \code{simulate.p.value} is \code{FALSE}, the p-value is computed via linear interpolation (of \eqn{\sqrt{n} D_n}{sqrt(n) * Dn}) in the \code{\link{qDiptab}} table. Otherwise the p-value is computed from a Monte Carlo simulation of a uniform distribution (\code{\link{runif}(n)}) with \code{B} replicates. } \value{ A list with class \code{"htest"} containing the following components: \item{statistic}{the dip statistic \eqn{D_n}{Dn}, i.e., \code{\link{dip}(x)}.} \item{p.value}{the p-value for the test, see details.} \item{method}{character string describing the test, and whether Monte Carlo simulation was used.} \item{data.name}{a character string giving the name(s) of the data.} } \seealso{ For goodness-of-fit testing, notably of continuous distributions, \code{\link{ks.test}}. } \references{ see those in \code{\link{dip}}. } \author{Martin Maechler} \note{ see also the package vignette, which describes the procedure in more details. } \examples{ ## a first non-trivial case (d.t <- dip.test(c(0,0, 1,1))) # "perfect bi-modal for n=4" --> p-value = 0 stopifnot(d.t$p.value == 0) data(statfaculty) plot(density(statfaculty)); rug(statfaculty) (d.t <- dip.test(statfaculty)) x <- c(rnorm(50), rnorm(50) + 3) plot(density(x)); rug(x) ## border-line bi-modal ... BUT (most of the times) not significantly: dip.test(x) dip.test(x, simulate=TRUE, B=5000) ## really large n -- get a message dip.test(runif(4e5)) } \keyword{htest} \keyword{distribution} diptest/man/plot.dip.Rd0000644000176200001440000000303014602426020014511 0ustar liggesusers\name{plot.dip} \alias{plot.dip} \title{Plot a dip() Result, i.e., Class "dip" Object} \description{ Plot method for \code{"dip"} objects, i.e., the result of \code{\link{dip}(., full.result=TRUE)} or similar. Note: We may decide to enhance the plot in the future, possibly not entirely back-compatibly. } \usage{ \method{plot}{dip}(x, do.points = (n < 20), colG = "red3", colL = "blue3", colM = "forest green", col.points = par("col"), col.hor = col.points, doModal = TRUE, doLegend = TRUE, \dots) } \arguments{ \item{x}{an \R object of \code{\link{class}} \code{"dip"}, i.e., typically the result of \code{\link{dip}(., full.result= FF)} where \code{FF} is \code{TRUE} or a string such as \code{"all"}.} \item{do.points}{logical indicating if the ECDF plot should include points; passed to \code{\link{plot.ecdf}}.} \item{colG, colL, colM}{the colors to be used in the graphics for the \bold{G}reatest convex minorant, the \bold{L}east concave majorant, and the \bold{M}odal interval, respectively.} \item{col.points, col.hor}{the color of points or horizontal lines, respectively, simply passed to \code{\link{plot.ecdf}}.} \item{doModal}{logical indicating if the modal interval \eqn{[x_L, x_U]}{[xL, xU]} should be shown.} \item{doLegend}{logical indicating if a legend should be shown.} \item{\dots}{further optional arguments, passed to \code{\link{plot.ecdf}}.} } \author{Martin Maechler} \seealso{ \code{\link{dip}}, also for examples; \code{\link{plot.ecdf}}. } \keyword{hplot} diptest/DESCRIPTION0000644000176200001440000000227515051320522013435 0ustar liggesusersPackage: diptest Version: 0.77-2 VersionNote: Last CRAN: 0.77-1 on 2024-03-31 Date: 2025-08-19 Authors@R: c( person("Martin", "Maechler", role = c("aut", "cre"), email = "maechler@stat.math.ethz.ch", comment = c("Ported to R and C from Fortran and S-plus; much enhanced", ORCID = "0000-0002-8685-9910")), person("Dario Ringach", role = "aut", comment = "Fortran and S-plus; at NYU.edu")) Title: Hartigan's Dip Test Statistic for Unimodality - Corrected Description: Compute Hartigan's dip test statistic for unimodality / multimodality and provide a test with simulation based p-values, where the original public code has been corrected. Imports: graphics, stats BuildResaveData: no License: GPL (>= 2) URL: https://github.com/mmaechler/diptest BugReports: https://github.com/mmaechler/diptest/issues NeedsCompilation: yes Packaged: 2025-08-19 16:06:17 UTC; maechler Author: Martin Maechler [aut, cre] (Ported to R and C from Fortran and S-plus; much enhanced, ORCID: ), Dario Ringach [aut] (Fortran and S-plus; at NYU.edu) Maintainer: Martin Maechler Repository: CRAN Date/Publication: 2025-08-20 10:20:02 UTC