Rcpp/0000755000176200001440000000000014740764532011172 5ustar liggesusersRcpp/tests/0000755000176200001440000000000014711515071012322 5ustar liggesusersRcpp/tests/tinytest.R0000644000176200001440000000377014711515071014337 0ustar liggesusers if (requireNamespace("tinytest", quietly=TRUE)) { ## Force tests to be executed if in dev release which we define as ## having a sub-release, eg 0.9.15.5 is one whereas 0.9.16 is not if (length(strsplit(format(packageVersion("Rcpp")), "\\.")[[1]]) > 3) { # dev rel, and if (Sys.getenv("RunAllRcppTests") != "no") { # if env.var not yet set message("Setting \"RunAllRcppTests\"=\"yes\" for development release") Sys.setenv("RunAllRcppTests"="yes") } if (Sys.getenv("RunVerboseRcppTests") != "no") { # if env.var not yet set message("Setting \"RunVerboseRcppTests\"=\"yes\" for development release") Sys.setenv("RunVerboseRcppTests"="yes") } } ## On Travis also always set tests; see ## https://docs.travis-ci.com/user/environment-variables/#default-environment-variables ## GitHub Action also set CI variable; see ## https://docs.github.com/en/actions/reference/environment-variables ## And we set it in 'docker run' call ## Ensure Codecov runs full tests too if ((Sys.getenv("CI") == "true") || (Sys.getenv("TRAVIS") == "true") || (Sys.getenv("CONTINUOUS_INTEGRATION") == "true") || (Sys.getenv("CODECOV_TOKEN") != "")) { if (Sys.getenv("RunAllRcppTests") != "no") { # if env.var not yet set message("Always enabling \"RunAllRcppTests\"=\"yes\" in CI\n") Sys.setenv("RunAllRcppTests"="yes") } if (Sys.getenv("RunVerboseRcppTests") != "no") { # if env.var not yet set message("Always enabling \"RunVerboseRcppTests\"=\"yes\" in CI\n") Sys.setenv("RunVerboseRcppTests"="yes") } } ## there are several more granular ways to test files in a tinytest directory, ## see its package vignette; tests can also run once the package is installed ## using the same command `test_package(pkgName)`, or by director or file tinytest::test_package("Rcpp") } Rcpp/.Rinstignore0000644000176200001440000000011412457514534013470 0ustar liggesusersinst/doc/Makefile inst/doc/jss.bst inst/doc/RJournal.sty inst/unitTests/src Rcpp/MD50000644000176200001440000014360714740764532011515 0ustar liggesusers7b56860715ba27563c0bdc95d56c46f3 *ChangeLog 51b04661ec93c02b8576ff48c0ee6c9d *DESCRIPTION f53ecd48407d7485920c4f3caaf187e0 *NAMESPACE ad57518c2d1d3d66fc26b6c214ed13e1 *R/00_classes.R f9a4ffb4d0fcec3eec6ef6c229ff1bba *R/01_show.R 5ad59a1671fd934a15f614a96331c56a *R/02_completion.R 3eafac927ff4e744b84675639ff48078 *R/03_prompt.R 604fdcee7ce1fcef29af758c8c71e8ce *R/Attributes.R 92c604e80679db2563fed5acc0b7cc37 *R/Module.R 2274d21a2d53aa0d231203db6633d5d9 *R/Rcpp.package.skeleton.R ac2a0d66a4892308a3a23eaedc726f84 *R/RcppClass.R 7f9f504712b646a7af30a962f481a3fe *R/RcppLdpath.R 87bff7adced70c835fbbbbb25fbc2199 *R/bib.R 0cb7766cf185c3c786b2b9db5c205959 *R/compilerCheck.R 37b16d5ad05cc80baaf047c77d53aeec *R/exceptions.R 7e3a5dfefbb7c092bf34b7ad06e761b0 *R/exposeClass.R 9ed2c17bf29e61836bac1eaa78fbf0b7 *R/inline.R c1f6e22d805062693ca441a313a798c7 *R/loadModule.R 410e549661c436dd77eba6814eb0f5d4 *R/loadRcppModules.R 02c1cb554af89184c6c5c46e1ee49e17 *R/populate.R 66c49e653c7fcbcefb611cc8aef5e61c *R/tools.R e82268e95d8f2d3a1759620eb1bc6664 *R/zzz.R 446e49617c03913b9fe8506fc0ecd513 *README.md dcfe968628d24168fc5bb54a66631158 *TODO 76161b65639451c966be75488458b3c3 *build/partial.rdb bc768836d0549620286bcfcbbec4237c *build/vignette.rds d8edc63de3343fcf14ee46cb692249db *cleanup 7599bada89d38a2474389682f552755e *inst/CITATION 42297cd2aa10cbe251c87bba2043d162 *inst/NEWS.Rd 7a9967333ad85931cc6d2051f4dff76e *inst/announce/ANNOUNCE-0.10.0.txt 734d037a2ac31af4659fb3b2e1a778ad *inst/announce/ANNOUNCE-0.11.0.txt 7d85af8d096e473821a3f001d3128b01 *inst/announce/ANNOUNCE-0.6.0.txt f61c7e9e1460eac25702b24c1af30442 *inst/announce/ANNOUNCE-0.7.0.txt a198e05a9b004dfc1f8ea67629f2f6c7 *inst/announce/ANNOUNCE-0.8.0.txt 3e8a171f22548f5da208b58e66b48e6c *inst/announce/ANNOUNCE-0.9.0.txt a18699b3c55916782dedc8422b0ab3bb *inst/bib/Rcpp.bib 6f1e3b1f4f75e04af65bb9daf94e9630 *inst/discovery/cxx0x.R 2baf167ce452976b0fcb43e44f566af7 *inst/doc/Rcpp-FAQ.Rnw 3e8e1adbb3a3170ee22f1d47804ab554 *inst/doc/Rcpp-FAQ.pdf 887250b7e0675b4a70d6eb1a4689080c *inst/doc/Rcpp-attributes.Rnw be1b460cbe67408b349b0604830760d1 *inst/doc/Rcpp-attributes.pdf 37f50a136d1350e8e864c9265cc88ad8 *inst/doc/Rcpp-extending.Rnw 1dfe6dacbef7929e12b40e0b47e43c40 *inst/doc/Rcpp-extending.pdf 90eade7bfffa82f250510759bc9a7f36 *inst/doc/Rcpp-introduction.Rnw ecb0ce8982a6fb57d2e411086f4a380e *inst/doc/Rcpp-introduction.pdf e6cf1d12ce4e3a2fed6eddf6290d393f *inst/doc/Rcpp-jss-2011.Rnw e951a6fef57858afb208f605ee8d2a3e *inst/doc/Rcpp-jss-2011.pdf 4524c2761e07e170f681181c2e62eb05 *inst/doc/Rcpp-libraries.Rnw 7f495f039566a87320fa737da7c6e551 *inst/doc/Rcpp-libraries.pdf a96bcf4153b795bff19ddc36a17ca435 *inst/doc/Rcpp-modules.Rnw 449c0d25a3171fa2440a55ff3a4e028b *inst/doc/Rcpp-modules.pdf 835d0e2dd365e4621663bd03ae219758 *inst/doc/Rcpp-package.Rnw dc51549da005cc02727cfe90d64e226f *inst/doc/Rcpp-package.pdf d76adfdc4e68c69c5ff632e234db6a85 *inst/doc/Rcpp-quickref.Rnw c49ed1aa009c27db4d4efbe8f709951f *inst/doc/Rcpp-quickref.pdf 929a1aad762b7354b6875a35093ec477 *inst/doc/Rcpp-sugar.Rnw 9d1ce0fd6af6610d2c62fb0e536dd9bf *inst/doc/Rcpp-sugar.pdf 35fa971232b8c9fb0bbb9dfc2ad3de7a *inst/examples/Attributes/Depends.cpp a9aa3aceea0b49525155a2c43296318b *inst/examples/Attributes/Export.cpp c6c9969e0067a1321827369cba1cc566 *inst/examples/Attributes/cppFunction.R ae6383cbe35d7fd9f03a47b16fe084e4 *inst/examples/Attributes/sourceCpp.R d8ad7f81287bfb38184962408e21dc4b *inst/examples/ConvolveBenchmarks/GNUmakefile 4e5da9b0fe573983765dacbdd4888f71 *inst/examples/ConvolveBenchmarks/buildAndRun.sh 3b726172d475beb1a950a60c963abdd6 *inst/examples/ConvolveBenchmarks/convolve10_cpp.cpp 7b5f52647bb1401e5ca51ae24a99d9ab *inst/examples/ConvolveBenchmarks/convolve10_cpp.h 198737bb5588686872b7bf92c575b44d *inst/examples/ConvolveBenchmarks/convolve11_cpp.cpp c2326ac51bb20278c7d200c0217af192 *inst/examples/ConvolveBenchmarks/convolve12_cpp.cpp ec15a3f27dda294c1ba0e85bc7975001 *inst/examples/ConvolveBenchmarks/convolve13_cpp.cpp c2934f803727f1f9145f2eaacf7fb783 *inst/examples/ConvolveBenchmarks/convolve14_cpp.cpp 02ae1ae1c668a0037f228a316a9b9717 *inst/examples/ConvolveBenchmarks/convolve2_c.c 41c3477fb3c135e372f7dcee7a00b1fe *inst/examples/ConvolveBenchmarks/convolve3_cpp.cpp 6094f474b9bada3d489b5e9e1eed40db *inst/examples/ConvolveBenchmarks/convolve4_cpp.cpp 570d28eceab6c8e21061abaa932a57b7 *inst/examples/ConvolveBenchmarks/convolve5_cpp.cpp 160f9ca0f7a5e8ce599d5a731e33a302 *inst/examples/ConvolveBenchmarks/convolve7_c.c feac91b32652ac87f9fca99cb65babef *inst/examples/ConvolveBenchmarks/convolve8_cpp.cpp b653d0cab1e9c200527c631486b21b22 *inst/examples/ConvolveBenchmarks/convolve9_cpp.cpp e211fa941ea87850f28aafd93dbaea01 *inst/examples/ConvolveBenchmarks/exampleRCode.r 83e612c4f034144d20769da6a98ab430 *inst/examples/ConvolveBenchmarks/loopmacro.h a39297262c26fcf0016a007c8729f7ed *inst/examples/ConvolveBenchmarks/overhead.r 695db9645074a40edf199a3f6e7b99d9 *inst/examples/ConvolveBenchmarks/overhead.sh 41a7585097bb0330a19163f63b9eb582 *inst/examples/ConvolveBenchmarks/overhead_1.cpp 70bc5f4cab64d21baa5efd44371d6c06 *inst/examples/ConvolveBenchmarks/overhead_2.c f98ba450080bf7ededba779a9eb9ef08 *inst/examples/FastLM/benchmark.r 187ff739229daa658a997db7361cf79a *inst/examples/FastLM/benchmarkLongley.r 57e3f462b6e57f6d4781d93ad0b5a0f0 *inst/examples/FastLM/fastLMviaArmadillo.r 96177e5073669fce0ada1a133a4b528a *inst/examples/FastLM/fastLMviaGSL.r bed809fc1187686e9c3f031da7ecc03a *inst/examples/FastLM/lmArmadillo.R e90e71260dd32a062301a565b0ceb78a *inst/examples/FastLM/lmGSL.R dee16ee1aaf90787c0d3fe441b57e572 *inst/examples/Misc/fibonacci.r 51b7f11bdc147d595d3d7de4a7b88129 *inst/examples/Misc/ifelseLooped.r 80df7f84cd6c98c9d3b45ceaa62b6325 *inst/examples/Misc/newFib.r 3028009739751d645a3f3c1e65c335b1 *inst/examples/Misc/piBySimulation.r b6d55aea50fdd5a95b36f006bfa9bbdf *inst/examples/Misc/piSugar.cpp b28eef52d9c70bdc3bc1c7c4af74a705 *inst/examples/OpenMP/GNUmakefile 6ac8a4754e7a6c968f910b775837981b *inst/examples/OpenMP/OpenMPandInline.r 1fb803a50758e7abccccbacf6df79bb9 *inst/examples/OpenMP/check.R 33d174735e08ffcbfe8b14f77be6467e *inst/examples/OpenMP/piWithInterrupts.cpp ee8c42a72f8ed650b8ac32443890c01b *inst/examples/RcppGibbs/RcppGibbs.R cefdedf5f9c0d671bcf465e948198a29 *inst/examples/RcppGibbs/RcppGibbs_Updated.R a57feb54c968ab827c78c5c18c1d1408 *inst/examples/RcppGibbs/timeRNGs.R e8a89fe0eebf8ec758806abc84e42d8d *inst/examples/RcppInline/RObject.r 07260e8bebfc924ed834ac9adc10ed3e *inst/examples/RcppInline/RcppInlineExample.r 0e55533b689b5cc21d6e48ed89e39f50 *inst/examples/RcppInline/RcppInlineWithLibsExamples.r 8d8b770eaeee86bcb2a7b0939a3c75f3 *inst/examples/RcppInline/RcppSimpleExample.r af8de22ca53be6cde070ad079bcc0560 *inst/examples/RcppInline/UncaughtExceptions.r 04094741972fda044af2c1982433f37a *inst/examples/RcppInline/external_pointer.r 924087b70f9e658de341442f27c787ee *inst/examples/SugarPerformance/Timer.h ddfeedc53f53f33a3da83660c9bc022e *inst/examples/SugarPerformance/Timertest.cpp 8be8229bd89b2ea3a760d1112f7a7054 *inst/examples/SugarPerformance/sugarBenchmarks.R 4b5eef1853e02850de35d4799c7392ef *inst/examples/functionCallback/README f55a0d78225fef3970fc5f54fddb5801 *inst/examples/functionCallback/newApiExample.r 2b3ff26140686d910b4fe51505b817a3 *inst/examples/performance/extractors.R 33c7adefe3137cae65b189490c958c6a *inst/examples/performance/performance.R 46bdb787a2fde9b6cd8ff24039e84aa0 *inst/include/Rcpp.h 36e44ff21273d50c3eaff4a46bb572ac *inst/include/Rcpp/Benchmark/Timer.h 8439380c22fde35ae1d4fa166400c80d *inst/include/Rcpp/DataFrame.h e4195b2fee650b67d709d7bd529f3de6 *inst/include/Rcpp/Dimension.h 752b8fd6d2f30c8c74b54c27e6eeaca4 *inst/include/Rcpp/DottedPair.h 8ae8df6f92f7d17625b543348c9c035c *inst/include/Rcpp/DottedPairImpl.h 6cc8e253351ee6374b830fbc8391cb81 *inst/include/Rcpp/Environment.h 719d99509ff3398d24d31a4964dc6beb *inst/include/Rcpp/Extractor.h 0e673291cac4bf839157946880772c1d *inst/include/Rcpp/Fast.h 1836fe44282438109267ce447debae1a *inst/include/Rcpp/Formula.h e07dc530012fc4be00d1c64d1c2f68da *inst/include/Rcpp/Function.h 6ad1b0148d43fd84f39d8e030e39a871 *inst/include/Rcpp/InputParameter.h 52f0dc69d1a036127f9c8ce267afe1a4 *inst/include/Rcpp/InternalFunction.h 8016a6ee9f1e352640e33d02520fe56c *inst/include/Rcpp/InternalFunctionWithStdFunction.h 4f649deb041fc8b0ff2680d1a75a49db *inst/include/Rcpp/Interrupt.h f0367266d06b08654a28aee4b1a8aa39 *inst/include/Rcpp/Language.h 4df6c1501ce42ce8669ed6e6473653d5 *inst/include/Rcpp/Light 7423a0c0e22f136a8cde2ee861349d13 *inst/include/Rcpp/Lighter 831f454f66395440e5c4b805917f2b9d *inst/include/Rcpp/Lightest 9fdc1f952c4cc5f3a093285fed770e89 *inst/include/Rcpp/Module.h e54ff3fb24c5fb5c00e35804b4043177 *inst/include/Rcpp/Na_Proxy.h 30a357c1b1bf0a4b7b3c06aec6ac6891 *inst/include/Rcpp/Named.h 09c3d2e030266a2716c465005fddb8ad *inst/include/Rcpp/Nullable.h 414d5d81751d297c5014f4d5158da857 *inst/include/Rcpp/Pairlist.h c299955262d228fc372294633ecb10a9 *inst/include/Rcpp/Promise.h c7c202116cb2d8f9993f2d2879a48339 *inst/include/Rcpp/RNGScope.h 19d73d0c48066eab27b7e21f016aca39 *inst/include/Rcpp/RObject.h 7eaef3d46101154d1492c710f3cad3bf *inst/include/Rcpp/Rcpp 0708f78d2a5868bd0036bdffc92557eb *inst/include/Rcpp/Reference.h 577707408edc19445de29e2fd4182292 *inst/include/Rcpp/Rmath.h 4a8bc08de01a68edf476065293076bc9 *inst/include/Rcpp/S4.h b479ccd53c1917ce1140ee0a17bb3d21 *inst/include/Rcpp/StretchyList.h bb14d4e4092adf456e6ee1186b6950c2 *inst/include/Rcpp/String.h 70f564c35b318a49d4bafdcdfe861c7e *inst/include/Rcpp/StringTransformer.h 016374544bddc85df03012bf1e70377c *inst/include/Rcpp/Symbol.h e8984721738317caff337c1076b25cce *inst/include/Rcpp/Vector.h eed9bf9af10a68be9cd55e5a5cdaa36a *inst/include/Rcpp/WeakReference.h c84d37569cc5094df6e4c8600530d110 *inst/include/Rcpp/XPtr.h 2eff8a753ede96fbcf538eab9eb22889 *inst/include/Rcpp/algo.h 8945b9daf79dc522161d4738be104e8e *inst/include/Rcpp/algorithm.h 3fa2caaea31d12b63d0a049c1da3c878 *inst/include/Rcpp/api/bones/Date.h 560684b180bc9eb1aaaf6f427ea97063 *inst/include/Rcpp/api/bones/Datetime.h 4d936b49167638e86368f4b8e26c13cc *inst/include/Rcpp/api/bones/bones.h 49f3c640f64681d80bfd2395309a4ddb *inst/include/Rcpp/api/bones/wrap_extra_steps.h 738de61f646f72b06810142fcb09af6f *inst/include/Rcpp/api/meat/DataFrame.h 80788c003d6b95f633d53db11b4c42e0 *inst/include/Rcpp/api/meat/Date.h 64e00680fbc6a82bbd1dd0e100e10673 *inst/include/Rcpp/api/meat/Datetime.h 13355fb54111f51930877bcddb41d50c *inst/include/Rcpp/api/meat/Dimension.h 26477794f8170b533113dcf620d64d1c *inst/include/Rcpp/api/meat/DottedPairImpl.h 006fb9ab61399d07b7f7bbd8ae6cf92f *inst/include/Rcpp/api/meat/Environment.h e3132a348dd7c8cb342e4df0dd480737 *inst/include/Rcpp/api/meat/Rcpp_eval.h a8b20b3c2b1e123172ab3a1eb78e04b0 *inst/include/Rcpp/api/meat/S4.h 9fd69c4ef0c1780784322f902305d1c7 *inst/include/Rcpp/api/meat/StretchyList.h eded8a0a95dd5ecdcae8aa70aceb795c *inst/include/Rcpp/api/meat/Vector.h a3e8a42322f0e644f1d6b6d4f55425e7 *inst/include/Rcpp/api/meat/as.h f1b2b53b2851bbd3afb878ef3829f58f *inst/include/Rcpp/api/meat/export.h cc1991e18d0c1d1e3470285fec935c36 *inst/include/Rcpp/api/meat/is.h 3ecf92371682f347f71c6da62730a05e *inst/include/Rcpp/api/meat/meat.h b8b08db5250d9cd27130853ed04041bc *inst/include/Rcpp/api/meat/message.h 71c33d73cde9cdf7368627a9b00a8e7d *inst/include/Rcpp/api/meat/module/Module.h d3e14b929d0b6cd092f52d1ced57b573 *inst/include/Rcpp/api/meat/protection.h c9af45da88ea151bb2f8cd27900257e8 *inst/include/Rcpp/api/meat/proxy.h 12c775ee39ec274c4825219d25e04f43 *inst/include/Rcpp/api/meat/wrap.h 47fc05bb3d86217c07793ea37d833302 *inst/include/Rcpp/as.h 90c153091bc3fb1e123fef9dc40394e6 *inst/include/Rcpp/barrier.h fa7b26bbe19f908b9c00ead2fe2717ac *inst/include/Rcpp/clone.h 1b3b2bee1fc9bd3f231c2a33ca572281 *inst/include/Rcpp/complex.h f3797028581f1be9b05fd59d1da1c6a4 *inst/include/Rcpp/config.h b90e19134c5d4a4c0652f956c022d1e4 *inst/include/Rcpp/date_datetime/Date.h e75130fc77dac6243e5c88639c940dea *inst/include/Rcpp/date_datetime/Datetime.h 0d754f1a9266c3e1bbc6946ba1304ab5 *inst/include/Rcpp/date_datetime/date_datetime.h e2616c39c51c09af33f595b28d1f5fe5 *inst/include/Rcpp/date_datetime/newDateVector.h 1c84cd464c857eadab9323be5772ef2b *inst/include/Rcpp/date_datetime/newDatetimeVector.h eeaacae019fe68c8acbd3e9fbea29a3d *inst/include/Rcpp/date_datetime/oldDateVector.h a2bcdcb2cc9e096bfb46106875462a13 *inst/include/Rcpp/date_datetime/oldDatetimeVector.h 7668f358d29578e82800d6bd98f60a12 *inst/include/Rcpp/exceptions.h fabe6bb18d2e4714327930f192754072 *inst/include/Rcpp/exceptions/cpp11/exceptions.h 4f3d1575c7468c08aff9caf2029b5262 *inst/include/Rcpp/exceptions/cpp98/exceptions.h 7c731d4c921ce35caaaf00ad6cdde425 *inst/include/Rcpp/exceptions_impl.h 7dc521891bf0b250105c08f84806dedf *inst/include/Rcpp/generated/DataFrame_generated.h b0b0b9732bb0201a5dbecefd41ed1a6f *inst/include/Rcpp/generated/DottedPair__ctors.h 1a89560f0b3c22732c724c82f77bc711 *inst/include/Rcpp/generated/Function__operator.h 89c6d03ae9bce1e1e7c694408cd71f4d *inst/include/Rcpp/generated/InternalFunctionWithStdFunction_call.h b8c60809df30845e119f0b477716bb65 *inst/include/Rcpp/generated/InternalFunction__ctors.h 89cb37088328001298a4ba18a4acd1d5 *inst/include/Rcpp/generated/Language__ctors.h af099521f7cbf6024d6a6ce428861634 *inst/include/Rcpp/generated/Pairlist__ctors.h 42e058cc4ef74a4b09e9d3b102cd417a *inst/include/Rcpp/generated/Vector__create.h 97ed751b981c523527ce243786ac969d *inst/include/Rcpp/generated/grow__pairlist.h 377c169b0f61cbf8f21f071ab4dc3436 *inst/include/Rcpp/grow.h 5fa886fea6bfe95d86c97fc32794711e *inst/include/Rcpp/hash/IndexHash.h 118185092dfabe6230c4e6c2a8e50257 *inst/include/Rcpp/hash/SelfHash.h ce761de72f7730fe942b91e35e6b9ba6 *inst/include/Rcpp/hash/hash.h 3c1b55773be7d386bca01a99c8fa94af *inst/include/Rcpp/internal/Exporter.h 87298c0d130f4d0c2c9e3bcbf8f52712 *inst/include/Rcpp/internal/GreedyVector.h ac0b994918191501b757516ce5ee263b *inst/include/Rcpp/internal/ListInitialization.h 589b5e7ef7ec36ea7c72c0989856322e *inst/include/Rcpp/internal/NAComparator.h ddeb259fb4dc45ce8f48af5e7c67327a *inst/include/Rcpp/internal/NAEquals.h a1cfd42face708ee13c1b82d72990024 *inst/include/Rcpp/internal/Proxy_Iterator.h 508bef1a3592104abdca03463b25432e *inst/include/Rcpp/internal/SEXP_Iterator.h acec262f61b890643eb543224e037df0 *inst/include/Rcpp/internal/call.h ef7589197950d24c37c68868a2fd4ec5 *inst/include/Rcpp/internal/caster.h 1cc9fbe420c4d94a392fa41db6607f81 *inst/include/Rcpp/internal/converter.h 78cca884967d645095bb8de46e97eb9d *inst/include/Rcpp/internal/export.h d75740f6c80130661e85ef0e8af6ef17 *inst/include/Rcpp/internal/na.h 2d6716a93c54ae524caab179db28206f *inst/include/Rcpp/internal/r_coerce.h ced4d19ec0af39a1402abc9dfc772759 *inst/include/Rcpp/internal/r_vector.h be267828e3e200668df1d37c3b90edd0 *inst/include/Rcpp/internal/wrap.h 14b302e7f5cca681f122cccde5418cbd *inst/include/Rcpp/internal/wrap_end.h 1914c43f5b9f93808062adf5e2c0a005 *inst/include/Rcpp/iostream/Rstreambuf.h c852659f0876b4dd0a3d3d99e972d1cb *inst/include/Rcpp/is.h 24e8a8c1f4a580954091edb9dae2cfd9 *inst/include/Rcpp/lang.h d93f0f5c828018c1ae632ce1fb929293 *inst/include/Rcpp/longlong.h 4e9effca3c5f2dabaa4e6aa478b67528 *inst/include/Rcpp/macros/cat.hpp 623f4ca3111e4a28afe10133897a8f89 *inst/include/Rcpp/macros/config.hpp ec19b90809bb03c920fa9d6df8af2732 *inst/include/Rcpp/macros/debug.h 593ee227e0cc7a90b2e48791889ead98 *inst/include/Rcpp/macros/dispatch.h 32681ffdaa790b76bf3e20d3a6c17771 *inst/include/Rcpp/macros/interface.h bf6d92385b7958959cb10a6b3bfd2a44 *inst/include/Rcpp/macros/macros.h 3347bc9bf5c92bf9b929c61275c1714b *inst/include/Rcpp/macros/module.h 0c4f36da838e8571b7bc602b4b483295 *inst/include/Rcpp/macros/traits.h acdd29c8bc3af4e20bbb733ab4bd7e74 *inst/include/Rcpp/macros/unroll.h 1762f3b08abffc14b677c9d4c0ee24d2 *inst/include/Rcpp/macros/xp.h 90f826d6b2719cd8b19266f7eed1d71b *inst/include/Rcpp/module/CppFunction.h 8d492c19d0746d6f0531a42ce62e4169 *inst/include/Rcpp/module/Module.h 1f282a0f0e1498bbe9f228dad9fdebfd *inst/include/Rcpp/module/Module_Add_Property.h fd6ad1311c4cc5e0cffcc29722ca0f20 *inst/include/Rcpp/module/Module_Field.h 923ca9c389ce3dd672edcaa3f1e0fe6b *inst/include/Rcpp/module/Module_Property.h f27974e30a5cdda0162a99a5d0026fe0 *inst/include/Rcpp/module/Module_generated_Constructor.h ab1e4d893d83ea1aad20d1f830370e8c *inst/include/Rcpp/module/Module_generated_CppFunction.h 8e976ff3819acb86a25a76b242ba6aa2 *inst/include/Rcpp/module/Module_generated_CppMethod.h 1cac718fae492c5f7ae939a253906e22 *inst/include/Rcpp/module/Module_generated_Factory.h b11be5d7819c7a763395ca8c0089423d *inst/include/Rcpp/module/Module_generated_Pointer_CppMethod.h 9ae1c39a7c07fb1de2fed0169c4822f0 *inst/include/Rcpp/module/Module_generated_Pointer_method.h 7606a43b443a7a4b0749d1994f7746dd *inst/include/Rcpp/module/Module_generated_class_constructor.h fbe65f4f50289e30d64d8b8723dcc5d0 *inst/include/Rcpp/module/Module_generated_class_factory.h f98a219d68a1c072d515e3dfd445b741 *inst/include/Rcpp/module/Module_generated_class_signature.h 282a86024a78450a3f3d2bb1bb0cbda9 *inst/include/Rcpp/module/Module_generated_ctor_signature.h 54bcedd25514753ee10ed273511f8bbd *inst/include/Rcpp/module/Module_generated_function.h f34764fa42d6f6fc0904264099253778 *inst/include/Rcpp/module/Module_generated_get_signature.h 2af8acdcd6b282fcad59eb353de02ca0 *inst/include/Rcpp/module/Module_generated_method.h 212b583e37492f9f00671314427788ed *inst/include/Rcpp/module/class.h b021df8570d99c4821e25c137aa45a01 *inst/include/Rcpp/module/class_Base.h 99322cf8421a1cc8964659b05d79a906 *inst/include/Rcpp/module/get_return_type.h eef7fae0d6a08dc00f8cda116c11f669 *inst/include/Rcpp/platform/compiler.h 8f9d3b2218818dfe5f703e6900d603e9 *inst/include/Rcpp/platform/solaris.h e6f882c26076e813fe8290c46b1c0fd8 *inst/include/Rcpp/print.h abd6c01295a88b73432a77f6a79aca3a *inst/include/Rcpp/protection/Armor.h fa63d47f044e1012a5431319108f01f9 *inst/include/Rcpp/protection/Shelter.h 6357a773233c2c9f5415c6445fe103f9 *inst/include/Rcpp/protection/Shield.h 2fb2464623e39ad6040f4457b6ef382c *inst/include/Rcpp/protection/protection.h 9b71f44a9870eaee5c63de664e5db4f1 *inst/include/Rcpp/proxy/AttributeProxy.h d1800f7df6f83a017e0501af64551239 *inst/include/Rcpp/proxy/Binding.h 2767ffc2e7c0e7832e7223cd8da38be1 *inst/include/Rcpp/proxy/DottedPairProxy.h 59d09bb7d953413d5452a45616fca92f *inst/include/Rcpp/proxy/FieldProxy.h bb4b32da96533b2cae35b524cf796d04 *inst/include/Rcpp/proxy/GenericProxy.h e34b2baf18b2684fe26743c96f78b3c6 *inst/include/Rcpp/proxy/NamesProxy.h e6ffa94de4d38f34d9b363785fbdf1ff *inst/include/Rcpp/proxy/ProtectedProxy.h 0a75a348caecd8836340ca11be0435d7 *inst/include/Rcpp/proxy/RObjectMethods.h 9e412a44a35eb570fe422b00c15dc84e *inst/include/Rcpp/proxy/SlotProxy.h 16583a2ce9f3f158d32a59bc69dc6045 *inst/include/Rcpp/proxy/TagProxy.h 5b3488834c9e483325dc45493deaf0d4 *inst/include/Rcpp/proxy/proxy.h 0f03769521dac747e5a7094818315d10 *inst/include/Rcpp/r/compat.h e9a35004a15d790b0bdf4086232fdef6 *inst/include/Rcpp/r/headers.h 97b839da2480b8beef14466695e02b3e *inst/include/Rcpp/r_cast.h 0975231e8a827815b7cf027a56bd7fec *inst/include/Rcpp/routines.h 5c5eddabb61b11f1e2aa1dfd3b7dfcc6 *inst/include/Rcpp/sprintf.h 652b362ffc5b25dc354e2f94ccf775df *inst/include/Rcpp/stats/beta.h 830d809435ad6d90f513ceb19ed229ff *inst/include/Rcpp/stats/binom.h de8f527ad087fd135d60496e83600129 *inst/include/Rcpp/stats/cauchy.h 28c835cdee1aa30eff6d7f6481a7c7b7 *inst/include/Rcpp/stats/chisq.h 2fcae848fbd39f938335de220dfceb56 *inst/include/Rcpp/stats/dpq/dpq.h 50246afd70a6c354111d21fef9a61454 *inst/include/Rcpp/stats/dpq/macros.h 2a0a10252c313fa1101c426a71f419b3 *inst/include/Rcpp/stats/exp.h 16b8c2b35aa2dd1acd61aea749bea591 *inst/include/Rcpp/stats/f.h 3531db9168652e50f1a2f7e48995e652 *inst/include/Rcpp/stats/gamma.h 259484f02f4b70c75f061eb3acebc68b *inst/include/Rcpp/stats/geom.h cddc6f8806bbff126f43aad6d9f64225 *inst/include/Rcpp/stats/hyper.h afbc488e006d43bbb44f00b39bdc9279 *inst/include/Rcpp/stats/lnorm.h 0148fa77627fc2649b4cc8fda21ff2cf *inst/include/Rcpp/stats/logis.h 2f20232d49ad4e0d5aa4affe29a83677 *inst/include/Rcpp/stats/nbeta.h 255732d79d848b5ef2dc23a0bb020c78 *inst/include/Rcpp/stats/nbinom.h b648f374ad9b409f3a693cb13d2dacf2 *inst/include/Rcpp/stats/nbinom_mu.h 792ff5b69094be8d30a61da005e8b8a2 *inst/include/Rcpp/stats/nchisq.h 4285fba50176e606b3183e550ca57008 *inst/include/Rcpp/stats/nf.h 62bcbc788f700bb418899f2d5d71674e *inst/include/Rcpp/stats/norm.h b9bb0937015e9915c9eed07d7d5e675e *inst/include/Rcpp/stats/nt.h ee8d82efa40767e1ee30b1b39f0d2b9b *inst/include/Rcpp/stats/pois.h bd6f29269c4cb5e0714c7eb14497dd24 *inst/include/Rcpp/stats/random/random.h 6be67d92344ae4ffe85a2d4a966c5712 *inst/include/Rcpp/stats/random/rbeta.h cdc109dfaa7c849fe8f5108a8157286e *inst/include/Rcpp/stats/random/rbinom.h 2fe775c698a801f71c81d958ff2153bf *inst/include/Rcpp/stats/random/rcauchy.h 09e49a79928fba558003e949f7e42625 *inst/include/Rcpp/stats/random/rchisq.h eb7d8d8957f95e55c7b4c883d07bde3e *inst/include/Rcpp/stats/random/rexp.h 796f003192b271cfd01be89f08fc5857 *inst/include/Rcpp/stats/random/rf.h d3f7b0de54bbff91a52b5f3e97b6f0f9 *inst/include/Rcpp/stats/random/rgamma.h f30537d903fd0e2fe0b8fbde1ad0f448 *inst/include/Rcpp/stats/random/rgeom.h ef335473c41b8bf22c2ed8ead3d02802 *inst/include/Rcpp/stats/random/rhyper.h 812d6f54e228aa74586d4494462dc308 *inst/include/Rcpp/stats/random/rlnorm.h e19c5aac4d1e6f05fb215da8ab9abd63 *inst/include/Rcpp/stats/random/rlogis.h 8401528e0344ac91e8a59d3c75ea3811 *inst/include/Rcpp/stats/random/rnbinom.h da102c578dc03d90e134bc716ce86061 *inst/include/Rcpp/stats/random/rnbinom_mu.h 281fe24171a0dc1a2f5d32b792b29840 *inst/include/Rcpp/stats/random/rnchisq.h d11f94b30bfe73bec96e494c19010112 *inst/include/Rcpp/stats/random/rnorm.h 68c0bc9a9bf8adf587cfafec41f2e0c3 *inst/include/Rcpp/stats/random/rpois.h 22c48598462a7a67f7c46f827a7ca37b *inst/include/Rcpp/stats/random/rsignrank.h 6d053ab00aee5507bdcd37b260edb2ca *inst/include/Rcpp/stats/random/rt.h e4157ac1a6474db7d023ed619f8a3911 *inst/include/Rcpp/stats/random/runif.h 0de983b302b5686c55cf1348856736f2 *inst/include/Rcpp/stats/random/rweibull.h 9d96c7c693ee9ee2be41a02aca2c907c *inst/include/Rcpp/stats/random/rwilcox.h d5e57758623ecb887417b652e9dbe431 *inst/include/Rcpp/stats/stats.h 51dea0f553fe2661ebbf069bba1c6fab *inst/include/Rcpp/stats/t.h 72600819bbbb51028983e81c6623f47f *inst/include/Rcpp/stats/unif.h edcd15051fead7e65a02fe4848ec5969 *inst/include/Rcpp/stats/weibull.h b19248e3d1ba5159604ee91bc499fbe0 *inst/include/Rcpp/storage/NoProtectStorage.h 0f0750ca5166fbea1a202f3a74e94579 *inst/include/Rcpp/storage/PreserveStorage.h 4bfc6bf68fd92addd39ad5eabe987ccd *inst/include/Rcpp/storage/storage.h 6d4b5fd0017b129f89731c3af6f63545 *inst/include/Rcpp/sugar/Range.h be07b75cd41bf643098bf8dc9f6fd6bd *inst/include/Rcpp/sugar/block/SugarBlock_1.h 93914f21ce2678a075f440256bff7256 *inst/include/Rcpp/sugar/block/SugarBlock_2.h b38058d7f4161d552c59199d971759d2 *inst/include/Rcpp/sugar/block/SugarBlock_3.h 77631c6ccb9bf7900cc3e9870308f15e *inst/include/Rcpp/sugar/block/SugarMath.h 0b04c68170924e36a049448bb9dffbcf *inst/include/Rcpp/sugar/block/Vectorized_Math.h b303e234459f72118cdb77b5fc6c40d2 *inst/include/Rcpp/sugar/block/block.h 8989b1fc88898a94d028256afd535218 *inst/include/Rcpp/sugar/functions/Lazy.h 332e143da726e96aa5342a2d379ad888 *inst/include/Rcpp/sugar/functions/all.h be21eae934bd2eb08c36aa98a95f8437 *inst/include/Rcpp/sugar/functions/any.h 2034cef020d507b44a56287085f01b03 *inst/include/Rcpp/sugar/functions/cbind.h 356ce7a62fd40bfb5c99f5d90ceab9c8 *inst/include/Rcpp/sugar/functions/clamp.h 006ff253f5119766397ae8786b6f3273 *inst/include/Rcpp/sugar/functions/complex.h 8c48d64608f50fd65a1060eb0ba0a94f *inst/include/Rcpp/sugar/functions/cummax.h 676a6d35542c22993a733ac9ca7f4557 *inst/include/Rcpp/sugar/functions/cummin.h d48484d2c5885e5132dae2c5360cc003 *inst/include/Rcpp/sugar/functions/cumprod.h b5875c167cebe51528173279a35e1c80 *inst/include/Rcpp/sugar/functions/cumsum.h d9339ceea3657d0eebffff3c4fc19ade *inst/include/Rcpp/sugar/functions/diff.h e89b6f5086b49094e87a58183226c37e *inst/include/Rcpp/sugar/functions/duplicated.h ee8361b3d041e25bf9dd142b2b6809db *inst/include/Rcpp/sugar/functions/functions.h 8a1d27971f10c32f1c2dbc2441c47797 *inst/include/Rcpp/sugar/functions/head.h 71a232c26d62819d7752cbd198ccd471 *inst/include/Rcpp/sugar/functions/ifelse.h e6be4a52d004d3d7cdf4577c03bc0ad6 *inst/include/Rcpp/sugar/functions/is_finite.h 29a018bc6da09bea93392ac25e4c5ff6 *inst/include/Rcpp/sugar/functions/is_infinite.h e04f27b0d6d0902fd507b0c8a6c1ab6f *inst/include/Rcpp/sugar/functions/is_na.h 905bd30e93c3bfea935a665f6e8eeecf *inst/include/Rcpp/sugar/functions/is_nan.h 8a13e5b92b45d6fdb429164b897920b0 *inst/include/Rcpp/sugar/functions/lapply.h e17dd7603ed04900df60d381e1f8a117 *inst/include/Rcpp/sugar/functions/mapply.h 1e29ed111579f3cf0c3215d476edae32 *inst/include/Rcpp/sugar/functions/mapply/mapply_2.h 9c2025d02a6867fe1d31f12df3c41b5a *inst/include/Rcpp/sugar/functions/mapply/mapply_3.h ab7b9d24e77fe2dc072077714933d59d *inst/include/Rcpp/sugar/functions/match.h 747824a9e7823288ba51af113ed9af50 *inst/include/Rcpp/sugar/functions/math.h e1d5c777461b843bc04bec8b3c4f6787 *inst/include/Rcpp/sugar/functions/max.h bf3fb31ed2cfec71483f5cf92a6b3ff8 *inst/include/Rcpp/sugar/functions/mean.h e7ddf543af82118e4774aab3f2e63271 *inst/include/Rcpp/sugar/functions/median.h 17f81f3f0fb3cc04341371ab641ff46a *inst/include/Rcpp/sugar/functions/min.h 55ea8f9269403a501d18d47198f997ef *inst/include/Rcpp/sugar/functions/na_omit.h fe272f9c21bb17980bdb2efffd7a7f1c *inst/include/Rcpp/sugar/functions/pmax.h 7bd993f789e126017b34ff9858bd915a *inst/include/Rcpp/sugar/functions/pmin.h ae74c9114eec986e67ecab7ea08d401c *inst/include/Rcpp/sugar/functions/pow.h a1f5d8e23763f3e16039b32589131aaa *inst/include/Rcpp/sugar/functions/range.h 1646622d8ec6731c53b7d74292906c43 *inst/include/Rcpp/sugar/functions/rep.h 73bfa7e84c00ac5badd0306336c93330 *inst/include/Rcpp/sugar/functions/rep_each.h cb49753448b25c3cd6498bfbbae3c8de *inst/include/Rcpp/sugar/functions/rep_len.h 5524927f94bb2c48f81cf050d5548e3d *inst/include/Rcpp/sugar/functions/rev.h e780762055db29b8108b020f605729a2 *inst/include/Rcpp/sugar/functions/rowSums.h e81e6ae804c78e169d9689df7843f20e *inst/include/Rcpp/sugar/functions/sample.h 25769a01dc9912295f5e9444b8369512 *inst/include/Rcpp/sugar/functions/sapply.h f964dafa72508e308f9ff057c577c49e *inst/include/Rcpp/sugar/functions/sd.h d85576fa8d0647c9241feb4ad3971bfa *inst/include/Rcpp/sugar/functions/self_match.h 4723c52a2e6ffcb5a99bbf5f120f0e1f *inst/include/Rcpp/sugar/functions/seq_along.h 29212159360b47adf9ee370544765db8 *inst/include/Rcpp/sugar/functions/setdiff.h d5a5b9a9b75d93f355534de01dc6ca07 *inst/include/Rcpp/sugar/functions/sign.h 148a1f4a4a0017f7c5520a4a44441fe8 *inst/include/Rcpp/sugar/functions/strings/collapse.h 6a4ca421d9353d551e3454c3c7ba6b00 *inst/include/Rcpp/sugar/functions/strings/strings.h 5f405963ec4bd5cbcc470285814ee796 *inst/include/Rcpp/sugar/functions/strings/trimws.h fa6996110472311d86217245a4817e28 *inst/include/Rcpp/sugar/functions/sum.h d098d6ad59c945dfe335b022eb19bd6c *inst/include/Rcpp/sugar/functions/table.h 6aece98287f5b416b1b9dde8258b7ba3 *inst/include/Rcpp/sugar/functions/tail.h 3714352196527f3eb1911d7dfeda0925 *inst/include/Rcpp/sugar/functions/unique.h 6af0ed03b22ab5376164eeca35d27830 *inst/include/Rcpp/sugar/functions/var.h a21e2d861c3e1641d451e8542ac90da7 *inst/include/Rcpp/sugar/functions/which_max.h cb63e9ae52933534b47e4b03b3345d10 *inst/include/Rcpp/sugar/functions/which_min.h 1f232e3aea101e0a7a967b292f5fee3e *inst/include/Rcpp/sugar/logical/SingleLogicalResult.h 633aaf9fd410363a0816ee14ea0756fe *inst/include/Rcpp/sugar/logical/and.h fa170788a69bc85fcb1ead3c8e3d8d61 *inst/include/Rcpp/sugar/logical/can_have_na.h ea316f6c93309fb814bcba060b4243c5 *inst/include/Rcpp/sugar/logical/is.h 349f08cf81f52ed760ecd4dedd472443 *inst/include/Rcpp/sugar/logical/logical.h c848c2c54466ce13e842fff36b33cbfe *inst/include/Rcpp/sugar/logical/not.h ceda7f41514004d0f41a0a25df616480 *inst/include/Rcpp/sugar/logical/or.h 16fbabf279bea866b7a9241084d582dc *inst/include/Rcpp/sugar/matrix/as_vector.h 22dce70c24a72d954c9c0ddb637a87af *inst/include/Rcpp/sugar/matrix/col.h 1efcfad1b72aac3ab68857be3a0578da *inst/include/Rcpp/sugar/matrix/diag.h 2ce9df0e2282b1780d168cdaec70e501 *inst/include/Rcpp/sugar/matrix/lower_tri.h ac84cad78d201a054f8d7df13a6b1353 *inst/include/Rcpp/sugar/matrix/matrix_functions.h 9d87e6df5f7cb6845b6073ae4c486f89 *inst/include/Rcpp/sugar/matrix/outer.h 5d698479a84a2e019271ca70556478eb *inst/include/Rcpp/sugar/matrix/row.h 115b6149b7f328f12440fd1e5a5a0300 *inst/include/Rcpp/sugar/matrix/tools.h 23f94c2d6cbd068312a949798b403467 *inst/include/Rcpp/sugar/matrix/upper_tri.h 30973622e9d3acef832c7e2578e0ddd0 *inst/include/Rcpp/sugar/nona/nona.h 278c96c59d33653b53db01862911a17d *inst/include/Rcpp/sugar/operators/Comparator.h 6c43390b2d47dd6b7d2bb7824d37061b *inst/include/Rcpp/sugar/operators/Comparator_With_One_Value.h c62f193c49b200ee28687469fb2e61c5 *inst/include/Rcpp/sugar/operators/divides.h dbc2f27e6693976f7e1d745db791b712 *inst/include/Rcpp/sugar/operators/logical_operators__Vector__Vector.h 631ba1c3a5983fa36aba958fbe0fac01 *inst/include/Rcpp/sugar/operators/logical_operators__Vector__primitive.h 57b8e523981ced17043df0a35db0503c *inst/include/Rcpp/sugar/operators/minus.h ce6f7cfa18cfcafb15ebd8eb8c45f802 *inst/include/Rcpp/sugar/operators/not.h da8a2c17103b00aeb0d205f76aaebf7d *inst/include/Rcpp/sugar/operators/operators.h 2e6171e8d4ed6c21710aa0758e7f0536 *inst/include/Rcpp/sugar/operators/plus.h d129eac323c93bb69d99b023eb05812d *inst/include/Rcpp/sugar/operators/r_binary_op.h 73722dc109290c63d68934f52637d27b *inst/include/Rcpp/sugar/operators/times.h 5f9acbfddd1c397b017cfd5691293bb4 *inst/include/Rcpp/sugar/operators/unary_minus.h c5e2abc0a4e70db676f6f85b207c6fed *inst/include/Rcpp/sugar/sets.h 813ff968a963e3058a58c469e070ef82 *inst/include/Rcpp/sugar/sugar.h 89a193bed15037ce566fefe07f049d4b *inst/include/Rcpp/sugar/sugar_forward.h b4c3ecdf94025da94e6dde6eeafe8a44 *inst/include/Rcpp/sugar/tools/iterator.h f01c3fd8fe059517e03062b7d8422407 *inst/include/Rcpp/sugar/undoRmath.h 894245a3f8d5c212ab9c808662c22160 *inst/include/Rcpp/traits/char_type.h d39c02a1033bce9b1193f12eee141171 *inst/include/Rcpp/traits/enable_if.h 4a72487b73047f686e868b4c4cb44382 *inst/include/Rcpp/traits/expands_to_logical.h 129c2e9c6e0a73fce5cebd72c14c2254 *inst/include/Rcpp/traits/get_na.h e20649d25657d2a949492331c7758b7c *inst/include/Rcpp/traits/has_iterator.h 235a43df43936d00128253ef7005915c *inst/include/Rcpp/traits/has_na.h 3cd036e8adc3672b90bf08504e9f7a76 *inst/include/Rcpp/traits/if_.h 746cce8ecad72e115ab693e10d174f20 *inst/include/Rcpp/traits/index_sequence.h f6618d0224159bfc48c1df1d83828d68 *inst/include/Rcpp/traits/init_type.h 569027e71fdb2bda19c8184a12d08762 *inst/include/Rcpp/traits/integral_constant.h 77534bb63952ddf18c96abc66b5cb2d7 *inst/include/Rcpp/traits/is_arithmetic.h 29571f5642930d175ef873140c776975 *inst/include/Rcpp/traits/is_bool.h 4fa497cea2410fb4e662b866663bc0ac *inst/include/Rcpp/traits/is_const.h abcb7e2b556b94d82a09a8849a1c1096 *inst/include/Rcpp/traits/is_convertible.h cd901317f51083b5a6d3f2414fe82607 *inst/include/Rcpp/traits/is_eigen_base.h 7bfb288fca1e46ed6b931500ad42a43d *inst/include/Rcpp/traits/is_finite.h b7587e1b4122a84038f7a5800b535e8e *inst/include/Rcpp/traits/is_infinite.h abd4686b93894a8a221f6da4f3bf74f0 *inst/include/Rcpp/traits/is_module_object.h d97fd982b65ea3d8efc6455b3b1e8102 *inst/include/Rcpp/traits/is_na.h 60122e02e5bb562e557db0c38e17f790 *inst/include/Rcpp/traits/is_nan.h b4d4b4ecdcc75f7004378d9a4c52c490 *inst/include/Rcpp/traits/is_pointer.h 74d6de2afc81c98a4e34fb368aea6a53 *inst/include/Rcpp/traits/is_primitive.h 2a7ce1cf1b5479b6453c7c28d346bcfa *inst/include/Rcpp/traits/is_reference.h 5e2acd97071b71e05d9b11a3f96387e5 *inst/include/Rcpp/traits/is_sugar_expression.h 28916414af7cdb5b5bf9673bffe3fed8 *inst/include/Rcpp/traits/is_trivial.h 2aa827ff4a611723f8fda7e58c9225d7 *inst/include/Rcpp/traits/is_wide_string.h d5851783d57175a54f0ce813d3accc01 *inst/include/Rcpp/traits/longlong.h d2d2d22f014dbda73370de85977494be *inst/include/Rcpp/traits/matrix_interface.h 4165bd63dd3b616e807d730a1909b1d6 *inst/include/Rcpp/traits/module_wrap_traits.h f53646c2a5f314823f237b3cf3968590 *inst/include/Rcpp/traits/named_object.h e9717cf30ad078a3722702d54d744b11 *inst/include/Rcpp/traits/num2type.h fda43f65172234cb8e672b725ff21dc3 *inst/include/Rcpp/traits/one_type.h 3ab68cc3b397346dde5c071d6b1dc2ca *inst/include/Rcpp/traits/r_sexptype_traits.h 5bc497b1de2c051a3fb5e68e2d9d429b *inst/include/Rcpp/traits/r_type_traits.h 2c55008e8515714263346d6c3cdeb35c *inst/include/Rcpp/traits/remove_const.h 0830e491fc6a03ab6c735a215fa70ee0 *inst/include/Rcpp/traits/remove_const_and_reference.h 49e7441fad045085e944a89c2b6d2f14 *inst/include/Rcpp/traits/remove_reference.h f97d07869949020279d1cef6ccb03abd *inst/include/Rcpp/traits/result_of.h 10df0fad7bfeca54513814e89fd28d60 *inst/include/Rcpp/traits/same_type.h 9091fcb005196d81ed41c6a89550e89a *inst/include/Rcpp/traits/storage_type.h 6ffcd9b3ae200cb9f82bf43df519f3a4 *inst/include/Rcpp/traits/traits.h 3d6fc7e388a23053d99a353535ae1275 *inst/include/Rcpp/traits/un_pointer.h 05cbea355adce5b3921828e263fbf87d *inst/include/Rcpp/traits/wrap_type_traits.h 2b15f8d9556718b58864deb05cba5afe *inst/include/Rcpp/unwindProtect.h 4f9f79e3346010125c9659ebd7ad34db *inst/include/Rcpp/utils/tinyformat.h dedbf46dfae724476eedb59622b6c0be *inst/include/Rcpp/utils/tinyformat/tinyformat.h 89a07678f678cfb48de4bd3d4420ea64 *inst/include/Rcpp/vector/00_forward_Vector.h 4fe970f8b2608fb97026142528d21518 *inst/include/Rcpp/vector/00_forward_proxy.h 411c3c52a0011d4fdd9392637172a97d *inst/include/Rcpp/vector/ChildVector.h d4c4878eede03e50c776afcf7836fc7a *inst/include/Rcpp/vector/DimNameProxy.h 47f675c64171ec8e4072036d972aad4f *inst/include/Rcpp/vector/LazyVector.h 020c11693ef729783f6ce9c70e0b3a86 *inst/include/Rcpp/vector/ListOf.h bd73507d75d9178924fc00b70b1f6f55 *inst/include/Rcpp/vector/Matrix.h a6c5cdec475185adc2b61152bc9379de *inst/include/Rcpp/vector/MatrixBase.h fea18a15ac16177399b74b3aba1e8d3c *inst/include/Rcpp/vector/MatrixColumn.h 410f8a433cea0b58017e10edcdd520d7 *inst/include/Rcpp/vector/MatrixRow.h dabec153dcf826b040e592e1c60fc37f *inst/include/Rcpp/vector/RangeIndexer.h 31372a9f3d172f4e9df62c559ff1ad66 *inst/include/Rcpp/vector/SubMatrix.h 282fcdbb1720184e46ec0224de57a500 *inst/include/Rcpp/vector/Subsetter.h 6c2b43019efcaeefd80c11ad9941c26e *inst/include/Rcpp/vector/Vector.h 99dc1e7a939e6f11ec33588c382517cd *inst/include/Rcpp/vector/VectorBase.h 0c3ff20020b3ff5248826ff796752946 *inst/include/Rcpp/vector/const_generic_proxy.h c76a4bfbaf1c61171799f258f6393ea4 *inst/include/Rcpp/vector/const_string_proxy.h 82421a927c857b34a028774399518289 *inst/include/Rcpp/vector/converter.h fe60090372703d0fd887c32e45f944a3 *inst/include/Rcpp/vector/generic_proxy.h 026adf34a827731798dbf3b6c3159421 *inst/include/Rcpp/vector/instantiation.h 8bfaa9746b1126a74324cab8b5170439 *inst/include/Rcpp/vector/no_init.h 84dbe92383dc935b5576814fd6937418 *inst/include/Rcpp/vector/proxy.h 86af06f9720947eaa083c4fa9bc11289 *inst/include/Rcpp/vector/string_proxy.h 07c9204ef548fd66d5e42ff84cf1da09 *inst/include/Rcpp/vector/swap.h 0467559689b4d5d3eb6504a8a90de7d1 *inst/include/Rcpp/vector/traits.h b53a80ae2aa1de12e8bd0fbff69c904b *inst/include/Rcpp/vector/vector_from_string.h 70abd583d3fdc0d2d515aa293fd052b0 *inst/include/RcppCommon.h 83051c918c676565c50377280f3d80a9 *inst/include/doxygen/Examples.h fc570e7927219c2ed9bdb13ca05134d9 *inst/prompt/module.Rd e78047bdda3db5af33456370e65a98d0 *inst/skeleton/Num.cpp ceccb01282e3e574aa78fec0102df6da *inst/skeleton/Rcpp_modules_examples.Rd 519be498e2f048a2750863a147964737 *inst/skeleton/manual-page-stub.Rd 411d02aaf3c409722bf6a39a4a4ffa90 *inst/skeleton/rcpp_hello_world.R 736db59264020d28cb1870868cfa916b *inst/skeleton/rcpp_hello_world.Rd 329380236bdae3a32e349531c0ee2d54 *inst/skeleton/rcpp_hello_world.cpp 2c1227dd8097d9fca8040f3d29f59633 *inst/skeleton/rcpp_hello_world.h 0da63b615f705aa9dfa2e91b15a0ec3a *inst/skeleton/rcpp_hello_world_attributes.cpp 9cbc66836028cfab4df53c8e1c4ccbf5 *inst/skeleton/rcpp_module.cpp 87e64fbfae8826697bdfd1020d2b2641 *inst/skeleton/stdVector.cpp 32a99eb2d472350734277940a2e2a1bb *inst/skeleton/zzz.R 7fb9967c5d48052f8dc6167b1ee619d3 *inst/tinytest/bin/amd64/r-cran-testrcpppackage_0.1.0-1_amd64.deb 56b8f712e86e0113715ead494065346e *inst/tinytest/bin/i386/r-cran-testrcpppackage_0.1.0-1_i386.deb 08aa53008c9d0b88446c534cbf91a165 *inst/tinytest/cpp/DataFrame.cpp caded512e0425b790380edddc00967f4 *inst/tinytest/cpp/Environment.cpp 378c5ca02f76666d28abc7f0f0bbb82a *inst/tinytest/cpp/Exceptions_nocall.cpp b81bf018da788eadaf8f101144e1841b *inst/tinytest/cpp/Function.cpp ca3ce6364c578acf0542617cb09505d1 *inst/tinytest/cpp/InternalFunction.cpp a9b57d92bffc646ac6f074c98c81db6e *inst/tinytest/cpp/InternalFunctionCPP11.cpp 62bd3687f6fae5f022287932343b34b0 *inst/tinytest/cpp/ListOf.cpp 4592f91b2ff1a6cea2125115ce8f75e4 *inst/tinytest/cpp/Matrix.cpp c171e3f43d4293bcfb4341cdc1c2bd29 *inst/tinytest/cpp/Module.cpp ae344d14e4a2711ff2462d02ac0baa78 *inst/tinytest/cpp/RObject.cpp 83bb109ce6845fbdb08a732527556ff1 *inst/tinytest/cpp/Reference.cpp 431733375a744f92c308b95f9d402f42 *inst/tinytest/cpp/S4.cpp 239bf07c23051fc0318de2f80e95385c *inst/tinytest/cpp/String.cpp bf2f556311ef8884928d6db63fccf112 *inst/tinytest/cpp/Subset.cpp 8f85f4c4b8fd6f3456224ce8c7812ca5 *inst/tinytest/cpp/Vector.cpp 2834dfe1270c0e1cc24aba14721c09da *inst/tinytest/cpp/VectorOld.cpp aa3497bfcf9b9d14f35e9558a19fc1b4 *inst/tinytest/cpp/XPtr.cpp d19479e6aab83b12124389782f4bf739 *inst/tinytest/cpp/algorithm.cpp 219e1d71106fb3bb1253ce60affbb398 *inst/tinytest/cpp/as.cpp 12c4f9c7f7323095f118fc9c11ace5da *inst/tinytest/cpp/attributes.cpp 7dd5700e27b702cba4cede554cdb65ba *inst/tinytest/cpp/attributes.hpp fdf3557dcb7e7fbaa37afcbfaba4b088 *inst/tinytest/cpp/coerce.cpp b126529d2903ea6eb82caa799e1162c3 *inst/tinytest/cpp/dates.cpp 9c81ac1fb25a970b84e543aef34d6cde *inst/tinytest/cpp/dispatch.cpp 385abbb997641176de511ef784b87b45 *inst/tinytest/cpp/embeddedR.cpp 3142234408f0d17bb7edd2238f6beb78 *inst/tinytest/cpp/embeddedR2.cpp 4e6b3693278fd9c33e5fc7724e268fa8 *inst/tinytest/cpp/exceptions.cpp 39b2883e8175beaaa6a6430a71378398 *inst/tinytest/cpp/language.cpp cdd742bd240621d7e33ecf4818691e66 *inst/tinytest/cpp/misc.cpp 31eb0032506e988316357913ffc28dee *inst/tinytest/cpp/modref.cpp 705309cd5376196a486d14c73f76ba29 *inst/tinytest/cpp/na.cpp 05a686ca3070780f8dcb1a1de321797e *inst/tinytest/cpp/rcppversion.cpp 511f2da216d7480c3bd4b50d48983799 *inst/tinytest/cpp/rmath.cpp c7bb688561ccc8a9039413782640be7e *inst/tinytest/cpp/stack.cpp 37f1770bce35bf5f2c6a523d42e1ea75 *inst/tinytest/cpp/stats.cpp be7f344d4bd516f6d69d7107dfb88659 *inst/tinytest/cpp/sugar.cpp 956e39fb6eb566987b3130a85b4da3c6 *inst/tinytest/cpp/support.cpp c8a357d67dd56b672cd7616e7bbbf520 *inst/tinytest/cpp/table.cpp ba3dad0e41bbd4c0b1a74f550e8247f2 *inst/tinytest/cpp/wrap.cpp 2db3a044a68e8cf5d76a9a1473dee526 *inst/tinytest/cpp/wstring.cpp 54073056db0ba60cf0b1707c4b6db85c *inst/tinytest/src/r-cran-testrcpppackage_0.1.0-1.diff.gz 1d2156181f8816c31306d77f4760697c *inst/tinytest/src/r-cran-testrcpppackage_0.1.0-1.dsc 18c540b0b12feac586f57f2411ed378e *inst/tinytest/src/r-cran-testrcpppackage_0.1.0-1_amd64.changes 7fb9967c5d48052f8dc6167b1ee619d3 *inst/tinytest/src/r-cran-testrcpppackage_0.1.0-1_amd64.deb 84ddc3de28ce0c458d6f19f91bc1710d *inst/tinytest/src/r-cran-testrcpppackage_0.1.0-1_i386.changes 56b8f712e86e0113715ead494065346e *inst/tinytest/src/r-cran-testrcpppackage_0.1.0-1_i386.deb 7263661801b44d075a3345ff4a1faffa *inst/tinytest/testRcppAttributePackage/DESCRIPTION f06e063ca806e7fca22eb7482b2af2d1 *inst/tinytest/testRcppAttributePackage/NAMESPACE c694664176af9bd21deb0248fdddbe7e *inst/tinytest/testRcppAttributePackage/src/rcpp_test.cpp 1a5f53d4b6ba9e3b98fe1eec48a5eb9b *inst/tinytest/testRcppClass/DESCRIPTION f926317ac3486e08433a0fbdf3153efe *inst/tinytest/testRcppClass/NAMESPACE 03f336c9faea79524a608b9dd1d22a92 *inst/tinytest/testRcppClass/R/load.R ec8250809d340e191fbf0b04c344fe00 *inst/tinytest/testRcppClass/R/rcpp_hello_world.R 60b39ca81dc918e7fe8a0c4737079396 *inst/tinytest/testRcppClass/man/Rcpp_class_examples.Rd 736db59264020d28cb1870868cfa916b *inst/tinytest/testRcppClass/man/rcpp_hello_world.Rd fe2b352c0aa449acae8ae667b82aebb9 *inst/tinytest/testRcppClass/man/testRcppClass-package.Rd 5b71e6b5e64bc8418e6b9adf26c09cc8 *inst/tinytest/testRcppClass/src/Num.cpp 45a1446cd51cdbaf9b5833141da93b42 *inst/tinytest/testRcppClass/src/init.c 5e17501af84c7deb94e69c8c48abc6dc *inst/tinytest/testRcppClass/src/rcpp_hello_world.cpp 5c03d3d1426cf6886a0f6f6c412bb456 *inst/tinytest/testRcppClass/src/rcpp_hello_world.h 0abb0d55f1edc5ddb19ca87ed5c370f1 *inst/tinytest/testRcppClass/src/rcpp_module.cpp 3326bf4e52a561d08f9aa1370333222b *inst/tinytest/testRcppClass/src/stdVector.cpp f369e8eabd84792764737850dc9cf599 *inst/tinytest/testRcppClass/tests/classes.R 55a2cc182d8bdab7df8367bb2c9ae4f1 *inst/tinytest/testRcppInterfaceExporter/DESCRIPTION caccac1441b38bc3b9d91f9e189b1d68 *inst/tinytest/testRcppInterfaceExporter/NAMESPACE 052892f806ecd5542358fd7ae3bb58d9 *inst/tinytest/testRcppInterfaceExporter/R/RcppExports.R f9c87d177bece784bca40b2294329568 *inst/tinytest/testRcppInterfaceExporter/R/exporter.R cdb9489e21b94623f0f1e7d4af8ec157 *inst/tinytest/testRcppInterfaceExporter/inst/include/testRcppInterfaceExporter.h 1cbd306e27aed3fcb7b5fbc34d42b39d *inst/tinytest/testRcppInterfaceExporter/inst/include/testRcppInterfaceExporter_RcppExports.h ae4a8309d7807432ae8e1b507132acb3 *inst/tinytest/testRcppInterfaceExporter/src/RcppExports.cpp 0805a3830147dedf4a37a91f9ad66a4d *inst/tinytest/testRcppInterfaceExporter/src/exporter.cpp 53dfff77ccb443103f44fb52eea3187b *inst/tinytest/testRcppInterfaceExporter/src/unwound.h d4ceb27b690d25e3bf791340e1082ede *inst/tinytest/testRcppInterfaceUser/DESCRIPTION 98aef5f5fafb61bfb9c2e3687ea7cd74 *inst/tinytest/testRcppInterfaceUser/NAMESPACE a7632eb2a8e768dc6305ac25e4d1c666 *inst/tinytest/testRcppInterfaceUser/R/user.R d41d8cd98f00b204e9800998ecf8427e *inst/tinytest/testRcppInterfaceUser/src/config.h a195376bccd32edf2ec234585cdd19f1 *inst/tinytest/testRcppInterfaceUser/src/unwound.h 44a229bee1d2fd44365e82d64aff2e23 *inst/tinytest/testRcppInterfaceUser/src/user.cpp c0e76426243757398223031c7c4c46b0 *inst/tinytest/testRcppInterfaceUser/tests/tests.R fb4466d7edc9f03ab23dc0d557e49145 *inst/tinytest/testRcppModule/DESCRIPTION add4aaed2d306765ce493922461f3a55 *inst/tinytest/testRcppModule/NAMESPACE bd40b50ea592b9c3c0cfe79de3f6eb1d *inst/tinytest/testRcppModule/R/rcpp_hello_world.R 81dadeb632a55b8ce2ad71cf37d2c1ce *inst/tinytest/testRcppModule/R/zzz.R 0371f14c3812cd1a564488ca96b11ca2 *inst/tinytest/testRcppModule/man/Rcpp_modules_examples.Rd 2deeefcb97dc4727ba42f47594ad3be8 *inst/tinytest/testRcppModule/man/rcpp_hello_world.Rd 079d3f03a16107fd9ef8fe40b6175a9e *inst/tinytest/testRcppModule/man/testRcppModule-package.Rd 1999f8a3ad18e75c899c980902146d80 *inst/tinytest/testRcppModule/src/Num.cpp d1c8b83cdba82518ad248f4612e22802 *inst/tinytest/testRcppModule/src/init.c 5e17501af84c7deb94e69c8c48abc6dc *inst/tinytest/testRcppModule/src/rcpp_hello_world.cpp 5c03d3d1426cf6886a0f6f6c412bb456 *inst/tinytest/testRcppModule/src/rcpp_hello_world.h 30f4072a33ca51c385cba14d8c41e7fc *inst/tinytest/testRcppModule/src/rcpp_module.cpp 974ce7cbf35e70ee51ee2f338d1a47ed *inst/tinytest/testRcppModule/src/stdVector.cpp af70d56c91a91ed55fc4da6c1f8b7ca5 *inst/tinytest/testRcppModule/tests/modules.R c83d5e7e43bdf9d149e62f8717facf73 *inst/tinytest/testRcppPackage/DESCRIPTION f46e0bbc90d649eaed05e1a1f953645d *inst/tinytest/testRcppPackage/NAMESPACE 86700d82a2395c2d7c34f21ffb7dcaa4 *inst/tinytest/testRcppPackage/R/rcpp_hello_world.R 8a4012c68853de0e7ddd4ec8dd3ef9da *inst/tinytest/testRcppPackage/man/testRcppPackage-package.Rd c980624db12b714ac2ec6bb7740c3030 *inst/tinytest/testRcppPackage/src/rcpp_hello_world.cpp 3fc7d87c655d7c58790b18dadbf17462 *inst/tinytest/testRcppPackage/src/rcpp_hello_world.h d4d4b13e8e48f3d2dff079fa0cae4db2 *inst/tinytest/test_algorithm.R d43f4463ec22a001f10f70e5968b741e *inst/tinytest/test_as.R 300fea4f491bc883fc8cf14cbf415e19 *inst/tinytest/test_attribute_package.R 6fafd86f9d6036ddeec256f6520940fb *inst/tinytest/test_attributes.R 645c61b59b44cf4a7d0a8935c94f30b8 *inst/tinytest/test_binary_package.R 5c61d77db502333de43ef63ab5542947 *inst/tinytest/test_client_package.R 6972e7398a0316ee9378d0235a98193e *inst/tinytest/test_coerce.R f848412bd201674571166f59141ead32 *inst/tinytest/test_dataframe.R f94f4ab34dc3632988410142b99f4774 *inst/tinytest/test_date.R f7020772ec2f52bca37aa52f328e8a4a *inst/tinytest/test_dispatch.R 37c878dba3a8c6ee4a512d8ae49d0510 *inst/tinytest/test_embedded_r.R 0bfe887104fa049afec792eb9e1d38ee *inst/tinytest/test_environments.R 8d0384378c1530ae2651ed30077c3849 *inst/tinytest/test_exceptions.R d6b632cbcf1d0d2a809789a850393f04 *inst/tinytest/test_exceptions_nocall.R fb2c4e13c8c9b275e0dedd8b115032fb *inst/tinytest/test_expose_class.R 2659ca40245f5942186d612cc050290e *inst/tinytest/test_function.R a979bf54492367431865c051efc150ca *inst/tinytest/test_global_rostream.R f98648470bc21b3fdbb3176e90f45129 *inst/tinytest/test_interface.R 9fcdc77199f2adc16ddaab74ede5c15f *inst/tinytest/test_internal_function.R b1ec64c8809b5017cc83db4e63bb23e7 *inst/tinytest/test_internal_function_cpp11.R 9be9c45f22b52977dfe322b18090e25a *inst/tinytest/test_language.R f3df4a9477700c9773503b0d72cb9f38 *inst/tinytest/test_listof.R 642a072d490f3adf9ad7ccdc0b583c8c *inst/tinytest/test_matrix.R d820e9d99c8361bb9bcdff1df8748415 *inst/tinytest/test_misc.R 3b74e9c0f70c24ec455b8325bd575ad1 *inst/tinytest/test_modref.R c4b1132390df294c71724513bbcb329c *inst/tinytest/test_module.R 4f1cb95ff3231714571275b5f60c21cc *inst/tinytest/test_module_client_package.R 8fa4cb9335b9239ffce495337cbbe4b4 *inst/tinytest/test_na.R 350f50b10fda4680f6416833c8459113 *inst/tinytest/test_packageversion.R 50ac8801171cadb6ce7535680e3d7b4b *inst/tinytest/test_quickanddirty.R a0804153c84d5bc78e3a9b3568510409 *inst/tinytest/test_rcpp_package_skeleton.R 12824f997493028fb75fb416fb4899bd *inst/tinytest/test_reference.R bf9528a41d909d19eda20947fe73d042 *inst/tinytest/test_rmath.R 23cccaef77d1c7188a384e5e6400505e *inst/tinytest/test_robject.R ec2b5b9cab31cafb4b2cbdef00cd89e3 *inst/tinytest/test_s4.R 0bd9a05a2ebcfc708aed3911d21a6dc7 *inst/tinytest/test_stack.R 5f3c73c9a10dd378a82d16ed7224f541 *inst/tinytest/test_stats.R d164383dd85501e99acb936ee66210a7 *inst/tinytest/test_string.R 3d9e890abd6a080315b84b99d6ed3843 *inst/tinytest/test_subset.R 3e64eea81c20454b9ac84710dc817e86 *inst/tinytest/test_sugar.R eea3406aec4fe65cae71db5baa9a0b51 *inst/tinytest/test_sugar_var.R 46dcee8e76f26d5103efa5ad09441892 *inst/tinytest/test_support.R 9a97f20a6edeb3f2d7184ed909f70958 *inst/tinytest/test_system.R 44d3b675e624e692463ae9e9fe2776d0 *inst/tinytest/test_table.R d06e982e043a66d6dc372dd98fc7c36e *inst/tinytest/test_vector.R 6a724a81b5a9281e7777b16ada40ac39 *inst/tinytest/test_vector_old.R 6867abc5b68b7caa2b5920f67b4b6990 *inst/tinytest/test_wrap.R daae893ce0886eccb852f34104884837 *inst/tinytest/test_wstring.R 5a3f1319ed569fd1f541dba428f9b7b7 *inst/tinytest/test_xptr.R 8e5b008afb149e5d2a53db37ece02775 *man/CppClass-class.Rd 0014f801734709bb479effdecc7b4718 *man/CppConstructor-class.Rd 0f6f6dd743da70147b0c2cac5c912ecb *man/CppField-class.Rd 7bd877824ff53185640a667392af41b2 *man/CppFunction-class.Rd 14c82eb310974beb4b904dcdc1617433 *man/CppObject-class.Rd 66e02f05536e2310d9e803ad3c874db7 *man/CppOverloadedMethods-class.Rd 4c34de06399c41644dfc380bb2f05a8d *man/DollarNames-methods.Rd 3088b043e8aab6cb3309701de2a8402f *man/Module-class.Rd 6161ec45d82f546757f7d02d1545675a *man/Module.Rd 42b39f5fc4290684199188c80a58ff9a *man/Rcpp-deprecated.Rd 2d49a16c0b7aae09482f3249dd93b2f1 *man/Rcpp-internal.Rd d6b6c655ad4be529d1787a5594d6aacb *man/Rcpp-package.Rd a11896a4fe6e4ae953561bce991f54c4 *man/Rcpp.package.skeleton.Rd 5e22a0887ef6458d266f5a3ba7388ddc *man/Rcpp.plugin.maker.Rd 8c9df710945f7e4367c67b98c7172e67 *man/RcppLdFlags.Rd 277c9602f9273954b91ece7873667d11 *man/RcppUnitTests.Rd cdfd54981ce589dcfaf30019dfa6b95b *man/compileAttributes.Rd 6d563c1b68971237af02edcab85370a8 *man/compilerCheck.Rd e27c53a090cd857b3b53815841709f81 *man/cppFunction.Rd 01489ee8b81490b3516fee28615d461b *man/demangle.Rd 2c0fc00c864631092fe37dfc95b8a21d *man/dependsAttribute.Rd 2fd5b7f2732444fd67955d8856bc9ba5 *man/evalCpp.Rd bef1d268eb1652a7cc3b15d5f691b6e8 *man/exportAttribute.Rd 01cbef50e7820a40e65d410ab4ce6d2e *man/exposeClass.Rd 236811309af8821f7e23dfc16f9a8d41 *man/formals.Rd ee26bc930a1bff02c8664c0e51bd46da *man/getRcppVersion.Rd 708280bfbc3f6dc6d8cf76fe2a2afd0a *man/interfacesAttribute.Rd 25e1ffdc750d2f2778b38919c098c9cc *man/loadModule.Rd 92c309f1d37426d2e2b4737f99bd75af *man/loadRcppModules-deprecated.Rd dd3b9b7596f51706f291dce032bfdb5c *man/pluginsAttribute.Rd adf9afe6c945bc84505583d9e07bad49 *man/populate.Rd 8e8411de016d9bc94dc1d9585e660d34 *man/registerPlugin.Rd ed0b08b15ead789f84e83ba46985a702 *man/setRcppClass.Rd 53e0cd847f1775e36539946d8112cf69 *man/sourceCpp.Rd 73e9e048a7c5003477f67089bf5d609c *src/Makevars 73e9e048a7c5003477f67089bf5d609c *src/Makevars.win f8fa954684a60b20677fbf99db513037 *src/api.cpp d62f9167a825202b79726fe17358fdbf *src/attributes.cpp 1948212c310983cc9e029ee22b1b5f34 *src/barrier.cpp 85a8a53c535e4c986f02c427b5e7b85e *src/date.cpp eef4c2f0e1abd787b8fd62d289ed5961 *src/internal.h 4eeaedc1e555103025f1feeaee299538 *src/module.cpp 545982e58b067742919490cc23d62905 *src/rcpp_init.cpp 37a2a0606ac4ed8ce8fbc9e71287e715 *tests/tinytest.R 2baf167ce452976b0fcb43e44f566af7 *vignettes/Rcpp-FAQ.Rnw 887250b7e0675b4a70d6eb1a4689080c *vignettes/Rcpp-attributes.Rnw 37f50a136d1350e8e864c9265cc88ad8 *vignettes/Rcpp-extending.Rnw 90eade7bfffa82f250510759bc9a7f36 *vignettes/Rcpp-introduction.Rnw e6cf1d12ce4e3a2fed6eddf6290d393f *vignettes/Rcpp-jss-2011.Rnw 4524c2761e07e170f681181c2e62eb05 *vignettes/Rcpp-libraries.Rnw a96bcf4153b795bff19ddc36a17ca435 *vignettes/Rcpp-modules.Rnw 835d0e2dd365e4621663bd03ae219758 *vignettes/Rcpp-package.Rnw d76adfdc4e68c69c5ff632e234db6a85 *vignettes/Rcpp-quickref.Rnw 929a1aad762b7354b6875a35093ec477 *vignettes/Rcpp-sugar.Rnw a0bb4d5acff1169d07be11ae94fad33f *vignettes/pdf/Rcpp-FAQ.pdf eb8a43fbcf8d10175af886cdd147201a *vignettes/pdf/Rcpp-attributes.pdf ae4f825453be9cfa046bdefc7c33b6be *vignettes/pdf/Rcpp-extending.pdf 28a785da8102bbfd200f9f0afa62e137 *vignettes/pdf/Rcpp-introduction.pdf f41653d4de0bae3c0b00fe23cd734063 *vignettes/pdf/Rcpp-jss-2011.pdf 7a4980cce1a8c9511f5f2f52c7443e8a *vignettes/pdf/Rcpp-libraries.pdf 234f1c31ed447f454079b82625ba6b9e *vignettes/pdf/Rcpp-modules.pdf 63548ac9e03010cbfae87988fabcf453 *vignettes/pdf/Rcpp-package.pdf 72e98fba37b7d7950a5d7ee79a91877e *vignettes/pdf/Rcpp-quickref.pdf e7168e43251680db04d6a32aa85c99d1 *vignettes/pdf/Rcpp-sugar.pdf Rcpp/R/0000755000176200001440000000000014711515066011365 5ustar liggesusersRcpp/R/RcppClass.R0000644000176200001440000001470514000602755013402 0ustar liggesusers# Copyright (C) 2010 - 2021 John Chambers, Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . setRcppClass <- function(Class, CppClass, module, fields = list(), contains = character(), methods = list(), saveAs = Class, where = topenv(parent.frame()), ...) { myCall <- match.call() myCall[[1]] <- quote(Rcpp::loadRcppClass) if (!missing(module) && moduleIsLoaded(module, where)) # eval now eval.parent(myCall) # #nocov else { f <- function(NS)NULL myCall$where = as.name("NS") body(f, where) <- myCall setLoadAction(f, where = where) } } loadRcppClass <- function(Class, CppClass = Class, module = paste0("class_",Class), fields = character(), contains = character(), methods = list(), saveAs = Class, where = topenv(parent.frame()), ...) { if(isBotchedSession()) { value <- setRefClass(Class, fields = fields, methods = methods, contains = contains, where = where, ...) # kludge -- see loadModule.R #nocov start if(is.character(saveAs) && length(saveAs) == 1) assign(saveAs, value, envir = where) return(value) # #nocov end } mod <- loadModule(module, NULL, env = where, loadNow = TRUE) storage <- get("storage", envir = as.environment(mod)) if(exists(Class, envir = storage, inherits = FALSE)) { cppclassinfo <- get(Class, envir = storage) if(!is(cppclassinfo, "C++Class")) stop(gettextf("Object \"%s\" in module \"%s\" is not a C++ class description", Class, module)) # #nocov } else stop(gettextf("No object \"%s\" in module \"%s\"", Class, module)) # #nocov allmethods <- .makeCppMethods(methods, cppclassinfo, where) allfields <- .makeCppFields(fields, cppclassinfo, where) value <- setRefClass(Class, fields = allfields, contains = c(contains, "RcppClass"), methods = allmethods, where=where, ...) ## declare the fields and methods to shut up codetools ## the R level fields and methods were declared by setRefClass ## but we declare them again; globalVariables() applies unique() if(exists("globalVariables", envir = asNamespace("utils"))) # >=2.15.1 utils::globalVariables(c(names(allfields), names(allmethods)), where) if(is.character(saveAs) && length(saveAs) == 1) assign(saveAs, value, envir = where) value } .makeCppMethods <- function(methods, cppclassinfo, env) { cppMethods <- names(cppclassinfo@methods) newMethods <- names(methods) for(what in cppMethods[! cppMethods %in% newMethods]) methods[[what]] <- eval(substitute( function(...) .CppObject$WHAT(...), list(WHAT = as.name(what))), env) methods } .makeFieldsList <- function(fields) { fnames <- allNames(fields) any_s <- !nzchar(fnames) fnames[any_s] <- fields[any_s] fields[any_s] <- "ANY" fields <- as.list(fields) names(fields) <- fnames fields } .makeCppFields <- function(fields, cppclassinfo, env) { if(is.character(fields)) fields <- .makeFieldsList(fields) cppFields <- names(cppclassinfo@fields) newFields <- names(fields) for(what in cppFields[! cppFields %in% newFields]) fields[[what]] <- eval(substitute( function(value) if(missing(value)) .CppObject$WHAT else .CppObject$WHAT <- value, list(WHAT = as.name(what))), env) ## insert the generator and cppclass def as constants cppgenerator <- getRefClass(cppclassinfo) fields[[".CppClassDef"]] <- eval(substitute( function(value) if(missing(value)) DEF else stop("this field is a constant"), list(DEF = cppclassinfo)), env) fields[[".CppGenerator"]] <- eval(substitute( function(value) if(missing(value)) DEF else stop("this field is a constant"), list(DEF = cppgenerator)), env) fields } .RcppClass <- setRefClass("RcppClass", methods = list( initialize = function(...){ args <- list(...) argNames <- allNames(args) cppArgs <- !nzchar(argNames) .CppObject <<- do.call(.CppGenerator$new, args[cppArgs]) for(i in seq_along(args)[!cppArgs]) field(argNames[[i]], args[[i]]) # #nocov } ), fields = list( .CppObject = "C++Object" ), contains = "VIRTUAL" ) .RcppClass$methods(show = function () { cat("Rcpp class object of class ", classLabel(class(.self)), # #nocov start "\n", sep = "") fields <- names(.refClassDef@fieldClasses) if(".CppObject" %in% fields) { cat("\n") methods::show(field(".CppObject")) cat("\n") } fields <- fields[ ! fields %in% c(".CppObject", ".CppClassDef", ".CppGenerator")] for (fi in fields) { cat("Field \"", fi, "\":\n", sep = "") methods::show(field(fi)) } }, objectPointer = function() .CppObject$.pointer # #nocov end ) Rcpp/R/RcppLdpath.R0000644000176200001440000000730414363770455013565 0ustar liggesusers# Copyright (C) 2010 - 2021 Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . ## make sure system.file returns an absolute path Rcpp.system.file <- function(...){ tools::file_path_as_absolute( base::system.file( ..., package = "Rcpp" ) ) } ## quote path if non-standard characters are used Rcpp.quoteNonStandard <- function(path) { ## On unix, check if path has only characters that do not need quoting noquote <- .Platform$OS.type == "unix" && grepl("^[[:alnum:]/._~+@%-]*$", path) ## If no quoting needed return unchanged else quote input if (noquote) path else shQuote(path) } ## Use R's internal knowledge of path settings to find the lib/ directory ## plus optinally an arch-specific directory on system building multi-arch RcppLdPath <- function() { #.Deprecated(msg=paste("This function is now deprecated as it has not", # "been needed since 2013.")) "" } ## Provide linker flags -- i.e. -L/path/to/libRcpp -- as well as an ## optional rpath call needed to tell the Linux dynamic linker about the ## location. This is not needed on OS X where we encode this as library ## built time (see src/Makevars) or Windows where we use a static library ## Updated Jan 2010: We now default to static linking but allow the use ## of rpath on Linux if static==FALSE has been chosen ## Note that this is probably being called from LdFlags() ## Updated Nov 2013: We no longer build a library. This should be deprecated. RcppLdFlags <- function() { #.Deprecated(msg=paste("This function is now deprecated as it has not", # "been needed since 2013.")) "" } # indicates if Rcpp was compiled with GCC >= 4.3 canUseCXX0X <- function() { TRUE } # .Call( "canUseCXX0X", PACKAGE = "Rcpp" ) ## Provide compiler flags -- i.e. -I/path/to/Rcpp.h RcppCxxFlags <- function(cxx0x=FALSE) { path <- Rcpp.system.file( "include" ) if (.Platform$OS.type=="windows") { path <- asBuildPath(path) # #nocov } paste0('-I', Rcpp.quoteNonStandard(path)) } ## Shorter names, and call cat() directly ## CxxFlags defaults to no using c++0x extensions are these are considered non-portable CxxFlags <- function(cxx0x=FALSE) { #.Deprecated(msg=paste("This function is now deprecated as R uses minimally", # "viable compilers om all platforme.")) cat(RcppCxxFlags(cxx0x=cxx0x)) # #nocov } ## LdFlags defaults to static linking on the non-Linux platforms Windows and OS X LdFlags <- function() { cat(RcppLdFlags()) } # capabilities RcppCapabilities <- capabilities <- function() .Call( rcpp_capabilities ) # compile, load and call the cxx0x.c script to identify whether # the compiler is GCC >= 4.3 RcppCxx0xFlags <- function() { #.Deprecated(msg=paste("This function is now deprecated as R uses minimally", # "viable compilers om all platforme.")) script <- Rcpp.system.file( "discovery", "cxx0x.R" ) # #nocov start flag <- capture.output( source( script ) ) flag } Cxx0xFlags <- function() { cat(RcppCxx0xFlags()) # #nocov end } Rcpp/R/Attributes.R0000644000176200001440000013710714625104621013642 0ustar liggesusers # Copyright (C) 2012 - 2022 JJ Allaire, Dirk Eddelbuettel and Romain Francois # Copyright (C) 2023 - 2024 JJ Allaire, Dirk Eddelbuettel, Romain Francois and Iñaki Ucar # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . # Source C++ code from a file sourceCpp <- function(file = "", code = NULL, env = globalenv(), embeddedR = TRUE, rebuild = FALSE, cacheDir = getOption("rcpp.cache.dir", tempdir()), cleanupCacheDir = FALSE, showOutput = verbose, verbose = getOption("verbose"), dryRun = FALSE, windowsDebugDLL = FALSE, echo = TRUE) { # use an architecture/version specific subdirectory of the cacheDir # (since cached dynlibs can now perist across sessions we need to be # sure to invalidate them when R or Rcpp versions change) cacheDir <- path.expand(cacheDir) cacheDir <- .sourceCppPlatformCacheDir(cacheDir) cacheDir <- normalizePath(cacheDir) # resolve code into a file if necessary. also track the working # directory to source the R embedded code chunk within if (!missing(code)) { rWorkingDir <- getwd() file <- tempfile(fileext = ".cpp", tmpdir = cacheDir) con <- file(file, open = "w") writeLines(code, con) close(con) } else { rWorkingDir <- normalizePath(dirname(file)) } # resolve the file path file <- normalizePath(file, winslash = "/") # error if the file extension isn't one supported by R CMD SHLIB if (! tools::file_ext(file) %in% c("cc", "cpp")) { # #nocov start stop("The filename '", basename(file), "' does not have an ", "extension of .cc or .cpp so cannot be compiled.") } # #nocov end # validate that there are no spaces in the path on windows if (.Platform$OS.type == "windows") { # #nocov start if (grepl(' ', basename(file), fixed=TRUE)) { stop("The filename '", basename(file), "' contains spaces. This ", "is not permitted.") } } else { if (windowsDebugDLL) { if (verbose) { message("The 'windowsDebugDLL' toggle is ignored on ", "non-Windows platforms.") } windowsDebugDLL <- FALSE # now we do not need to deal with OS choice below } # #nocov end } # get the context (does code generation as necessary) context <- .Call("sourceCppContext", PACKAGE="Rcpp", file, code, rebuild, cacheDir, .Platform) # perform a build if necessary if (context$buildRequired || rebuild) { # print output for verbose mode if (verbose) .printVerboseOutput(context) # #nocov # variables used to hold completed state (passed to completed hook) succeeded <- FALSE output <- NULL # build dependency list depends <- .getSourceCppDependencies(context$depends, file) # validate packages (error if package not found) .validatePackages(depends, context$cppSourceFilename) # temporarily modify environment for the build envRestore <- .setupBuildEnvironment(depends, context$plugins, file) # temporarily setwd to build directory cwd <- getwd() setwd(context$buildDirectory) # call the onBuild hook. note that this hook should always be called # after .setupBuildEnvironment so subscribers are able to examine # the build environment fromCode <- !missing(code) if (!.callBuildHook(context$cppSourcePath, fromCode, showOutput)) { .restoreEnvironment(envRestore) # #nocov start setwd(cwd) return (invisible(NULL)) } # #nocov end # on.exit handler calls hook and restores environment and working dir on.exit({ if (!succeeded) .showBuildFailureDiagnostics() # #nocov .callBuildCompleteHook(succeeded, output) setwd(cwd) .restoreEnvironment(envRestore) }) # unload and delete existing dylib if necessary if (file.exists(context$previousDynlibPath)) { # #nocov start try(silent=TRUE, dyn.unload(context$previousDynlibPath)) file.remove(context$previousDynlibPath) } # #nocov end # grab components we need to build command r <- file.path(R.home("bin"), "R") lib <- context$dynlibFilename deps <- context$cppDependencySourcePaths src <- context$cppSourceFilename # prepare the command (output if we are in showOutput mode) args <- c( "CMD", "SHLIB", if (windowsDebugDLL) "-d", if (rebuild) "--preclean", if (dryRun) "--dry-run", "-o", shQuote(lib), if (length(deps)) paste(shQuote(deps), collapse = " "), shQuote(src) ) if (showOutput) cat(paste(c(r, args), collapse = " "), "\n") # #nocov # execute the build -- suppressWarnings b/c when showOutput = FALSE # we are going to explicitly check for an error and print the output so <- if (showOutput) "" else TRUE result <- suppressWarnings(system2(r, args, stdout = so, stderr = so)) # check build results if(!showOutput) { # capture output output <- result attributes(output) <- NULL # examine status status <- attr(result, "status") if (!is.null(status)) { cat(result, sep = "\n") # #nocov start succeeded <- FALSE stop("Error ", status, " occurred building shared library.") } else if (!file.exists(context$dynlibFilename)) { cat(result, sep = "\n") succeeded <- FALSE stop("Error occurred building shared library.") # #nocov end } else { succeeded <- TRUE } } else if (!identical(as.character(result), "0")) { # #nocov start succeeded <- FALSE stop("Error ", result, " occurred building shared library.") } else { succeeded <- TRUE # #nocov end } } else { cwd <- getwd() on.exit({ setwd(cwd) }) if (verbose) # #nocov start cat("\nNo rebuild required (use rebuild = TRUE to ", "force a rebuild)\n\n", sep="") } # return immediately if this was a dry run if (dryRun) return(invisible(NULL)) # #nocov end # load the module if we have exported symbols if (length(context$exportedFunctions) > 0 || length(context$modules) > 0) { # remove existing objects of the same name from the environment exports <- c(context$exportedFunctions, context$modules) removeObjs <- exports[exports %in% ls(envir = env, all.names = T)] remove(list = removeObjs, envir = env) # source the R script scriptPath <- file.path(context$buildDirectory, context$rSourceFilename) source(scriptPath, local = env) } else if (getOption("rcpp.warnNoExports", default=TRUE)) { # #nocov start warning("No Rcpp::export attributes or RCPP_MODULE declarations ", "found in source") # #nocov end } # source the embeddedR if (embeddedR && (length(context$embeddedR) > 0)) { srcConn <- textConnection(context$embeddedR) setwd(rWorkingDir) # will be reset by previous on.exit handler source(file = srcConn, local = env, echo = echo) } # cleanup the cache dir if requested if (cleanupCacheDir) cleanupSourceCppCache(cacheDir, context$cppSourcePath, context$buildDirectory) # #nocov # return (invisibly) a list containing exported functions and modules invisible(list(functions = context$exportedFunctions, modules = context$modules, cppSourcePath = context$cppSourcePath, buildDirectory = context$buildDirectory)) } # Cleanup a directory used as the cache for a sourceCpp compilation. This will # remove all files from the cache directory that aren't a result of the # compilation that yielded the passed buildDirectory. cleanupSourceCppCache <- function(cacheDir, cppSourcePath, buildDirectory) { # normalize cpp source path and build directory # #nocov start cppSourcePath <- normalizePath(cppSourcePath) buildDirectory <- normalizePath(buildDirectory) # determine the parent dir that was used for the compilation then collect all the # *.cpp files and subdirectories therein cacheFiles <- list.files(cacheDir, pattern = glob2rx("*.cpp"), recursive = FALSE, full.names = TRUE) cacheFiles <- c(cacheFiles, list.dirs(cacheDir, recursive = FALSE, full.names = TRUE)) cacheFiles <- normalizePath(cacheFiles) # determine the list of tiles that were not yielded by the passed sourceCpp # result and remove them oldCacheFiles <- cacheFiles[!cacheFiles %in% c(cppSourcePath, buildDirectory)] unlink(oldCacheFiles, recursive = TRUE) # #nocov end } # Define a single C++ function cppFunction <- function(code, depends = character(), plugins = character(), includes = character(), env = parent.frame(), rebuild = FALSE, cacheDir = getOption("rcpp.cache.dir", tempdir()), showOutput = verbose, verbose = getOption("verbose"), echo = TRUE) { # process depends if (!is.null(depends) && length(depends) > 0) { # #nocov start depends <- paste(depends, collapse=", ") scaffolding <- paste("// [[Rcpp::depends(", depends, ")]]", sep="") scaffolding <- c(scaffolding, "", .linkingToIncludes(depends, FALSE), recursive=TRUE) # #nocov end } else { scaffolding <- "#include " } # process plugins if (!is.null(plugins) && length(plugins) > 0) { plugins <- paste(plugins, sep=", ") # #nocov start pluginsAttrib <- paste("// [[Rcpp::plugins(", plugins, ")]]", sep="") scaffolding <- c(scaffolding, pluginsAttrib) # append plugin includes for (pluginName in plugins) { plugin <- .findPlugin(pluginName) settings <- plugin() scaffolding <- c(scaffolding, settings$includes, recursive=TRUE) } # #nocov end } # remainder of scaffolding scaffolding <- c(scaffolding, "", "using namespace Rcpp;", "", includes, "// [[Rcpp::export]]", recursive = T) # prepend scaffolding to code code <- paste(c(scaffolding, code, recursive = T), collapse="\n") # print the generated code if we are in verbose mode if (verbose) { # #nocov start cat("\nGenerated code for function definition:", "\n--------------------------------------------------------\n\n") cat(code) cat("\n") } # source cpp into specified environment. if env is set to NULL # then create a new one (the caller can get a hold of the function # via the return value) if (is.null(env)) env <- new.env() # #nocov end exported <- sourceCpp(code = code, env = env, rebuild = rebuild, cacheDir = cacheDir, showOutput = showOutput, verbose = verbose, echo = echo) # verify that a single function was exported and return it if (length(exported$functions) == 0) stop("No function definition found") # #nocov else if (length(exported$functions) > 1) stop("More than one function definition") # #nocov else { functionName <- exported$functions[[1]] invisible(get(functionName, env)) } } .type_manipulate <- function( what = "DEMANGLE", class = NULL ) { function( type = "int", ... ){ # #nocov start code <- sprintf( ' SEXP manipulate_this_type(){ typedef %s type ; return wrap( %s(type) ) ; }', type, what ) dots <- list( code, ... ) dots[["env"]] <- environment() manipulate_this_type <- do.call( cppFunction, dots ) res <- manipulate_this_type() if( ! is.null(class) ){ class(res) <- class } res } # #nocov end } demangle <- .type_manipulate( "DEMANGLE" ) sizeof <- .type_manipulate( "sizeof", "bytes" ) print.bytes <- function( x, ...){ # #nocov start writeLines( sprintf( "%d bytes (%d bits)", x, 8 * x ) ) invisible( x ) } # #nocov end # Evaluate a simple c++ expression evalCpp <- function(code, depends = character(), plugins = character(), includes = character(), rebuild = FALSE, cacheDir = getOption("rcpp.cache.dir", tempdir()), showOutput = verbose, verbose = getOption( "verbose" ) ){ # #nocov start code <- sprintf( "SEXP get_value(){ return wrap( %s ) ; }", code ) env <- new.env() cppFunction(code, depends = depends, plugins = plugins, includes = includes, env = env, rebuild = rebuild, cacheDir = cacheDir, showOutput = showOutput, verbose = verbose ) fun <- env[["get_value"]] fun() # #nocov end } areMacrosDefined <- function(names, depends = character(), includes = character(), rebuild = FALSE, showOutput = verbose, verbose = getOption( "verbose" ) ){ code <- sprintf( ' LogicalVector get_value(){ return LogicalVector::create( %s ) ; }', paste( sprintf( ' _["%s"] = #if defined(%s) true #else false #endif ', names, names ), collapse = ",\n" ) ) env <- new.env() cppFunction(code, depends = depends, includes = includes, env = env, rebuild = rebuild, showOutput = showOutput, verbose = verbose ) fun <- env[["get_value"]] fun() } # Scan the source files within a package for attributes and generate code # based on the attributes. compileAttributes <- function(pkgdir = ".", verbose = getOption("verbose")) { # verify this is a package and read the DESCRIPTION to get it's name pkgdir <- normalizePath(pkgdir, winslash = "/") descFile <- file.path(pkgdir,"DESCRIPTION") if (!file.exists(descFile)) stop("pkgdir must refer to the directory containing an R package") # #nocov pkgDesc <- read.dcf(descFile)[1,] pkgname = .readPkgDescField(pkgDesc, "Package") depends <- c(.readPkgDescField(pkgDesc, "Depends", character()), .readPkgDescField(pkgDesc, "Imports", character()), .readPkgDescField(pkgDesc, "LinkingTo", character())) depends <- unique(.splitDepends(depends)) depends <- depends[depends != "R"] # check the NAMESPACE file to see if dynamic registration is enabled namespaceFile <- file.path(pkgdir, "NAMESPACE") if (!file.exists(namespaceFile)) stop("pkgdir must refer to the directory containing an R package") # #nocov pkgNamespace <- readLines(namespaceFile, warn = FALSE) registration <- any(grepl("^\\s*useDynLib.*\\.registration\\s*=\\s*TRUE.*$", pkgNamespace)) # determine source directory srcDir <- file.path(pkgdir, "src") if (!file.exists(srcDir)) return (FALSE) # #nocov # create R directory if it doesn't already exist rDir <- file.path(pkgdir, "R") if (!file.exists(rDir)) dir.create(rDir) # #nocov # remove the old RcppExports.R file unlink(file.path(rDir, "RcppExports.R")) # get a list of all source files cppFiles <- list.files(srcDir, pattern = "\\.((c(c|pp)?)|(h(pp)?))$", ignore.case = TRUE) # don't include RcppExports.cpp cppFiles <- setdiff(cppFiles, "RcppExports.cpp") # locale independent sort for stable output locale <- Sys.getlocale(category = "LC_COLLATE") Sys.setlocale(category = "LC_COLLATE", locale = "C") cppFiles <- sort(cppFiles) Sys.setlocale(category = "LC_COLLATE", locale = locale) # derive base names (will be used for modules) cppFileBasenames <- tools::file_path_sans_ext(cppFiles) # expend them to their full paths cppFiles <- file.path(srcDir, cppFiles) cppFiles <- normalizePath(cppFiles, winslash = "/") # generate the includes list based on LinkingTo. Specify plugins-only # because we only need as/wrap declarations linkingTo <- .readPkgDescField(pkgDesc, "LinkingTo") includes <- .linkingToIncludes(linkingTo, TRUE) # if a master include file or types file is in inst/include then use it typesHeader <- c(paste0(pkgname, "_types.h"), paste0(pkgname, "_types.hpp")) pkgHeader <- c(paste0(pkgname, ".h"), typesHeader) pkgHeaderPath <- file.path(pkgdir, "inst", "include", pkgHeader) pkgHeader <- pkgHeader[file.exists(pkgHeaderPath)] if (length(pkgHeader) > 0) { # #nocov start pkgInclude <- paste("#include \"../inst/include/", pkgHeader, "\"", sep="") includes <- c(pkgInclude, includes) } # #nocov end # if a _types file is in src then include it pkgHeader <- typesHeader pkgHeaderPath <- file.path(pkgdir, "src", pkgHeader) pkgHeader <- pkgHeader[file.exists(pkgHeaderPath)] if (length(pkgHeader) > 0) includes <- c(paste0("#include \"", pkgHeader ,"\""), includes) # #nocov # generate exports invisible(.Call("compileAttributes", PACKAGE="Rcpp", pkgdir, pkgname, depends, registration, cppFiles, cppFileBasenames, includes, verbose, .Platform)) } # setup plugins environment .plugins <- new.env() # built-in C++98 plugin .plugins[["cpp98"]] <- function() { if (getRversion() >= "3.4") # with recent R versions, R can decide list(env = list(USE_CXX98 = "yes")) else list(env = list(PKG_CXXFLAGS ="-std=c++98")) } # built-in C++11 plugin .plugins[["cpp11"]] <- function() { if (getRversion() >= "3.4") # with recent R versions, R can decide list(env = list(USE_CXX11 = "yes")) else if (getRversion() >= "3.1") # with recent R versions, R can decide list(env = list(USE_CXX1X = "yes")) else if (.Platform$OS.type == "windows") list(env = list(PKG_CXXFLAGS = "-std=c++0x")) else # g++-4.8.1 or later list(env = list(PKG_CXXFLAGS ="-std=c++11")) } # built-in C++11 plugin for older g++ compiler .plugins[["cpp0x"]] <- function() { list(env = list(PKG_CXXFLAGS ="-std=c++0x")) } ## built-in C++14 plugin for C++14 standard ## this is the default in g++-6.1 and later ## per https://gcc.gnu.org/projects/cxx-status.html#cxx14 .plugins[["cpp14"]] <- function() { if (getRversion() >= "3.4") # with recent R versions, R can decide list(env = list(USE_CXX14 = "yes")) else list(env = list(PKG_CXXFLAGS ="-std=c++14")) } # built-in C++1y plugin for C++14 and C++17 standard under development .plugins[["cpp1y"]] <- function() { list(env = list(PKG_CXXFLAGS ="-std=c++1y")) } # built-in C++17 plugin for C++17 standard (g++-6 or later) .plugins[["cpp17"]] <- function() { if (getRversion() >= "3.4") # with recent R versions, R can decide list(env = list(USE_CXX17 = "yes")) else list(env = list(PKG_CXXFLAGS ="-std=c++17")) } # built-in C++20 plugin for C++20 .plugins[["cpp20"]] <- function() { if (getRversion() >= "4.2") # with recent R versions, R can decide list(env = list(USE_CXX20 = "yes")) else list(env = list(PKG_CXXFLAGS ="-std=c++20")) } # built-in C++23 plugin for C++23 .plugins[["cpp23"]] <- function() { if (getRversion() >= "4.3") # with recent R versions, R can decide list(env = list(USE_CXX23 = "yes")) else list(env = list(PKG_CXXFLAGS ="-std=c++23")) } ## built-in C++1z plugin for C++17 standard under development ## note that as of Feb 2017 this is taken to be a moving target ## see https://gcc.gnu.org/projects/cxx-status.html .plugins[["cpp1z"]] <- function() { list(env = list(PKG_CXXFLAGS ="-std=c++1z")) } ## built-in C++2a plugin for g++ 8 and later ## cf https://gcc.gnu.org/projects/cxx-status.html as of Dec 2018 .plugins[["cpp2a"]] <- function() { list(env = list(PKG_CXXFLAGS ="-std=c++2a")) } ## built-in C++2b plugin for compilers without C++23 support .plugins[["cpp2b"]] <- function() { list(env = list(PKG_CXXFLAGS ="-std=c++2b")) } ## built-in OpenMP plugin .plugins[["openmp"]] <- function() { list(env = list(PKG_CXXFLAGS="-fopenmp", PKG_LIBS="-fopenmp")) } .plugins[["unwindProtect"]] <- function() { # nocov start warning("unwindProtect is enabled by default and this plugin is deprecated.", " It will be removed in a future version of Rcpp.") list() } # nocov end # register a plugin registerPlugin <- function(name, plugin) { .plugins[[name]] <- plugin # #nocov } # Take an empty function body and connect it to the specified external symbol sourceCppFunction <- function(func, isVoid, dll, symbol) { args <- names(formals(func)) body <- quote( CALL_PLACEHOLDER ( EXTERNALNAME, ARG ) )[ c(1:2, rep(3, length(args))) ] for (i in seq(along.with = args)) body[[i+2]] <- as.symbol(args[i]) body[[1L]] <- quote(.Call) body[[2L]] <- getNativeSymbolInfo(symbol, dll)$address if (isVoid) body <- call("invisible", body) body(func) <- body func } # Print verbose output .printVerboseOutput <- function(context) { # #nocov start cat("\nGenerated extern \"C\" functions", "\n--------------------------------------------------------\n") cat(context$generatedCpp, sep="") cat("\nGenerated R functions", "\n-------------------------------------------------------\n\n") cat(readLines(file.path(context$buildDirectory, context$rSourceFilename)), sep="\n") cat("\nBuilding shared library", "\n--------------------------------------------------------\n", "\nDIR: ", context$buildDirectory, "\n\n", sep="") } # #nocov end # Add LinkingTo dependencies if the sourceFile is in a package .getSourceCppDependencies <- function(depends, sourceFile) { # If the source file is in a package then simulate it being built # within the package by including it's LinkingTo dependencies, # the src directory (.), and the inst/include directory if (.isPackageSourceFile(sourceFile)) { # #nocov start descFile <- file.path(dirname(sourceFile), "..", "DESCRIPTION") DESCRIPTION <- read.dcf(descFile, all = TRUE) linkingTo <- .parseLinkingTo(DESCRIPTION$LinkingTo) unique(c(depends, linkingTo)) # #nocov end } else { depends } } # Check whether a source file is in a package .isPackageSourceFile <- function(sourceFile) { file.exists(file.path(dirname(sourceFile), "..", "DESCRIPTION")) } # Error if a package is not currently available .validatePackages <- function(depends, sourceFilename) { unavailable <- depends[!depends %in% .packages(all.available=TRUE)] if (length(unavailable) > 0) { # #nocov start stop(paste("Package '", unavailable[[1]], "' referenced from ", "Rcpp::depends in source file ", sourceFilename, " is not available.", sep=""), call. = FALSE) # #nocov end } } # Split the depends field of a package description .splitDepends <- function(x) { if (!length(x)) return(character()) # #nocov x <- unlist(strsplit(x, ",")) x <- sub("[[:space:]]+$", "", x) x <- unique(sub("^[[:space:]]*(.*)", "\\1", x)) sub("^([[:alnum:].]+).*$", "\\1", x) } # read a field from a named package description character vector .readPkgDescField <- function(pkgDesc, name, default = NULL) { if (name %in% names(pkgDesc)) pkgDesc[[name]] else default } # Get the inline plugin for the specified package (return NULL if none found) .getInlinePlugin <- function(package) { # #nocov start tryCatch(get("inlineCxxPlugin", asNamespace(package), inherits = FALSE), error = function(e) NULL) } # #nocov end # Lookup a plugin .findPlugin <- function(pluginName) { plugin <- .plugins[[pluginName]] if (is.null(plugin)) stop("Inline plugin '", pluginName, "' could not be found ", # #nocov start "within the Rcpp package. You should be ", "sure to call registerPlugin before using a plugin.") # #nocov end return(plugin) } # Setup the build environment based on the specified dependencies. Returns an # opaque object that can be passed to .restoreEnvironment to reverse whatever # changes that were made .setupBuildEnvironment <- function(depends, plugins, sourceFile) { # setup buildEnv <- list() linkingToPackages <- c("Rcpp") # merge values into the buildEnv mergeIntoBuildEnv <- function(name, value) { # protect against null or empty string if (is.null(value) || !nzchar(value)) return(invisible(NULL)) # if it doesn't exist already just set it if (is.null(buildEnv[[name]])) { buildEnv[[name]] <<- value } # if it's not identical then append else if (!identical(buildEnv[[name]], value)) { # #nocov buildEnv[[name]] <<- paste(buildEnv[[name]], value) # #nocov } else { # it already exists and it's the same value, this # likely means it's a flag-type variable so we # do nothing rather than appending it } } # update dependencies from a plugin setDependenciesFromPlugin <- function(plugin) { # get the plugin settings settings <- plugin() # merge environment variables pluginEnv <- settings$env for (name in names(pluginEnv)) { mergeIntoBuildEnv(name, pluginEnv[[name]]) } # capture any LinkingTo elements defined by the plugin linkingToPackages <<- unique(c(linkingToPackages, settings$LinkingTo)) } # add packages to linkingTo and introspect for plugins for (package in depends) { # #nocov start # add a LinkingTo for this package linkingToPackages <- unique(c(linkingToPackages, package)) # see if the package exports a plugin plugin <- .getInlinePlugin(package) if (!is.null(plugin)) setDependenciesFromPlugin(plugin) # #nocov end } # process plugins for (pluginName in plugins) { plugin <- .findPlugin(pluginName) setDependenciesFromPlugin(plugin) } # if there is no buildEnv from a plugin then use the Rcpp plugin if (length(buildEnv) == 0) { buildEnv <- inlineCxxPlugin()$env } # set CLINK_CPPFLAGS based on the LinkingTo dependencies buildEnv$CLINK_CPPFLAGS <- .buildClinkCppFlags(linkingToPackages) # add the source file's directory to the compilation srcDir <- dirname(sourceFile) srcDir <- asBuildPath(srcDir) buildDirs <- srcDir # if the source file is in a package then add inst/include if (.isPackageSourceFile(sourceFile)) { # #nocov start incDir <- file.path(dirname(sourceFile), "..", "inst", "include") incDir <- asBuildPath(incDir) buildDirs <- c(buildDirs, incDir) # #nocov end } # set CLINK_CPPFLAGS with directory flags dirFlags <- paste0('-I"', buildDirs, '"', collapse=" ") buildEnv$CLINK_CPPFLAGS <- paste(buildEnv$CLINK_CPPFLAGS, dirFlags, collapse=" ") # merge existing environment variables for (name in names(buildEnv)) mergeIntoBuildEnv(name, Sys.getenv(name)) # add cygwin message muffler buildEnv$CYGWIN = "nodosfilewarning" # on windows see if we need to add Rtools to the path # (don't do this for RStudio since it has it's own handling) if (identical(Sys.info()[['sysname']], "Windows") && !nzchar(Sys.getenv("RSTUDIO"))) { # #nocov start env <- .environmentWithRtools() for (var in names(env)) buildEnv[[var]] <- env[[var]] # #nocov end } # create restore list restore <- list() for (name in names(buildEnv)) restore[[name]] <- Sys.getenv(name, unset = NA) # set environment variables do.call(Sys.setenv, buildEnv) # return restore list return (restore) } # If we don't have the GNU toolchain already on the path then see if # we can find Rtools and add it to the path .environmentWithRtools <- function() { # #nocov start # Only proceed if we don't have the required tools on the path hasRtools <- nzchar(Sys.which("ls.exe")) && nzchar(Sys.which("gcc.exe")) if (!hasRtools) { # Read the Rtools registry key key <- NULL try(key <- utils::readRegistry("SOFTWARE\\R-core\\Rtools", hive = "HLM", view = "32-bit"), silent = TRUE) # If we found the key examine it if (!is.null(key)) { # Check version ver <- key$`Current Version` if (ver %in% (c("2.15", "2.16", "3.0", "3.1", "3.2", "3.3", "3.4"))) { # See if the InstallPath leads to the expected directories # R version 3.3.0 alpha (2016-03-25 r70378) isGcc49 <- ver %in% c("3.3", "3.4") && as.numeric(R.Version()$`svn rev`) >= 70378 rToolsPath <- key$`InstallPath` if (!is.null(rToolsPath)) { # add appropriate path entries path <- file.path(rToolsPath, "bin", fsep="\\") if (!isGcc49) path <- c(path, file.path(rToolsPath, "gcc-4.6.3", "bin", fsep="\\")) # if they all exist then return a list with modified # environment variables for the compilation if (all(file.exists(path))) { env <- list() path <- paste(path, collapse = .Platform$path.sep) env$PATH <- paste(path, Sys.getenv("PATH"), sep=.Platform$path.sep) if (isGcc49) { env$RTOOLS <- .rtoolsPath(rToolsPath) env$BINPREF <- file.path(env$RTOOLS, "mingw_$(WIN)/bin//", fsep = "/") } return(env) } } } } } return(NULL) # #nocov end } # Ensure that the path is suitable for passing as an RTOOLS # environment variable .rtoolsPath <- function(path) { path <- gsub("\\\\", "/", path) # #nocov start ## R 3.2.0 or later only: path <- trimws(path) .localsub <- function(re, x) sub(re, "", x, perl = TRUE) path <- .localsub("[ \t\r\n]+$", .localsub("^[ \t\r\n]+", path)) if (substring(path, nchar(path)) != "/") path <- paste(path, "/", sep="") path # #nocov end } # Build CLINK_CPPFLAGS from include directories of LinkingTo packages .buildClinkCppFlags <- function(linkingToPackages) { pkgCxxFlags <- NULL for (package in linkingToPackages) { packagePath <- find.package(package, NULL, quiet=TRUE) packagePath <- asBuildPath(packagePath) pkgCxxFlags <- paste(pkgCxxFlags, paste0('-I"', packagePath, '/include"'), collapse=" ") } return (pkgCxxFlags) } .restoreEnvironment <- function(restore) { # variables to reset setVars <- restore[!is.na(restore)] if (length(setVars)) do.call(Sys.setenv, setVars) # #nocov # variables to remove removeVars <- names(restore[is.na(restore)]) if (length(removeVars)) Sys.unsetenv(removeVars) } # Call the onBuild hook. This hook is provided so that external tools # can perform processing (e.g. lint checking or other diagnostics) prior # to the execution of a build). The showOutput flag is there to inform the # subscriber whether they'll be getting output in the onBuildComplete hook # or whether it will need to be scraped from the console (for verbose=TRUE) # The onBuild hook is always called from within the temporary build directory .callBuildHook <- function(file, fromCode, showOutput) { for (fun in .getHooksList("sourceCpp.onBuild")) { if (is.character(fun)) # #nocov start fun <- get(fun) # allow the hook to cancel the build (errors in the hook explicitly # do not cancel the build since they are unexpected bugs) continue <- tryCatch(fun(file, fromCode, showOutput), error = function(e) TRUE) if (!continue) return (FALSE) # #nocov end } return (TRUE) } # Call the onBuildComplete hook. This hook is provided so that external tools # can do analysis of build errors and (for example) present them in a # navigable list. Note that the output parameter will be NULL when showOutput # is TRUE. Tools can try to scrape the output from the console (in an # implemenentation-dependent fashion) or can simply not rely on output # processing in that case (since the user explicitly asked for output to be # printed to the console). The onBuildCompleted hook is always called within # the temporary build directory. .callBuildCompleteHook <- function(succeeded, output) { # Call the hooks in reverse order to align sequencing with onBuild for (fun in .getHooksList("sourceCpp.onBuildComplete")) { if (is.character(fun)) # #nocov start fun <- get(fun) try(fun(succeeded, output)) # #nocov end } } # The value for getHooks can be a single function or a list of functions, # This function ensures that the result can always be processed as a list .getHooksList <- function(name) { hooks <- getHook(name) if (!is.list(hooks)) hooks <- list(hooks) # #nocov hooks } # Generate list of includes based on LinkingTo. The pluginsOnly parameter # to distinguish the case of capturing all includes needed for a compiliation # (e.g. cppFunction) verses only needing to capture as/wrap converters which # is the case for generation of shims (RcppExports.cpp) and Rcpp::interfaces # package header files. .linkingToIncludes <- function(linkingTo, pluginsOnly) { # This field can be NULL or empty -- in that case just return Rcpp.h if (is.null(linkingTo) || !nzchar(linkingTo)) return (c("#include ")) # #nocov # Look for Rcpp inline plugins within the list or LinkedTo packages include.before <- character() include.after <- character() linkingToPackages <- .parseLinkingTo(linkingTo) for (package in linkingToPackages) { # We already handle Rcpp internally if (identical(package, "Rcpp")) next # see if there is a plugin that we can extract includes from plugin <- .getInlinePlugin(package) # #nocov start if (!is.null(plugin)) { includes <- .pluginIncludes(plugin) if (!is.null(includes)) { include.before <- c(include.before, includes$before) include.after <- c(include.after, includes$after) } } # otherwise check for standard Rcpp::interfaces generated include else if (!pluginsOnly) { pkgPath <- find.package(package, NULL, quiet=TRUE) if (length(pkgPath) == 0) { stop(paste("Package '", package, "' referenced from ", "LinkingTo directive is not available.", sep=""), call. = FALSE) } pkgHeader <- paste(package, ".h", sep="") pkgHeaderPath <- file.path(pkgPath, "include", pkgHeader) if (file.exists(pkgHeaderPath)) { pkgInclude <- paste("#include <", pkgHeader, ">", sep="") include.after <- c(include.after, pkgInclude) } } # #nocov end } # return the includes c(include.before, "#include ", include.after) } # Analyze the plugin's includes field to determine include.before and # include.after. We are ONLY interested in plugins that work with Rcpp since # the only types we need from includes are as/wrap marshallers. Therefore, # we verify that the plugin was created using Rcpp.plugin.maker and then # use that assumption to correctly extract include.before and include.after .pluginIncludes <- function(plugin) { # #nocov start # First determine the standard suffix of an Rcpp plugin by calling # Rcpp.plugin.maker. If the plugin$includes has this suffix we know # it's an Rcpp plugin token <- "include_after_token" stockRcppPlugin <- Rcpp.plugin.maker(include.after=token) includes <- stockRcppPlugin()$includes suffix <- strsplit(includes, token)[[1]][[2]] # now ask the plugin for it's includes, ensure that the plugin includes # are not null, and verify they have the Rcpp suffix before proceeding pluginIncludes <- plugin()$includes if (is.null(pluginIncludes)) return (NULL) if (!grepl(suffix, pluginIncludes)) return (NULL) # strip the suffix then split on stock Rcpp include to get before and after pluginIncludes <- strsplit(pluginIncludes, suffix)[[1]][[1]] pluginIncludes <- strsplit(pluginIncludes, c("#include "))[[1]] # extract before and after and nix empty lines before <- pluginIncludes[[1]] before <- strsplit(before, "\n")[[1]] before <- before[nzchar(before)] after <- pluginIncludes[[2]] after <- strsplit(after, "\n")[[1]] after <- after[nzchar(after)] # return before and after list(before = before, after = after) # #nocov end } # Parse a LinkingTo field into a character vector .parseLinkingTo <- function(linkingTo) { if (is.null(linkingTo)) return (character()) # #nocov linkingTo <- strsplit(linkingTo, "\\s*\\,")[[1]] result <- gsub("\\s", "", linkingTo) gsub("\\(.*", "", result) } # show diagnostics for failed builds .showBuildFailureDiagnostics <- function() { # #nocov start # RStudio does it's own diagnostics so only do this for other environments if (nzchar(Sys.getenv("RSTUDIO"))) return(); # if we can't call R CMD SHLIB then notify the user they should # install the appropriate development tools if (!.checkDevelTools()) { msg <- paste("\nWARNING: The tools required to build C++ code for R ", "were not found.\n\n", sep="") sysName <- Sys.info()[['sysname']] if (identical(sysName, "Windows")) { msg <- paste(msg, "Please download and install the appropriate ", "version of Rtools:\n\n", "http://cran.r-project.org/bin/windows/Rtools/\n", sep=""); } else if (identical(sysName, "Darwin")) { msg <- paste(msg, "Please install Command Line Tools for XCode ", "(or equivalent).\n", sep="") } else { msg <- paste(msg, "Please install GNU development tools ", "including a C++ compiler.\n", sep="") } message(msg) } # #nocov end } # check if R development tools are installed (cache successful result) .hasDevelTools <- FALSE .checkDevelTools <- function() { if (!.hasDevelTools) { # #nocov start # create temp source file tempFile <- file.path(tempdir(), "foo.c") cat("void foo() {}\n", file = tempFile) on.exit(unlink(tempFile)) # set working directory to tempdir (revert on exit) oldDir <- setwd(tempdir()) on.exit(setwd(oldDir), add = TRUE) # attempt the compilation and note whether we succeed cmd <- paste(R.home(component="bin"), .Platform$file.sep, "R ", "CMD SHLIB foo.c", sep = "") result <- suppressWarnings(system(cmd, ignore.stderr = TRUE, intern = TRUE)) utils::assignInMyNamespace(".hasDevelTools", is.null(attr(result, "status"))) # if we build successfully then remove the shared library if (.hasDevelTools) { lib <- file.path(tempdir(), paste("foo", .Platform$dynlib.ext, sep='')) unlink(lib) } } .hasDevelTools # #nocov end } # insert a dynlib entry into the cache .sourceCppDynlibInsert <- function(cacheDir, file, code, dynlib) { cache <- .sourceCppDynlibReadCache(cacheDir) index <- .sourceCppFindCacheEntryIndex(cache, file, code) if (is.null(index)) index <- length(cache) + 1 cache[[index]] <- list(file = file, code = code, dynlib = dynlib) .sourceCppDynlibWriteCache(cacheDir, cache) } # attempt to lookup a dynlib entry from the cache .sourceCppDynlibLookup <- function(cacheDir, file, code) { cache <- .sourceCppDynlibReadCache(cacheDir) index <- .sourceCppFindCacheEntryIndex(cache, file, code) if (!is.null(index)) cache[[index]]$dynlib else list() } # write the cache to disk .sourceCppDynlibWriteCache <- function(cacheDir, cache) { index_file <- file.path(cacheDir, "cache.rds") save(cache, file = index_file, compress = FALSE) } # read the cache from disk .sourceCppDynlibReadCache <- function(cacheDir) { index_file <- file.path(cacheDir, "cache.rds") if (file.exists(index_file)) { load(file = index_file) get("cache") } else { list() } } # search the cache for an entry that matches the file or code argument .sourceCppFindCacheEntryIndex <- function(cache, file, code) { if (length(cache) > 0) { for (i in 1:length(cache)) { entry <- cache[[i]] if ((nzchar(file) && identical(file, entry$file)) || (nzchar(code) && identical(code, entry$code))) { if (file.exists(entry$dynlib$cppSourcePath)) return(i) } } } # none found NULL } # generate an R version / Rcpp version specific cache dir for dynlibs .sourceCppPlatformCacheDir <- function(cacheDir) { dir <- file.path(cacheDir, paste("sourceCpp", R.version$platform, utils::packageVersion("Rcpp"), sep = "-")) if (!utils::file_test("-d", dir)) dir.create(dir, recursive = TRUE) dir } # generate a unique token for a cacheDir .sourceCppDynlibUniqueToken <- function(cacheDir) { # read existing token (or create a new one) token_file <- file.path(cacheDir, "token.rds") if (file.exists(token_file)) load(file = token_file) else token <- 0 # increment token <- token + 1 # write it save(token, file = token_file) # return it as a string as.character(token) } .extraRoutineRegistrations <- function(targetFile, routines) { declarations = character() call_entries = character() # if we are running R 3.4 or higher we can use an internal utility function # to automatically discover additional native routines that require registration if (getRversion() >= "3.4") { # determine the package directory pkgdir <- dirname(dirname(targetFile)) # get the generated code from R con <- textConnection(object = NULL, open = "w") on.exit(close(con), add = TRUE) tools::package_native_routine_registration_skeleton( dir = pkgdir, con = con, character_only = FALSE ) code <- textConnectionValue(con) # look for lines containing call entries matches <- regexec('^\\s+\\{"([^"]+)",.*$', code) matches <- regmatches(code, matches) matches <- Filter(x = matches, function(x) { length(x) > 0 # #nocov start }) for (match in matches) { routine <- match[[2]] if (!routine %in% routines) { declaration <- grep(sprintf("^extern .* %s\\(.*$", routine), code, value = TRUE) # FIXME: maybe we should extend this to *any* routine? # or is there any case in which `void *` is not SEXP for a .Call? if (routine == "run_testthat_tests") declaration <- gsub("void *", "SEXP", declaration, fixed=TRUE) declarations <- c(declarations, sub("^extern", "RcppExport", declaration)) call_entries <- c(call_entries, match[[1]]) # #nocov end } } } # return extra declaratiosn and call entries list(declarations = declarations, call_entries = call_entries) } Rcpp/R/exceptions.R0000644000176200001440000000311413036432110013653 0ustar liggesusers# Copyright (C) 2009 - 2017 Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . .rcpp_error_recorder <- function(e) { invisible(.Call(rcpp_error_recorder, e)) # #nocov } .warningsEnv <- new.env() .warningsEnv$warnings <- character() .rcpp_warning_recorder <- function(w){ .warningsEnv$warnings <- append(.warningsEnv$warnings, w$message) # #nocov invokeRestart("muffleWarning") # #nocov } .rcpp_collect_warnings <- function() { warnings <- .warningsEnv$warnings # #nocov start .warningsEnv$warnings <- character() warnings # #nocov end } print.Rcpp_stack_trace <- function(x, ...) { cat(format(x, ...)) # #nocov } str.Rcpp_stack_trace <- function(object, ...) { cat(format(object, ...)) # #nocov } format.Rcpp_stack_trace <- function(x, ...) { paste0( # #nocov start if (nzchar(x$file)) paste0(x$file, ":", x$line), "\n ", paste(collapse = "\n ", seq_along(x$stack), ":", x$stack), "\n") } # #nocov end Rcpp/R/02_completion.R0000644000176200001440000000335313022667267014173 0ustar liggesusers# Copyright (C) 2010 - 2016 John Chambers, Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . setGeneric( ".DollarNames" ) # #nocov start .DollarNames.Module <- function(x, pattern){ pointer <- .getModulePointer( x ) if(identical(pointer, .badModulePointer)) { stop( "unitialized module" ) } grep( pattern , .Call( Module__complete, pointer), value = TRUE ) } setMethod( ".DollarNames", "Module", .DollarNames.Module ) # completion for C++ objects # do we actually need this or do we get it for free via setRefClass, etc ... setGeneric( "complete", function(x) standardGeneric("complete") ) setMethod( "complete", "C++Object", function(x){ xp <- get(".cppclass", envir = as.environment(x)) # FIXME: implement another test # if(identical(xp, .emptyPointer)) # stop("C++ object with unset pointer to C++ class") .Call( CppClass__complete , xp ) } ) ".DollarNames.C++Object" <- function( x, pattern ){ grep( pattern, complete(x), value = TRUE ) } setMethod( ".DollarNames", "C++Object", `.DollarNames.C++Object` ) # #nocov end Rcpp/R/bib.R0000644000176200001440000000144613036432110012234 0ustar liggesusers# Copyright (C) 2010 - 2017 Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . bib <- function() { sub("\\.bib$", "", system.file("bib", "Rcpp.bib", package = "Rcpp")) } Rcpp/R/zzz.R0000644000176200001440000000160113660326201012334 0ustar liggesusers# Copyright (C) 2009 - 2016 Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . .dummyInstancePointer <- new.env() # just something permanent .classes_map <- new.env() .onLoad <- function(libname, pkgname){ new_dummyObject(.dummyInstancePointer) # nocov } Rcpp/R/tools.R0000644000176200001440000000554614625104621012655 0ustar liggesusers# Copyright (C) 2010 - 2019 Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . externalptr_address <- function(xp) { .Call(as_character_externalptr, xp) # #nocov } # just like assignInNamespace but first checks that the binding exists forceAssignInNamespace <- function(x, value, env) { is_ns <- isNamespace(env) unlocker <- get("unlockBinding", baseenv()) if (is_ns && exists(x, env) && bindingIsLocked(x, env)) { unlocker(x, env) # #nocov } assign(x, value, env) if (is_ns) { lockBinding(x, env) # #nocov } } # Transform a path for passing to the build system on the command line. # Leave paths alone for posix. For Windows, mirror the behavior of the # R package build system by starting with the fully resolved absolute path, # transforming it to a short path name if it contains spaces, and then # converting backslashes to forward slashes asBuildPath <- function(path) { if (.Platform$OS.type == "windows") { path <- normalizePath(path) # #nocov start if (grepl(' ', path, fixed=TRUE)) path <- utils::shortPathName(path) path <- gsub("\\\\", "/", path) # #nocov end } return(path) } ##' Helper function to report the package version of the R installation. ##' ##' While \code{packageVersion(Rcpp)} exports the version registers in ##' \code{DESCRIPTION}, this version does get incremented more easily ##' during development and can therefore be higher than the released ##' version. The actual \code{#define} long used at the C++ level ##' corresponds more to an \sQuote{API Version} which is now provided ##' by this function, and use for example in the package skeleton ##' generator. ##' ##' @title Export the Rcpp (API) Package Version ##' @param devel An logical value indicating if the development or ##' release version number should be returned, default is release. ##' @return A \code{package_version} object with either the release ##' or development version. ##' @author Dirk Eddelbuettel ##' @seealso \code{\link{packageVersion}}, ##' \code{\link{Rcpp.package.skeleton}} ##' @examples getRcppVersion() getRcppVersion <- function(devel = FALSE) { rcpp <- .Call("getRcppVersionStrings", PACKAGE="Rcpp") package_version(rcpp[if(devel) 2 else 1]) } Rcpp/R/exposeClass.R0000644000176200001440000002007613326145624014006 0ustar liggesusers# Copyright (C) 2013 - 2016 John Chambers, Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . .stdHeader <- c( # #nocov start "#include ", "using namespace Rcpp ;" ) .asString <- function(what) if(is.character(what)) what else deparse(what) .strings <- function(expr) { if(is.call(expr) && ! identical(expr[[1]], quote(`::`))) lapply(as.list(expr)[-1], .strings) else .asString(expr) } .specifyItems <- function(what) { what <- as.list(what) wn <- allNames(what) simple <- !nzchar(wn) ## todo: error checking here that unnamed elements are single strings wn[simple] <- as.character(what[simple]) names(what) <- wn what[simple] <- list(character()) what } .writeFieldFunction <- function(fldi, typei, CppClass, readOnly, ns, con){ rootName <- paste0("field_", fldi) writeLines(sprintf(" %s %s_get(%s *obj) { return obj->%s; }\n", typei, rootName, CppClass, fldi), con) value <- "_get" if(!readOnly) { writeLines(sprintf(" void %s_set(%s *obj, %s value) { obj->%s = value; }\n", rootName, CppClass, typei, fldi), con) value <- c(value, "_set") } paste0(ns, "::field_", fldi, value) } .writeMethodFunction <- function(mdi, sigi, CppClass, ns, con) { mName <- paste0("method_", mdi) if(length(sigi) < 1) stop(gettextf("The type signature for method %s for class %s was of length 0: Must at least include the return type", mdi, CppClass)) rtnType <- sigi[[1]] sigi <- sigi[-1] if(length(sigi)) { argNames <- paste0("a", seq_along(sigi)) args <- paste(" ,", paste(sigi, argNames, collapse = ", ")) } else argNames <- args <- "" writeLines(sprintf(" %s %s(%s *obj%s){ return obj->%s(%s); }\n", rtnType, mName, CppClass, args, mdi, argNames), con) paste0(ns, "::",mName) } exposeClass <- function(class, constructors, fields, methods, file = paste0(CppClass, "Module.cpp"), header = character(), module = paste0("class_",class), CppClass = class, readOnly = character(), rename = character(), Rfile = TRUE) { ## some argument checks ## TODO: checks on constructors, fields, methods if(length(readOnly)) { readOnly <- as.character(readOnly) if(!all(nzchar(readOnly))) stop("argument readOnly should be a vector of non-empty strings") } newnames <- allNames(rename) if(length(rename)) { if(!all(sapply(rename, function(x) is.character(x) && length(x) == 1 && nzchar(x)))) stop("argument rename should be a vector of single, non-empty strings") if(!all(nzchar(newnames))) stop("all the elements of argument rename should be non-empty strings") } if(is.character(file)) { ## are we in a package directory? Writable, searchable src subdirectory: if(file.access("src",3)==0 && (basename(file) == file)) cfile <- file.path("src", file) else cfile <- file con <- file(cfile, "w") on.exit({message(sprintf("Wrote C++ file \"%s\"", cfile)); close(con)}) } else con <- file ## and for the R code: if(identical(Rfile, FALSE)) {} else { if(identical(Rfile, TRUE)) Rfile <- sprintf("%sClass.R",class) if(is.character(Rfile)) { if(file.access("R",3)==0 && (basename(file) == file)) # in a package directory Rfile <- file.path("R", Rfile) Rcon <- file(Rfile, "w") msg <- sprintf("Wrote R file \"%s\"",Rfile) on.exit({message(msg); close(Rcon)}, add = TRUE) } else Rcon <- Rfile Rfile <- TRUE } mfile <- tempfile() mcon <- file(mfile, "w") writeLines(.stdHeader, con) if(length(header)) writeLines(header, con) writeLines(c("", sprintf("RCPP_MODULE(%s) {\n",module), ""), mcon) writeLines(sprintf(" class_<%s>(\"%s\")\n", CppClass, class), mcon) ## the constructors argument defines a list of vectors of types for( cons in constructors) { if(length(cons) > 1 || (length(cons) == 1 && nzchar(cons) && !identical(cons, "void"))) cons <- paste0("<", paste(cons, collapse = ","),">") else cons = "" writeLines(paste0(" .constructor",cons,"()"),mcon) } writeLines("", mcon) flds <- .specifyItems(fields) nm <- fnm <- names(flds) rdOnly <- nm %in% readOnly macros <- ifelse(rdOnly, ".field_readonly", ".field") test <- nm %in% rename if(any(test)) nm[test] <- newnames[match(nm[test], rename)] ns <- NULL for(i in seq_along(nm)) { typei <- flds[[i]] fldi <- fnm[i] nmi <- nm[[i]] macroi <- macros[[i]] if(!length(typei) || identical(typei, "")) ## direct field writeLines(sprintf(" %s(\"%s\", &%s::%s)", macroi, nmi, CppClass, fldi), mcon) else { # create a free function, e.g. for an inherited field if(is.null(ns)) { # enclose in a namespace ns <- paste("module",class,"NS", sep = "_") writeLines(sprintf("\nnamespace %s {\n", ns), con) } fldFuns <- .writeFieldFunction(fldi, typei, CppClass, rdOnly[[i]], ns, con) if(rdOnly[[i]]) ## NOTE: string 3rd arg. required by problem w. module parsing 10/3/13 writeLines(sprintf(" .property(\"%s\", &%s, \"read-only field\")", nmi, fldFuns[[1]]), mcon) else writeLines(sprintf(" .property(\"%s\", &%s, &%s)", nmi, fldFuns[[1]], fldFuns[[2]]), mcon) } } writeLines("", mcon) sigs <- .specifyItems(methods) nm <- mds <- names(sigs) test <- nm %in% rename if(any(test)) nm[test] <- newnames[match(nm[test], rename)] for(i in seq_along(nm)) { sigi <- sigs[[i]] nmi <- nm[[i]] mdi <- mds[[i]] if(!length(sigi) || identical(sigi, "")) # direct method writeLines(sprintf(" .method(\"%s\", &%s::%s)", nmi, CppClass, mdi), mcon) else { # create a free function, e.g. for an inherited method if(is.null(ns)) { # enclose in a namespace ns <- paste("module",class,"NS", sep = "_") writeLines(sprintf("\nnamespace %s {\n", ns), con) } mFun <- .writeMethodFunction(mdi, sigi, CppClass, ns, con) writeLines(sprintf(" .method(\"%s\", &%s)", nmi, mFun), mcon) } } writeLines(" ;\n}", mcon) close(mcon) if(!is.null(ns)) writeLines(sprintf("} // %s", ns), con) # close namespace writeLines(readLines(mfile), con) if(Rfile) { if(missing(CppClass)) CppString <- "" else CppString <- paste0(", \"",CppClass, "\"") if(missing(module)) ModString <- "" else ModString <- paste0(", module = \"", module, "\"") writeLines(sprintf("%s <- setRcppClass(\"%s\"%s%s)", class, class, CppString,ModString), Rcon) } } # #nocov end Rcpp/R/01_show.R0000644000176200001440000001023013257743257012775 0ustar liggesusers# Copyright (C) 2010 - 2016 John Chambers, Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . setMethod( "show", "C++Object", function(object){ # #nocov start env <- as.environment(object) pointer <- get(".pointer", envir = env) cppclass <- get(".cppclass", envir = env) txt <- sprintf( "C++ object <%s> of class '%s' <%s>", externalptr_address(pointer), .Call( Class__name, cppclass ), externalptr_address(cppclass) ) writeLines( txt ) } ) setMethod( "show", "C++Class", function(object){ doc <- object@docstring txt <- sprintf( "C++ class '%s' <%s>%s", .Call( Class__name, object@pointer ), externalptr_address(object@pointer), if( length(doc) && nchar(doc) ) sprintf( "\n docstring : %s", doc ) else "" ) writeLines( txt ) ctors <- object@constructors nctors <- length( ctors ) txt <- character( nctors ) for( i in seq_len(nctors) ){ ctor <- ctors[[i]] doc <- ctor$docstring txt[i] <- sprintf( " %s%s", ctor$signature, if( nchar(doc) ) sprintf( "\n docstring : %s", doc) else "" ) } writeLines( "Constructors:" ) writeLines( paste( txt, collapse = "\n" ) ) fields <- object@fields nfields <- length(fields) if( nfields ){ names <- names(fields) txt <- character(nfields) writeLines( "\nFields: " ) for( i in seq_len(nfields) ){ f <- fields[[i]] doc <- f$docstring txt[i] <- sprintf( " %s %s%s%s", f$cpp_class, names[i], if( f$read_only ) " [readonly]" else "", if( nchar(doc) ) sprintf( "\n docstring : %s", doc ) else "" ) } writeLines( paste( txt, collapse = "\n" ) ) } else { writeLines( "\nFields: No public fields exposed by this class" ) } mets <- object@methods nmethods <- length(mets) if( nmethods ){ writeLines( "\nMethods: " ) txt <- character( nmethods ) for( i in seq_len(nmethods) ){ txt[i] <- mets[[i]]$info(" ") } writeLines( paste( txt, collapse = "\n" ) ) } else { writeLines( "\nMethods: no methods exposed by this class" ) } } ) setMethod( "show", "C++Function", function(object){ txt <- sprintf( "internal C++ function <%s>", externalptr_address(object@pointer) ) writeLines( txt ) doc <- object@docstring if( length(doc) && nchar( doc ) ){ writeLines( sprintf( " docstring : %s", doc ) ) } sign <- object@signature if( length(sign) && nchar( sign ) ){ writeLines( sprintf( " signature : %s", sign ) ) } } ) setMethod( "show", "Module", function( object ){ pointer <- .getModulePointer(object, FALSE) if(identical(pointer, .badModulePointer)) { object <- as.environment(object) ## not needed when 2.12.0 arrives txt <- sprintf("Uninitialized module named \"%s\" from package \"%s\"", get("moduleName", envir = object), get("packageName", envir = object)) writeLines(txt) } else { info <- .Call( Module__functions_arity, pointer ) name <- .Call( Module__name, pointer ) txt <- sprintf( "Rcpp module '%s' \n\t%d functions: ", name, length(info) ) writeLines( txt ) txt <- sprintf( "%15s : %d arguments", names(info), info ) writeLines( txt ) info <- .Call( Module__classes_info, pointer ) txt <- sprintf( "\n\t%d classes : ", length(info) ) writeLines( txt ) txt <- sprintf( "%15s ", names(info) ) writeLines( txt ) } } ) # #nocov end Rcpp/R/compilerCheck.R0000644000176200001440000000340213021571763014256 0ustar liggesusers##' Helper function to establish minimal compiler versions, currently limited ##' only to \code{g++} which (particularly for older RHEL/CentOS releases) is ##' too far behind current C++11 standards required for some packages. ##' ##' This function looks up \code{g++} (as well as optional values in the ##' \code{CXX} and \code{CXX1X} environment variables) in the \code{PATH}. For ##' all values found, the output of \code{g++ -v} is analyzed for the version ##' string, which is then compared to the given minimal version. ##' @title Check for Minimal (g++) Compiler Version ##' @param minVersion An object of type \code{package_version}, with a default ##' of version 4.6.0 ##' @return A boolean value is returned, indicating if the minimal version is ##' being met ##' @author Dirk Eddelbuettel compilerCheck <- function(minVersion=package_version("4.6.0")) { # nocov start binaries <- c("g++", Sys.getenv("CXX", unset=""), Sys.getenv("CXX1X", unset="")) binpaths <- lapply(binaries, function(b) { if (b=="") NULL else Sys.which(b) }) allgood <- FALSE rl <- lapply(binpaths, function(b) { if (is.null(b)) return(NULL) con <- pipe(paste(b, "-v 2>&1"), "r") # NB: not --version, but -v lines <- readLines(con) close(con) lines <- lines[grepl("^g.. version", lines)] if (length(lines) == 0) return(NULL) ver <- strsplit(lines, " ")[[1]][3] # format is 'gcc version x.y.z ....' package_version(ver) >= minVersion }) all(do.call(c, rl)) # drops NULLs } # nocov end ## TODO: maybe not limit to gcc/g++ ## TODO: maybe be smarter about combination of path, CXX and CXX1X ? ## TODO: maybe make env.var optional arguments too Rcpp/R/00_classes.R0000644000176200001440000000636313257743257013465 0ustar liggesusers# Copyright (C) 2010 - 2016 John Chambers, Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . # anticipating a change in R 2.16.0 setClass( "refClassGeneratorFunction" ) # #nocov start setClassUnion("refGenerator", c("refObjectGenerator", "refClassGeneratorFunction")) ## "Module" class as an environment with "pointer", "moduleName", ## "packageName" and "refClassGenerators" ## Stands in for a reference class with those fields. setClass( "Module", contains = "environment" ) setRefClass( "C++Field", fields = list( pointer = "externalptr", cpp_class = "character", read_only = "logical", class_pointer = "externalptr", docstring = "character" ) ) setRefClass( "C++OverloadedMethods", fields = list( pointer = "externalptr", class_pointer = "externalptr", size = "integer", void = "logical", const = "logical", docstrings = "character", signatures = "character", nargs = "integer" ), methods = list( info = function(prefix = " " ){ paste( paste( prefix, signatures, ifelse(const, " const", "" ), "\n", prefix, prefix, ifelse( nchar(docstrings), paste( "docstring :", docstrings) , "" ) ) , collapse = "\n" ) } ) ) setRefClass( "C++Constructor", fields = list( pointer = "externalptr", class_pointer = "externalptr", nargs = "integer", signature = "character", docstring = "character" ) ) setClass( "C++Class", representation( pointer = "externalptr", module = "externalptr", fields = "list", methods = "list", constructors = "list", generator = "refGenerator", docstring = "character", typeid = "character", enums = "list", parents = "character" ), contains = "character" ) setClass( "C++Object") setClass( "C++Function", representation( pointer = "externalptr", docstring = "character", signature = "character" ), contains = "function" ) .cppfunction_formals_gets <- function (fun, envir = environment(fun), value) { bd <- body(fun) b2 <- bd[[2L]] for( i in seq_along(value) ){ b2[[3L+i]] <- as.name( names(value)[i] ) } bd[[2]] <- b2 f <- fun@.Data formals(f) <- value body(f) <- bd fun@.Data <- f fun } setGeneric( "formals<-" ) setMethod( "formals<-", "C++Function", .cppfunction_formals_gets ) # #nocov end Rcpp/R/03_prompt.R0000644000176200001440000000457113022667267013347 0ustar liggesusers# Copyright (C) 2010 - 2016 John Chambers, Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . setGeneric( "functions", function(object, ...) standardGeneric( "functions" ) ) # #nocov start setMethod( "functions", "Module", function(object, ...){ pointer <- .getModulePointer(object) if(identical(pointer, .badModulePointer)) stop(gettextf("Module \"%s\" has not been intialized: try Module(object)", get("moduleName", envir = as.environment(object))), domain = NA) else .Call( Module__functions_arity, pointer ) } ) setGeneric( "prompt" ) setMethod( "prompt", "Module", function(object, filename = NULL, name = NULL, ...){ lines <- readLines( system.file( "prompt", "module.Rd", package = "Rcpp" ) ) pointer <- .getModulePointer(object) if( is.null(name) ) name <- .Call( Module__name, pointer ) if( is.null(filename) ) filename <- sprintf( "%s-module.Rd", name ) lines <- gsub( "NAME", name, lines ) info <- functions( object ) f.txt <- if( length( info ) ){ sprintf( "functions: \\\\describe{ %s }", paste( sprintf( " \\\\item{%s}{ ~~ description of function %s ~~ }", names(info), names(info) ), collapse = "\n" ) ) } else { "" } lines <- sub( "FUNCTIONS", f.txt, lines ) ## at this point functions() would have failed if the ## pointer in object was not valid classes <- .Call( Module__classes_info, pointer ) c.txt <- if( length( classes ) ){ sprintf( "classes: \\\\describe{ %s }", paste( sprintf( " \\\\item{%s}{ ~~ description of class %s ~~ }", names(classes), names(classes) ), collapse = "\n" ) ) } else { "" } lines <- sub( "CLASSES", c.txt, lines ) writeLines( lines, filename ) invisible(NULL) } ) # nocov end Rcpp/R/Module.R0000644000176200001440000004277714351164565012762 0ustar liggesusers# Copyright (C) 2010 - 2021 John Chambers, Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . internal_function <- function(pointer){ f <- function(xp){ force(xp) function(...){ .External( InternalFunction_invoke, xp, ... ) } } o <- new( "C++Function", f(pointer) ) o@pointer <- pointer o } setMethod("$", "C++Class", function(x, name) { x <- x@generator eval.parent(substitute(x$name)) }) .badModulePointer <- NULL .setModulePointer <- function(module, value) { assign("pointer", value, envir = as.environment(module)) value } .getModulePointer <- function(module, mustStart = TRUE) { pointer <- get("pointer", envir = as.environment(module)) if(is.null(pointer) && mustStart) { # #nocov start ## should be (except for bug noted in identical()) ## if(identical(pointer, .badModulePointer) && mustStart) { Module(module, mustStart = TRUE) # will either initialize pointer or throw error pointer <- get("pointer", envir = as.environment(module)) } # #nocov end pointer } setMethod("initialize", "Module", function(.Object, moduleName = "UNKNOWN", packageName = "", pointer = .badModulePointer, ...) { env <- new.env(TRUE, emptyenv()) as(.Object, "environment") <- env assign("pointer", pointer, envir = env) assign("packageName", packageName, envir = env) assign("moduleName", moduleName, envir = env) if(length(list(...)) > 0) { .Object <- callNextMethod(.Object, ...) # #nocov } .Object }) .get_Module_function <- function(x, name, pointer = .getModulePointer(x) ){ pointer <- .getModulePointer(x) info <- .Call( Module__get_function, pointer, name ) fun_ptr <- info[[1L]] is_void <- info[[2L]] doc <- info[[3L]] sign <- info[[4L]] formal_args <- info[[5L]] nargs <- info[[6L]] f <- function(...) NULL if( nargs == 0L ) formals(f) <- NULL stuff <- list( fun_pointer = fun_ptr, InternalFunction_invoke = InternalFunction_invoke ) body(f) <- if( nargs == 0L ){ if( is_void ) { substitute( { # #nocov start .External( InternalFunction_invoke, fun_pointer) invisible(NULL) }, stuff ) # #nocov end } else { substitute( { .External( InternalFunction_invoke, fun_pointer) }, stuff ) } } else { if( is_void ) { substitute( { # #nocov start .External( InternalFunction_invoke, fun_pointer, ... ) invisible(NULL) }, stuff ) # #nocov end } else { substitute( { .External( InternalFunction_invoke, fun_pointer, ... ) }, stuff ) } } out <- new( "C++Function", f, pointer = fun_ptr, docstring = doc, signature = sign ) if( ! is.null( formal_args ) ){ formals( out ) <- formal_args # #nocov } out } .get_Module_Class <- function( x, name, pointer = .getModulePointer(x) ){ value <- .Call( Module__get_class, pointer, name ) value@generator <- get("refClassGenerators", envir=x)[[value@.Data]] value } setMethod( "$", "Module", function(x, name){ # #nocov start pointer <- .getModulePointer(x) storage <- get( "storage", envir = as.environment(x) ) storage[[ name ]] } ) # #nocov end new_CppObject_xp <- function(module, pointer, ...) { .External( class__newInstance, module, pointer, ... ) } new_dummyObject <- function(...) # #nocov .External( class__dummyInstance, ...) # #nocov # class method for $initialize cpp_object_initializer <- function(.self, .refClassDef, ..., .object_pointer){ # force finalize method to be materialized invisible(.self$finalize) selfEnv <- as.environment(.self) ## generate the C++-side object and store its pointer, etc. ## access the private fields in the fieldPrototypes env. fields <- .refClassDef@fieldPrototypes pointer <- if(missing(.object_pointer)) new_CppObject_xp(fields$.module, fields$.pointer, ...) else .object_pointer assign(".module", fields$.module, envir = selfEnv) assign(".pointer", pointer, envir = selfEnv) assign(".cppclass", fields$.pointer, envir = selfEnv) .self } cpp_object_dummy <- function(.self, .refClassDef) { # #nocov start selfEnv <- as.environment(.self) ## like initializer but a dummy for the case of no default ## constructor. Will throw an error if the object is used. fields <- .refClassDef@fieldPrototypes pointer <- new_dummyObject() assign(".module", fields$.module, envir = selfEnv) assign(".pointer", pointer, envir = selfEnv) assign(".cppclass", fields$.pointer, envir = selfEnv) .self } # #nocov end cpp_object_maker <- function(typeid, pointer){ Class <- .classes_map[[ typeid ]] new( Class, .object_pointer = pointer ) } Module <- function( module, PACKAGE = methods::getPackageName(where), where = topenv(parent.frame()), mustStart = FALSE ) { if (inherits(module, "DLLInfo") && missing(mustStart)) mustStart <- TRUE # #nocov if (inherits(module, "Module")) { xp <- .getModulePointer(module, FALSE) if(!missing(PACKAGE)) warning("ignoring PACKAGE argument in favor of internal package from Module object") # #nocov env <- as.environment(module) # not needed from R 2.12.0 PACKAGE <- get("packageName", envir = env) moduleName <- get("moduleName", envir = env) } else if( identical( typeof( module ), "externalptr" ) ){ ## [john] Should Module() ever be called with a pointer as argument? ## If so, we need a safe check of the pointer's validity ## [romain] I don't think we actually can, external pointers ## are stored as void*, they don't know what they are. Or we could ## perhaps keep a vector of all known module pointers ## [John] One technique is to initialize the pointer to a known value ## and just check whether it's been reset from that (bad) value xp <- module # #nocov start moduleName <- .Call( Module__name, xp ) module <- methods::new("Module", pointer = xp, packageName = PACKAGE, moduleName = moduleName) # #nocov end } else if(is.character(module)) { moduleName <- module xp <- .badModulePointer module <- methods::new("Module", pointer = xp, packageName = PACKAGE, moduleName = moduleName) } if(identical(xp, .badModulePointer)) { if(mustStart) { name <- sprintf( "_rcpp_module_boot_%s", moduleName ) symbol <- tryCatch(getNativeSymbolInfo( name, PACKAGE ), error = function(e)e) if(inherits(symbol, "error")) stop(gettextf("Failed to initialize module pointer: %s", symbol), domain = NA) xp <- .Call( symbol ) .setModulePointer(module, xp) } else return(module) } classes <- .Call( Module__classes_info, xp ) ## We need a general strategy for assigning class defintions ## since delaying the initialization of the module causes ## where to be the Rcpp namespace: if(environmentIsLocked(where)) where <- .GlobalEnv # or??? generators <- list() storage <- new.env() for( i in seq_along(classes) ){ CLASS <- classes[[i]] clname <- CLASS@.Data fields <- cpp_fields( CLASS, where ) methods <- cpp_refMethods(CLASS, where) generator <- methods::setRefClass( clname, fields = fields, contains = "C++Object", methods = methods, where = where ) # just to make codetools happy .self <- .refClassDef <- NULL generator$methods(initialize = if (cpp_hasDefaultConstructor(CLASS)) function(...) Rcpp::cpp_object_initializer(.self,.refClassDef, ...) else function(...) { if (nargs()) Rcpp::cpp_object_initializer(.self,.refClassDef, ...) else Rcpp::cpp_object_dummy(.self, .refClassDef) # #nocov } ) rm( .self, .refClassDef ) classDef <- methods::getClass(clname) ## non-public (static) fields in class representation ## Should these become real fields? fields <- classDef@fieldPrototypes assign(".pointer", CLASS@pointer, envir = fields) assign(".module", xp, envir = fields) assign(".CppClassName", clname, envir = fields) generators[[clname]] <- generator # [romain] : should this be promoted to reference classes # perhaps with better handling of j and ... arguments if( any( grepl( "^[[]", names(CLASS@methods) ) ) ){ # #nocov start if( "[[" %in% names( CLASS@methods ) ){ methods::setMethod( "[[", clname, function(x, i, j, ..., exact = TRUE){ x$`[[`( i ) }, where = where ) } if( "[[<-" %in% names( CLASS@methods ) ){ methods::setReplaceMethod( "[[", clname, function(x, i, j, ..., exact = TRUE, value){ x$`[[<-`( i, value ) x } , where = where ) } } # #nocov end # promoting show to S4 if( any( grepl( "show", names(CLASS@methods) ) ) ){ setMethod( "show", clname, function(object) object$show(), where = where ) # #nocov } } if(length(classes)) { module$refClassGenerators <- generators } for( i in seq_along(classes) ){ CLASS <- classes[[i]] clname <- CLASS@.Data demangled_name <- sub( "^Rcpp_", "", clname ) .classes_map[[ CLASS@typeid ]] <- storage[[ demangled_name ]] <- .get_Module_Class( module, demangled_name, xp ) # exposing enums values as CLASS.VALUE # (should really be CLASS$value but I don't know how to do it) if( length( CLASS@enums ) ){ for( enum in CLASS@enums ){ # #nocov start for( i in 1:length(enum) ){ storage[[ paste( demangled_name, ".", names(enum)[i], sep = "" ) ]] <- enum[i] } } # #nocov end } } # functions functions <- .Call( Module__functions_names, xp ) for( fun in functions ){ storage[[ fun ]] <- .get_Module_function( module, fun, xp ) # register as(FROM, TO) methods converter_rx <- "^[.]___converter___(.*)___(.*)$" if( length( matches <- grep( converter_rx, functions ) ) ){ # #nocov start for( i in matches ){ fun <- functions[i] from <- sub( converter_rx, "\\1", fun ) to <- sub( converter_rx, "\\2", fun ) converter <- function( from ){} body( converter ) <- substitute( { CONVERT(from) }, list( CONVERT = storage[[fun]] ) ) setAs( from, to, converter, where = where ) } } # #nocov end } assign( "storage", storage, envir = as.environment(module) ) module } dealWith <- function( x ) if(isTRUE(x[[1]])) invisible(NULL) else x[[2]] # #nocov method_wrapper <- function( METHOD, where ){ noargs <- all( METHOD$nargs == 0 ) stuff <- list( class_pointer = METHOD$class_pointer, pointer = METHOD$pointer, CppMethod__invoke = CppMethod__invoke, CppMethod__invoke_void = CppMethod__invoke_void, CppMethod__invoke_notvoid = CppMethod__invoke_notvoid, dealWith = dealWith, docstring = METHOD$info("") ) f <- function(...) NULL if( noargs ){ formals(f) <- NULL } extCall <- if( noargs ) { if( all( METHOD$void ) ){ # all methods are void, so we know we want to return invisible(NULL) substitute( { docstring .External(CppMethod__invoke_void, class_pointer, pointer, .pointer ) invisible(NULL) } , stuff ) } else if( all( ! METHOD$void ) ){ # none of the methods are void so we always return the result of # .External substitute( { docstring .External(CppMethod__invoke_notvoid, class_pointer, pointer, .pointer ) } , stuff ) } else { # some are void, some are not, so the voidness is part of the result # we get from internally and we need to deal with it substitute( # #nocov start { docstring dealWith( .External(CppMethod__invoke, class_pointer, pointer, .pointer ) ) } , stuff ) # #nocov end } } else { if( all( METHOD$void ) ){ # all methods are void, so we know we want to return invisible(NULL) substitute( { docstring .External(CppMethod__invoke_void, class_pointer, pointer, .pointer, ...) invisible(NULL) } , stuff ) } else if( all( ! METHOD$void ) ){ # none of the methods are void so we always return the result of # .External substitute( { docstring .External(CppMethod__invoke_notvoid, class_pointer, pointer, .pointer, ...) } , stuff ) } else { # some are void, some are not, so the voidness is part of the result # we get from internally and we need to deal with it substitute( # #nocov start { docstring dealWith( .External(CppMethod__invoke, class_pointer, pointer, .pointer, ...) ) } , stuff ) # #nocov end } } body(f, where) <- extCall f } ## create a named list of the R methods to invoke C++ methods ## from the C++ class with pointer xp cpp_refMethods <- function(CLASS, where) { finalizer <- eval( substitute( function(){ .Call( CppObject__finalize, class_pointer , .pointer ) }, list( CLASS = CLASS@pointer, CppObject__finalize = CppObject__finalize, class_pointer = CLASS@pointer ) ) ) mets <- c( sapply( CLASS@methods, method_wrapper, where = where ), "finalize" = finalizer ) mets } cpp_hasDefaultConstructor <- function(CLASS) { .Call( Class__has_default_constructor, CLASS@pointer ) } binding_maker <- function( FIELD, where ){ f <- function( x ) NULL body(f) <- substitute({ if( missing( x ) ) .Call( CppField__get, class_pointer, pointer, .pointer) else .Call( CppField__set, class_pointer, pointer, .pointer, x) }, list(class_pointer = FIELD$class_pointer, pointer = FIELD$pointer, CppField__get = CppField__get, CppField__set = CppField__set )) environment(f) <- where f } cpp_fields <- function( CLASS, where){ sapply( CLASS@fields, binding_maker, where = where ) } .CppClassName <- function(name) { paste0("Rcpp_",name) # #nocov } Rcpp/R/loadRcppModules.R0000644000176200001440000000450313023027267014603 0ustar liggesusers# Copyright (C) 2010 - 2016 John Chambers, Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . loadRcppModules <- function(direct=TRUE) { # #nocov start # deprecation added May 2016, 'loadModule' has been prefered for years .Deprecated("loadModule") ## hunt for the namespace of the package that calls this calls <- sys.calls() w <- which( sapply( calls, function(call){ identical( call[[1L]], as.name( "runHook" ) ) } ) ) if( !length(w) ) stop( "loadRcppModules can only be used within a .onLoad function" ) w <- w[ length(w) ] call <- calls[[w]] if( !identical( call[[2L]], ".onLoad" ) ) stop( "loadRcppModules can only be used within a .onLoad function" ) f <- sys.frame( w ) ns <- get("env", f ) if( !isNamespace( ns ) ) stop( "loadRcppModules not called from a namespace" ) pkg <- get( "pkgname", f ) lib <- get( "libname", f ) ## look for declared modules in the DESCRIPTION fields description <- packageDescription(pkg, lib.loc=lib) modules <- description[["RcppModules"]] if( !is.null( modules ) ){ modules <- strsplit( modules, "[[:space:]]*,[[:space:]]*")[[1L]] for( m in modules ){ tryCatch( { mod <- Module( m, pkg, mustStart = TRUE) if(isTRUE(direct)){ populate( mod, ns ) } else { forceAssignInNamespace( m, mod, ns ) } assign(.moduleMetaName(m), mod, envir = ns) }, error = function(e){ stop( sprintf( "failed to load module %s from package %s\n%s", m, pkg, conditionMessage(e) ) ) }) } } } # #nocov end Rcpp/R/inline.R0000644000176200001440000000367613111112042012756 0ustar liggesusers# Copyright (C) 2009 - 2017 Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . Rcpp.plugin.maker <- function(include.before = "", include.after = "", LinkingTo = unique(c(package, "Rcpp")), Depends = unique(c(package, "Rcpp")), Imports = unique(c(package, "Rcpp")), libs = "", Makevars = NULL , Makevars.win = NULL, package = "Rcpp") { function(...) { includes <- sprintf("%s #include %s #ifndef BEGIN_RCPP #define BEGIN_RCPP #endif #ifndef END_RCPP #define END_RCPP #endif using namespace Rcpp;", include.before, include.after) out <- list(env = list( PKG_LIBS = libs ), includes = includes, LinkingTo = LinkingTo , body = function( x ) { sprintf( "BEGIN_RCPP\n%s\nEND_RCPP", x ) }, Depends = Depends, Imports = Imports) if (!is.null(Makevars)) out$Makevars <- Makevars if (!is.null(Makevars.win)) out$Makevars.win <- Makevars.win out } } inlineCxxPlugin <- Rcpp.plugin.maker() Rcpp/R/populate.R0000644000176200001440000000205612253723677013354 0ustar liggesusers# Copyright (C) 2010 - 2011 John Chambers, Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . populate <- function( module, env ){ # make sure the module is loaded module <- Module( module, mustStart = TRUE ) storage <- get( "storage", as.environment(module ) ) symbols <- ls( storage ) is_ns <- isNamespace( env ) for( x in symbols ){ forceAssignInNamespace( x, storage[[x]], env ) } } Rcpp/R/Rcpp.package.skeleton.R0000644000176200001440000002513214711515066015634 0ustar liggesusers# Copyright (C) 2009 - 2021 Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . Rcpp.package.skeleton <- function(name = "anRpackage", list = character(), environment = .GlobalEnv, path = ".", force = FALSE, code_files = character(), cpp_files = character(), example_code = TRUE, attributes = TRUE, module = FALSE, author = "Your Name", maintainer = if (missing(author)) "Your Name" else author, email = "your@email.com", license = "GPL (>= 2)") { havePkgKitten <- requireNamespace("pkgKitten", quietly=TRUE) call <- match.call() call[[1]] <- as.name("package.skeleton") env <- parent.frame(1) if (!is.character(cpp_files)) stop("'cpp_files' must be a character vector") # #nocov if (!length(list)) { fake <- TRUE assign("Rcpp.fake.fun", function() {}, envir = env) if (example_code && !isTRUE(attributes)) { assign("rcpp_hello_world", function() {}, envir = env) remove_hello_world <- TRUE } else { remove_hello_world <- FALSE } } else { if (example_code && !isTRUE(attributes)) { if (!"rcpp_hello_world" %in% list) { # #nocov start assign( "rcpp_hello_world", function() {}, envir = env) call[["list"]] <- as.call(c(as.name("c"), as.list(c("rcpp_hello_world", list)))) } remove_hello_world <- TRUE # #nocov end } else { remove_hello_world <- FALSE } fake <- FALSE } ## first let the traditional version do its business ## remove Rcpp specific arguments call <- call[ c(1L, which(names(call) %in% names(formals(package.skeleton)))) ] if (fake) { call[["list"]] <- c(if(isTRUE(example_code) && !isTRUE(attributes)) "rcpp_hello_world", "Rcpp.fake.fun") } tryCatch(eval(call, envir = env), error = function(e){ stop(sprintf("error while calling `package.skeleton` : %s", conditionMessage(e))) # #nocov }) message("\nAdding Rcpp settings") ## now pick things up root <- file.path(path, name) # Add Rcpp to the DESCRIPTION DESCRIPTION <- file.path(root, "DESCRIPTION") if (file.exists(DESCRIPTION)) { imports <- c(if (isTRUE(module)) "methods", sprintf("Rcpp (>= %s)", getRcppVersion())) splitname <- strsplit(author, " ")[[1]] x <- cbind(read.dcf(DESCRIPTION, fields = c("Package", "Type", "Title", "Version", "Date", "Description", "License")), "Imports" = paste(imports, collapse = ", "), "LinkingTo" = "Rcpp", "Authors@R" = sprintf("person(\"%s\", \"%s\", role = c(\"aut\", \"cre\"), email = \"%s\")", paste(splitname[-length(splitname)], collapse=" "), splitname[length(splitname)], email)) #x[, "Author"] <- author #x[, "Maintainer"] <- sprintf("%s <%s>", maintainer, email) x[, "License"] <- license x[, "Title"] <- "Concise Summary of What the Package Does" x[, "Description"] <- "More about what it does (maybe more than one line)." message( " >> added Imports: Rcpp" ) message( " >> added LinkingTo: Rcpp" ) write.dcf(x, file = DESCRIPTION) write.dcf(x[1, c("Package", "Type", "Title", "Version", "Date", "Authors@R", "Description", "License", "Imports", "LinkingTo"), drop = FALSE], file = DESCRIPTION) } ## add useDynLib and importFrom to NAMESPACE NAMESPACE <- file.path(root, "NAMESPACE") lines <- readLines(NAMESPACE) ns <- file(NAMESPACE, open="w") if (!any(grepl("useDynLib", lines))) { if (getRversion() >= "3.4.0") { lines <- c(sprintf( "useDynLib(%s, .registration=TRUE)", name), lines) } else { lines <- c(sprintf( "useDynLib(%s)", name), lines) # #nocov } writeLines(lines, con = ns) message(" >> added useDynLib directive to NAMESPACE" ) } if (isTRUE(module)) { writeLines('import(methods, Rcpp)', ns) message(" >> added import(methods, Rcpp) directive to NAMESPACE") } else { writeLines('importFrom(Rcpp, evalCpp)', ns) message(" >> added importFrom(Rcpp, evalCpp) directive to NAMESPACE" ) } if (!any(grepl("^exportPattern", lines))) { writeLines("exportPattern(\"^[[:alpha:]]+\")", ns) } close( ns ) ## update the package description help page if (havePkgKitten) { # if pkgKitten is available, use it pkgKitten::playWithPerPackageHelpPage(name, path, maintainer, email) } else { .playWithPerPackageHelpPage(name, path, maintainer, email) # #nocov } ## lay things out in the src directory src <- file.path(root, "src") if (!file.exists(src)) { dir.create(src) } skeleton <- system.file("skeleton", package = "Rcpp") if (length(cpp_files) > 0L) { for (file in cpp_files) { # #nocov start file.copy(file, src) message(" >> copied ", file, " to src directory" ) # #nocov end } } if (example_code) { if (isTRUE(attributes)) { file.copy(file.path( skeleton, "rcpp_hello_world_attributes.cpp"), file.path( src, "rcpp_hello_world.cpp")) message(" >> added example src file using Rcpp attributes") } else { header <- readLines(file.path(skeleton, "rcpp_hello_world.h")) header <- gsub("@PKG@", name, header, fixed = TRUE) writeLines(header , file.path(src, "rcpp_hello_world.h")) message(" >> added example header file using Rcpp classes") file.copy(file.path(skeleton, "rcpp_hello_world.cpp"), src) message(" >> added example src file using Rcpp classes") rcode <- readLines(file.path( skeleton, "rcpp_hello_world.R")) rcode <- gsub("@PKG@", name, rcode, fixed = TRUE) writeLines( rcode , file.path( root, "R", "rcpp_hello_world.R")) message(" >> added example R file calling the C++ example") } hello.Rd <- file.path(root, "man", "rcpp_hello_world.Rd") unlink(hello.Rd) file.copy(system.file("skeleton", "rcpp_hello_world.Rd", package = "Rcpp"), hello.Rd) message( " >> added Rd file for rcpp_hello_world") } if (isTRUE(module)) { file.copy(system.file("skeleton", "rcpp_module.cpp", package="Rcpp"), file.path(root, "src")) file.copy(system.file("skeleton", "Num.cpp", package="Rcpp"), file.path(root, "src")) file.copy(system.file("skeleton", "stdVector.cpp", package="Rcpp"), file.path(root, "src")) file.copy(system.file("skeleton", "zzz.R", package ="Rcpp"), file.path(root, "R")) file.copy(system.file("skeleton", "Rcpp_modules_examples.Rd", package ="Rcpp"), file.path(root, "man")) message(" >> copied the example module file ") } # generate native routines if we aren't using attributes (which already generate # them automatically) and we have at least R 3.4 if (!attributes) { if (getRversion() >= "3.4.0") { con <- file(file.path(src, "init.c"), "wt") tools::package_native_routine_registration_skeleton(root, con=con) close(con) message(" >> created init.c for package registration") } else { message(" >> R version older than 3.4.0 detected, so NO file init.c created.") # #nocov } } lines <- readLines(package.doc <- file.path( root, "man", sprintf("%s-package.Rd", name))) lines <- sub("~~ simple examples", "%% ~~ simple examples", lines) lines <- lines[! grepl("~~ package title", lines)] lines <- lines[! grepl("~~ The author and", lines)] lines <- sub("Who wrote it", author, lines ) lines <- sub("Who to complain to.*", sprintf("%s <%s>", maintainer, email), lines) writeLines(lines, package.doc) if (fake) { rm("Rcpp.fake.fun", envir = env) unlink(file.path(root, "R" , "Rcpp.fake.fun.R")) unlink(file.path(root, "man", "Rcpp.fake.fun.Rd")) ## cleansing NAMESPACE of fake function entry lines <- readLines(NAMESPACE) lines <- lines[!grepl("^export.*fake\\.fun", lines)] writeLines(lines, NAMESPACE) } if (isTRUE(remove_hello_world)) { rm("rcpp_hello_world", envir = env) } if (attributes) { compileAttributes(root) message(" >> compiled Rcpp attributes ") } invisible(NULL) } ## Borrowed with love from pkgKitten, and modified slightly .playWithPerPackageHelpPage <- function(name = "anRpackage", path = ".", maintainer = "Your Name", email = "your@mail.com") { root <- file.path(path, name) # #nocov start helptgt <- file.path(root, "man", sprintf( "%s-package.Rd", name)) helpsrc <- system.file("skeleton", "manual-page-stub.Rd", package="Rcpp") ## update the package description help page if (file.exists(helpsrc)) { lines <- readLines(helpsrc) lines <- gsub("__placeholder__", name, lines, fixed = TRUE) lines <- gsub("Who to complain to ", sprintf( "%s <%s>", maintainer, email), lines, fixed = TRUE) writeLines(lines, helptgt) } invisible(NULL) # #nocov end } Rcpp/R/loadModule.R0000644000176200001440000001105713023027637013576 0ustar liggesusers# Copyright (C) 2010 - 2015 John Chambers, Dirk Eddelbuettel and Romain Francois # # This file is part of Rcpp. # # Rcpp is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # Rcpp is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Rcpp. If not, see . ## the following items are to get around some insanity in the ## CMD check of packages using Rcpp that dies in loadModule() ## because some code somewhere can't find the methods package isBotchedSession <- function() ! ("package:methods" %in% search()) .moduleNames <- function(what) { assignAs <- allNames(what) sameNames <- !nzchar(assignAs) assignAs[sameNames] <- what[sameNames] assignAs } .DummyModule <- function(name, what) { # #nocov start value <- new.env() storage <- new.env() assign("storage", storage, envir = value) assign("moduleName", name, envir = value) allNames <- names(.moduleNames(what)) for(el in allNames) assign(el, NULL, envir = storage) value } # #nocov end .moduleMetaName <- function(name) methods::methodsPackageMetaName("Mod",name) moduleIsLoaded <- function(name, env) exists(.moduleMetaName(name), envir = env, inherits = FALSE) loadModule <- function( module, what = character(), loadNow, env = topenv(parent.frame())) { if(is(module, "character")) { loadM <- NULL metaName <- .moduleMetaName(module) if(exists(metaName, envir = env, inherits = FALSE)) loadM <- get(metaName, envir = env) } else if(is(module, "Module")) { loadM <- as.environment(module) # #nocov module <- get(loadM, "moduleName") # #nocov } else stop(gettextf("Argument \"module\" should be a module or the name of a module: got an object of class \"%s\"", class(module))) if(missing(loadNow)) { # test it if(is.null(loadM)) loadM <- tryCatch(Module( module, mustStart = TRUE, where = env ), error = function(e)e) loadNow <- !is(loadM, "error") } if(loadNow) { ## .botched <- isBotchedSession() .botched <- FALSE if(is.null(loadM)) loadM <- tryCatch(Module( module, mustStart = TRUE, where = env ), error = function(e)e) if(is(loadM, "error")) { if(.botched) # #nocov start return(.DummyModule(module, what)) stop(gettextf("Unable to load module \"%s\": %s", as(module, "character"), loadM$message)) # #nocov end } if(!exists(metaName, envir = env, inherits =FALSE)) assign(metaName, loadM, envir = env) if(!length(what)) # no assignments return(loadM) env <- as.environment(env) ## get the storage environment, for what=TRUE storage <- as.environment(get( "storage", as.environment(loadM ) )) if(identical(what, TRUE)) what <- objects(storage) missingObjs <- !sapply(what, function(symb) exists(symb, envir = storage, inherits = FALSE)) if(any(missingObjs)) { if(.botched) { # #nocov start for(el in what[missingObjs]) assign(el, NULL, envir = storage) } else { warning(gettextf("%s not found in module \"%s\"", paste0('"', what[missingObjs], '"', collapse = ", "), as.character(module))) what <- what[!missingObjs] } # #nocov end } assignAs <- .moduleNames(what) for( i in seq_along(what) ) { if(.botched) assign(assignAs[[i]], NULL, envir = storage) else assign(assignAs[[i]], get(what[[i]], envir = storage), envir = env) } loadM } else { # create a load action to recall this function myCall <- match.call() f <- function(ns) NULL myCall$env <- as.name("ns") myCall$loadNow <- TRUE body(f, envir = env) <- myCall setLoadAction(f, where = env) invisible(myCall) # #nocov } } Rcpp/cleanup0000755000176200001440000000310414740551305012535 0ustar liggesusers#!/bin/sh #cd inst/doc && rm -f index.html *.tex *.bbl *.blg *.aux *.out *.log && cd - rm -f confdefs.h config.log config.status \ src/*.o src/*.so src/*.a src/*.d src/*.dll src/*.rc \ RcppSrc/*.o RcppSrc/*.a inst/Rcpp-version.txt \ inst/lib/libRcpp.so inst/lib/Rcpp*.h inst/lib/libRcpp.a \ inst/doc/*.cpp inst/doc/*.hpp \ inst/doc/*.out \ inst/doc/.build.timestamp \ inst/doc/*.Rd inst/doc/*.aux inst/doc/*.log inst/doc/*.tex \ inst/doc/latex/*.aux inst/doc/latex/*.log \ inst/examples/ConvolveBenchmarks/*.o \ inst/examples/ConvolveBenchmarks/*.so \ inst/examples/functionCallback/*.so \ inst/examples/functionCallback/*.o \ inst/examples/OpenMP/piWithInterrupts.o \ inst/examples/OpenMP/piWithInterrupts.so \ inst/discovery/cxx0x.Rout \ inst/unitTests/testRcppModule/src/*.o \ inst/unitTests/testRcppModule/src/*.so \ inst/unitTests/testRcppClass/src/*.o \ inst/unitTests/testRcppClass/src/*.so \ src/Makedeps libRcpp.a \ src/symbols.rds \ inst/unitTests/testRcppClass/src/symbols.rds \ vignettes/*.aux vignettes/*.log vignettes/*.out \ vignettes/*.tex vignettes/*.bbl vignettes/*.blg \ vignettes/*.toc vignettes/*.tpt vignettes/*.xwm rm -rf autom4te.cache inst/lib/ inst/doc/man/ inst/doc/html/ inst/doc/latex/ \ inst/doc/auto inst/bib/auto inst/doc/Rcpp-*/auto/ src-* vignettes/auto find . -name \*~ -exec rm {} \; find . -name \*.flc -exec rm {} \; (test -d vignettes/ && cd vignettes/ && test -f Makefile && make clean && cd -) >/dev/null (test -d vignettes/rmd && cd vignettes/rmd/ && test -f Makefile && make clean && cd -) >/dev/null Rcpp/vignettes/0000755000176200001440000000000014740551305013172 5ustar liggesusersRcpp/vignettes/Rcpp-FAQ.Rnw0000644000176200001440000000037413555366266015214 0ustar liggesusers\documentclass{article} \usepackage{pdfpages} %\VignetteIndexEntry{Rcpp-FAQ} %\VignetteKeywords{Rcpp, FAQ, R, Cpp} %\VignettePackage{Rcpp} %\VignetteEncoding{UTF-8} \begin{document} \includepdf[pages=-, fitpaper=true]{pdf/Rcpp-FAQ.pdf} \end{document} Rcpp/vignettes/Rcpp-sugar.Rnw0000644000176200001440000000040213555366266015716 0ustar liggesusers\documentclass{article} \usepackage{pdfpages} %\VignetteIndexEntry{Rcpp-sugar} %\VignetteKeywords{Rcpp, sugar, R, Cpp} %\VignettePackage{Rcpp} %\VignetteEncoding{UTF-8} \begin{document} \includepdf[pages=-, fitpaper=true]{pdf/Rcpp-sugar.pdf} \end{document} Rcpp/vignettes/Rcpp-package.Rnw0000644000176200001440000000041013555366266016167 0ustar liggesusers\documentclass{article} \usepackage{pdfpages} %\VignetteIndexEntry{Rcpp-package} %\VignetteKeywords{Rcpp, package, R, Cpp} %\VignettePackage{Rcpp} %\VignetteEncoding{UTF-8} \begin{document} \includepdf[pages=-, fitpaper=true]{pdf/Rcpp-package.pdf} \end{document} Rcpp/vignettes/pdf/0000755000176200001440000000000014711515066013745 5ustar liggesusersRcpp/vignettes/pdf/Rcpp-attributes.pdf0000644000176200001440000027173014711515066017542 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 3592 /Filter /FlateDecode /N 61 /First 501 >> stream x[[oH~_Q>l@} ؉Im-mNdRCRs~A5I%[(R[uw_u0 x)pippBX| X\Tzfͬ@+{( W=!hiAH0 d6i‚ހp ( xPʁe4.+Vp)-K%%h\!AkIWLq+%h#<\<\s=U2NC?OC7<@^Y5IPi޿K.q>@ߗa_<ߦ~R%~17.<_[;HO~L(+Ş1/2o .MCQ@_oy1.cx6 <9|/*GE:3$O*VyVOMYV:2o},~ov0,Y璼Vϋuݾ5wEs]5wMsXyV*Q/y;4yo[/0ﻤY0//nÓ Ǟ3(OFe|t* 軃@O ֏?v?2fq#t;ّ>L#b:% {1ꊩ$f=@U >Fy\$妫>wB]ۧZ]E׭9]dX f{^ʓ${3xO@_d|f@?^V/Ӣ/=JqjD hItOھ۬k)ܖVqa]}KK->`ZК5ʻƛ]]fzjD~}ݵj5w ]뗙ONcP#Qt uCQh[xu_aXрtV,h¿m:3m˘F-0nz'n>*ic&ɋ :MF_?tzWz"1akP巳vЄNoblpuQ}6!Y`sl jmphNBy00>X~z.iZ<=gݰ5ܱǣ2K<*~TI U;!Ц#_o-2oטv2&: 5z#zddRbPIH@pS䲺s.HֳAT0(YM#RQ_mB K)B;D/wiV&%cvY/\,ĸF8ɉDu"n8OpF3?ʒ|e&^)|(N4N2`'oɁ>񥐄{0 (.CN1"}d3}d;7ke; ?{Kw:I#f qa(0___|AYT#NˑBp˒Ni(J*s4p2Sr" ~bJ;x~1C-NsֆkI;#JH:5#1x/4f)zʼnr&ƈt[с"v2.9CdN ]b(%{(rX#@z'AyFl CyAz~?~ 8OYN.bœWKK&#endstream endobj 63 0 obj << /Subtype /XML /Type /Metadata /Length 1388 >> stream GPL Ghostscript 10.03.1 2024-09-12T11:14:40+02:00 2024-09-12T11:14:40+02:00 LaTeX with hyperref endstream endobj 64 0 obj << /Type /ObjStm /Length 2702 /Filter /FlateDecode /N 60 /First 501 >> stream xZms6_]-nzqKҴDjI'mz )Q$E+ih$ @I1JB ApCI g A0ݐ&@M-  ȂK"9#%(@4.E!-c^kS[,qMpk狻jI@}1Zo, ̦b 'Ġ 㫟*;wN`y}n7U1߀|uq}b0>"DFDKd-\]g6ǝFM6(p:C@i A Ky6Too:%4\m < y%ƴq^?߶ _S J0H,WB>=5&O &xEm}D4 "B><:W U9{@̢]-L>~^!w[ڒ,5)RqCAg: ^p 2 D[+&l2Un Bf5s/Ɔ_4 @oFW HZҫ.{33Z BR۔916VžڜPimKS}5ǡv@Ӈ)}/fngp./Я=zų|Mxp1|L7_Ngtאi~;ZMj,Vitk O@Wwo6yO/QWr:ܮSgO8dӊ;I5/e6us&Zbzs[ގVWgRc]^^덾*#>ltå.πE1uytVJ=݌ffV~6]LHIowneŋW/_bI9ߑİK !??q )[οRȑM˭Ƙq{ $zis3,VDoa91T^viZܱm\A#t/{dǞjR25|BIUCY> 觠/qzF%ހ|EIzbS-._kgbc N>6o Ɓ8z:q9cիjb"8 3cK GʤuTQ!tElp^/;p6d %PEaUzZ[IT?E ,( *Nr(W [ blzn> ^~qta.eӗr7ǫ\N/x/_鐤UQ-V>%Fy\4'}Հ+`QlkdN]:.Sbz! D2rUK 1chc\E.,M$l=xl1_vI:u&ve&S'\ONjId덏2%{y/u˧?wMY6kjlX'l駧 J|'U;#}dj!mLO *2sNY`#)I0:Qbg\0*J891uAQHʧ>7:UL/T ]Jqj3y_ÚSzUN^yrtse٩it ߭>Jb̶r|/nEmӭ[>׏7V_+\x1[xHOtշ,o~zB/rvΛ8h}7zB;Ǒ9qyPlFrudyNϝ]V?qշU> stream x=rȑFEOCو96ֱz 0 w(!$BPWe&[L`b/Ii+#Ћ3^X_ߟd(T3?]H M--o.z[RZ.9ńi`#JbI0r~t/okZ?/gc貅lkPVaeGOKjD %#PrŴ2,ɗͅ 573؂c֋3-zcAU%z=h>+~,)X6yyQ )QU #B8ug?迨#,ŃQbaSKy]4P {.\[v&{FpNh~t:D`*ق/f&G33XQf>a㥈X 'cLB g=j=8*͏;SWS(~U㊭$# 9ϟ$c +^xӘ+u@RQT1>,#n̆]S;;t`0lQ]7Y5PGkgø <ۖyo@Yunr}SQݴ>ϫUm`Dc(BSzQ IG KcaxR\g.I3 AwEۺ+h']܅8+82nm~7Y͹–0+\zϖz`[X ŒkHotm%`̳ ~7wQluu;O 8A6/%&t , )G oR(,7yw7@X#dCthAޔŶEWuQͮn̥cc"6k۬L%R?ht7y)`呣Bmݩ^"+Ʌ3  `3zAWR,`  *l }ॅs-+=Ync 򘬦`DתƱ1Gz!&===нwB#2;Ay{,VP#N0i$L7uӋw] N(/: >zw}6(ljPVUuŸ!tRcq1״ߍmoy+7eo+K&!A^nQ{d뷮.Ż: UGdw E sCpH>5?&AǨIM3zGI ^INGL0LlRJ*yEQ ?}ezqw\<#bowY9MVXx9&fo)rܸe<$XpGVE|wj0iD[ij>0(J(KThsqg wǞ u*2~վ(3d"6y.{̛NI'-5f[c" Pp"ZgBYpUoh06 .@,{fd1C8uN Z8H8 z;L((WX^ rX.WSu_S1H Z˛ Nx 0_Թ% 8\9N !05r}vyhlʘcS+J!?jHVv' mY6b [а5.dLZ?*vYɚMcgpm5g!Λ«/qL t0MPãjabvA5XA}fn'{c, B#(a #<=Ԟj51qU ‰\Rz|^F2pRThP9=>^Q.enU3%L9&}=%!?rl" /ډ#2.Dl<0;WBv:ĜSl ҽͺ@0軮`ny޳ Iqc`ܘhx8'WFZ1ʉ bS? "3\l6z4zVSS Cg5gLFf&J5&Xt,U&/]8 "e]lR谏ݧnO|IxNU_sܘ XdhA% Ss`$@6f6k@8*݅x0Lۼ ]?PKQy=<kZ0YR: !r9Ž! W{"~g޷v҅{Ǜ(aQo8]ԕO `Oy uzOSz`N.Нܣ6M Y֟Xoj5pUH{W>8}@U݅k3gS)鐏>4FJ#J)sg@@ꨦ|lģPvU%# K `9Wq zvl!&F,hE Eo]h7!<A &;̈JnS[RQsIPݧ#jKډu攁H[(8=#>:𻠱e/MrpMGKv||Yf*_E͂Sll0 d¹U]PVpz+)и4PONF)# IK,>my&ESH`Ik1U֟ۼ)HX#v^`o$ +Rz6 .1Wșm*Cr<\3z!sC{ȘG],Rا]ñ4ɷ3 ^-ayʶb3GLq5/qBk2 ).L ͘2IJyR2`ͻ\Y,8I.1By^<oO(6Rg6*FVity* &r44YB+ L)Tby 41,k2ܻ~kz[ŕaYnh tfRği\Kh#%GL"3,5` 1藣vܼ ?b)9 7Mř(mŗp4~a" t.F0^HxE.tr^7͆I\0f(!'}?!QL Kcވx8q',bi&rk5Q6 1boˋB SinTXbOǜ]ĆW h$]׺ϳbg~5Y,y(و<) k}Ui$+/55}!Ґ&g`Sp@*o4x8QumC!4 x dB1e}F3KA{LߵGjl2Ag9I9R !ʼn6ڦݧ .{>OCu5TH nfC+UCz+%]U}.EM1];d9f`JJJ@ rylbD:$ D$TkI3Ʃ>: 99>mHp ޗ#-f=4>8y<$ثo*k E"(,Lh|HEuáBI#]25z㑉:V4]Cn7ْos:FFiC !/ fFbZ_fQ 5)֛h+_݊=Ĺи1)6x#v~۷Xz*ZHEYF }3ܬueZܕVEawiOwR!ụk.jyq0fr1CCl_vJMO1:1kx8FY3|ԬgЩtјrPuc>B1(PB?i3Q`Y67Ur}&hj2Os{hfCQHatsiRemcMPC'R[ k3'f<ٛrJ!d P_<_ucVMlF8j;'=e]|4^n_>ˠF> hZ#urHnI ̳Si?biG=Xk~H 0UY|Z[B [mE}gfSL#·NjH8<ʇe_Ĕ"/#^QAY> ǀN;c|WhcCWi 1ɬ:Voכa3{}h)1!dVendstream endobj 126 0 obj << /Filter /FlateDecode /Length 7282 >> stream x]rǕCm~Ѯ8(hI*E0$1` Jg:gz@\( tܚ#gwgltsǷngJ5̺YGFS,YftqwvI9hUwb<QrsW6 =ebSӳ"W7tߟ=;f7FaS䈍.gqKM(1lQ)EջZQ c1pm|4z? LɰZ+G+ sǦϖ|yq[4Ŭ-VoI)VnI)sbPղ-o]ڕc{5gNP%`9\@wƵyK`fi \*p?ެ Mc N ũ59}ϟϚhw4U-j[lk,ܕwӲI_rV2Hin-SPMnסc(ӡ7L5Lu@E~ks9z=@lpp''Ig:cy%#FZʎ@,ʭS p밈J:((X,N2˦sM2pũ&㊓q=na2u*O {rLw NI=Vϟf C-DZ"ߍ @U|Wܭ^r^FP%GB)CITu0?yD?f]H(ԫPS'F9dEjtƨLz>1]h Ϙ 1|vIFZKµa#rbTƙ‚+wqV-5FA{en:܋z99v` 㬋-H7:%I 4 3$N?vMހ7rk'1T(zvq*{$ۻ <(~8|>v(n64M9}JTZ>RPfL2d:&:9p(` ZE8|@sq;MAOY{[َNڷuނ=$a\.i{zݫrpJH (XB jN.B-u'(':YO(.N!~-8c0?򆪰>>INE5ek (#:)4y S|#jlJIjMdȯPchM6<1&ɬX)Xs>KA\S%"LD56-&X\1p>L2 *QI* p{`,URPU)MN!z6[:`@JДoY|[6 M0:k7 n%>SmG!ؚMW:-rI"(ַf1kȁb`89cUΪz7&wz]ܔL 𨌓  6WT :EѠ[Q>99̑h7:52#8b. sCт2xxI<5wDH:ֶ'DGy@Gy{:H|Rxwr |Mti7@TGIkr8&=T*IERi9UtZj3Uk0K@0iqAsM>΂HO8 '˛ {Ts}O87pI @\g&DfВj%W:ճgoBy&M1 T'+({.29NAbH aY~*Y[4?Y}74A'&^[jp?mz|`Y'dJ"+ko7=Eytye9=Q$/硔yu}WL,Gu}ݼJ0V;JRkk+B&F0`hZWfSE,S'C(A:g CvƩ3vTa! S55z<O!BA !"Z`)A$ jxԨ`h6KB"`_L߯dƦ<?~6쩩ޛmfO8ߓ[%$>-f~DXB{GIȍi"T;1Hl1|Xe,ZD@efMRED>"73}*O#m_%\a1GG%3B.y "(m'nu1F9']aޯ4;F@)[aPۑ3}a5$@K&IdoJ$Gn.2Zvx{[VdA@׺42~t|(1?.`[)gbujEkLރ.t>ALҲB%Y?u.t_бnA*)E73H}f]8ARl)$4A2~oꓓ09" N%=uX[ˎrM;c(- @ pqr֟%tp8x'Bv"~% )iT*1$.-q 2$UcTIG3ttFvd: Td>VeYzoA[y'Ě.j0,OD1>vr^FY5gn' TXrA3<ǻĖ-UF`BpZ1u;V[4pM^ Jq3+&մ^Y^e*Twd^^WUQ=G!4N~8"]_d/xX֎^͢V1iS^󈈇X&em^񀒽6@\Zsy u>kf3z@Q KN-J:c>=,1&]UKCjF&I|֬#CY 6jQn_{ޫ*4);Q}-ϨSvHkϘAK& rc}[41\ICbQM\Rŀ}*h3= ލR}^wN=>.y~DsG$dZyu>^~o^w_冴m5Fh*@&0!qqb%Dc]S`k=0Wu!LBzߘfWh:O&@R'dN>֗^ztO-lH1g؄cȍo2XMqWe(T[ssöav@ӲWpӋs}<+=h-ԡ(K+8SЦO*.:~e|ӣ)h-ϯҖ*9r1z=KIM9 WSN*#C#Q'dD#~քL(fs'Te*HSOR%>@e>!oOd>CUS^ش}`9[8+5(Ow 7ur:U25&eBr5K>#A~ƣ'B ?l|I%ܕ-y,wʊ/$S/~ @߇ֳWC6ZmW$|s]+߰`[dp&ɠ[|lNjVzU\-d9xAR);0QHct5>u}6WGSK ֒e;STAm]43ggpdͿ⽍$6Dij]s{zp<L&l(9}hIܮ~+JƬ@K8FTD$FmOJB7`jHyA08os!,q$ol|VH;aBR,W.¥)=ɑ H }^9jBe}yHj 5` 'z*n2gﶹfѽ*MSl^)`$?X [0pIRfZ1ظy TK=$0 (Ua׆-e D:D^wwMwu\;R8B^v.vZ촽Q}ޑ 'f!layN |f7di) !K.qmv٥A(ixt0ʵH7: ]tK_*OptD*Ƹp> ldg4p_\۶]?{6kb,1f2vh4Y77Vl,#C77wQQ})v(#6b&y'8/r1?Z|BI,ncʲttendstream endobj 127 0 obj << /Filter /FlateDecode /Length 7348 >> stream x][~ҏ`l*[xy6r=3mMݔ4ݿun4ErFfsk} _& by%FZ id{w&|5_*1s+'׷Wz^hN+4LWWNgy%/z^MgB[$V7e\o˺m~_)0):*i!/?'ja4O^]=rL(G7Zm媬ro:E=NpZ)}y ;^@gIze)%>!rU  dxפ^=[o-OVY"s֦:kU񦌔p Tj=aK(LEOO bC]&X "m*w&tZ߼".D@ !}XI:2_m}CT]$"})Ȣj F7P͓B.bR頝'T9'Z_1&sO QTazRvXdB0N>bT!_`P5L|TplPLHpb>˕2'&pI Qnd[N6AZe=ያ۫@䮁*J $NL \M]1j4O}JU?@j ĨԌA2׉E+QsFOgZhm^%w"Ų)_O,D^3&!饅dT 6FϏ,AoG՗KO\63'7`0C_ĥ3"I5(7v\yM+ $^xo%rj%?}JidP1o/-ڦtИ奿l/^΃3?9x1Ԋ33z`JzNktGKbA rS֋WeQ98=X6klMAW{U!銯2L\( l^s$5?R.>3)BmCgQΗbbVp8\Od.wdޗ۔UdSŇ;tLgw13i!+a7J',/"w+sg6XU\cI8 k?lWŢZ.ם$'y]Oz-gR{Gi-q_=ӖJ*S}ޤmbU6b^>MnScl^Oϸ)GV򻬆G)zBx7>m)NI&3E~Nqf(Em9So#Ĥ`6{Y'jIS*щ*AqЉ ,ة˱Z0Oc4 ,I̋k[H*?u#a^@;ZM&uGvE;}vdC֌s¡]4CDGdVOew)c; v[eBXTYy~Nrg(.D ɪ,>H/+pІZ33L0*;Hc(w{b1?5qIɬQɾfQnǞ3y;q)qO^]}$w)A4d4'zlI(^}?cy1)d )/oQw02/1͟s^=ev FcvEhy9gc9i xQ}=卜ӀⳜ\b\f(ƛH7lw',ĥ&pF^Y*n˛ow1{WsJ:+bU6uTrpۅ`AQf} O.f u)H9啜~0/(F( Ɩ03hp$^ BRe&8NЁ” H| nR[\f]gD 8iȊ6]Ar e4O-ŹV8/"fd$_#a|]?(g"KKrKRopBq9mZ?U25SCM:F:I,MrwEUBEM:ֲ]l^#8D'ϖf\;jJQ7{ j"}x9 ~ H^lcCz{0$C,XtMMVe[mO~81B'ɵ|YC$?ݖ`V6y=LMBt68əN,qƭ96ǿ$g:@3n\aNm{Bco I ;'7…m.Hw}e:Pe!5+Y*-Bz8noXޗY偕mQ- o,nl ]Eb>ReaUyG G4:1(QQN!uHTDkPᢗ rDA7K yi"~ݠ +aOx[+3=HvaBԤ}I>g@E% mLSœE3>[ ċIM7*)dhƛ=Cn$Z)Z6BŁVKEKn:00\Mbw ;1pQ6(;otOT)0je9SRSϘP`襁 /!$]II%3jЇׇ|­Y\$h8tNܢz[S I~W_~N+]je+@TF)%+p_l p_0}Jt ~@uBw0_'80;Rϋ&{Ta.1{GՀƪ5I"_K@=DdS-./*ڈЄ쑣U+ry;Bj25QA$"릮C:`UuetC5UlYYcTw> F&`5`%l tA5˨2JC ~Ja){uX Q!E#JPF4y?АU3jy>/&CE眂?̷M:Rܬ>x5{clz+w ":ce;hL'bȱ:)ut~8*Rܑit7)^Ty&?嶼 *"ޏIY =Cm PhW\L41 00D/҅cvƓ.׃͘y,"C)t2CQY4DžFh꓁_TMAsV89\(}@ZLBGUz*Ҭ#}2~Txǧn`u:[=:.B-1>v2rCw!51Wٽ穆N,(Wr`P27<r~7傑YRq!fgOXV^жʢ$\'V?,ZzjQJ \>9 K@(p\1FB8h%QY1V`C@FOgF> L8sTz$XqTj';X!Q߾+nEAt& l E|Sle$[qsm|r=2!a {|x!E|KAX l_+ũL[- "SL+5,2Nagqz!Ķֳ֘3txʲ=jhY=%J $2Qn5n @vn){,!aox=S-OҖ0EROR)m9Oާm(oܸ ?/{q~x䧋r'>{K[.dzS /wiuɔ hs cQz. W(;\.)a=w&!_!·:,xScy)i`*Y*ʭԐ/sb-+=Iݐq0CLDWVCX`5<Q0c+J?A\rӲ^@*f h  [4muH: ^Qt^GgNOIFC4Fz<b<ۜ#>5 !J)!lɦWX"8ɥ-&aх.FaiE G}*MB~fh]f_iYϲwQ\z7_eHs2NVSR:F{!]Ɠ0y}5L@ޒM5WPO~e AW'Ov0#0Vͺ^9iOzt.ȇ:08p`dIs&9I(x8 #x =}ǧCQŐ7û5˫6r^.BjٴnCT+\ʬ3L,~ h?WH0 r4CyNwM*0:T g(tLAGa[9t+/ <0̩܏pd-/ޖ(&ISMJe:6afɶeWm [uB8i!V8r=pU$"X",L L2!,2 K9H|?9L<[[)BMѤr]pX8=#%}mKz[#` 35).'gsũ3&'|rX0|؀"#?&qIۢ\V*uUqI0qPϜ.4~nm-y 'z@nO4UBw4` cNǿ؋9g5k D =#9~]_hC=R? wmZ8 ~8W2N7wT(FS<+9(7u|_nܽ) ~P!$3dR*eb$Ơ?S |bM1e^&kU|H9۝ =(o^Na˿ɣ32%)#Mlܶ(*B 87 V?uG>ۈ=}d"nx{8;5M7iI ƛ'1͹- "epEЇk,ӢlZ칓w "{ZG(:Y!O^v+ ֟lYCMS)N= ʽUpEܜcp(N #4|OSDM0hދ0- ˭9N﫦 lV==J V3elQ8 z(7pwғ]ٶyiK*HZGQ͕Ԇ[/ZPtnIEF)La~(7m IE"{"Pj޾qGdH^{.;> stream x\Ys#Ǒ~gG lT1!ɣlȺcfCdK@74ș߻c# 4XwVV_foFM~;Ig|u~OJM5̺ޅJnbV 9nәp2!IV:[OwX;61M.6uk,ul-^WzΓyȥmlؐ=sM4#IwNf\P=8 vVz'G˚NgXʸ Z(qqOzO]?{⼱5.]Z/Ϧ35Α> zdv"UdUWmWipJrN֓M=^0?G˳>ITIϨ4NL,7TJFjr{ƨLz> 3FaZ R3\Mg9~8Qp^8p4UltF翝9eo|/>(99aTxƤ0ޞ95q-U &NbYO ZԨϾYn:ogvNMq)zK!L\*5R2qc)gٿ{ZXNcLP'@z'uh.3A )瑷?CjOzY&,^j%FPG,ZN1^K(6HFv(W!ȶ^S?fP!Gz~S&r\{ B 'ժqK.m%H[ RmQAiJXŮOx_V/o ױs~3G2UJRvO1i.4#Y1BeoE*0z@],8_pʽ|&ݦUT>r~Bo-4ͭLfƹCXQը'&`wń+ܓZ<#=3JTΑ>36+EU%Qjjm2i5(mv3Ms5K "z]7p[B9Ы ݦY*}n'p*~ԡJf  ۩loNg ' s[uqk"F`-.&կu*YXhXCXd vAon,hdl]Tˮy aH0kv,[`_nnڮF3-=ê<ˇ҆2M:G޻|Fd۴T8Z* u-ܓط$M7lX4.U8~SeB#!E=/ !@z2B&l 8Krʀ B[Lئ&u[wYv9?(ex KVa#UE@62ٰo6*Pvс)]L.{7zS_֛ T[9?-ǟY:.qTU.[rCvqAUMlz1*k="92P|p*ѩp eHxF[R." S;a y2y)T]*V%&M]UM{63ҙ> Hr鯻k8'u;t\:lG+ -- &敐h1I+8}Rϭ⌣Fǭ P#jSnt<_DL&q(׊iSkմ}Di<_'=iAAH2̓ZƄNllp(*1"{V ε!~2ɹT+vb Cx0B'7q91h@Gt\q4l|zfRfX=5B첹j>oޒ9d\]F薧14C8&NMgLwvƁʤ^nQޫJiXR~?LoTM@*::8={3bD5'#V|½JRgf}MK98tyXHb+j|A/^Ui?/Uo?x޽t0R6cLuJU*Z7z`TgH9&oXJ ۮys>d@Z :(`BhZU \G+ű7->kHAE"bnKM4UTS$[;.%Bn2GxweǣcoG+ɂOQՕCDYTCq41b|rr#cT>{Rr )AY[BkMo K'RzHR+O@a@J`Qi"zzLA2 J$"| a4$r %ΠRDܵ?SJrS/n UDdBB%>߷uBՀ8QِrUmnuT&JQ: ͅJcZ&P9Mj쫶ve"h#d\n]ws a)&"*כj77j+rm~Ŏi8{T1$w:1`RE#笱^7tC0SU+:aEDuXQTA ]W}IUs2\ncϔ * 51A,Җ)4QZcf$VWG)L QJ֋QUHb e_'1#ކ@Sn3Pt*%Vj\2IJY$J$fw^|O:RClJJNʂMzADž{VAYJoE=-x^a[¶yҌdT bO!n=Fr,͗߾~=>}VFj8)-8dƉEU1{`ubo' S8FK0t^ys]!\`K 8ҷx] iC(&sp81z|{ JP {ҥtȷde2TIC {@5sEA@5}pX´in:iy6@y]H7S+Ĩūo:ˡ:1;=jmB漻#!£-!KFfvw =y©Qihj~^pyxL+lt )﯃y&gѸx"%lܲiG%U0a* ym X1˺md$|A&XĠj Xx _'wҸﱷV%Y?|\ZepO ,. ۈ! R06e' OesqBgMYv"W+JM/J@!t~e7dFX^)"҆G sqCĭƨkJh:LO.;OKHVrRH& ҙUf Rxn%28;2er`2\m] Z+ZxK}q)VPX:c]jW1r$ŵm,dwlk ݛ.|o: swǍ7xJr Y vCQ<(1mr'B>R< e،:}p+øő2pAE鞊OsF2e7B497dJBx~7L'`@M1Au ̴[I`$VX(PR*bLk((6^I2*,JP"ʸ/@gC2] `7ݲJW~Cr0P`oxuAAkx ep';ʼ>yDˉ!D}I2ࡳ$>N]SVEdS2I ^9S=d6NKNhY@ L ; xP:ZO ކppO:>k(Ќsr]" l3B|A:I%\WFՏ\B:GPO7\DM圪gyDIFtcbM*KJEc ;/*WBN6 0?v?b>:OOY#i9*T.>u7;3M.21ty>1ă46?[|`8f9FQ-h\i<j47ȁHϗsSٛ9!{u9QIS3rO@APHy[IU/,?G|u ƳJFP/-z+g:F9,.t As!CZ1g0wwA!4.WzҎ.HPhv~dԜzBq>K!xE6=4KO]i0pme&TW6.2% mb粁!_k6br)@_RI2s$LoXK^_8$ dWmZpYQo(xFCtxc He4!ѸnA[x$^ѫe_v/fô\0!Ayx/z4;C`g>LDG1kEmղ/`qAt-MqӤ,(ܙ`M*^ZF7o³: z=f ( OR[rK%f8zʵ|A!=&3/$T)*³YOyCJg=DϨbTsx(J7xl:>K=i|/qo,=-yJ<&xF_.w3Xp_bQ//#S wY XTA-}Xu-CgUmendstream endobj 129 0 obj << /Filter /FlateDecode /Length 7687 >> stream x=ْGra BM݇\jYjc haÑYGW p8#*+y(0?;_]߽RjaM^\0]h41: M4W ꮝ6G1 :zꅬ:7n~z߷؜/xMnymәЖ2nެw{E6>8Avvަ|lSSۮ?j.&3Ψg~jq4i$IO-ewl(c7>ͣI3,14E9m3MEYpn۟ݶ]LG'L,l~r:w|wL :Cyrݬ;vqSWVOWfSf[tvo_!p_]p2'&:GD(eSnUJO䏓5 U;\\&;;=4@{ͩn=U2`jQ|GL⇋pS/=ЊJ=1NSk{tfΥH~\eT&&3!JHmH/{ l BC&6dEÛryqM4n& 73`LRWwT0.P#SW-v9ߏlLd)zbbLgsʸC{޾z:BSճ_1A!\z0lY艼2*w#%eVnLMvi7emUH07R#췿EKQ..0tw$Dy5֕}U8M#0Z<3Oh- 6S\=pG%8 dž$'89ZF*O9hXgDym<^G˨=#R2w_!t&i엋yζQ(צc%9Pw}ӂt%܅r3CmH*;;v[s j=!wPoSwPdݮ~EA;h2kַQ{AmzXs } BD[NE`u3a-E&`Hw/6HnW/CҌH%aZҢ}o6˱zmBz!vXfM/y!kagj"'`)0!M\SC oҸfoVMAY Z2V <Λ,Ŗ$9XCLɗY:{ 8Rcz!-Q&YrAݬa%w;Y'R=~[䩓Sb|Ar2|E]̋zntM/5f݇,WAJb뀏yrtPa_/9t$WҼiesl/:)3u"%]l Y7vwߠ8[5MU\So }!ɪyH/ :7aYBv}n$p_ɨ/I{Pg|?<ϞB^ ŲXlDBi;vCyER~#ÉBEX\Zó t@[ bL$ вɽpe7#D1]ۇ_ma(8y %r/깃ف,i]9r YZIWW7*lFRte^ Qi~@"ʞ҉8I*:)A1n|= Lyʷ&%@s@bIoxb" 'k`A$W >SygQ d k1RN `1Qq\ށ]ؐض|/D“:[7}&dxBDw\oȶv`&*` @EoOXOmUyNJ7f(NY K`7Ԛh~|$!͚ng0/b3dTf5Ŭ f@l/f^^߬'TBs-ɻ~7 zׯu~Αn}zLÙzJw\^PFd9=Ud FL:7X%>Ͽۼ tHt-P Q!5Y\{UVc; jpc\!6@( lֿgUۧPu^,7AȮy߮-Μ +;.-v^Eq~9)Y2o> T ^~ t?鈘`3b[^𺤄ºlzR z v"3؉P`mfj *.jlxl],R2#zw}ڠY &3?<|b >-R3Re_lM| {yMD"A!pJ3&A R8aRanf->n-ujß#.4#:1rTz ZRT5y:#y~=XF,z6xQ<[&Q"r ڽK{DEPW@)|ī#5U*Pz~ȵ+*){/ǻ(DC$fEǐ=6Bl!؇OE\qE5}=*ͯBQ95IG9M2y97`BQ-2?r\SuGPHLfJǰ3IXIrgdO刿{*;{*쩜sj0G3J-ًV@~6TP.y5Ӑ Oq|-[ό3ᐋٞ1*l @u!-T<Eg;;kT >DJʭh{V2"6BY㬈^$i5Z[C ;Chӷߞ<?gӪ 0mwfPε 1iy6;Nr$O91 s$O❙"úYu:pO[42bt$!K19}.g. $Bj='T=80Ä\S4cTvGE_k}>ldlS7C2xw}^4E g,m}8J*GuԂp̢e\"sd^qc2HZzKOGQjꙪyvlynNA_ O@޲wU揚tQv 17RRS:vpץotp y}d}Z QӋ1':ɶ9d" `2+ǿ|ߏaVvulX2mcxH6cd&t|}E'mۄ\1MJm| w:2@Fc cƣ@ĂK[PA }wX8^94\`D "֋pB3x#H"r6!O2ӫ qQo? G 0SR{Cj }ϋH|UBSy #X: #b_ (!l\㸈w1? pF"^StA,g%ѺpqOn (1(щTdQ )Δr /L~iUr x gXy(B \PHQF0|WgEd>FL[Q\+)pmÍ5FMCn]{c\L1YICt\*_ ]_首$?+R@|Nȷ)3$ ?[.Khإւ*?*]ؾ CY*hmٝNۇ{D9GZK겏 $`'|l%N:d&+M0RXʫ.?]Sjd|{K-b*^Cʺ X_}V8bsD1] Gѭw56+W`?4@GpI9+4p{6ܪjψD o[C$RZWCn35 ATgCbϊBg;P1/Bt@bK!Rrb$$͜aA(mwjBi[ ИLD-'9ۭa|l\`G[W^1\Ω) km!Y-VL7и㏄6=BM]"0xQZ [$&#/${> ,T5)h &mxʖ#* {ehRPTTj%^Mp=)^3t`´ynhsI}o581A~έb~ UvmJOns!{Y F(D /tRv=?)G1K5%8EaJ.6ͻv-b\h^-{** tJWZHaԱ2i{josJ=NBJO FvZ½щ$ ;䦙GE>)F咂uNu2T~+xUgWzvԞpͣ 8(Nȸu(t!cNp 5';6lXAE5"bPjEE^7/׮ULIN=q0I^USCC*Tsez"Ć=H!4]~e|G2@W/42a\օ>Pka/:$n~y{U:T*:RQD9krmxT,<-[% K>#;(#Y7"C<lǬQ4n2XNqaBEBѓbB! d$(1Y ^ISą:S4O -*m* &TҭB%>uV5zH HR4-_fN80IC:c:1ǹk+$+PVV3~x˓e/jLhEM@( Ne(TTޔ )Y~խA)Rsb讓R_?Yjr6omֿú=! L-ț*9ܶ>_F@ Kz7#)G+HZ%m|GVhK]Bw ?2:7'm@ڳCPl +k]09`y;pMWj&y JN=跑*}3PzR7&YEMJ*ez|HHcי#O=FQe22\S|:V!MS276(BV&g1 z /CI`K2:#`Aaƿ=¸,zʙr'Gسez]P\zv*L'orJg‹uno/f(xP`ZW!Xä_,7 b}k9;.meG]SφpPI1P^OlmeKZ]q̨@hL̈́!V{/<2{"\q \@l7 Q[=vTЕT;5!3uBF  <Ŏ0_Cs%։\)?g&MpR8j.;. E2%CXvLxp :&`dtBy]B>T2/xjuL>jXH43 /0ǩiсY]2xpvt^>9} gQ8U2MSNEa,ܢc鼩e5gt*p~[UMYꉔ;SlyO:gŀ%:b7&W*NEZ v(k /"2uby.SPAXlKzBΞQ}IܭvtYE,oAtUXUP46V))8xpI(ݜ?8d"FïZE6?Ȣ|ۭ낯6G $2·#&7 1qc)y an3Π V:BN<j#1CkKJA.AY0 4hÇ }t)Yu =HEWt|إޢ~̥>6ľx_"<9DjrLy,pKj{Qt =͛ye$pcrt` _yXˈғ}2G[ Y.v Q >i 2͕wݮaCr?YR6lvundp05^O\Nu~?l]?endstream endobj 130 0 obj << /Filter /FlateDecode /Length 5828 >> stream x\rFCj[}x7[Q8ȚMMYD"b`PkwbI5n)Jv<".}\0' ſ ܜ~$'<9PjaM.'2[nbV\.򷓳 m&zc6 1jq1l<)hhC{FPհ7$ﺦvE6VQ)[vS/9ܑ;C*>edS4Ӷ6" ާqRɉ:að_`@(\mٞB_z'I^CAj^h-ݲ-d0H+R](3s+q1 \OŁrct|41CQ:z#]x 9Mr=e\[^e{.jRuczº]qސMSߖ7pGpݦn,լ+몍#we,&ݲH9lwS5xAR}Ew*qܦ]ެ8}Нл^껲@G&4%kcgBnw#op5"6 U' Q+'6f 5o 8Naqjq`G-)w{&;'$Z_'8o/O~:DM]ub"2ԩ *'M1yR 2Ondq'7iqIaZ:*D(͡*azQ|1C>QmVv¨Ԍy7#bj}jGnb E'tvMД N޼W9=m6W/cܾسV:c W1\h$boWuoKP R. (L^E?E)=Q$MAxA-Wl\ԤP 4Nbq0O!e5[mgs&hNIMa]~޶V*$/6\PbX]g\J4c܎Xʤ5{;ОQ+ jT_*ٔ/b7=å΍yȦR*\.4voKOƩz7֏-p=F$c@z #tZsŇ=YޔiC` z'DR1@#a1rx7QTnȲEDGMn kj;h(imWv: qeB^e糷MqH$JZ41"G``!V \/ozmıv3flypi8wsv"ɫ`;xdε<o|{C#pjwd8=2ȦқL,:ѳWa _[̾|8iƨT1ZQãu)yFW<1'˼ΒZU|ȸ'⋪8Ldk1U3Wl9ԇPD9OUt FBSћ!d2U~&Va,rkm(\8h{ʂbǜgEw~V832J&}LlWe}2P !DZTXXԔI=luFA58lmBn@F!H-A%4ϜH8%]N)ħXv[1M#$fS=F%8Z)"R<mފxQE6a-&!0X%hISlV,8X/] 5?aG[H.%ٶuJ(>((s1k܆01ߞs&l"Twʄט/JXzw%t["A"!v̋./W >0q u%:v2M# ImНD'xץWH[OZ&9U..CRs .1 DB8*@w"􍔢<40΃EwA+Bu͖EuB,F!l*E .3̔!eX$ P'ƐOSj뚶X=nu7 X*3l ,ZY40'vّ/G+8Ʋm$=uGǕ*>uo1ƺ{R>92?,ϼռmKONxN?%ÔLۀ. !tM 3OT /=)4:ۺi8Az㢮;0 <"*Жo|;8k1O$}hm"\0Fz O8A}>L@ "ߏ\ƛe!ш3 s< GfSXf!@9 Y7.\A+%\ ddB',.#XN]ED"PƈSMtwI51&?"V`7[mNiEj '}ԷEsה])BkĿf3c'_"-mڔb#7=ɻD!:֛D'?|q/qI=SSkvUt7ivn\P RaTuLb&؋IYi;sR꡽<1< xӢ }Ip8x1@LV !wȿbP88`"c⺧.w@?U׼O1c2Z'C6o=b:G-!O !X*8W ((Odz&mfCabbո거NNLti:Ɗ$cX} Y1]*{Gbcr>W?ի~xu$['_}=`[5^K>aH?N1s(|84>#kL1zaհ!7^Ƭ q^%c' @@ޖ}l獡Wy.n>9;%tیk9fd7n!cq÷#F-YyԸ_}GVy@zE&qZ:E^/8憼OXi~gX"= t6̒m9&W?/5Fp(E9d@ڞl۟b 7=oKD5 ȉ1gø /mУE_Dqv"BPTQ4#$|\5UL KHѴi>$a&KLry K!6&lbM{A^5oŬC)kd{*n} Qڗ"A^dOr rJ7= x*Nyj&-e0θle ͼM!vn<Ӥ $P}džëlaR^gyd &䑱q+rQ`Br[Bp׿Ô=:hU ڳV bQ!^\BLT,4d:V/PnRiAŊez]v]q8TN]Jc Ga )>U5o*2@X`l9o݌3!n?׳lo= +5e|Vˡ;W?"7vINB"_5\qT3ӣQIE(] ,2ȻZj; FQ c׫V29M_ZeQUyS+mUQC-SٝY*/G7z_( zvΫ \slU{TKR`ʒw]ѽPL)e^=5J>m[l S]Mϙɝ>|ml;&Ǵ!7^Ns%yyCv!e/"P^`au]t99>#%ݮ]PP)3V eUd98b36o.TdI``S<_ @yK؅qWkMW/|քڵk&qX`u}b8Y by]K>P[07ka+*x4>F%ߠdm4 Cp,M)*TD~.C 皼]BđxG4m7yUTEsOȫ,"!xEE3 .dFNܛy 5¬g}O|iߊRݗhM!,yēl fG+*\kl..E4-2$-]T}pP*CEMR{t|רW0ꔽﱟO pPT R٦rJ rapmeܳ?`U wQ 'CޟJdO 0BڽaESA Ǯ˞Ħ4T}0 A ]E)^K(2@~(|XD~a!b Gԋ!w6[e>Lm/O'б:endstream endobj 131 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3974 >> stream x]W PqepFElŰ (&*K0 %l*. bB5%FC$翓W5<ߛ{9w$ J" Ҭټ7$f0 ܠ%ˈj7`l>?3\bb?}Gy ^!IkC|ֆ/\oḧ́'Mhill)jZDSʊ)?ʆZJ-rjK>)Wʞr>)j2IͣP^Tj>5Z@9PޔeLP]L)52QeN FP#) j0eHDI(jꔨ%$wM4Ġ6^`A)Y t'c,b70|"gFQQ%IƇL|dr@.ˋMy%? Y< i .h Zf=uΠ1/ `-TPp~ 2D+؃Qv PA!pPAcqV{J| *7Fn!3P㷌\xo T J 9Pn) o'3Q\tkm{{/ݾu0T8$M>7Eޝ\֘ ![ţah=axS`׿2>/hRV+c03,T&Bj8TTPEY{` Kg ZȂa,yn޼i-'6Bjji9 %K/}y72ѿ-os/Ab- jN]ui8e -{Tj̺垄E (GE]Qx6@`6R=xC X p;PK!8;8 &ПK#4Bra$ pZ1[c(a#s7C\lR[p]bx17o }_Pr%[$iqҍ1(Ȏ.H Nd\NGT夑캰D#9]ٻN8>Gr\˫gZrUhnߍ?gCU# չi%7:D4hZ P#C%z xY o?4,_Ky՟0dvІW ?h^f亂^>CP%'K&kd0~,(QE0F*6"\#6乲r݁6 j^hNiN: &08L߃#ƿ:ٚJAБJDlqN[RY~3&"KZX4L_{|{@A5T8jޏAIcS"!_qOP \f9LFoCND./ƂQIm\AB۴Oxe=NHe667ӄ0˷E )r-tYg9y(2q"3k:h5T#Fo-ĂBrpL$9r9XH`VD*p *9.3Lum0R*Lj8G&#̛8l*p&:?Ay2?_,>MtfH^L1=aa;` W)ֶ+< zobe@@%z7\?td"=FES{]̷<r˽Ƒ(3&O9:[B4$To-q >8v:da;Tb a+ *J{f('ȸ'-FAh1Y:H}0'hӦzّbsk]gmI(US8~( M ] YO:| YzQ{gGә8G`IXO|: ǛvZ{8fGPelLf#ZuM#}`>a jK9hѻjp2`]ˡ7 pu`2 } `"ݪ[Mz^CUq4Ǡn>QwJ?;/{G 2I%(!ZCYn繌K^)䓰`gAK 0>_|qXJ`!v^%gլ-r +frۦN~`oJLDg*t@.F$ 3n} > Z*d"Y v9w27HӧN4s,H'<8b 4( R:E-n` 6⇨V&ٯhkx}qoֻpݍ.A=<\`hIւw%f<%ݵ (MzSoY}߭΁8Nm6hV9Wf*.eqZOgS {? [ g-??҃u[ԁDe%7ta_caM&`u>fWqK3( %2Z} &hX fBfii04F}G)Z2endstream endobj 132 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5100 >> stream xuWw\Wמuc[ed׮k$JQHlXYDA#"b.&MQ,ҤXEAĘc^b7ƒvzI7 ggw<ŃxQ[%6q塌YuQKn[=2j΍b% f#2#[ g0{c2'dei;&+w1idt`Co9+^! |SYuA E!+T 3T;xHnj/Q*o(P=lͰaEQ\%b3(U\> {l~* Dgzk Nڝ8ݠ+XOYVeX=Ǻ%,])U#BNnm*ԗ@sO f!;R^[i. sc5CN\|,U-HNy ; sc!e1wy~:#Zz*M52yo.̄ MwFXƲ\gPg 6ّV ^5&5)xd\NfčP\~ ~0~.7Ž9lO p LP ?vm39:M%2EHC <;9Fj"s#CUa7OXIv'خV]LY'| %OpDt :`f_$+:RHM?`rkt cyBnpX"K 2jL| f-:5Z<: /2L7~$&^3Q0ht$0X xJZ>e^ܢt;ӏԴڪ[#:5|=W&z24i7$>4.Zt! PBä^LScZ"Lq/azz #| !VGpiEtrw$oV+Vn-RR)Vm^韝w{wC1ݭVGӨ u9ڨ-8)2h&cdn9YODt䍘 G阻п>Y5uF+!Đ\F8Ul?ia(t1p_lZAn(ovG/3^ :!"Pl#lv/` kK7=qL=)AYҿ~a!yOђ|YJՐS_|ІVZv Rwij) ϾA+ Y9kj4LItjnh QNf{upҜ<^K> c$?}$g-Gn.ay$dd7; wzziA k$uE!E:a#'JYIǑ`9=K)l%]K ]fd7'H轺_)=l;#3D9X^x-:(Y[(#=t^N)k†nS!Y%P^CnO-P];~476[p򅧝R Mȕ:^(?a یy77UjLepyn/h0.tur}%r8 G߉۳1MhU a8,VRKԴ7%Ҝ&5$p=yfwo` o3`a! ~]Toˌ TV\QcZeKMv-j r7!څ $SAڹ>{+zT=T{<}BQ1eۖhݶjGL9w|o?S֢VcV9O>//6d!%\e;K.7r*[M}g3OI*[H$G\Z]/яd/N7O >ʼn8Q ]\B:Ni< Yrʨqt x r5j&i|_\??qj> <=/X,'K9x*{Kk0Uf_^DkN'A֏J`GԈRۙ標-=~`V-#b#4^tKq+F5RM9r.fG2µtIt~<އlYׂk@w ow|n4paÜ0:]`=1֌l(|SZA}v |wmLcK0}RG.Ѯ+T^x,N#W|ϩTieKJAڰ5%ђIl!aw04Z.<Z .rH7UYJi!&$dǸ*{6M v\iI2c!IK@Mks|!\ZNrb[(7NyR~nSa8L׻~6VVv,Zxn)Ұ[>7F`iZGHAɣ3˗ܿ}O,Ι ŗĆQ70wÀSbzl|^Xn{5gUFB]cj13-(;jd!̖:M^睒UEDb8FCv @F%,G0WɗoڅySVZ.i0X3&\ʄJAu,u<[ڧ2X΅DXJˬAI!,i(3!p(Xѓ3mﺾ5~4Z,O!ߚ݈`FSB)n2IQY^ ^ΓA@I%/_3gYPpF%B ,bPZܦ":kMYIi_QINwqJM1L I B vB &C&^\a}ίZwX,YRFY%ꉩ>_^]AxߑC84]g\-;OMj;t܄l Iߟ[k1j@JV{щbZׯ` LئS*'W]rbOO{% 0`REPH)vФ<յ p"U9Nܹ78lRՆjp'lt:o:ZPhŒ8P?yJpwִM+B:.X3k[o4gJ>өp#ADY$X ت-VTW}FM֊ V"3ܐ Ȟ972տIO"bG[Y_yhoJJT]xغٞW9tL>V=91{tYx:CB|-f!G߸ ;KFooo04ʖ*Y_` T /)`ɻy2<&(Q`/ˍ aǮOv5XlA|oҵ?Q!EX6 N幍)\݀xPZIendstream endobj 133 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4559 >> stream xuW T׶AFn 8 * QPAQeg#Wc416HTD5`h[!iDL濷߫uOu9w{ES=({O[ZjeT|z{dR*)?9Ҙ"+YYmӶϦ7%}B&/< 0cʠU!C?^8-)b)KRg.='/<SQj&B͢\hj(5F͡)7*BSsʃ ԇH*ESiʊ(zSKɩ(ʢ>#՗QW |k1*Xjah lfpf{r 3mIʍHPQ"WEYIN|RHk 6> %ļYf#",<:JAPޥ}QKWeZZ 2\لݚVne(./'@N C$$Ô=r1(eřZܡ/Pt&͊H/DJ5\ׯ,a1f5骈%H x޺x/fIt5L[WI qfUGkCHAJ41\h!7Lf% W;g<D/mi-f L= XP@& Jr3tàC46ѕ RvS-ivBjM!ךvtZkdqzڮA:;sGV}Wt]7 -tGަB /yo ZS^'l 21 D6!lDRjo^M_jo)ĺ~&rRNju%3w(dƃZD ǵ9^e1XɍaqrʅyW[QAB/IZ[.ĢG^hJfс@2}2b~i.m8<ɠ8ZO؍ ő0h t4.Qժ;>;h}6#$$/(UyK5cvQm3x |ZDb0VxnT؜lIb$&V(+>I/$ys3)mJǗ|g ~ 1 n'nB{ndw9.o}:S%nضmABG)6oDĉaS+Wm-,ԋp ._&ŬGpD%akG"DnL!$ٗ8B,8X6/1 :\5.գ:iv`F%)sOOTBIhfqN!i~b``Q%ztpޓt=5B|`r#}A1kg ǏQގ$[hϡr35ŭ ^ oĭ}U\V2ГX>W^ϙ78\xnRf|؍#=ޭgp=c`M7ȓ.faإc 1; Wt hTc.:ꄤLMƓVB.='8^l1==n?̻:BUl,sڤgߚ;DX+'/9+H ݉D&8Bh.s`Yv.䦓W[w!A{7h6-d~9"I"Nădlp"X|-es]%,(*ZׯĊ'bE<3XA0wx(tZc \(hv*"/6n+04_\ {h` @9}N5A rUb@4V=oy^Jj6BUBq"gNQ0"+bg⮯ '* yaUi s$ R,4MAuGOwq=6Iv^=8Y4뚶 qE #&NA5_xÒx8 F= _19A<; r5MM::T4'[dΎ߰F8[ &Mv 2?Ri-:u"lt #hqTRl:#K&~enBqV6s?XNX_A'7:z_*F%(d[{ 0cL:NbTYvzɌZFC70m`UG& %}*^e(!dO+HG:!mUzVhu0|7~^+J,Ԋ+Kע=qaU#KOڪAv.UI ҍ:F2~vnOڞ } /+<[qqfb4|i`c?6jM caSW?CJ3S@@,>@RƑTxH`ҨP-*I笸}GS'rK500&B0Xfp3]*3QvU GH*bpKŚYovuWiɵiyn9 ]R@Z.I }Ŭ+U]?Qa!/3{7Xg5q‘Q6>nc9Rr0 W ?]F \ j$@B I @!$˄:Nѹ&GSf&$?W$$awIQ`#d`t`+c_/x8U:bcZ@ڽc/r,:"3;-#k8冝}3qeɍ17myJhU#IMĨyaJed#N{gg6aevy W7t\53smVzs;# XZԘҁ\U;}A6G'a(G8>s5$h*c'?R\5<_0cCixg O~oP<2E<\iIpsk']e30U"}F-B_ٷ _gaF"5tK(kg\(0P&ŇMADDaew4қakPB"|vr;L * -)TOw76G}wjK+cDSsėlJ\I;Ym0|`]7aƮ=C~(xpHI]_`|4Ďz&H %&LK` 6'{FABw<75dnsW{$,kƌ12NWsl@3%\N]ej% @! _vu+e7‹~C%UvAO&G 3ySE Oi#GEz^STJzq1\Rr%0%K 4. DHf=띸bg༂Dmo5;4tУDžF5|щ4?ύjaą\$.F);gsXtJuE'}Pk`` ^!vo?q3ؒ:MR5)*qq#@. }Mk78υ |xWw."+ B0*2D_o$(@hendstream endobj 134 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2642 >> stream xeVyTG3: "*-ADD Ȁ *|QSQ4F%uݘWl޾t_uիw}%D"1G6hi@‡n 0&H>4>k'ޚDjmxĺhw|cz͂Q jFͤ)OʒL͡PVeMS(ʑrSjB->&P)&S%*MUrN2dA*L[R^j#}C;ѭ$&?.pYv{hQaeC!Gm-bbI3K2Xµ["](O]5(AJKPX \g‚n6-a KdV)Rn}zS~oIʽDlwM P=n j÷/U Nd?pAf<#Ds+i@x, X0kE]U{_w耳q'wh3 HhR;J%B Zms,W ?5.(p -##g07j3ۜPKv}&}h\%P7N7]9?93Lap׀,g^(q؎rE`PNL=h8!E1Ɗ rhp9N O>XyK.b96xrGp٠ᏣM[ڂYمqԼ2Lg$B lz>YӞ ,~T?NԼB5O'sA?١nviCSdC%KQQl>II4`&FGFmպWKug \ ^â E"yNDr'~²}ܧjs^p PW3qM5E;1Zq$ώ$%~JĴ@I=q,#?HՍ̨{PYzЇ?g{/q.N*ir4~]y3:Z MSp(e=o (|*/fgqjqiXyE_gUO2a=-ӠrKPsh#Θ E|BQj,[a dg7zMIho##Laq*SuZa{*u)~C{| 8&"L9nt8$g;=~EuuT>q\Seg+X/RE?+)Ϝ*:}h=Pz-T]Ow6яDfG#~?;\$Ĭzȅ}-ME0ֆzots F1ja+ČQ;3ߖ_TUXuPT :'ZMA13I3b=(V_`mQqA"g;b%~O*>Q*A Qb,ߖ Mpa_{DmV:#dɤP a(mh?`=r h Sxf׶@=+8qBY>xaP/g;jNV"W)}kOVIt1Mv ~f$w_j%ζA 1B#<;(`Mwb,1[9RmKDm}CJkT|dҒA >m?p*B)7@Ni[Kdv CHwŠ!FAsZӎ=hc<#6z)c9=(j"lBV0תCOB 9}eIYq,.bʅBdr3rYn '0*ʢ KsKŭo̠Ȫڝ> ^ qsRK g8HRkI>Tl0X*G2ڜ &q=Za Z gO|VuF!Ylz"k5/oG7ZSnU|vvOrd6sD osq{ok@ _^uGI)w^IMf=ߴzPzJz}w~GLxǥ8A" `O\f@c&l M&ftѕwLb`y6e; 6 _/xѓ3h)E?]mmj\vnH}CUQJ4c lgmonz ajg)+ĎLE-,qT6]䤗6$ @a&gKq49IK8pڨT~c7q"6+!g0#NGK\Sߐ4eBW,c7m*endstream endobj 135 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 168 >> stream xcd`ab`ddM,pI-Lu JM/I, 154wisk7s7KǤBw_`&m}fFF _A|?sO;qOUW*߫~_w@ٯr!?'χ }NC;endstream endobj 136 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2300 >> stream xmiTTW_ۼ%}lIa`6&Q@1ʦ & 4!HAVP Bwmb(dL51fL]r̜SΩSUH$[1^VJQohBYRJ{abF-& i2 }b6 Z(YOb16ig=ٰxQUnd:SUys%ys5N(5,4!F5+nb8_lg' հGqJ힀=lpq?X*%:5;y T%l|5i%:(M'^C]!^L(A {hLx@?Wmj:r.f8sD("nCA )FїBx;,]3}IԄcuԁGz9 )_\Զ_ H:sKsq~.f-k[^ ̖~CԀphyJwf4>Xdo默KNBaf}W rlV %O Izj.Td;RkU:G(WoU(Ъv]вf,%**i(NgѲfē'+Mb#-&*!Ya;%X D%GTF X[^˚OTN@ 8Iz)<X5BXC07L]t])e*5bJGh|4Lf8-gm促HeP+hyҎ dIRKJZ-S!  yYRMA ̅U#Y6Getj=S!Q]r_r#D#KNezg2KrNvNsI4_3 &Il?svSޯidO "Ϙ%1`.]VuF8^܌.mp/Rƅ.n?,˗u_yςjC%= iKӄ@WĪ=1Gs˩f\Kߨ (Bc'^DtQ>R*Ŝg`3/^t$CISMG$=0BAJl!0!xܷ|rJ\+9p}6u/ЗO aѵkP+ЭΞ`n+S5"X ,lbmԪYg u |Ƈֶ;76?Th2A=6:JAjՎ'4u#=\xl߄9 ~:ZӿV? 'cuENu6'vq\_lGX̝wNQ&ņҚj| הj0GE's[E`Fer/}$EF'sA羅pW=vGÜB#}6[RlQh .n3,T+źcOdǝZn` 8qH=̮6]@B_Q &ُ+_ q;<\F鿂EvB*Z]VLvI:i<ڵS?^`+?hվ:(6맖bMY`eXG8w}.RYH= x > stream xXwtTd\ދ|HQPPI R3)2IH+!$<DeE>}>SП;yk֔dƺެϙgPv#(D3<,|~ꐽ&eXh#&/uŽq6v2V- ۶4Mղ+VFR]omg:?/ ޤ%t]9/&Ν̔iMg(/j>5ZOSFY-/&jzBMRۨLj;&5A- j6CVS/Q\j 5ZKLyRPj!@S8j'D))@I);j"5z(Iש#( eGRD:B2b^\)H%}-$N?cܙ̑G֍ri0:h1qc~pP9\؊qh5NU$*>;~g#'M4ᖳL 97]vv6ɭ+' MJק?{V;z07S51P*wdXޖZtQ.qV&QBW4CG2|% TC*zy7d݄N|>(sis7x ^pV:Nhݨqr]~rKv>n`L@q&Њ+Zϑ(<1 -qMx΢ L%pjLrP%5|CPǯ!nMV 埦+z"ILme"A ~CTlr'b Tp鶀 bu_sFSycu_)Gb;6 #-̦H&?ӹ6t7]בn+qDNv_,m?Ӏ X#H aqwDFdG`:ڡ݃-)`x-]ڝ>|c9> 阀X"8+{Xť1d3g뇯>/ 5< hVrGjHNyy=0dIdY#S育z`4Dp[G/8+\${9#Ia? t{ѸwA/Ǫ|??]+Ɵ?+rÁ,ΝӉ+G|WR7.k|K&f={ATC#}͡.$=V R(vO5N[BOIȘӐrzB՘{Ei \s7]e>pNBUpVG>ޓ喓2 G'v{`nQhsMygZQ78zAu%bDgQa&qଘ-& [|Սk6{sreb:OMG4z'R] ).׿% >OA*&)쐭t1)>T+-c]~w0}1d@mpjb16w }!Q>"gU=o R빜fc6(& W|nL_XTi8%󇄦%v&$,p:.vI80g˵(/h) <kw5Q[*A*ck41:YG >w9ڜ_&nt6;' NxQ,si)!G(:ކ<0:ꭷxk@j)ʑxYwt=1:XE~tg%D/І}R" j\" U9{Zy|NP-ZS^̰D{R%lHj߻W\ug_U y|m>[ jNTI#_"cqJw@4XvFA('m=ԴdKOҾ&hMmO@oV]Q0mZea/G]".yɅmMyfk~0Pw0EPl C #Er4`_yAkw4h8rҥa $W\H_b տj9|B+0yc8;6+XDLZ]Ӱ"1dH:rS,\|Utn~+_up{[7[&-e8(&Ā\!Q6'd2D,FpmE}& 8 yS,!}-Ad k 6+5\wr x~)8+fua\xuPI 0,}ɿLYR# օd{K?y~-g r`?A J󋚵v` ׾е79ui4T7ăH{l۶̙=,sKvw? wPZu~ ?xD5C?yE̵ӗ.v X=2n8k:2;vn_-'ɑN7BcvkW `W+ʚք5˓W{v L=ah;aECqE>3$?V@'67AlXǶD7GG7D44X^W\qV\BXQww/J{$%W<VeWLZm>>7"Yͭm\NFzAS-m랷)TqZϮɮ̮ A5AEem)! 0\CF ΊOD>V\jMLFCEDA4$Bh 9z(d GudWd/uS137 8IL*ҏlpM*q/P3N bEd*n@{uو֛L2Eߙ YmӃjoHm:}42…u[AL1H bqLn%wh[lY{(_Oqg?zt}_;JIɄ!5a3KcijI # g~irҝU=;sk6Uޙ4Ktv9`Q/Ϙ=y?XV[ -PtY尥z83sVJ ^LS!"571l{=t_>z䊾/:V[ɑx.̒ğbП 1(_ Kx~d%;=li'6mau%b|`6O!>fCh~]"ٟZ#9'ΔOن؊(]lj&G>ҴȆtmucQuI>>YZX z(p.ʨ]MEgbGd7A=&hGܒL$#xG;Nիwq1~ζ8Gr>PcjtaJ͘*+b;!v@,C! v,&Ul.HS_DήCOLuP4LKV(FO%ep!}T>,e4%ɍǎ6p/(6bp:{o)`[-t1=\Y.AYnvqF0Gi:K1}8( #!#;)K,a{8Ի{$*AT :YQeg½0ӿL!}C22x_zk1UHZ~<)+B>`>{g+Z٫b}NN+s4~} e8;hz1F~U'lWXY|b;+#;s"JK nD?wbpu|:HDnL$Γ§e'n>.G#K5+Sdˌ!(?Ӳt?@ E'YLe|}G^ӑ<߲o53tE5.0dpDoAw C]`v>~ *{/Ejh!Qf\ZjR Htø\˴) A|RA r]a&&JELumEv7]y]-n 89N?#P£H1zf]wpDSQ]<ˏB+< Ei6*]suz&N֔y"+)~ uO9mT@0"cyԃrkr#ܨ3ԟ13Jc75T\irT܉J 3rOk(J8Z2&ͮi*GN$aRAV\5ڄT [P[!u!+2Ti]نCM(ڊaTn|J'qˍ)'t.-jyp0>!D|(ӆQ=7nS=z}NN*pheyendstream endobj 138 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5315 >> stream xYgtSgBr;ɻ7t iH{)8cB36܍&ɲ.uV-748O&%d%2[ؓ_OKg}!Ǝ!8Ե =xJ¼}kwx0 ;yeNCגg+WRĒkUޘ9oKj۽85]1@l$y"JD,$ۉ ~b'XL"V5CD xXK,%Id⿉;g4"cOL f'Gb,!q>#=v9H^JM㿝f⇓vNq_M߱W~7=!9Axo5;߹δ;=w~gzog,IJHI(FBO#BS{2JL5c:X:ť@<(GP/7V %R@T AiqwhG|&shR<嶜C* _-"}!wI'Omfӡs @BtajCZ>F/z8(2"[흈'Ugh(4te 7&A j&=Xoosm5;,vp :@'4iwh<<2xHEՙ`h:f 6A !0-$r[&pGMa}b6!ae_qwk+I7æ`~(ExayfS[?TmAAά!L`ż"8>p xIӫ4PJ5ʚ38b=R4kHsmvB':;Á.ԁA\5VA5שk KypoymIHL$ AݥjȂJEA4"XJHCZskΗ5ϵZ/׹zXejeJ.vt8b1zCy d,`4ʽ"mDgㅼ#Lz|wxtQ!4*u^"PwUjl6K) &z~VW>?P^R]cV0 Ғ]!I·06#=zE,V bCZ.2 @7;;A$X&jJyU^Y^6;p^R` t L[]|֢)Y2Ү(H]*ĠB'yㇻGxz. R#q٣1Fu@C*[$@IjZ.b@8c&Rt|[PbfMWOc쪖pZǬ.@ciHHǷغDSC~^7>a#JWƈɤ<+"?D`HOc6#4<*tr]\g? j{}ԵD]ܻh7Vw o}gC@ylUUFMu)=_ ҩ -6Z< C JUD_F?A7rl@EJ3h4_%Y ?0(܌V_2I ~e]w>tA5{!խY.@z`6^IZ(͢jH&BM7L!cXy(%PgIJitI(3XNSfO]ȓjw8(mGKnؠP @ W_fQYZEpÇ#(!AtiDmfs#&k}W H]>8Ԕ*v@߿1毜z>@ P-%̐ |^c\KMkM#}܌ߗq w@zbsXࣺ*%E7>~g?Q7Yw1n1 zP2 -sm#fl/_.&h,BI_Ф_RO̥gwpa)Z3>q-T肣28`zo{=݌ '12Jj+n?~4<?Q[A'.EOјg[ghܗ=7 %?N`7f$[F5 %ihMR$Jm{,sLqk=\N^ٛpzwB +0TƂ¢#l$ϣ|E~QӯTщ_YYrVG _A3_$ e4 Kʑ%Ve+7+8\lrz̡?^8 8ֹXGit;&Օj,ǙzQ K8&`WDŢ #j-Ѳ7QU.GpcmmIup|͏^U-t:9FsF:M֩u 6!PxZ__}vɋkߴ[|z,kloHAe /T~-fbڧ CVa+[&ˡ 4Ǔձ)5:MJQ5}v_\M$}1z<Rl]L{{M(^ޱ{v|%`ʚQV4>]jwNY޽Bz]H cq7;hIA,yݙw#=\_c&Fm͘>A3 U5/`WH%`k`>GzGő՟~n?Gh ̯hqЁ(-ƩTRhXjPn;m^΀Kd`Սs?vu5eU+-zZ] W ؛]WD'RaT*mV@/1VK.awtSZlRQ~S:vQTAJ=} lX?hƱ\2Ʌ*'atW| PW6;h6[s&Gapƨ;[;A1ZvͻJ8v.{=ю1G~v A< )Jz~姛Hy_XtŠDeCm"|! )({xpCLB)hZBMQ(?T| ;7/4ƗDz?_|Vr؄X2@* 7;&ۤ 0>~O^LIea< ?~ =}Ct\/pPu>jR|5@CW[g?K2Iml2ot<pIfc[/%V(vOz[ZS4(jKg#+r6Ac."5-ZZSVYE{@=I-E!b>{aυV;4NR hNďx3ރ|q;-/ӭJP eU;{_> bv&k W;^jw; 嚚^FӆgZ_\-2BdP@Ua'݁ϋn MolF8DoGFRJܒT7@CWUϦSnLN'MN?3^6s>iA/ endstream endobj 139 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3162 >> stream xV{Tgڟ e.k;Onm+.*m֪]pIDKy@&ܯ!Eүo+-n^v}gVws9ϓ<= DlQԛ3^Z(6 -0B 4l[|s.ńkJff IrE2}+Ymz_Yd6wl'{ 6b8u l =`9\,ۇǞpI, BWfa",+.͊5,^& `_HHޖ7(&:((h}ׂs/(BCZzܰ{6> z"~B>D>5gPsp -M5Չcq"wu +pM8ZyTQ5C4JITlgR0yWO@넘O* ˿G(pDy-b(;H/VPoشi/^raoټ )}p1wr=w9v SX@/W*!ۓzF+"VNt89<Y 2V64sG}j_>X 2N{(ZyM)phުfJ 6E\BKu.k|]7&fЗ ) ͚m#tZ 2+$NՃzXy ϧgz'̸#cIj4λ:@āc ̂%v#A?]lsfҿ:?CkIcc'|0xy"~"~"m^ʓerxGA8yyMl[ $.zݠ:_W^uFxƢHna݌"3\-%\&!*xf2(ש-ƒNC4Z);tD+4EO;DeβhdgcYa_ةR;GU&LCwnYdlﶽѠZwe8cFKPN b/m{m&_4n*0;0CjAgHy:`x/vm.H1O8գ m] q'O܃3$q\9 ![hGBO>)HE=Qr(D|̬Z 3ovA(y{B.FsќoZp1 YUăw'fu75k@|fniaj+V{iB; [= ځ0jwbBj#f;dI%_-yK&.l``A|D_>JhByᝈƍ?~4fw2𸿥 hFuf4ed(Ӛ37/AfC!|<!(xV󈝾?rڝ4Gu44HY`3ꤼT}]S*4BgOm(0_"7Iwrr9_o zߦZc yn5VNgɪf[&j&|@ $p&"PĔdYQnFp87>);sbx,=?#U!xɹ%Gt@K@|SbfTjji7Yyr poݿaOGCI1J )nU֞VݔC/Shel,8SD#ϫF ڣ4Mtr" hPy4keA;%H|]> -}jNCϳ %8nJ1au0,L[&NI~ Jny O،+ᇔGUKgq,' tCti\^&fA:% Fܓ%Z/V"-~lP: j:Q=!5] p5ϢRR!LF9uru-;!A&2p$S}28g|nW^zoΜ n)eѨJ,`pU6֔Ӱq2{i9z_벋vɶƬz?'Jm뵷v\m~~nf& t<i)ʱV"7nS]YkL!˦ѧho^aN>Ȋ9:Ygv@4~o4)sqYi6n2K+$` IpS+K1^7Pzy@*t̶y0d4YfQ r\mj[½ ?ټknF/k}p(~Ho`ggME9pTpTO>.}nM.o1jC^@}јPfk 00zQ-zl( Q嚋ȯlRHoҋ`ƍ7~@a[Uْ^ՙJGpe{z@MLdE+gێ3fg3 ׻W1 3Op%ˢ|.hOŷ*Tr2j\g龍O-Å'<ɜF"<;h/:8`:4h] WyCP !+endstream endobj 140 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2004 >> stream xU{PGgXfz;܎(() !,k ^l/, (/A@"+kQ|Z &DЄU`sohvܴ?")Yq[@B|mg\6y2#m &lUvUv}?SG< UÅ+}03Τ&MhsҁCjMT@tLlASNjHmB(oj KyP[)?jS(S6MRj3z6JickCdZ[Ա > y(>&oLxahljH+g`64a~}FT4]h &8zyEH_5  }Ity\2eKi4ഔ!ًB|ppYm'wZo@ޡG\&ZtJScVQjV 7c-261bvP$N:[#X9'aɍ->H0Ĉrct)^=J^:4g!`liz&o @ǖ3ҕup8f{s+D7JL&i湸V%?`&vGZЅ:#'u\0b7g,(mT(nװyTܩIyYmG[-~wQR]a^v[oGcȟoJ v &'23Ğm>ܑ݃9ެo8pJה];펝 WjksgTEEVOHoYlD]om,,(9/H266>[#QLK9WL :m#nUO8\dH-g{ ӁZC澪Y'"4;qqŠ*>_9s!}̅/믇-\,RRJ"ѭLp$d f"ߌ Nߓy9L$D"b6]/f7uv'o1#sCrjd62Hاߋ9 P(*=Qeye;w/ՕyӌիMD m06CL 99g80+Ÿ M#d3pj9 D<~skp.Rv_ @%E0NgQ#ޕ:m(Σ#xr{)7R-G%t4FW9 TxzJB7 3oj\>$rS8Q)W9V%Kw I1g55%OH@PwwAtMkj9#Z'تGV >/Xt!)3NbR:Դ}ONr֠)!>F%JIZlUVYæZn$@.b$ u~R'nċ9$hX"b&_zƯ=d`a':/X5Pʴ dhZjb6D1$Ym_H@rJFB_A㸗@܈$1ƒ8 $~wi>C_t =/6NWѐ?"ۓ*[>c&QFAL8!B2ʘqzr4~(]QHϓ;cPD`Pp{@2{stuJsyT 5T-lDIf$-6$5M]uRJ TZv;o(Am endstream endobj 141 0 obj << /Filter /FlateDecode /Length 164 >> stream x]1 0 EwB7c K, }t GOr^3G γM5!Hgh>ՎB7ߟH滙I>ӹ- R2<;zAl=0ݩ۾RC)q\S"Ε{&XR@l2S7endstream endobj 142 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 220 >> stream xcd`ab`dd˷ JM/I,Itw?ewGۂ7 旤g2000303012D|_cew3~Ϲ+tstVUup4w%$%V.h!1mJɽ˺JNgwp=S's5L<̾3\WXBy87Ξ3w2gRendstream endobj 143 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1248 >> stream xe{LSw{J]i6;4" P)`EAZƫ=RZZ(( mAEPt_161a7&{d%gd@ߟ|c҇0 u[Tb&lY7ƌo ~ S}x9{f9pH7i_d!o$D$#Fl!~>!JG<&fgEERT:>?$M1de7 `-+X-dB~>68?6@;8wbgCS-^:ZU٘" ֍j: 5k`'|$ta܍A H Vx 9"F]41UR^ϳsn.^ }U! 7;ZU j <qv[ntn'M= )㑄+\#Xr)wٯSI]הF] 'SD7=d\O \(@ƹܺ$gje5ږd.BP)Ѧ/ Ay\Qn b${|:/3Z5ҹ3%}K.JU3'LŠCؐ_ z>G/@=}PKVKtCv7e\gLKqSIJh,.}u 'xM^= u#\N5HbtU[/᱅="_""h2?hj|?@ӧ?7 lU v߮4DZĪyީCCcfm6xRtHbeo,O wA\5|.@ T+˩Zn\NL$i>-+$fOB=6ɬ{&g*feS\iendstream endobj 144 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1033 >> stream x]L[e@mi{;Իِk،q#3"2Eh 2TBaL-h)@[6JS cbE,!Le0(wbbrP$(AIAV^f@Y*;%|{Zc ^<2I H !"B# п6Qf!xi߱w70~5,K!} -*Tn[~ Y]Y`OC Fl;dx[*r >aR'rҢ(ܬ+"p/lΎ>Ofp4cY/n . 6vx;ew._)}3ikᥢj9}aSm<RGP:>5敻3D),B: hV07+8O& _|dD 0i Q_eB 66U >IC)o lJsA-"Ŋ8X egeeQS 3pӏR?rβWkS,9rRo60bkC.Da|!NZsf 0ȸ';E9>}h%yT5P>ٴS?? F>,F9MR`YQZ >$_RU)Bbњ_"U`:Pڬ]ޖN`?jw{2MArKwO>.ԌX[ &@/kF'-x;>cf{"h&xTa6A m0{1Le=-NǨY t俧YOnߢX|Oh/;|(ik d[INK~;ƪ*EtߔŃ s{/tۏ`bi8o]@ {jePpqTUz?s[>97t`(:C[+4 S8G< TM;ζm0.'endstream endobj 145 0 obj << /Filter /FlateDecode /Length 163 >> stream x]= wN#UY,钡ULz B:t%'tg 38O6df\<1zTYud|D1)/2iA 1 I-0TPKUh8oSBʕO{&XRd-S0endstream endobj 146 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 197 >> stream xcd`ab`dd74,ILItwòmW KKR3sRJ Y\Dz":}aR6ƒ 5k1gܜ=7oJi?<'|vKH>Y= 3mZH*endstream endobj 147 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2931 >> stream xMyTWƫh(t2v*vKNwf'1jh"n (,oʾ4DٷnD@4%Q!4.9d&Lkϙx&WzUҔE{B ۽/ 6+D41c` yw(4cwDFt $|U7P>ʎZJSe#D-̨VBYQ)kjeCRkԧZjZHE wE2nDє1Lut=bDU b=fƞdavDdrq\Ǽyy/6}_`gA:jPE8^XԊl'fQ#BF5[Od'f&ȶ_i1^[(6ن;9KE%DN` i] n91uLlBƳ.OJ;4!~栦-v v;P?WmP95I#Yu+fa@r+0w!R ݭnwgwx~y`rś͓G1и^6܇֓g t??k/ArP %4'53$foƝ_G!|}ƽZhipL\^9-=wk w:Ƿ+Z'DO@c'D=E‘~d)N)p8b'꩘b L)E?b!j`~KbWOgE9i,",OP \[n7[x`殺XqSZىNLZ~bKI{g[W( eٓ9ɐ}>8hAk0eP9PܭH I U({ O҈h1ϓ>6n='"mzI=죭a 錼}43I긦ڈp; go$˿'ƍR33{>`EÝ~a*o4֔V~y1o+D|amDK 6,e$fBf@ĥ917TZ>q2'$QIE幊ӊ|C,`fX= UIk p{HU# e}HU*=&VrɎO~#Mv`J W9Z:+ Pк#Q$s hR(-cVI2!I*Qͩ]|-F q{OXrPg͙^g͙Oدt*fEx]nZ z@>n>-;2H.PA"WvȯB}+#uvD+f ϔVWw3?3GYqiޱ)[3$dIWKP'>RۙŢ¯[ Lc׊r!"_y5NksikjjՔ5:SYEG'Yu9Q*dsr` :|̢%OmEnO&aZ^Il=I:3wlƬb;oJHI*d(s6+Ӌ`DZV(~C!@5W)E+"B.z9*d7а]=ޅ)y`CGûMe ݹp2rdo*4TcV -}9x $dy&d;Kk5T'lO͏wZg7Yk-'we_]x8O(d~ϭ(v $}GO-mIv6/u$Zs㍈,k8JQW&kߝnԜl;1UZlH]Y3eC⸼EX [bWfܙig<ѣIF?&qWc1)4\Q\ea`%GM޹UףfƆ >uWd&g-Lr9p2%ÇhT}^]byOܖ.#{g~t벖;4x>\8nFPa7Xt 2 $AN˶?t]vK92:[/gff4ȣtVb%%>+dL2%HɍÞ>'/Nj Sq%^\r[rN4UkK~Fޕ7i@y g{6*$l$Da^w xnFX[>ҐQKiV]i0E3ϳfYEcZ'\ן*2ht&[V;zZQ>c1VRF$ endstream endobj 148 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1563 >> stream xuPT]//+վ7kR,$ЖS D4)i lea]~%rAŠP[WFˋ-Cxft:2Mgsn:P2޹|9 i0L|[LxyOuwNs?%Y~l@MWVfwdX6(G=SBtd,zݼ8}<_KG!OAwLIQ#؄T<} K惌)$F3_Uw7̢4]ǖ$dWo/;j{~$F Dޟ~833K[Mi1"zyBysrG8|r:sXݮ&c\WUVmAnwc-(PGendstream endobj 149 0 obj << /Type /XRef /Length 140 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 150 /ID [] >> stream xcb&F~0 $8JҜW{m(߰<=\Q&{Ж"eHiv)"@C)"ׂ،L 3DJr g+X\-4 %,Lʃ՟e  endstream endobj startxref 94778 %%EOF Rcpp/vignettes/pdf/Rcpp-quickref.pdf0000644000176200001440000017100714711515066017161 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 3986 /Filter /FlateDecode /N 79 /First 652 >> stream x\YsF~_okKJe]%KK"ɉT r$1}o @(R`3ts(`̀(F8ڂ+)8`Th`7&Ɓiŀ `VP`sά C(`8NU p Bs \ ~n@2c[Y2i@Ic@pPb $h)9 Bє0` ,XV Ud`5U 98FHNK(F5 50F9i1)4H !(q&)(`Pr\:(H%q+( LP*@)`iJYPF>:`X (8@[R$7ıS& 0i(m1h Q10`JJS0*Z``,0CBE`\"E 3 o>ٟ4@Ϟ țe1%>]>>q:@ se/  .yz OFM@2ccqwrIaPOJYw >͊Yy|JiO~\8/PRiRvCs_o@NQE>mw+,zQJ4*yo9yRw"DD,sTنmakm tQJpJT3J/ӜR*}yR#kauf(aƂT2iQSs'}`ՉJϖHBo %egj˘nOC/{DFqGe޲No@o#H1 Rpv[z+Jz{TF@TcZtGM;4R+}kÔpC9ۃxk-~VʶU-V|TJVGB XdIV%[9lm]|H̺/mvZ xuJ?Z\ھҕɺ x lW]jJ6ײ4un߻LthwFv;3-ЗNUly"_%(UR9^vٕ65>ĵWJWF(ki3n &#gayu6K`]VdC([;`X[5i?6b(JF_נm58AŸ&<]Po l^ u1hQjUۦBYI Hq fϮoۛ8yA~"gdBē+2#HB$#a4C {I uk|`7dCſgs/bړoWE÷ɄL&~:c2IiB&m'8!W*]fܐ/۞[' @G<}ҧ-f7e|L6xXzu:Cb;cC[E7ELK\>ݞEpױpXDL߇xj/7noϟI^ 5V!;'А!J& p=6hE{Oz umzλfīwۓ׺k Үm#1o>dJ,PM!?"phn&Ny!w؜\>ԯk<>}\|@; nd|f~! [7څ8&KuX_<9Zr; } {At ў=nzwaލVky?lM ~{ݱ1&ݲA݁劵]J붻ɢ.7'ȁWo^=*۱o+ ~Gᯙf{ѯ7?ޥ_ޝ!l$֞d[\j;XKU-Ǯ͈;Vp*+5ɈTf4s }9O뭾\c{CĀ}&Nne6e֯p] ~NNYط(;K@pSa{\:\ۈGF۴09gתѣX|Gt}tK_~M߳4:bH9p K ON±JA𽃋\i, ³[Aο#$KoYedR=\&d4x`tGS1:rAgD$`-iD˸b,CIS0uj7LMk 7..ԭīLN_Nl@i5kq# :dMHґsn8"! ~߁Njd )xJEwù1Pv;l$([d)~5YēdxP-Ag"HR? f@JGhTjӈqY#SVDZoLr<OnWWp$Jc3uZԴJ[ L :-*pJ[Xӈd[z-=H2+;@Շlnϟ;roRt?_o6!(nS lZ\Õ85GΧ sfhۍK)FwY ק|c5ò[OlMh. ֹ@ju7v>]몭X{GѱlqZ-'y$,~XO5w Plh+ͽIƮ ݿRs4cg$? ֑2Bg2R\Dxnw7/2́d"VgH;3w ]b+JH)mDg{;摢 2d_H]Cg hW~DZ#:+Cf3T? endstream endobj 81 0 obj << /Subtype /XML /Type /Metadata /Length 1388 >> stream GPL Ghostscript 10.03.1 2024-09-12T11:16:07+02:00 2024-09-12T11:16:07+02:00 LaTeX with hyperref endstream endobj 82 0 obj << /Filter /FlateDecode /Length 4809 >> stream x]rH}W #vm3U{"f٘˶c&! cAҒ==Q Ȣ)Y *OTfV]FekN(P'" WeUJ>ywY|陠gI#eU.3́<;_\f3 9C~L)PE싉"8IbRN~\Pb|:?Q!yfiV4J[QL1,y0 :Ë́S}LLVyZ5gd2P˲)z m2GլXwPWcb4F}ӢLLQpgSfSޫ*SiOV40e\T5Z-.US7風&Sr[] :yV=nNHmsqІQZ`B,WiU7/Toi3ڱLk u~~Sl[8MO"y-@(7s£զXPVu7yYC82ӝ u+YE&r_slYR$Eޕd{SzCRPh2/y2Ebwqdw3@9UyM\&W|MjX__ ,1N6/%HE@8Q_-& =c(UޠMD9"R7KMUL+l X/ו I+yxF 5_4("&\3jRh5R6>n)c'抁pvJAmբblPsq@+5nsqAHqkژMp[cS5W@`(L?pYm~oPp>7MR-nfOu_hT*fEއ0S׻~ B=k~M7䪬zVe4*Wer ,skiЗĚ UlY/TMA6Ne*X_8ru/|+YFdjw淽Ɲw ow=hah↬g|9/Ÿ-iLkF)Wa҂t&A.9y_VUӾ~i6l~د绶4X.QwJl0ӑpbo/vSW]oGu7绎15m9k]&U/;3GF3E /^<*9堜dX~W|W;O-CuO()ѻ\eCvjAMۥ S-X ԩ#"8XjFzY۫T yHh8i=VwFG8w!RG..b1`x=zLXwJև~wĤ^_p}Jaaŋm:(ް ugQ,}S[Oof}:RciҪ(X-0@2CANk >3*W}{P_.s࿬[Qc6|)aw!wi+\m#倰>K)jBHI6lh0uIe=p<⤗DUztf% N_yb%`}T^bn -~Y fݠJ~LO?D*i됪NO*${$R!牔W8hq'䑜a5[_EJknXfu"q"n#iob= w*<WmXH ׋ġal!=Av++D;!7:IoT#!X ymێ]06;eԮ:(76:LEy.hZya =ҀP1udj5ibD61=Ç,gr~L XNr"ycZNzϰWl]Zv _C]8ggH_]Wi߇[Pc r9 E?X<"I:0-C.o1db6ͬJL<*yr.IY\cP:Y(c;[pNnĵn~PmþUxV7W -sTsvӪVsP>0{xZ5 %W4 $˖'i/rer~U²Pa'Itb\q0 (ӑ̻# "1F kxS*"ѐ[v?aLm##y!#HAFHdD -؈HG'V)e~6bt4N o!Ɖnb i--KJO,8C$g8czbDw'QdJS8@cQKQ`L)g'V4RJgG~ ҇q,R qh_Xac sNDWEzBiEکSdBQОM85BK0c@ھ#g8"U2IN\ہ9=8֎:U$q0PG9R1895 bs1VحaYG]1[ub>>gs.U[.z}͎t4mLH "4;bAOac.KNX i =herD%XH]4}_֡2"{K^۞wj8Ó^Mbԯ¹:'ɖ!$Z&U$Zuӌqy[!: &weSDsWzM$Ζ6VOe@(P ֲbZ&ǔ"z~c7l RcV v*]J 4YeZGurbn(+n rh4ƈN3fBb*Bf̔!2'rFI^,:q"'40$x{"$.{]H"mbHXĥ߀S\σv KA1k:Dj:8;,..!y -@3i_@[(-\&=Im7y 8sџZ` >K$la7F>e?Em>C$]@Y${1!Q #9,:#-Jl;#Bw{cnIm>/׋7it7(4T]g*{dXϗd5d^XVꬼMb2岱$27d{qe<]s}]I?3Fo1 +H! {,.FSi ̢ Uc HpZ -zhr@9R7|í !~\,&ozHrE&~5 *7| >3źq^m_9i~d',dd+ڶ7e0ȶCc,/qoG!uoXtb> stream x=nI Bŵ >d(%d&6EIQj, ȸ#2qHWRI 2!1TtLfV E+ ~ 6](8@!aCEHnk Jn *ͅ‡ȧN(vS?5>(V>\>hx6‘+Rbxq3(9DҀ 5`8^QYg^]paȫs;d(B3FM} RFYja\y8c)@RL(8Zx UA&. fHPRov+ˀPP]F}7:La4*q/(OZ,O)yM:ΓSzvX&U:VE Jxui3d pJCZgӭ5`ƘV,[ϒe:c||2__Of*: H+7ɔfX2 elh@[m̹ T)Oo~ U o5ZT_BwGO/`z/'V<ȍZnntMS<`ܫ7l@~VS)cܞ*1ؗ:;7\3F̚w1K/DYfrzg(ayA$z]EvF؜r0D$.(al()j4lAB!3YNZ=Y4.JYg y*J3H=A++9u!'-~E/b i=$ZRUl-|cWjI+;nuf'eTyv;r*Lo4Jīkb U'TX{0tmhQZ"~nck?.kMG #`B;`A@/K?F 8kFC+4jQ&`7xmO";=p_c<9e6G6=3]U uۑR@:s*,h:ZX ͹Z Q~S Bf 7N.K #W$TcT Ov1#^Ƴ8 jBA[`KͅM+|3-Q1eCW`Taዶ`uY B͗n}~3O4wJa8FWr R*n+p5eռRoo {6% <Zo߽B Kl>IoҶim'w )yrgcQWzڛ`q)2f, 8S,7B|``D:&R? TLi10w3]hyO1$Y\ڢS>E~^ƅl28pYFy6"( ۑbk߱P;$n->+I"Y{p̑.8Q]R4F90;m&grxv[ٙph3|EvEL#Pj=k'oGD7^:Ma6ƣ:,BSs*ha$%Uh^al=uc!܂yqu !@Tޏ t@4 K )E\uhK,Kd.AIV0 ,;.! "ZkcZ4 {s47LY(4>Ĺf0q2{R.nn%fEVI nfVEV#pn#atvBH ll=U4~>W%y"b㇫i> Ŏci%?W_b78Z)'muLVqAq40W,/W=ˋnO=Zi@ymNe`QUG/Sh.Cȍn5gYϼF8B ѭx(B1DGF#p= 50xrNȵ?077e6y5mn H. GyL$Kx+o>wȧiԃErr*[?,?VAbYD<]opewf:Z b;Cފ\ AGn [\'fe6p[![Xm+0S2ǠêmcθK-DqOv!re C ܼzH\ 'm<{ǰR٩ A]Pz涚ͳeK]Qk4| PZ+Y )0Are0W ,U1=6nEa.G$1j0҉N9kDzJ+χ0Qy*[wh !2[.Qn[[ݏ1G*[ռIH2w^>kjoͨ_SA*|WVPcJM{ߝZdzEa=0u<ϮyKynEH8~ Pˍ8g\K:= w*\d:kr?kn!A b Spbuvz:^((`y2:1l-sw̗x> stream xUTiPSW~{OQy}H4e:[ZZV4@Q\ NHB A*@UTkťN53.պm8֥s܎t?MP4M˗F}1iy7 {KA,@<xK߲m:iU4b8j4OEPj21ZJ( R'^F(YcsA3ʙ~$LJj!PP9_oO\{?ݒ#aUT&97O%&1{ne]g[܅X'K(}6uPw;!* 즅VRmPC#i&IfpJ){/{)Ƿ1eGdȕfk5jD~76:U+AM< ppYp> stream xWyTWbkbv#׉v%.e #1Q&( Dm ƅ0&3cƌW=3w13>u}ms<ҤYKŤL HMZ>{lmZanN/YzH_72df-ˎY816bѤ''8mIɯ S;W6zA׏p'M㼹@n73s,.ͽp/ĽsC. r0n87Ep87Νkt\*יs]8n>ו˜3uxΉϭޟ)NDk8INNQNNuZm'_X)|#b"Hw]]ƺj\}]\nnfj+݋t ^?;A,-l[ _>%ki@%%k#y5ZfQ|bhbV&z]:zq  #5Ā9ic #ojx1zK;̨=wMliκ";Ϯ-:7^Psb/v2ahqL̤'ZSf̌K 6@z'OY1F t 2#h0aLQ4ʋx a4F>L+3Vn;+2h>yru.&t`,6M:4$ZH]ɛi< H^BL") /# {ٛs,t (ł80!_Mubp@?>I#ty=zIc,E$N*yuj /_ w-f K)~ C7!o5R/!7(5m/==qjc龪ZvN+ t;⫆LR.nY\/lKe"uQMK" { -LT"$[$KP0hx5$rQ;-*$((OW;͑T 8F͑پF-(ED~E+c\T>dؙ'W?va&' #[U ,^1Ų%۲ݹ}yKCVܒ5eI.||-̊Q/[#BÃ<xM!aϚZ?ƞ0q?_:7u4ڋ}con6(?xzeNi1wEeoxpzz ˃SRgdu%sOivTM<5ia5F(R\$-}ӎYƜeԱ}X;*oTw@,z82URoT#^9K%X~ܔbhNHek-A~/pzF}鷽ٌáobmCn+$~l$:d{}y3IΌeq,lV~`6xo};kP(B5pR6W &|Uޗ 1Om&[* /g؏ܡA=|e CzŚqI44r7q ueJsR͕ No7"^dG,eGa=a]Q*[SgfRV+!NluMs)o$cW.O2Ľp|X'o!Zz~#ԣ:+C= > Q0[xF #oF^$hICZ0C >qX8Jendstream endobj 86 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1383 >> stream x-{LgwV޺`}(Z5&>ZZU^kRN <8(TP +֜1jMu>4PgLf2,tbXu]302Jt ),0|6}vV`gq\[.`펈 ڮ2&072Y,g|?fYlc\Q2;;/ka_:.*Ԋ݊&:e_nTHO[]R{"ވ">>,%<݄ߧ|@ Z{ LSR~l,T--]tDwPNʿZ+hMWqW^g)& 4\:2"]Y܅;4\$Y:;ȞVa<vtQ7pQ\f3'܁*B/:Sb˫˾QESsC$5ihgeCAIn=ysK'9 "Q[;b8҆p`q`ڞf ] n_[SOIj2q ypNAlk8mb\??Q}ެ 8?`7wz$t  -י95L,"v9܅FHDsש Mi46ֶyQGFٱգw-O"wd6ːp[l7OjIMd\G7oEq p G0 ƿ` [:)j6WI-a+柵ґcZfދ3C%5Ѧ^&^gY{|\#^@{ .МR GWWn>;zNLR)0&I)-` u*ȦV%f ' ,%A*3\ߢ,3͛NS|`tomHU\U{3NfI Lzg9' QV}>( aJ7[rҷntq_in8{N;Aj8V쫇La#nG-iE@KԚ H9q8HA32 p81xu֪[J.CgPؘ}91]_S| ನMlPkG:lX&BE =hh 1GVV[++#ʍЛN#E \5  ZF1,~P' LjoXB`:.L:rv FuG K*6pǡ&t& + 0goN@B ~돪j;?3endstream endobj 87 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4127 >> stream xuW XL?i9ȨƑ3KH%RB)[$"ՄJE-[֚B]ذ M]L4.+{N=3=sۡ)~Mk7G%M]XEY"d s34* !,(}aE=)j5 <(OʉZLMiLR.j:G͠TeN (1LYPAI!@eP0eC FP#))O hʌCe{ms&d~3cƙEً"D{`;'/fo t@K\9-m063h Amb+9 Z blQjz'J.=dl|d(1$`uKfTPc5T p Ò$@D8EZljqi*ܭ/DdpqR4K YWi獯,Fo~-~}dyzWēN/jwndm8#;r$P3EJԼ >B< l|`wR6%榊b(O{'6 t30 7*8-m}5į^X)3!WX5!_ZC%oq,rus KcR՝k91+Brarmhi X4%W2 &g('*裯az`(в] )Yg!3a G(%H::J/1w}|u(8ogpDcQAĂX}48NtA ;|v#>#2鼮osL4uv|'{Ǫ2%j66s(>}O.%ĭ)I ǯߑ-M}dx hCnvJ#7FE2oOCR0 DЏ%ZeȱW3-9Zs]/zmM䇈D'Eo\#2ƑbA79Sl~c`^.8q[$*b58A4OY[2sͧ(g_V>;g%*+(ؑk G/7ʻoϮn.l]_;h'bF܉v؂eG )dsf@6ʗ׺.fp^."'F9d."4ʩKŏ8Ē Z6))A|KؘXF?\/ :`uqr ְxA#zϚƅU@Ov]RkOM&fdYr4su3ŲlUQ(Z}bŌ3;]5 D=hOޞ>:x̀ .>wZGs)nT< {QrЕd&UnKӸ˺SpEf*=/ɪ#onN>7rcǚIk>Fh}a7Gr]` ۗ`DM'֜|3fSvlQHOd8/3hn]:mI) SanI2z,2Hnl{OR)zǒ|G4%)$Ed/z~t 3C7#,:/]w:q#:Bp~`pQoɀ^.앛W#\dϒՆ^{EY8++}n4~%L18Iw^cxx"x?^\4\t3DV 81~]42hOM=!DB4DF?z,-ޚj˵\QW<(0i FjAMonv$#d2︐1;lʎmJLJ8pLAqiX$ LTr@U?J,=xW׵H>lD-dd6lj4o7z ghQil-w lo+>W.t'FTUTՊoT-r"^|~(G ~dN+5޹d NbQik%`(Cl^JiC&n̙*;Xߍx k(I=(OATUW yZ_ OT4 EI+a|NyTnNLRdoSaM BGR!Av9rOx….>+fwY3NV7R½vJ U20C8JNjBJS/(f=s˿"7bx"#ô0čdydaqiaNT\ZTf Я>bpa NڒOG+O3ٱf}Fdm/u ƛ\ޭ#~WqVy8c] ύ}mz0X_D"2>}C3؅<.U o>"`k~9!vud".8Wgbˋ)ߢ\Q>endstream endobj 88 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 568 >> stream x-]HSav>NfNICAn.Ya$Vg-P64C{wn=e.30ɰAHaЍwI7 v(B|# q{[[\uI˭Ҟ/Y!YFU-{#˭ԑ$ #pa.%1nYS\+ 1}Vq,Y)X_G!/,K?`xDQ"ê3Ԥh4ЊjÅ[zL=@&a4R_p(?5ao9 ]M.%NXOJ(00O(@$$?L4rh%FVF+x׳zyw1V 5pJ\ \> stream xcd`ab`ddM,pI-Lu JM/I, 154Kw4񂵛cw>W/ 06##Ư 9ߧg8Gߧ^u龜^}UWdb(.aendstream endobj 90 0 obj << /Filter /FlateDecode /Length 577 >> stream x]ԿGO7Ο8T"% l_`;GPootGI.P5O_>ޏ/<߶zszroɟ۷qx<>jxh{Ǻz:Uyӈ'.ן- ʢk)2(%*Rsl2(-ǐA $r,rqAYsȠ\rdPw=)2sʠ\uxȠ"kA͂ʠfdP`2=ǐA;uȠfߺʠfzAFuAFuAFuʠfȠeVd2s2h5ܺ Zfn!Y-om2h2hM4ʠ9wd"{A̽ʠgd3s2虹<~A_d`.U=C2  "CFAdȨ2 M! 2d "6 "3I,cUJ\d(6D^J2,SWD`d߱`dQd02w4; F!}ǐȾ$}Y#UcV~rAَۏs߽rx{SyGendstream endobj 91 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7718 >> stream xzw|Te98= XX M^$IHd>LM2B A@B˫뺖~&?_~'>u_u_}!F 85k u}cw.<Džq#=ge1 =~gAv^q悲҅"aYfiNav~O ފr\4ŷW5R!79=>Oq7GI zf}Ҭ,Zq<@X+Wn KlވP^L2 aTIP8jOyw>>}4P^Mn^Zv,%}nӞQ0e`{,6lmH$7F f"sp'Px ~ix•9B~&R* 1x<|C 4;c\z A5⊽D pY; Ktٙ4 BPY\|*dz#n;Rb0UFOe' _,iIb< DiJ+zSuWÈ{ǟ6W\;4qn"c8+h{Q,&+SFkGZ27$DQhC(6_hҲ<\G^@"4*PvGniuK)Ьۮ]iC& %lgmI?ح. {=f( 5; jIQ+˾>_]tlJ润51&4d{j"@Uz0*jTL47#gZ:1׋J:yCm :_{-6Вa_@Rbs(fA:!kXhl&pP!uЬݡTq(_\Vf9ܛ=Y.hjW[g=x<hPt r ѳó[V]*[%!uAJ2/G]a*l B 4棻:#Y:/ /Q\ujCRŻ;#N먆/*bhJ6A/-it[0?.^шhBd HBLO$@)MAoWP=Ϡf[% ufz~F_g? mk{%4v|Ⱦ/Q*btRS$ ˮWz9]vSKfwu5 ͭp<8!}/g 54iNB&Ш8~$€~709+zsR@omZtEyw;:y3M9Փz6< A7wd*In˺Wmהůy=2z/7$Ik?kMN~m:*gVFZ b02ϗed]w 35'Zs,t%^[6ʯ bގ |lbZnyAA0|zBA^K{˔E\œX[^ _>$O_Ui3{2Ջ{R(@6SRlԫ-/y:;άn} P&yW"^J.GlysiN4>8Np&qXKGS*7R/Qg l}tYhn8c9:BPݚP$eP ҂xeJFi4"骬f%lJo+%O} b(gXVȳIЂă)]iYBhHi> ScnX~umA`QQ6eϦ @ Jw (u>qO\z*fHL*Py5eq E/˓-vx{6B:P$ܓSx ` *zCm@A(oPvF\Ewk$]^~S{(6mx=>d&?Co X@EOO)]"׳zcV` %*o(~92a xmMdQlٸS/DQR=j?hXNV}8.eSSœ0'3Z}p_YP?LqFYCJ6_}+Poc}itꕸSK^V%:*?g GKk\GZ?Ab3kpI( E/7_p٫Q~oNcTvjh]#\znWMOg#t({kh4)54 (2E9lݍXkϿLXq%e &hh2)'f3Ks'b0 LN;R>ⲛVB)5yR(0=҆=.FyFuޓ9TjYl2Q q4g}?a[F'ߛ.;8O7eKпy6"w-?xCYAT5-,`NwD+ |_B\+MUAVF-xNODYXm}6LI賁Ɏa3UVX'Jmvjmgn~/L{֌>#qm>Sq66;Sh"vJw;ԹLC/7(˧<_@I씁''&6{*UP*(᯵2cvݞ37 y4^ ;\IbGbe~QST4_4̬d+VG/wK7з>OBցYU ͬFZa_^P ?35] ZshMxtn7;<P=PJƨ21KpAeҁD|ߏtه-Q/[kۇ)7Q.D;p}m)鞝^8G]G}zхp%ZChְLzP~|]?{g~]vD\8^+yf tXN[JAc /V AX®O |xcb$%IT6/jWU2J2YUWk@6ѻ_|qT wވ+8ꠋ\> T}d/^6\/}sqt4to=X8٬MAh%*cxO]_lp7y(% >ьM͆}/F/K86&9A^+ dL+MPA)܊v{_I^ }U[ &^8XY@iDv&ݐu z^b;, 2TJ%Hi>q%һSEwLPiM&j}'݋w?.ArXn*tΩo)AcŽkQeق^μ#k^|~ a7| +?B /hqP-ĩĠViXbP.X~᪈`2@ײDnwsN>5^`A!Ww22"{we҆PK[`HdJSsM"0HL#)`VbtqD,~RQnSF%S2vQv@J=u-FOl>1{>ʹ5#֒x"~g3ϫ" L"ۨYGTTY}<Ջ1TOY#ffY+inGM>Fzr7 ,Uf9jgAU;h͉}/FMnᲗE~q ى7k!P_1<o_W d.:Iڞ_';"m=y;> }Ğ R} /nS֊oJ8'ݚ)kR]@v:d8hjOfָ<'yv^b?\b3ߢh1*@UF>^)1sm*4[w8 znj*Z^5Qh.7kNy4=Ba?/կ.{-J@WػrWZ֤^|9&GMu</zOKU-5Ah?zҿo٢{1XVamڎ kv5P ᐲ(PhhzW@Q{p pY#§TV+[자n|@ Nܓd2IeFmȞܿ=. THXG;Dkh]鱗¥c[U!Ag6iNbl>glRB|Vls'{4y2P@wGC4hCFżLRy98O.@ZQJv̈́?S4ˇY[goW?@t=|yqoMחOu<Cb@A pcJBJ%`U{耯c_;wƒ?W.uuTSyP-/~4qQJhcQ1_@OgVm. 鞟q~MuNZW:uԵt7 p?9f=tQh*\潮j n|@}zLۿG^¹u?F*,7TtԊ2E2 %205'*FG_٧h{NY6}/#AIk}gSN_Cr'>G1Ds| U;*_L&9@|/ K  mMy!@)}(0Ϸlnp?"WLf?6ؽ hr6[i3q+m+' a1zs ="|:!#![h\\c#?:`V$# xsģ@nsx[~Ԕe-5% j\^;} xR'؃P~MJ*J<>Žw4d*l({FWDK*4Y)F >n|R{4߁mxOy{2_is0岪#MJ V8_ϫ){ 3sL甎)MFʩq}'>#ƻb$_!۱LA_>S"Vj&C%};Vՠ̣uQLWzTm(P?(KdQ$&@ LNBpT[ub_OŦ*V0'S)'<5S[_>pUz}QOU9Zs@I-MǏ}at҆6M]6+zwʅFIcg*F1AE u.ɋ"f.Ԝ"bw? OEH z Mo͢J*AԹ65nV]篬MߑL8p+Vnd91+sTǓ!ȠH =x T:qLQz*TN#tx%-QvMFj=N/bdVHA\vV>+]&kq4cmD@Aex >{ݜqn}P-Y.oXrtB$Ja [GO_xB1Rz W.pxvu>JWSċ-^gL[USx]h` _t&Z',|]]bX4zq҆RNj)wYQxQ Z8;]tM'8@TM8X]ebILzhX txoN2F{v-,dtXz-q؏RvGJz#endstream endobj 92 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5809 >> stream xXwXWuavA͌_1h5kD tAXʲ-»^Ul؈%cK$v_b5sﳻȒ\0gNyϯQ6(Lf58(x޾I"-ArdooGPtxˎ2 Z77}Kȼa Ջ"4[#-tZoU7oNVS7skc)%ʍFL-FQ˩ j%*CPc:j.zOm\7(wj&5@-&R E$j15B-ަ\Rj05zMQC)ʞbM0('JIɩE?5HG(*"~~s'AMmUb\L^èu7 4`g:$sO/tMvOo aÌÞq N}P99Mt2(G*c9C8"E[HU`|hFkd \JnZC <)1?$&%NQVT@]R-j*tx[?5lO2Wqd(]V|#Ɍyr4LtdJE-\ f?n8:ccvoАVECvGHfk ߦl([ƓEllo0k'gFd/Wd#**X#-J<m꡵%¿heRF0RlVW0%(lhb]һ Tqs "]\X{,t0қDΓuk h6 Z0~Ӱ4P$mϊpvd8_/ʥ(pK<Ieq'_8Y@dHMI}Fq&>:g\K 5tjM^k!qĞ ? ˽gō&MXnՆf]2^>Ͳ 6zsZёo)0@a*5-7oT!q ͎|r{ "`+z2d? R=_c"f-k 'Z_^@e SL/(Ío4as3sVY5dkhcZWzؑf>7&B'+6@40}5 = )Ocv} חzVɆ]@FЂ8! 5fʚv(kLKɘę$'uNzoB`f_׮?y}fMj=qwj UApBpeeBH~B<Z{_"DG9no$hRTwO?0sFH+<{ż(gDK|DqfP(>s6wCSgτfI?r}v#ïWP-ʥ5-JR#TP}J#$QV#n%M֮u(bFۺ>CC>[>P }o;5eR)A.eI/s->7öiIMڏv/,Oʤ}lP 4g9U`e;duU7=\暭.sˈ;P9N 5ρf} բ#!H}7n_AUQ5'rcۗ dF*q6aDž@'Yl8O öFn]×mk=d{I&z'M^(Q-'b2fko`[S-f$%@2֓ yZ +dn6$zXrΈ2rZc#gO{&b( H~>+J,܋4u}-i\܉Xne /%'4 qٱ%z( dS F'7jN\ J. ;W^S%L LoA@d.o/_q3AjϠԜ ԽQGE<&-/JW@ӛ.@.bA㓵[ N6ʊ S0 R` YJO"C3_,J]v=K9-\k%'D. 1)q2)3n@&٘؜кݝuy,pnbGXE44 YayAyA_/ܐ&hܺq@FK^w \aSk &y 4bGqA-4&qF-ߚIcOM|2Pt1bYt\ fr]Bt Ԥ50샪H Ka{yPwg d*mr{^m6g{y~*mId/=~dt$ْN2Oe:-Q@^*E̾#q-{Fd-T0Ǐ7B3eiS9Euq;eCdޝ'?^8)jt 14nY9gg^ذPZEZi'rcƄ s]'Չ8K)}.CUeUNڭ^.}nEc QT\ O4q &X+Jqe[ѲEV9ѭv#)ӻ__A[26 M F)(,VK&7g'ܥG-Yf͒SOy'C 3ɓ;p(-zvJyġOV2 #SFYK5%b,u=<V=!e2NJnY7^rtSݓ^T8( *ۇT괧'R?kBsd;r?U6o%m|jfۓB]ݲ*+NE֯`;=t젡(֕' ]P.?t1;Ouv}Um99z}:^Ԍ$GhcV^&Xp< >mP(y`?aWsm>fUK[}si$2L#8koi\mWYLLɍi Жdx㷹eaUK*a/ĆؾBbg6hq1?#]Is8 G_%Lk2bgz9Xt NV@tl:'ܮZ05d|lHLV@l&T&QP'n g!?qTEj 0u%Fa(P-6Zt.n'8S[N JC5[ (`b-Ra'FLachsm# v<;1mlI,ʤ,ȑ|-n2ov$d*MJg^ 8 ֥[ҴjQz0Q!=!-W@TPSP&LEkϧ}(iC#Lg=hvqȃ nR8MWN|Y_[¢ vTEVvFQmqۼB4^ hdzay떬X6%dV ?!=#;ȬTk'=\CֽGyjFhdX]%;iqDM$']BG(>К;ܞ=ޥ#4C[K߉$:HǤm)-<.> & HD!{˳s}G;ȼf_6smiZsi !o-.?GHFFZvJɥѠ3m.+y̤-r7}-DF&|FIEyF:0;dM"MtdY߳:);.07~EASߝ631<{iqUӝ_? $ϭr2g[繵ak:= Ť[dt]1}/>nKM;ß#Fv?|U%noPQt=/"yՠ4@aO-*T[?o"OUŠ?Lua;ɻiǝhkJ1s^\{pa~Nq.T*kEZ\#^I ɠQXwHS4PRmתׯڤ5r)FX.RVVhK5ݻSxB}^7B2_J8=i\NjmLd|V|ylVC4(#Kb yYY==S_;hE'}endstream endobj 93 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3207 >> stream x}V{Tgڟ2g'*[UEek "p  [" H0~ V{>_%@qysL9M<{~<D"т7wHW6dkxE)yۣ'~g>S`³TɍKH%VGZ&Oʫ_a vcoa`{>l?:mŶal'6b󱧰X$v[==I0c9/6= aXhWטx-V{_Yc³@G? )nRL3|Uλ {vC-.MFN&CiHtT?;l&#ZْE: u yՉpu:8}kps(85>3gQrD`el_8'3y$4N -A>+~o I\M{{˶mo_;W>w|ގ.OzpG dO}XmV M.sfPS@Cv;bp, xN)%^~ 2^ھ $wN0 >Wi*+]  b]Pї?m%uqb ( I ٙq4kL81 qyBp_ f$pCvs`KJca"#j50X8rs ,Jc621µ8O%b#)G_/c-)gl՗ZD"2>`ϦKeur@IJJ%JNS譧 퀀z|zFՓ.|~2n1J%&UhvŹ%N)4v5.Ufӯox2BGntt[W&#'#'d>oi\-N}]AV%='>U3Rq}7MIOx'NLa,ed/nq+9M^5y0uHkF(_+'SuAYLbbCĕm Ie8{~;h2w7#ѼA.i& (H%əS\SLgf}x?|hzٱ/ۘup9JKF 9PbvR>tV?E]]fkk%VľBpM+Kb lz8&C2/ꤏj{h j \5>8#&ۯ'NٯKɅ_PݺHVEk)M *(Oҁܔ]%ȯu[tτ>`+ww1؊k@nYFXeES0/]:mLChl)1Ǡ=Edv0SgN D2Tll MFք;Gk::R #c!:)%?4@ Ы -h\fH=B^a hDugfeS[zzZ[{0La̬14ϟIQ?y;_?.%OW]%ZrNOХ(# rEc/QsEr[AC,ų>ǭ휳7JW%}'my(]˪@*!`qGnhR(Dlpܡ)1/R#qFP[X6NK#) ha$ŵ\7lH,܈r/JpdtVJRLOX 8#XXT^X[ڦj}xz$v`[ /P "F[pM:+Klڒh-`3\aӔO%1K='SR#)I1qrYT">M5#4rװPcU65QhA]4a?RGFt0DZ+"B%ܹou=iHry%a& iڠdA6̒4YiaWF . Ϭ_r** nQIVѽ<MLu514H@|ܙ}0,<;/x@7YF9t3ueFR:b2Ӌz;oBSג{ee6VWP/+jBmUwܿ%B<_So*A1:ƺg[Ժ ˣ +/9A TPW oFasXڅt^KpMyNu5۝k[n.%êxF_\fWw]~N;@a.ڟoE-kEk` bYnf, 7vf\3#I,`HZge@ [kBa^!o<O"ȑϜinz'1VVr_c~}tvDƂoO]j82FXC\p 7 # õ ll܈Ƒa IE 4֢[0:0\tPgk3r tȁ6=d86ixF=sիDp[8DkIʂގ$jWW+a*kMQjߥoU&qv:{苤3&6~$HS_|!KjPBK(10 E6fݾu[GC9 L\˾ƿ l;q8ߣ}L`|> stream xVktSU}p64QFEAQDaƁE@-2 B&%m6mhNjiIP :.fƑyٰXTEefYYkֽ׬:瞳E1LTTdJڮgYN{=5;k&RWb .6J1y"gcGRr.MAaV*=#󍬵Oyjüάff2cdc0ku[zf)Ib1O3/3+<y&c12̃Lt3wrȄ{SEtULzlMOL=qqmSکS?"=ӸfCe!0I o KJ\6-+wMز+Wsmvs}" iAe1e2^`h=$mE4At 3QY(35 );|2i(i!G8B^$;k6CQ$<I+`nI˖r|gG x]! $J\TP ȅ̂giyHB~Bw# #[ Ap:~Bv+Z0U[EM@>HȡW S5|d"9a2gXZJD|?<b7e%ΉǗ %M(j{] '@&.L[H`XPaGPJs#|^r%c`#*Y#Ӄ.sR1DX̙,f'! ӶNXFc}  ?vI~O4$^(؟d%Bmo3->~费z$|\T(;="EhQz}6;!-Ɵ0w~Jo7AKdSC"Cb<fH`i,ҀZnm-VSlm /\M%2 P3tUb4e+95VtG]qkjO>XNbȐl?49\:q\D+ M*ۍ$EVQy> Ŧ&]  =vyMӥuųYlH**N';jU@k+҅Ti%,6g@b lrjGIQ~8/9Cdd<$ ~]UP$tʜ1ZVrvv˝u d $$҇/,Q&1N[PKŮ||Eg2#%(|L}ķpɨ `Z(rS^=#5Goxx*3+% ~WKo^?L /R"~Zp% Lǀ>` * - @l K %*0]Ddw/_hb%l=wˡN!|hPԭ| w;/La{sroŎD:> Ӷ~|g碉p Mbt{Fkqp%2_DA"'uso7\|i3LG2.(uE.Al+ l.n'aL; K ڜ/lXi1%]$=⭉l,s7?HsYjݽXLoዡkΪC`vl6>8te$7+7F>\nGwaJ&]zKbL]4< vo}6O-r;P82oUU pxOx}'\vYX<3oϝ!6N GoXa.la) ~/qRC) *޶̥F({Nj̭VߞP__q%H B>w YNh* L醕朽;( ;gi,Vbܲ7!)4=*HLlR|K9)p}X;^GsSp`4\P_|#q/h;@g6h;u bC;aUxmHê/]9|t?6M6!l[K/ZF NxgeQj l[K hO 7M$K?$â&3# 1y2 a)>3S>=)/\(&e##Rɟ$M,M@f"SySYRM@zPZ~X$ PEoR𖱦D*" 6F80&^ENCQY{@ݙ )=˜eTvpz:Io* Fx<[5WZ5E۪4>u;[ym1POl#[j5'6*)EIɵ eXR)l8<IlmQǟO% iN3q Ȃ:G M 5[6q8vendstream endobj 95 0 obj << /Filter /FlateDecode /Length 4855 >> stream x]nGO;MT M<`aE$$[ly]+k,+]ŪDvׯ>ʿ 1q跑T,cc!LF6͈B;>7FFAp<LH pXC[:k@x}|52O[ѫO#R)X3&@(gF͸1_E}cipfƚ b|.'S$FWz6vPZ^ne ⴮/Ң(|ܼ[f]n_8rk3QyD)i;ӿܘL5CV)B{H߂L!8F.L~}B(7`dζ0dI+5BiYhs4P"= {I"S+'e@(4,r؞F$&~e(PgT;5(ld l w\+x](`hӪJ A0WH=qiԊą@;[) %%F\;BV7ariUgA;*Y ū nlͶ^nԦʹ@%KT2&cXH (!6%(e 4E)ϹhYk$jJ@QY'4A L1:]~|4tbaL%ca_LTC-7ۇkK4(x\&,pr%dh61qJFdBP`(0&d*6j/O )Xj-G ) mrȣ\ԩ(?I<"ʈjIBg.YUηU"7f.~C;@g%x X \hU'sԢhs̈")~v̀Ѥ'954̧IUvu dIr]+8&9z&y3NRrqZeh$-0#30IAhU5tYlJBX` T,^O 8~FB ) wFB]Te" R ~^OްC<>qGc49`Ҝ9AH orY6We0G"^ U')=1AƧO`x< R0ɘ$ 79072-N Fr&]Myan/YPٶ\ %I` /PD_Pj@)p &6Fمc;w1M Z0i |ɿlT(_ 30.Dh )߿/Wi- v15bI/핑)hll@[QMvVi ְq/kKÁֆJjÇ}.8zOoJŸZjŸ O"Wp X<_%_]}U?=x>{Wv}AfٲGQ-ѣx0<}w@T鵂?x0F[n׏(Ogǁj2Eܐ@sM1[B+RrlH9^VBqEtэ$RN;D0Jܡ\h ZGCSBz3a;.U{8VNc^{0A;lvvV9t@\[';)N+WI%.ؘ {Fۯ gs*,h:finڏܐ!Wݘ:j$@-o'SިV ]SWyB& tV'\ \bsXC)0v"t%j9O)\tɐJ~<ˆy Euy*k UڠQ"vUtQ 3~ж &ATxړBX`JGnr6_-4=@$i=mDnzM[ilde7]rڻ +~ɝ3ݐɟ;Ä*oҊ4nhm;A":^fT|eP 9tYڀ:3y\ 9kZJ+wrîI Ll׶6" <; z06ޚ μ$_FنdEsNBq<).cxMُ?o>U^!򔏇[W7'sVVECN3LMM0Fzx.y;a<]:mZ/ޜ:ѹ)QswuƂDC$g(֗ɝ0yTPwH躂NyJǹJ E]]C鋀2RH_x<$acyh%[Hc &/},:m׻Y]vs%xs*J1;=·#|Y=aLq:,3YkPkK%{Fy8,%^#=Olx-ڸt7h_r HKm xDfJ8U$s';??㏨:zhА74 7h ]u.y述E+Ϋǎa'?NUomMAIW _j1~7ƾ_~rl\)''_ǾGzrUhʼnv/߿6Yk:f{6 6 8 ϛjtV;&&JmAK?7za]n2eOtqx4읒KݳE< ĵd]h`Ogҿn'Sf{j˅Դ5E'|H1CHkHsyŌ&^XDwO)c`@z[ VN+"/ъ[ZeTk`@򠷌MbZ{vK8N^[VXW]Lf:uPg =?JѮZ6 u/'Ӊzmh H.q^wm^VuW@=L07Z9#alwYG I#'mBNImP?F4endstream endobj 96 0 obj << /Filter /FlateDecode /Length 4917 >> stream x]r$}ﯨ\9JvWZ0Tdy}qd{klrF] *aHv9YD"d% xbr7т"Ip.Je`U¥t.%Մ3*c.+&ד&ϔHn6[N_נUGY' 2ͤɷ=S|"\fKw|r>a€ gLǘt -p&YL&noH߂N,,Si5hR'F(0*XLrw5/.>y{ᩒ_ h H3 !_MW,gZg&@hi.íBFK-u9k1.G'Zh`̦G?]}8 8FD r9?|Co6^2]A{/dA{]Q謣Ќ90`?=G%P X.JިV‚_no W.jsbe`x``>&>\p8lķ <:kl=6 [xئGM/)@1E.K'!_h:=KGNb X0 O>o Pl~[TrYm)xsw }&Ly0L&S>>鷹>'Ny8m4#ٷUHW8/?{j)e:]8Agݮ\77S16źýXcasz~m͚f:т02NPm9]cUGi%H'=Y*2|ӌdd6|Ͽ9"Wr<_"/"4/ݥ6:6=Kw|dI$/KM 1 ]"J 6)Fbb0ѹMch4q LC NܶigLqLd~wZ~gQZ)n7^!8ȱJ XşN*7V\4  q-sUʀfb܉z .3!"cf lV6|>}C1ncKSv:" LM.ZR$hQ#r^"wq!eSp88ٻ 7ثwnqGlq&;:c8L> E?cI!Ԃ)"%xݞ$T1xf{  f& ͣ ㌰ͮaGD.9Qޮ;ĎΣZ/v#k<;;wV=Y؜xCL?^@֧IM%KlX1( G1-`H4wəi(A|P§h)HX(@?ճ;rLX]0{]uA8c?Yϖ{V$0&kC1` KWn&#:Ѳ L=M;?UPɣ2|Nw'*Ií1fpцݐXl%;-9y->W3fLxgz叫7EmQ뼮qz>.݅¿:D~R 3Ӑx0 R3:u~4z } k7E>N7E1Q'ZCrU 6Xc4NOQ{~=g6/}Mxh~rf.vЫCzx(/D[ #j€+äL~tW|f{hßr JLM_Y9_mn=KrUgz+ff{Y%7EQm OdX^wr-f_@/({e^ƞ~섁=ݦˆ_V:Ⱥ̓G_T:P7mqۦfhu1].E5+f'Of_ilGZ̎;/o|󧿜r{˹4v9|Y|>2p~QSD:nkС N0 U6K`lA<9l'&$ٵécp~;J" Љi4v 6D:GٟHM"Q=\>;~YZ^`hb]$TZ,$GpՏXՏcQPAGR3 RZ*eD*qjir C6Iև`Ӏ Ewږ$6nCjz0ZJ`8`Es]\Rrq%ei˸R! md v˸Qu] M럻 fX7Kl.A DzBwhZ[Mû\CcگD]S9 ֎%="#8jw )~LǴHw']wE DA;Ў'NWktf`#CiPG%Z^8;Fz ==.٧2ufԲ [=~.v~;pӿzFa޷$G󌘅3b{F +6a~ahjfOO5 /xIǮȂ\mn7xr]ޔU>]pDvHoE yz㈔$F()T0[wMvv>C_}EavƼ[x|QlVvp6b.[i}E*[3`"v׶{QlvG\$vzDGʀw/|yun@TT-/3x!o3zV,Vۏ\M4ѷ$rcxjY-g9(&ztls͈] $gds'Vwκ_?97LD_>o Z9(o1Amj^'M٤`G٭ бezqyܔ9qMq*NEyf kjv\cƋt?%q1Ɨkogb~Utny[gi^ͺ:6ȗ-3\#`Φye}W27_˛#p.98g,T>%)Kϋն2* 2~ᦱɥ ա(XC& endstream endobj 97 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2350 >> stream xMVyPWf覭eg'LMj5D(@aC7\03 * `0BSP )]C6zI֌ޫᘡ[aQ q~]B"ukW)Fޛ6cCB]\#Y`1 ۂ9cWmŶaDZ5vc >0Gی`8fy`.' }<#k44O$2FeES f>*u*TM]$hGvxjbB`Mdbݪ @}y_82\i,й2Nnnw3ONܛpHupG'w^uuD 6/; =\,0sa*dƞ_sa9Z#x;|~3m# E$K &$pvy||D=PNj V61cgbUUO6Cr  ҳp*W=%lV"&4+gEԄmVk@QHhx5ZLIK\i%X)*J2ID+&AS$+1; B9jEV5`ڵB7UꪺKMe]@k̆ 5OfcOxwh aNFr[k-1IY'23 SBT9}>? g"#H]M^*|MzX5aN4f}h7BnJ/1Y#œlCR>g |'Jw!TC*܎ߣI]-経 c%(] ¸`Boer>==tV^^*Y35@9fK-NoEMO8-L2=#=£kŊ6U6*(ȿ1[^EEdE"aȆ:rKD]GKMKS5Sl*)QQ"RR]Dwn)eJ Вr#!> wo0]{3y[w*[+(s2ꋯ|ehD=Ǵ4 5|=dg1]YEVc\kh@59 n'mVE ZhXܻ̓?=ub1ʃ sj@HC/x ).* rا'DG9,W׃uI2fQd{-P{N*)~yfdɛ^2$1Y1ΒT5U ,"Sf$` $w iܺ~X bOt:Sb3[=-3RƒY)޾"J cr? cvCBOoLP]v%E2`dґc| 9M" HΗȴ }@bB2tJ"CVzǰ1}endstream endobj 98 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1563 >> stream xuPT]//+վ7kR,$ЖS D4)i lea]~%rAŠP[WFˋ-Cxft:2Mgsn:P2޹|9 i0L|[LxyOuwNs?%Y~l@MWVfwdX6(G=SBtd,zݼ8}<_KG!OAwLIQ#؄T<} K惌)$F3_Uw7̢4]ǖ$dWo/;j{~$F Dޟ~833K[Mi1"zyBysrG8|r:sXݮ&c\WUVmAnwc-(PGendstream endobj 99 0 obj << /Type /XRef /Length 106 /Filter /FlateDecode /DecodeParms << /Columns 4 /Predictor 12 >> /W [ 1 2 1 ] /Info 3 0 R /Root 2 0 R /Size 100 /ID [<24b9fa818f3bc8676e117e5e6c0ddd31>] >> stream x̽ a^AGSBe (44 1 H1ϯLhŬUtVbӽEh(}1|V7 zP F endstream endobj startxref 61580 %%EOF Rcpp/vignettes/pdf/Rcpp-package.pdf0000644000176200001440000023031314711515066016737 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4148 /Filter /FlateDecode /N 74 /First 623 >> stream x\is~Ev #u_y%G/7z5"G<3_5wi)5Y qpѠ =hP(r,x) *e! Y@JPV3ЀAk-=L`ЀVDpXrD uԾhax: 4N hBТ`UƒՀZ' nuNx :P:6:' N΃Ӏ^ zO6gm΂3^-~]{Z_F(ﮟfWIρwwt79S,uo^W5W8hݴY +0 k~PS8֢+mo?lSJŏ5дAd|cZAcKZӷN9O?ٽʣ'T6g9yt(ޡs`\mKVwѸqiyWYM9__?o<{_ Uj8xC^(s^ 1=/nf0jxâ+KuT3o^W*?R:ȮA˓Rǖ䊸C^e|5hA+9'EU,yujO?s}ؤ"69lzؤF oY1[wg7NaAd"2QPB -)%<"b,#fn5%Qs3ދjb띝W&͞Ņ)9gr^EL͛ CYH`~߾ydԮu .7@[N_ lIgZ:ҙgi Y4(;Ae<1rg*">J3?o*+;mMxr\ Kx᳃p|rRU8i?N?;ct|lӟkwlR/|r֗0yr~: 3 /'ӻHbWm1Hf (ohumĊFe?^U$|WxsI30uy ZBrz :xpޅ|r> nˆr||֕֍/fNVO-،(R#bFĖTd&K&(gYN XoW9Z#(̚IfZRK7G&;=nQlDŢ;5?묞Ӗc2|g5ø<(}qAYܐ-ޢs|)x;>[Y߀٣4m8=p]aBZjO242:{wQ fZ]Ӻ6aoOf}qSh9Y{ԌI e"IӴkÚ2Һ.urSn- jX;\xp*wן1Wog/Ưxuy?mU1]`yDLa_b9У\.XD3uwLY2p=.wQ>F*7?r^Wì(Y}Q}VT|suQi^O JND/yCE!@9=`5r4,('agB 1aԚm9NtI=4$۴ewnSW .`;):)N./JmI=[2i>}buꍆyƔ=VW&}6~59Նl0ƾS^"x(5 vjtֻQ|mb浳QJ|d4#kG&cGɄqI_1v('$d&HRGh;&bntn߯U yʦȜfϜ,q -2I գ,d͇|UŸvL @aR7ƬQ[ ~yif)M34H,3׬yዣU@qwra?NV$L:Jh? ]ПRi$i@@RY%mmї RT8]04Kg'iɻͭ[߷r*日مlvP}x-Qca1+xXHb>rUNjh ҝr%m=I(eSE*$hL) d}2$Wxi+LYGŘG(c,˻nċD :ݔet3lLY4-JК\PMK-Lo֞i'ʑݷRX˔-+! w5iRL( 迕rNfCXw,I|L{=QH&Ն-.bgOn6Mho^3GM+% \(]QXBwc4:5LfPoarJ7ov3ݾ[ ĝȌv8jAie6TLtws3chGb ;  i m)U)L S=>6JK{v|N2> ru ҆6(?fN(&Im!woY*(zi_B V('V1<(!pշ+d!7F2mppǪS@{ 9͆7mBzR:&iE&ejH*f 9f2Fs@3PJ9 ;~S㛠4YB2vI(6)fs~VE2#Uf fͳ@J1G6ѧ6Z2իѯ(X?΋wE49vӿz6OJ y]oTkl'm۰vz&+hűo;Hڙ8iKf^ޡ[3OX#a{7˼KZ2/ ݘǶ5ޑLG1`l,endstream endobj 76 0 obj << /Subtype /XML /Type /Metadata /Length 1388 >> stream GPL Ghostscript 10.03.1 2024-09-12T11:16:03+02:00 2024-09-12T11:16:03+02:00 LaTeX with hyperref endstream endobj 77 0 obj << /Type /ObjStm /Length 2896 /Filter /FlateDecode /N 73 /First 643 >> stream x[ms6~b?1x25&iN.}~PdVP>Jso$%z4v@xv.BEDkDD D9B @)BL@%HH1@b`vD,+}G 0Rcv@`R5@h(-QBBNp.Z % S"s]" >8) yd3EVz%QB1AHDe%EGb18{lH? qȈZ Eyʈ(ʍHג\yk耥MS2@Fd%灬h8eaEIֈɗ)F4jE,XFHY(U"[[gd^BHOGU-,ɕ*@䃢Wh_.!8%D()y;͋'oϋsD},b`Di}jۋF#}סj$ԗdq^[i s DrԴm9 z^Eq?K.qMP22u6Y79bܖS[{6(. _l;볳Ӳ'Wkr1Ƕ{?klñݞ6XDA '\MYd7xư*'?@2BK\l{ֶdlYg f*!(m>#3(ӂl_gy[Y;nM AaeA we Ԗ,s7;hI7Odn63s5l@bbIֈWڍBMP)!ڃg[ g!} }8dp !poř0NԙM{3SsI uǤ58!_T Ҷe}~u9q3H) ԰Q1 Or{np;vןE|(H A\ǵ-ȉ';k]IqѬA?w>;ѽ r<;_M㲚h.K-<(|rU[C=ѧu^}x3Y}YPt|MZVVb"]#q*!8ON<3iW{lyzQʧyX@.XɅ4\L?އ,-Y|V/mM;)i=7$W{jKb=l%Ě.L_e5vQ.-x y] c!.9͇8lw~ygf,h9Cg$xV5,{6᠟a/ꏺcߧ~Dzdzg!}>[3OoZB_[RWK]r^zy9W!wQ@oM"?g~lT_>(Eytq7 :"n1s'ġaQ>#%r7;f6?+|~}?WK,5VPIK^q''8BoHYy AykQaͥYN7㲜՟)+lpS|t*F a2AeMZQo \@b:8NJ\\ ƌ\7|TsR81S/O,oדY4}uYWhlx[HB_oFEOWW|QGj/M1-Y5ܽOS>L$H)* o$AOK q鳻3ԗM/9p+Ym2 y]A VO7mo>$E2hQP-@٤0 Em7*ŸV&ЗS \J70`WNIE2Tn!+v(ه^RRނ|Ly1Tt(/ԉ#gT.ץeN90*2k/2o Zq*D.(0uOu%U~9K7*ߢL.F Fr*a3~г8Jr JLazkI#KO?3* ,kJ2V$L]eω%#`WHSr^τUϤy|H^Q}n׽go&⸮׋/ Vy9يWoG]g/?E`XԸ$3CyIo7$p92Gkfv\{-`'N^Ua9&N B+ڮTt[zS%gtmW@‰iw:W'wm&mIhԈIԈܴ,'Yww[Ay=WlŴPuE2mb))0 8Lс,I͑,q> stream x=ks#qU:8Uڹ}v]9CW77Rf0Ii%jh4 #a$;] .ʫIcHpn\ (.Gqq\Y FFp'9\{9Xc?!8`|<g5BbQfy^<#938yy=ŗTl};*v uߺ Rjr=0g1Ioզ$ {; LM@`B*ːh^e r-D[Ot rvdjՓw! p~QРs`_swx͕U{oQ 5Sj'XJ{'_+kv Yk%*]+ic~0; (ˮG6Brg-uKA߱h Mo 쮙l:@ ;G+2Za} xB&OHM`|<}צ1A@<69'Pΰ ٭@%UBjڢ}h-:UtFh[A֝ ͇zQC%3xw3n+ 8$ ^rAV RKZ|3n64}|$-#Y \#H{_h˱ą7*QQ;DpE]%Ɓ\ec2}>L?f Pjr"? > Tg{-ö"OfN4\! Ŀ]w+$,[SO[hRK'kC ?^B>A ubT{ iwY%@;j& aնY7jzېA4i~_B9i`PŮLE Ys7gG%M Wu}-AGqc]|v7$] q4fY6aʶ×OM(!I8_';!mF\8#]p4܅OtD߭ڴDRl{8 NˑP⺰cx#FKJOr Sw!TNx;-sK8i]tׁʚĴ x> W y,9ՎyypPt F}r) dѲ|7ytQHay;yp`8YZtޝ3{[NQDMRl44H:[ZHSW6jd˴e{$`$,J1T74 &ZR6wV{.|rjiҮ'BJS GU]ۦTiںHcD hvYwu7ť%|_dItB!; :#fn8ASZ.m7VvdV훛 \Pigp\й2eS5Ơ$sŲozż m\-U\h"̲Pg~zgpeD4IzKLFC /c;&ÖM*>oU|E.v/(͒ n5f@eM55:KA/Q==h?JqO!6L&!bߣSl6E'ȸD.Aez f"X֫ŧ_l1_V@f{{n>h"F(x8@ߏ#&38Iݕd-d9'mի霘Yb V`CA~{ts" ;s^ n ~9߄gcsuS= FsaAAc>`zdG;I|aXD}+ˮ:.j51\JAPdDv>z÷#A[CŢZ,֗h&t6R}K(.mQ>M6c'}Inj@luW.}x'jn{{}BێfW v ˲mȃE`F E E!Q/-"GPh. Dʡr!b@jwPt m(wwzUB\S0jh(Ve1. f%x]HJ1 d"LO:,"n6iMꉕWfHcCR-})k%w}l(9-/MT1RTb 57t\q .,޻8Ɣ~bhNӁ{4T]l+M\O&x\̒8FgSkwR9?ZK^92}f&fN)OMmJqqǼfx?egcu#TL p5S;WI^#95$sLŒD.^ZАTM~_v{OjU[7 "1P1~E')9-kBG>E9ޓ:ׂwٙj[*#tOK!b9]q=1V=a4(O3Aɕ (z;5XT.j  8ZckLѦF0nDo z@( tC"e6md&³vz5TMe(z!2uL&@aWcm_xJH<WӡK34 iWfa6tH(Ӌ'cdJ"¤4bx2Vz̗Ľf#Qkwc9P=8J XXE|>1J2LąȣNYU]3w̳5<;LRxM\j2x3 Z\ Ez(5r+pB(<~%Rt :b*XF {ytYA>0bpa1{ )0S;{!ӭLrO/A:JѠl61&UפjHu+(y]qy 8RPb~re>En-~%/"jDU3_C48ڛMdZ8z#1$JlE'xfCla'SE*ٴiVCvN 1Yebm:I ²U1L,HlToFK6Oc9,S;ˣ`qV/QL$cv́.CVq*OɒF!!n!\ \~t/Pu]12Sb@(-Ё[=#68ZatgWgDK7ދʦ:VUCj_ a?ˌ'v݂'d0Ap{b"k0+K(-_Ҁ8>?u$a(nFZZ|LQƨ) x NȀ/)%S83r3T{<18f]Mo-C+6&t",ɹ.X,6Ww&^>Ѓ$\ʎA4ʯm6O3x9'v?bQ8:<T<CYlQ 繠aX (D2PVMTӶnN'@?zfC9[7NiQ;r; k=Jpk`G=) ķSnj˫dՋ&XnЗUs>7 Wgg슼 ٖ.f>w7z62N{'4NTYО({`Kg؂OzW'BR94}#H,aKz:~q E90C2 pi7P[ Y%a0K̜l]4N9O8k«#lAz0ܧM0\=> k+7um gcRX]  M#g~r0d@X=W({1T+XQICj Ƒ`KhUqőBGuw#V`%vg3U̼WW޳5X4kq O&cww&:ܸޒ v'w乗A8ݭ:X,H7`(x4f L7CZeWgec1B=:),;fektn3uYd8Qz1Cx#mt_cJ%DMVc̟/-!GVMEP0rxKd, Y%qK'a 8۶O*ܺϽ!p 1Hd$T>p>NRyBA.6Wckg$OI$jU<ӟ{'XI0[qP=vx:ɰ8a-o*g&hra! K˜ :aZ#tx*7'Y9Z]Rj82\|[<1kC݋Fp<~?<2:Hk{*ɸ2+G71ZT@W x;*`zN zKه =@;ϩ]y4otCT.Z@+d"dx9 \9ϿH1Msd+Li`T!D rR7y~fE~D,瓦+EVE,.~" ~DjiNb/xnvg\Yg}pk( &xJjendstream endobj 152 0 obj << /Filter /FlateDecode /Length 6123 >> stream x\rƕڟ,=Ĕ*c6V/t,ˎ7Pzδ8@` `Hsy}}1 %ί-1s5~aDfG? )t&6H\"g25v:(.DG:zz"u$ +،rA\? R,RhgWGI!o??OGm[^̾:=zzL##%?&3fTeH>;8z=}:_*$V;gzyxeTvlŦ(kmg۷yy/~D02N?:WOcˁ.r3*ΫݙK s:.G Dϙ\xFx50בz\Tra|߀ˡ!,¶|intI6ږenՄ/Dt`$_^:{?_ /7C~nM{n~WP?LfMP?.4v[vm5f巯 sX췮BS&߼oGovۦlr* ad/^~eu7SXϏ0:HbݖF]-5Fϸ+7h ˜eJ :[G_,w?#ct~[-/=익 Jgfԛ;r*trYW cmD噽P~2_P%voET}ݸa^:39Hr55h 鄇 =hpw!r434_0t`2 :d6Ȭ=/8JL49(}-o|4!`{]ף4Z!{}"Z  Aҟr1)@#%Ɉs$!%=tc!QTHiP͑"Mir` ৸'3Ij Eep(u-v91!fyzNʞL*T1xU[&x+F, .ki68~ଈƈRr^f!#*F?l@p3BC k M+"d|? 꺇 AGѝIÈ)m߸bar~ 6Zt4wX@p3`χ`x}i>=҈K2L9|3P" ;ڍ}?돰㡺2k7oÊWICJ?Bp.H?W5-M7 U};)m M~w)fATlۭf?ϫ0TMH凼lQ~s]o/6Ur`ٶ˦tɤ0~p(v/W#]ey_U2A8y1ҭjxdђEXL}UjXeE;p`[l ~˩R=Ó~ہaA8ћĕa=򃟥("BAQ,SFR*o|2Z֍u]2mKACĿJ=5It@pD4GeiubJ X>C0Jd)*8*58Ez>þ>XleejʊjU,d \$$'wL,J{i@߰le7Zj 2zg 5]nQblj|5ٲ,|AjBCij{@㘏<+ *ԉTL}S_'=ʼ\LZ U{fY֮bZ@82 l cE85sГԅ=4H3=; |.gc}s(ƜQSg@̥aP Iť[!sa[^R1:q,F2ˏs:}U”5Y]:Q07vGM O>E(߯ ԙ`1CwW^D!Âxmagz:q*{jY5' 9u}e/m3'9+;lbA5ƭ"&AnD դ`HÙ-9xTo~*.e%F )]\8gd"(NGlrV]QK\Ƹ[yb۟3m.mꓬO sÑA?gQF}aV΋RUPRe}{SCt|\69>تޞcGMQ,S&|mk)o8ͅb t2b<8k:Lڱ C[Hⷺ^v.8sTHg΂j MY,jn7,x$Lh|뮫OIhTʼn,!G3xB0ddTNVpk>fZŦ)aAJ[YO_Hڟd\gkbI÷ׇC10`F=/pб]A En/BoM @&uvI+ᣮ DFOKܾ}`i4Wl piD=?u3G`X @`bo}}_7!o1dVWRJ*[R^'7M}Y`/`+s8)Ac I,HoCQnrud3zJoMS/mOG jƃsŔ[;> DUWD"!\$VĈB\ҙ`<?n|H3";y?bCnWCИ%guz6ؖ]) 'CǏ a/RYW>' O݆=yw QY@\A:`й1 AӁ66HH{zVTOO| AQ1\)WaRb{'Z$=qOӔภN7i#|v8잳 A<;N+HK$)[(jgf2-.Vݓ۟76f\tUTE!#p󐁁pj*s KwyO?\tacûSc){SJ# dPQvY~!AB-.(I/26 A8;<<{̅ fٟ}r>Hh9":ҷ{4q(7=.rD鰟q7aęIˇ`Ƙ!huO4e[8 T :w<7 ՘g&`RZtYpN+o%CpDyT[0BD0/读#؆"u(3gZHT 9g_Pp6f8\pp8$e˜\-g |#}]2>H^#pg* ryH]w:GY/*33ur(h("x4ءdhpY1˼IP3n/6lҶ0}A)@| d᧾z宁3͔̥ݭoЈb(4 p>e}ؗYS!ilkOJ~zŨJ L D#q{_(+ru@uM..2omOXv12dtFY-6y]ِwAEw*'K9s{On|ڶ__Wgw(9TyNë|JH+9!x[n}딇"hH2p=_z ݅jDWD$gq^n_EQ5& ؃%<fQ&4|$&p/^\Vqk7P+6Zxyf*0}S4m.8]`fvľ4^H?p?#EQ*(p>xPyY7+ `7 46> stream xY7ƨIgS M4i'baA/FZ9<']_mYS4^Qd~o??>9N 61MmZ]Z%w7EsM*b).eOiq :a,UviNuxW\TSEu f-OțzcBPզ^USs)P볓?0ʼ QVvfznenxEqaz:?P&4}ZOX]G^2K9XuR'w,ڲcNR}@$˪-}?F"E k=]ᢩz\gפ5JrBҢLlI axjǭ}WS>SH&r:#ДqK+WWs.i)qLDMtU}*/ReOxNsɛ6c5:#|b(N.d|їWGʟA@1:N⸶2NROzj9q V}X~*?eUMd^-VL-MJKrArncTzWF9(:?/˦-f89{O`3>Tv+@1&$ A R).IL(Q"wͨ"tDF}ܮWeo4eBe؀-"OĆoMsLDЗ(67NMa>aAܧ |j>Qy= }3V"Jj>QDƿ2J=scz2 ThF#9U8D20>dFvoMZP89YrNL%t s-(,g(reh@s]"*-*:$/T.{ԋ2 uQգV˲fB$ήM9YUu]_Ӊ2'fiC ujY[~VgןO@bvQLτ hoiг\N5Ig)S]@Qg1\0/.x>} UUt~+ ]lgÃ{_:'?BiNX;,(j2D#"g치:p$A p礻iak2_<ޡ1 S /sVVVR$"A~|>`LR+D P֠>dP8mDez7t"K'R)LyAIe9nvtzjA |WI/+SUW y8b2a -;zYz^%ILrNBc"9CU aw[j&ɾu{@,̨DJyʭQ_T]U~X>"߇=vwjQ3%,ѧ13KxN?d+Eš$'0\Fa lי<ھ+>S@ p@Phͦ*6 xwS%LaB jʧ19&asmזWe[֋rۑ ۪/ۢ J,,E  }Y,]'U}մEcs:%gpPJ ?}߭Cf>@]_ˢ]"]y״(v&uTSA8U܎Zeq~Wo)LFOdQ[\ؚHS"nø؜\\teY&ŗwr\u~su! 2@֯HIt{ qTY!g̴:gdfY~xISrd>`U;?qWdp^@w^1~z,[)p/k^̏9pTvlzs(l&p}43,. d_M64*)8nwꓜ)=+ /b?%1%.)WvIAK1*S^”Ĥ([$9rN}hdHy*$-`Ɍ 4)>ݝDpaHqyTqS 8ʹ6H>b δ87dupa=0V9h@ѧ\WG˚fc#;. j~\#}? A Ӗ2=@M?W; "{2/PxNGvsS->6jɊ8Qș7t0V9`Z UaN f3ƺS֣% Cq̎hwѠ Ԑ±wqI}P{<uZ-OT[CC 2]*>6RSD>92|1:T/[A!İ s 7q }u]}_N<$ZkVbVIsh\ S"raɘ C% vqp|qT("3XQz;RQC"w Jk#(M%dyUX`!LMF 0ȓYNɶL>%U!"%d=)}Ta_E:F\wYV.TBeQekbd *$zI`SJs 3i O Lrp$W1#W<*|A1Ɗ 7ꟊ]h@9H蓘`_@şr/}- _Zt\kͩPSv3`-ߗ-ړvf 6ЬVXk!}Z*P_n4&]_VAcf %C)|/9Ml*~VE_ /o7t2Ƴ>512X"ĽvKu@S8~7R'HyqeCa^7q^BǎK \n׿eXSfC]̫ʄ4mVdp]^SxBR]B6445=M` F*u].Dyx1u_>#`&{H~*B>X%V'P̔!vq ބ+$ X$ ȲmClZh LnQ![+`\>V3W|u F5ȑ](G Cy)Ym`q98:s /}UɠehqM_<&sSJуُ&Qn-VEu;depdnwDqGG1v)?q1y t. oЕc?L:x`&ҡVc8>NJPS'#UWuHBOݩK&]"1 0)&xȭNxjnxx6׊ N$g{:1"xi˜ #'F!d~tM#8ʅ[{=Ãx-)gy$ Q/4"gߐ5S$_c_-gs!/ 72'"J^!`0+HDAG a!*mHF0Ա;| uyyM5T r_XR{D0ud}2w1I;I)GZx0٥\L\Q.|<^PTBB6ǑPThrNKCi`]I'w`=e2o, /bڴcؤ ޙ ]P|Ųy&9"B ;jUTU Z?䒓W魌GEsN%i<_Ws@"󻹂茐Ks<1SxM+"^\g /qN ]ZE߃`8UCĊyO6}9hQΜ$,!/ K 13bc@܌T'`S%6X E2e؅ pٓ?|rro~ݽs<7paЦy/NaW! n_n?"u8:Cڟ* rv پ̘HIՏ5âzh9h(QKfuGNK%:bڔDFou_^ LL.^5yo5R8QT Wkm(X%!Sendstream endobj 154 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3824 >> stream xW P׺ffQ!ΌF@F!&.,U ; 6AeP%@D@P j$&F1WM&nѠ֫zUMT:Ͽ|?4eh@4=$(Atਕg&%ƈdu]Ja;!!qXaj5)k֭J]lvl\+$j4&N`"LG0ؘ\Y@jn 'Wja&0?lC jxTTpݒM8drg흸ʸ ćĹqY1!^ݯ^' ր5\ j~]3)ğ\.CCa-j+^X6,H/dRL99H.~9G +0hkPpec-ܯE nNvYNgg^xUxW ǯr}oP325 -{~0{Жp8r7J)Rg]LܜǬ[ؘ-o G2_Bn+uUuUGϓVr3ٳ. <@J*քd+d0VO[TS~LizRY@iזݙkQٻ C:Ah-A 0ՠf[RNb-3n];1Z+U 򙭩қhr[玵)XTKKwEMi$Za>+j8AZD#A)aF* ntV(ne\27A&E,l K4㠂0R"Wn=DsʂhvQ&rµKKڰq25Ui5 +XV\lj i'] I{3 6p0iݢOmG,~.La_Dk&+)y<#;\8rJYXQYXGcɅS>6e T: 0o̗p;tYqjfэ-;ʡ`6J>^^=?l9J 6[$R0)J Ű'Iir>6Ťx4D?x6 EOLzd$8"C ܞ|IRM*XɺLWC0`'FdKmsBW-A ]3wkr̀фơ<ߵMl+p3 07TyVxw+ްg)z&4<?DaLgw;ASp0~pwlnLzXrmB>(謫LѴ#O6?0 ݦ 121(~&2l I!cV;8F1r f;Dpo@jQ* Apy9yO;Hp wqnhs<3Aa=o\?55. "&(0e.{<|"}|"o~tK p8Ԃ+'SAFچj:J~%+ZxM!VX{h( r䖖sh=$XN\a˴Eݯxm`;H;" dpw.t_h:0@,z#ATKf,MC쪁HI"G< BA,xpL?.FC,T4mh)0ʤ)Eendstream endobj 155 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4844 >> stream xuWiXTǶ=msS#}B0`ŁK-ݾ,2j΍Wxl\gՖվ~N&>4|jZ3fϙ;oxdF2(Ǝ3cUXf53q`3Ɖqf2."fY,a0KsfcX1kfɬ`f1_226lƟϴ2rƐ1bWZg231e0CLf3#a d$Dc/^ǥRE߲}Y+Df % գYFp;ޓ{eC}]鷢G*{z?G')])(770NH"w*d҄oc |NMw]%'J2R넂N)%2a O:Lo0ƍQm0xs/=P"ɣzI[b|^J0m Ұ0hu\Lge/PPH9{&Xbn*I ~Q6EV|#%:²jҿ0rZHlyC}s1~ 9NGA~]m=`2ЁN-N;RD YE%[rFS)P!|0z^?csrEݣVA;&Q'8͌.WY$;z2R{ _Kz 8&m]0l4AG7iΪ# ]zn-rLd%S9M)7K<an -wɍ)Pm\5T#VmaL$ >uc(2Mx",`lH0&50k-' %NTi7o>lI7 ${qEd;J؉9^G_y}7{sтu#$Q$.~wڬFi1$'jX8&T7+GP|'19?NKܭ-*_D\_J>R' \a[0_|0T%'눙NF¥Y=ID)u^ t@lo0g:>v |the2 [`,:ꨥۗۜLSj3jI=,-ȖT~toWX[N5I~b]K-VlU6;wr"Z]#Jp#M"|K?JտQHFItϤ s#n!(.=̈NWA{c1w葢&23:v E*9i%U0#[}i&|%Sj'`N>Π~ƺ*~ȏnk牨ܛC|e[W鍹+`tcTk?0i 4H\290K#bum!odYYe] a IVQVUBve$2VjDuHwN̍  8AmTS80\|JQԌ}6]]vI9 4LkխX\VO:$"V^L橘J0_jZ_7q) ~jyme31`B56feE?3 X*9Z"BHu0ZٗRm:z2AǸ"ܵϬqt~Y߫]_-k`UU(omc1%o:9l‚Z۶Pga I,u鼖5ȩW:|ǩ2Ku8g$$$9ވ֎]*U+z8Jh*sΣ&5WxrswQvj˴95MUL\Z2/DpbuGmEAE=2V^IЄzS\ j(nD.33\xbΑ usvGWmAw w>M Ruc@b#ks<~ā:KiVK#otK w)^7݄΂o-Ƿ-* <;6"ofw ]}>tQ\3=8g_jv6Gx}u|j #zJknuK b"rs0Ef{x՘#YPvBH]U|>HܚBf.qp39]ܝ 0Uג2yv$SkSœ"'\-*r|sT*/}svɠ3&|J9A$u4CɓgM: e!"xrdaI3LFpd&Ddl{jK=fMPGv BbO`UQPu܁:gw`O.Fр5{eW@ _$.u;/|TMimy|# yޢa) :iUЁW`DY, `ڥyư[+[{5lU& ҏur5"0`o ToМƖQW(DPxjKS5MAt];YC,*Ϝ5x#va!ͫU!,h`GNaÆ3ѾrZ@)?g(ӥf* >b`:UÖQAw٤]"3P'k$e4]`5zu;HOd\0ic}8*~˫7l"۽!nİ XoAv[Y~[>SzTWAV+PH?< PIKg›#g[ĈHU(x?^na''-hBN܊P {ॠ>fuw֒m@f ueN"B|D4vRFN!'Ts|sk-Y-5Hت{'>vW@oϖ7Si2''^}ȖomRb#ήY5|O k%T"f ;G~STk6G&3!@%ոk9w:yN>ʊNie½\G^0|Zo^kkaJ`wSޚ˓9> ԥ[pf\|ZPy]zlHoN(퐒)pKX1r&:^)xg _aq>{7.$`p`_0:jx?͂Ug?\Oфt"N(%/*N[7KJKU 6x{m-)+Ѫʆ[" xI'P oR[/ɮ'f ɻRbw C|G`NQP`czwa#O7с`iC4ۈ`a;0pá`FD:l?u,[i< ?sEYAC7m.7:?sw'bѪHASaYVmO{_ܯ77Ӵ9endstream endobj 156 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4379 >> stream xuW TMn_N̖0PR(wE)](2!II'Ttw # = 0 ݤ 8tad{uN֚o^k}~=MS](XX*5,:9hxhܒUXLlid,Pi؂͝J^1uJߔiiVGOX;#.~Y Kg/j^#׌rs3flq'L~rB('j&5O͢P@*DͦPCpj(5F}EyST5Nͣ|(ʗrQ~HʟEPnT NMFSA*K͠(kP);eKQtʞIu^To%R]n, TmIϤu]Lb1ZXXXe,Yeel1zs n+WCa#t@צn^bre*KUշ==CZ_nnK06mlvo/[;[/HۃB0_G(i d9Α=K8C5rWd VJp%RІ]}g3K1xiÿn?P$#|k Hg-oZU jXkC~^zCW ҏE%k7{!mLK  ] Uǝ;q ӓր? l:q"AI+S27E'Eȅt:H x$m߲%P7VJU[ Lk΍tQ+T2pd(GC|0>po'=77f i#0GmXtM"$xW BCUOOH;ǔIVTn*V{iu,6 ✊Z$@@D ]\.B M 4 HEC/[54$Hod WN,B 4L_ܜHլn3_;;kմNthq?djVޜ#%PnQ5z6KL{Ծypﺵ]h;7m_{Zl {K0 %TuཚlWmP9 [aC+DwX#H& _ rUƭ죫Qüy Y-[{`-łKkgHUQ';|;\PX[S<{Li xh-ݢa`7GCqCc_.HQT_ڜd}^sSvqYiѻ6|ZDҢ7(\H-/hZN֡x -, xҮZ)z=G}|ߗa~q0^LoD'+o^$ypBޡxm\Jz@$gsdуp MQIz+ <7(DcfmNJ\4+ -r<馚 mj;ؙjp1;AFؙu٘Ͼc׿lg#VدaOm[$$}z+D*6Abb\kI ˖GW(a̭ۚHIZ!=$ÉBJS \|,6m[~19ׄ7zږMn, V^/sKvD9eu|FYH"Wo\ ZN{Q=j^1DnKJ]<F_Fd=ο?qbQsl-hFd>WH #@jأ\±M'UFѤg"vꈓ0ף*:hQ0:*vL)H{!뜨dKNe*q1\ &C0PfM 63lPc;ft;OeP9Aq; ,e+L٭35/}nsq2a nn9׆F9Ot#E+ x ~^ !43"_Cb|!C p&i[E;<6}6!?wL#$xIac`4`+ezgYxǢՑG7\ؘsߦ}v؇ eLHJIu4J!w_W\,K>q3ږ-s l`Ea*l0ɫ)oAh?aS)4D(i4(Dc=[zOVB/X)CBE9#b/Oa U*2?<,ޔ#$2rC8yө42;Y|א>YB/ݼü3(_^&ZqY#U4v=~۩U%%sG#ؐuQۦ Zn]ˉJ$<:9,q~\2x"dNd5an^+A%劷Һ+QcFwr7.74/в"6$׭KpeL\ę+{dBM&{aʴ Q^Bu 6_*#m/GM 5bMmGrrBA{'lؐCnj4wna DH-S cCDx2 (BK~Nي@D`$~B_oԹ5Ǫ~aQ0ZT]+8QTsu> stream xMyTU>a TDͲU2@pQeQ $W ! CWD ˬ̬lٴ~6oujo^{}O I&9rN4]=3G$~",~e~ug:V[\nK:;%5"swOtl*{9{n'-vq3i8Wns^sNɉNq^9*lS6M嘙a!;&O|)MnO~` o,i+& A_ܷD[`-~"_~`ၝ&0y<UlI0>;uZ| >.>]RDۗl|ogG.=,t(RtSJZF$D`a -a1Uz+2 Z( 8&&oEfpb",^_)Y"P3 9Wݒww>.#1-Ԁ%_tA#]t:,!:'4 /k|͞H/܅yk-z%xmnQ\'1.I׀:*,#ENJGDGElī`189W`O\%ip2D u^'9Mڃ쪬o'[6O>4ӺGn>I.]MƦwY[(/9w (6B%<j|1, 62[f'Q}Z}TIuDhq020,l`SϸYјDIhh-HH/STѓZ.\YeY( {q@}PdAы+#"xeaRZp#+:W.`V;f$+ hGsm'+q#6kG$x]QƉ kT@=7Uhe_Y{ `&ޢOgi%4HSX 'S0E>Qz?ggV2ة TvR+A!D%zU{<l-[\f.6]wW/(K!9|cvPL8v>372}9?]gbH?2*~AKH=NB4OgCrO-4xT",p1)&2|2RN%bϲUlå89'jf U{(:7H,ү4Waw_P+-ȻjӅMEuDW jwP%eݛ~eeg"gq7 N K`<+B% ARyeKѕU{YoEXg` Cڽ!ǫKk**IT 9bA˱w-2püjΧJg]6GEqLEYu/mEM@pvM`gm[[Zq"F(al3NJHgس4] 2RJ)]=9~T$PÝAUGPne|>ߗB^^6+[nw&ZҞؘ/tvuʪ{U,Ebv(b1L&3]&VRW,0饿}֠̕M,̺0V;Xۙ?UvA7Sh!u"Iy{`m? |_n+k&xˁm2+=^Zj*߫n+-m( 2Z>╼1D>TGrXLӴZج\q?endstream endobj 158 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 544 >> stream xCharterBT-Italic|t  tael.UBFMU: ;Y'BkmɐUot{NmĮc~ktcv,$.vwullo(:\X7iSyMHJ໻XrpyfzE՘%dNWb_dueQn3 > stream xYwx~C7/^ڂ/ӟQR@vIӑIw@F X(yNJ6u^_srNθ(>H$1?`J=^J aB 6^EP?ce{o[.^4dbrEjϪ0ᮎnkܝk=<{g&O1yʮקFNFo3{ϻs_|gC9QZmjOBG@Jm^6Qj!5J-&SۨʙZBN-R˨irjAfR7)Gjz@K R|j5NR2j'5EpʎʆII(z8R~hjCJDPqY}q&GN R>3;oc)!jvwWrm芡(eƲz [cvϲ?0!{G&Зn!ɟe;>_81Ǥ7v2l$TA b!mH.&88^%:Kiu x@"ɗ?|S >P˓%C6􃌎NU8np2>2Z츐6ۅ*mgoɮ֥p6~ﲶMLwZVmm!k9#:Ӹ qyeAi Zz&/aR(5rj(WKp@͏ՖՋ HҊoiA#%Sta.0Ѐ[ 0n2CpN~uZs!bZWTY[BH6? &p-8ݾSƗ/'-|, @Il-eZ/D(З!""*B<6h dӜ.\t\vq:#*b!U6낦yG'2D$CN8h(Q˚r#ùE B0Ƣuh =ơARk~8>^!o{вB+2l 2к)z9"Ik#?6?H,$#ʣ'3)V<"9k+:,&˽(wT~+0::-1SY}JZ7uUdʓ '4ɶ EͦEC!+CgNQ;^UE' 5#``03kIUg): C.B5dgdB!_GOXFg$C {]rz4b_Uj?8'@gM= 늡2RS 鱅X-WQp=Kys{a)Η%Rt4ڸ"`jjod2 2Wq0mW:~x!=!N緖,vvIeRlW{Uw*~!]j}! :iF_٧d5@dפ]72]mc>f{p=o5DD/ErZ}K䝥=F*41h@8|A˘09S8xJU$ZYZ "8 ed H?Z|' G.'3p+k޸K^wpFǩ]wDw7%5z W 팣BTk((a?K/}BP%üa"4> sn 6YU `>ceЊKMO!pU<ǒ΅58#k>] >O<:HCQr<quE-YXKc69(gLPTĞ9_@\yO}1&cX N=+0pQ,Nܷwmhu!OH+Դ*M`; y]XYLiMAw(.6`4F/~HsDOq?}=`fe~|xf3-]ķϯx"nhk0:~h2alqbW (fo}JBxMd\e{VyW'oXŴA k"|ȇtת5<2ISQW2ʵTTd%w޲eGO>{#+X%_ym-MOs[]`떆F?<'િ忼'?^,]#.4n7dw .BnLLcd=pȲtIWAUJ}#{X K|o>G~R{(Of.7)RtJhj3>Egv.W8~^^% LʦWrNQPT**+븞5̼,P9,4it{{GvhWPZ8%8K+N).( &/xhmZ00D491] 7#rF#*5buSJSR< š }~Cw{dKj&'xx|SA -qBu;_!܃Ziy/db[#7666A& DF820^Q!aE1yr/8c""zr }oqd^LY>ڼ[Rs RJ<7/D`zߺzOΟP$&!OjP7Ω',WƮ"pq3K|hG { `iۯ5|q='^nWclG2qIT ddds %.];usQ%eRS8֨ʂb߾%8(KqJ{wNAǍ,J? 6yppj(LO #kV+kJNOFd0q&( 'W_4|gV.2ENn3k|m:(4frYkW8|{3%` -ttT$- M7B}b >eGDyhӸ|=5XS ebp= JrlOxXB|H"49A6.ޙ>_*LHπbFThZ4(ܬu̝p_޷aS1LQ@iPqG*[MJ98Zrow=q087!'%VMOouH> %h9[!OGAТ\ޏ y5M0Ѽ ⿪1 * _l^p>ap5PDK^B}Y.~MrVs \J(E05N QJ=2wdf󠄩 - ^tbpri$67Am!*}Zx|͐X\ǾNc|s+p۱*ABԡX G7@=غ#03T2 S'!lC*lC.Kt G^hCMs[6{:.`3?ÈU&rE I q-(*3I͋Lr8ѱe…Nq#lvgB :z2[_lvWB Jҧ0%e&d-Mf hHޡܱۚYxһZp7E-&) e[ #O(7p\:)@'ڴx@,G:M :c,J >>M`Uj*_~ k \]}͂2+LOPX(d{./pPqЭ7fed!I( TZ7=n[a1,/tiRۢϝ,1[g } OQ,1l> Q[WVČL#]90R)y2.'> \}Shf[ v }zVMF1gYxm&`RO~aXRu6ڄqa4w%+ ' c_w|!_ ~Q\#1?? yf7:֩d1y &d)Y Cطwmtz8v~/Wo a[MQb$N0=SœFBꝭJs?(6WXhC?c͆}[rtt]qj`eendstream endobj 160 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1333 >> stream xUmLSgo)EUz-3SDQ)dD) NZ(!a·"LhHQ'0@Aυ}9_N?99?"xwT\`w%|vz W)?W VCeɩBԗF %d/Y֑=4}TNiml(DmoS _PFEµӗ<Ȋj (ca~Ҫ4U̳Y,za\S?;.SՇ#SƇFui)۩mY*u6\&{D&a5 bg|HraccVZCqcļL W9z !z5u-qb =b"sCRn╒>-B 8\W 18/qBR ZV^\5KeŅI%N3^ G T=Exz(pH- zA yQsD2Ebf"b`)TJ0LT TI0޼UqCE@~bTk]@;(Žѣ0 `"68PV,>-нk8[QRP:2昌 ;-OC;ImV'rSRxr PbX?{]bC|6_ױwӇhpOʎ˧#DϳQܛ1;ׄǹZk%I1jK7]׏!>*؃Ppe[H(JjKԞnQݓ|>^ЍΣ Mw 4*,iLں  QߋIV&P0`![JRϚCMkH&DtMfk`7jWX'´L;g|"c'jH#Z0sCS|0Su._t^ϝV0FFRi+q͖fM#)0pm>#o 9/bendstream endobj 161 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4115 >> stream xWyX֟ h]3k֭֭VB5,E¦ڪmZT*i^bmmUO{ޗ?' ݞg9yN{,NH$ihes߉VB׹b4´7aT &>=V*WOH\jB6nVm#Q>sK͞C$%//mvbxE|@C|H|b K%Bb#6-s$b2 Ӊ WDg"-u894.\JH/R/$HA%P?rw9a݄s&{'O\=wNɟ6ߺ~퓄ZdciC/c尊iF8=qK<nܲis>zn[;Aj yCb!3`o;i =?nvډ C>c7RA`+ p6YX= ٭8Y .JDTݓ!ay!@V7:gu V1þ"H8x-y0,}aA*IYD/qdZaUJw@K%Tͼ# ߪ5!>t#,-P"d: XL&xEJ1( C( džb+t.]Yl-H3/kk`QLQI}RW~٠ 8*25\A֚c5,<Ř:20w}3.4Vбʩ,^'D>b퓎%M,"d~37sGg[_arpnWzҏp cr]:#?>PI7"j˷O6<M}BjSwS]u;G?xk/ 3V嘞3¡N]U RI[Mq fn;f*_^ #1FGKDMn7,Dr#׼eO]UwxXk6 #6轆}}w0ZY=tAoodV&c51؃TC` ~DvۺY`!Cw|lW~ }w;u.r#Ծ`rؗKm(1S7)/ KfQQ Uqtme<&f%ffǡuh Z'8g'2x ~j`E3p V 8Ј- 0\'ť z ^&z %7AtT.߇VԘRzj!I8|Ff= ؠtvwWU LV٠sylq3[V݆(S}t-@EBiؕ9a$X $ nsK<> ټw=؛:~t ºA/ÇܮғF^ձU+}De^}g#GT\fJv"F4Yf/Z}~ѓO.RĦHk j AI,=_**(1dw"'སHP_P[GTMc`HK{B.i:|sof#Wk(E5;Z> jv_`z5_;ѳzY`u= ~C˭VO[P ӕCKS:.NSVNѿw/v?ݲx"W>̾mw"v\%Pj֠$JѿizUilI6#Jõ/@&q{wrcC0}yMذ,ʗKW܍`f}1+1qqq`m,n޸iYS,(a.NWĔ,5.5z8'UlQlENݨƮbِz)7_M<1 _k{Bv *AMy]|%_ݏ`aƮjK˛Jٞ." n|!O@Z* Zf`D O%C3s՛> A\%Hˈ"zzQcH:p~jU+''7GTF8J^WS m> y&ɰ67#e°O]4I;vuh>΋F(# D1 [mZSDu:7KߐFۇlJ$[KS8ZīsQ$%k#~#~::kxyUڼ /`'&'meiO@`\\c.,@B6% ,#3/`RժT p ѥ.]/U7I. iWvoQxJo +VTb>fՎ\`Fv JhKc,_2IXYaDGFWsٴ`EJzNv^JRSjy}$*3jS2c,,+?| z7&ڃHx6'5%zԲ,zUj Q&C^/nTa \{dJp~HpǤKνxL!#+{ zqEɬ(_CW "Jx$<^MxYF=SZ+Y{%' [^!y9*p+h; 0[cEI12ReJ,|c7{n^\_9b5Aen?9xD)r25Y8yC {cfQrF2KZA PNzX/ғ7y{DS").:4q"A׾$endstream endobj 162 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5974 >> stream xyyTS1DZ z{ֱjjZuu8+(Ldf$ hTJvZU및w{-~/+}yC Fp8q6nf >&`FjbxO=|0z?=Ï@hԓWײW^^&7o]zXrP KxhSoo7g/X¢/Y6?\^xLL!S4b:%fۉNbXE!Vs5RG$:tOwX?k s .cx2CGM @+PEHz!МyLO<,0 T <A8DS s o,[vQ|[ICjQ)3=PzU2(ަK(KN0ei 6PZZ\J[RRIE#Ѹo#E~Sd]x]G,q$ً< kc{PdGx2fQh Fu>W?{ 8^y@ A߰9\ ze!QCZ8 ^C81Qh}4jKT(IgҁZh%4#aLV 8j͹S౏RipZgU~4g#Ϣⶤ @/hĬK09^C/Ш+ 5ﳳwx XmL j}$ZfdY]dz0a=DcY%o$:f0 rX[joAR.cuT bxD<4,Ul#5FwbRAsźjO {P<H(LlM,h PJmzX/`&˷~j酔#t1tA문(#!} M#~+U&K"ڪ5+AOq糱vw-&\r9;p0uj;]qg(w@SR2-3e;E/z#-A@KB/yublQp(΢2c  nݱ)?QvRn[ok8 bAzGJ}LVw6X%i`2&Y*, 4yZ^JERuiNmt5=tp:.RElEVgjiTM8-N:r*WHrN?fxffz)ށ?ᬬ /Kѳ( Q|v7Ji[.o,;h`pZ++*6Jʻ׮MLف4WPaNB~[4 TKJRFwR6V^',س}W_)W$w蛀B~o rПP~Q+eEj2/>^6-p H%/ `Zp-D!:Bw`i _ |u1M˶ 7\=J ,ZWC­M<"-,vWnꊢQSbbʤ`o؋FёM*Q(7_5խ}6> :H߿M d4"[+^⏆v5tW޻aNkI)R_{llʗQ++tZ(}HP'܃vDW<4*}87UG.X[j++so `np_&+-[ykP+^,Ys(k67HvP 9ѫF9hA/Xs+U,{\+b0jY鮹Xw zPB}9Y+= ))PV= 1&QPdat7f㢛n%$zLҨd׆hh*.y`_q>Ȩdw(~X-<{f_2U볁(&(Xf~)F Aih2ޤ .VZ3^K ehg4pJg7s|vll RL%NŐ>pCikا$`sٓ206NÇ;AɊvv= oR}R}S'+:6 $ 93^eX+GnҨL&(Ȫ j=eR=P;\!}t^aј/3|,=;Lt^gㅘ S6f C#ڿݺou30`Ϻ#fj*Z^7;(,ke}CO}7{ȰEk rXKLZh=BjPSo^i/~xGa=|+3MzZe@JVkEq+@)UWFyVl⢃/wjҝ`oh Zӂ }R0гqp[HP8mVC3@%t kIx^8 S]^OGI\]{;Q[#mLKKg&) #Š]z\5@TCTe;@88٥X/wYK^y< \͒LB:|(Y)&AvW,3#0Jҷzŕ \Jˁ76/؀Yx8(Zmeco*V۲3AC(e3O<3;޶& 1e,PCH+KePO)3$yaPw鿣N4QE+?;Orp |b&~-pv.{ X"{?; A+I4Fz7fK~ br'5%J+ly$}?`b<?4?0ݡ(@(rbcmuɇSr2A֚DG 4Gic1kp%EN(LaSH ܅#tx-oUtX.D.GT|WAE!.b;E&K嫀frmD[eUj38_B7&&vA r=}-w^.n#illm48n? IRLCbQ" D׾y/ H&G@ED=[ކ~$- 22u#bG&y>\Vۯd%)R*Uvc,> stream xYr7)4T[k$^ERaLɒC3L}[ `!Eq"gto'D_?]NbRG\ߜH* XWv(u R`<o6yWėCpP4vc $߲x"Y|$>Zjt<70eJ-H7)({ݾaca= ?VÕXnE&ۊ oW}7]L7O_պ> 1QGLK-F#.80"/⑔[_.%>v7I8 h°r/JC/Ƭ esƾJIv!OO躂ӌ'2? # KZ19mbÛ?j ooӳeCv%$>ny Z?Ct:j~{Gy8PFvwb54W,b#x)!,J*AtM{;KA;1/0k«t MdbJRI6܇SIs(BUةYIh>=(1Ĕ@cQP1:rTfr[q<)PtHzF&12ObEރ|F{ M B M$?$ͥDaٻr@0sdk) 7v <0W]W>H ,Ph,L#<_,gX42Yx#asZ29M;of,?!mcNFf%2s5$>^@ÅLJ=q¡$\PLޒEV@Q|;4N>pK :yʫ߇p܎'x;!JAZ(Ge4 ͔pq 箙V^>6 'xqcCkOml8[NO˶"gy0wН%+d1=DUoǛ1\n>%Df඄<&8!&~xu=EAPWҦ$x(k9B+vY69ddNhu^BŢX ! {,6gNj>/4_#M;n6KO)\li:Ӧ|(rYwsym[ > stream xUViT׶L)ՕMC Š"(* ̳2-ÑAʠ BiHrs:]nʽΩZ콿P@ xkPOlwbGXP\ >`,cCH2CJ,Z>:jX}{nI! 1iGhfKVXPԧ6ʁOm>)'jLP (Wj!ZGSn5%%6P6쨥&kjJ)A}D) 5Zl@ (Cʂ:BK#2cepOaaa+b63[F>Fwe%L=3{8We[EZ1`3+QWA"03ڥoQG䄞"|ة?P1'gVrDU=@"ޞgs=e%Nג8 P2Һ.U*/3 рZ?uܗε7X20.Q\5PTd;)`!aS.9Xk϶'JT=icFod8)c2>Nk]4XzEnD #ؠw#r.4e`:&G{o_LOMI,7`PQ2g}^wovGۓ]U6}}^0 4 '3Q-(x<0C G06r),em$}*-u ; HTa79G%f$69$G~L~BzMV?)B&b%mؓBYoX+'G؈6giWzd5#oKSifB^k¸Sp̈p8ub%mƐLMAR_Q \DMGڼTؽH`9|z1pBV$KK魊Uhd/+,&]/gҩKwjE ٮ]fEd+^^]NOaA<֫\za8 lTj(sNtxIzl?%r"3'Nn(nH:2}eHTna.]yCDa|~qޥ:6谑Oޖ8~FzD~\~\ p)[,1TMU_^\uυ'M}JFy$; z䑃DAʠuq2ŤR!j!\#t0478Ir6RRtC_u&Z;5>L|U<# nucpUG?/l/<^{W$|T)8K7څx!ӣ=jx$ CƤ`A)胫AlGz*-'/!G5*B;W`b5K*U^q0]qDUΚ3a\gHr_AFv:/ Nu3~¯ }MO0T|[#pS}> ־ֵ3VrڹLz]aVVLq?M3x.N'jF ̙mD{$Ă|H2ED+Q|}]{l݂֫i{igU-;\3lٰ`|J<.4XTH&W<"> pnڠ[`5Xs&%U[Te5JESS$>7)*M+n`#/ 4Vr jŖHN%sbGh0euǝmqddoE3褹QvJA8%YRq_&$} [%~momvuw4=OQ;&лrd$WUA;SExW׸sBzEWѱ+Y tus #~U喐X^*!!IE4s컔 U◅='͆{%e%xb}Elo!KĻO(p6Ծ1 I :^P7o+9s/3gΜO@׷ڤY .W)bhw9OKjN>ޡְ\㐕DILMl6ED;ĭЮ 9Dgݼ#znlzeRylm½i5XV4͆s5%N?Pᐞa јP2 Co_^ a=Mt1IIEcPI95>i))%y;d~\9.KHדq1S8Z<Q{*`#x߼ZOťI^jy )N z!C.i'05%-£i /jt#L70ċ&ze<iB{t z2wő?4PaQmοѰW5V r.n:}coFl|[\·VƷSx-<l-M.[,&V6kΣ__nsj!Vi37[7#[&H"m%,CVjLuSۙ^ڼYm7?ϕ5p$$8d*T3bg OQS=K'JӸOeΫ3Q;4c|GTml9sltc99G.;Y`VJ[gCmrmZYf.1;`x5h+:\ vO GItַXǝx{rkGڼ\ڝҙYxPnn g!V{Q@˝endstream endobj 165 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1731 >> stream x{PTqᜣe=\tsFAG&M+!f!*!r]7",쾇.w5nAojt4qֱ5NL2Zy|L,aWϟ{^YD4-^tbjM;s2=V9y/ϧO~?-<Ĥi3P^*bNj Q*Z)*zBo-ڵ)Sʌ>>Ӿ|0ۙN6峋D9 q./Po2P]=c'W^]IE!I-Ӥ3>lO5~scʈ-@: O^yu z2w?"UBږ._]({!v4K"Q$ ˉo~Im]j3rXmg{&% |n)zev0֒ZB /2F0[V,'vQ Wt2*\XVOIsRo%6ƖT `wgL`:TSk34oԘRpd5tfĞs%W$'D7 :s/7Te@˕p?NEk$gMzh_^uQ6mZdܑYb]Wa*=̲G6n# y{| ӻbG$ͳY/QnJ}@ x>&ls+ !So;n5B=Xj R9T4ȃ{+2S!P63g>.Df$Qd|e-'w#.\4\?q.W= Tty0>۪>Ȅزq]LHّd?&@2ȓ{@ Mne_ϻk&F[j +CL*A]_e*m`j$ x7|+67 zb Ƥ՚-VdcªGG3,0 w9FA?kT 7ɫ>R>Y*,9pQ>K=_~_d*qw9 [Qtlsp9oi?(b@ ܌kF#;@-D1%P d-Yz v˞f1R`>(OC4<ğPA%ˏ'pF5IB7i3seà4q2' ̩+[AeCP \:΅lI-bS{b8 {eP5km(ֈg3 T皫P S#8y߂Fq-A/%>19~X$h,FϏ Ѭendstream endobj 166 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1412 >> stream xUTkPSG!WBFԄQ*PKXy(KK OQgQEAU:Z : sRbguo|+D@ Xxфp51ꈝpyMB!,ޥ_ZPX2fID OV 8ZKQHR{}u򢼩.j#%,-(%~jF*gUDX*zO4.^t(y#EN\'z2l'=Msv_5Ɔ&(ɷOV_57]>O}P3IyԢQ$DE!-uBvW R<Q g,Z>"K D$ TG3/b3QP*x_FӁh^4m`_43Eh]즹퓆vP_{ d>,g_'-ފBWǥrŶab杨:8 x58nz,2KkuD3uiUBWS_ǒLnj~dkq]ځQ`q+RnDue`u\Rp#IQ9gb|5>Si\)]F;ӊ+hbϨ ڋIZKO0i.Oi K?ty צUW8@G tˬ K5TB5KpȆ*WWBKJ61:Ch[^LN%$e*2>ϲ Ɏԩ>Q7$~ _tn*9m s,ae)B>6$>~\y2}IAQ\_XPQŠ!0FM2Z1DB\9D!%:DtC[Kp>9e}=pO\>_EFJX>sE).Gᰂ($`T硴YYS2˜o+4ԷuvC)Ig@+h^̼Ft\2򝲔G/|lW#XK,~2=]{g\qCȹȋ-ʂ ,g3 TISen$m.AQ(yRl#^D)Ԋ/Ag2Wjkn a 3S"sӲ)dӑ'l!]Yz)LTɡL_rSu(9` WN4 ,{Ww-[r+)*`g9缋ou9Ui'!b)I'4gli{_W)ڌc h4 ?=#~c.a,A)&0Wą!B1,I+QF5q4Z;n c+PߗDendstream endobj 167 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3341 >> stream x}Vy\WRq͋11I-*F[0.,-M4l*!.M #n5L&I$c2۩e~~݀>g^wo߽|sdb%F. ΙHԄ$Xb,5 ;˱8*vu4~q %CB#~*z歷g׬sޣ ԇ j%5JVSk?@MS b]j E-fR˨YT J(5(wj A&dJd/|0C\TWt8sjUR.Tg =:lo79Ź)#]vt`q֗cA$krYVDK9GqTNjlQQf׌-8;']?IOCGXzOYw0FH__ > '"cR4 Oo}UaȏN>Ќc\}tu-4>|iCg>J\.JHQQ-7l' dDhR,h8p a3} q!nO ӧ|vq3x|ƍe^ 4.$R$c<]#-Q RS/w0jqt!bvFd$;}`Jۧf؅'ʽyߑa,e+tzO3ӗn"fݲҘgg[vnMߘ0-ތF%3|$Oރ !Az~t*+DUZQEMq{: 1þ~p$H6L:+P>;# $~"MqVGo8bl»+2j1Lb\ֹc087yu?I',v\Ӂ)0O^iaLt0o+6Ђ dWaUT6`6ZL"pšLO M$9Ao@Kmt@M{{;_?8hPǦh A#B(Lҭph<.[fͲsC4f{Rg]x7fTo ;wܞZ5 {):_:X8#s6>拊KpQQ+?mJnoKt yqI2uU. ?Jٳi_'IDwb=)lGP4C{] ?jhhc' @3{SHI9{>"ךOPLq=-()/Y {,v\z>42J\zR"(}μO!7wiP@k?_ry5.KYxZKVfʻt^u2ε.<`&%4a Caƶjdm rŲgwq)``P)ZR*pW믞ą5w|KvO`+π0 8̭[U'Ϟ[6|WCܲ9 ˫BwW/+fUzYve)ʤ2*60q8X> stream xcd`ab`ddM,pI-Lu JM/I, 154Kw4񂵛cw>W/ 06##Ư 9ߧg8Gߧ^u龜^}UWdb(.aendstream endobj 169 0 obj << /Filter /FlateDecode /Length 162 >> stream x]10 E7H‚XЪ@p' a,6 )2863-EzT;& 9M|"Kf%95aE /$:ι^? t궯nRJ@\7s%$3![.hS1endstream endobj 170 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 220 >> stream xcd`ab`dd˷ JM/I,Itw?ewGۂ7 旤g2000303012D|_cew3~Ϲ+tstVUup4w%$%V.h!1mJɽ˺JNgwp=S's5L<̾3\WXBy87Ξ3w2gRendstream endobj 171 0 obj << /Filter /FlateDecode /Length 163 >> stream x]10 E7H] ]2D! }:ؒe?v #z|QDZ`ٱj01Bwޟ@P!ϣ^H>륬=4R> stream xcd`ab`dd)14uIItwk7s7 BW/q%2000&003012~_cj"ڽ~RդߢG%&6uwwsWV,.8cbnUS6Lkbwiخqb ܵ&oBendstream endobj 173 0 obj << /Type /XRef /Length 135 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 174 /ID [<540d16f9fa0f07f9f57c5296e3a16cee>] >> stream xcb&F~0 $8J1?L l@h<5?L Aq'i "@$7vBe D2UHA6D H L @lv.Vs,"!)530) endstream endobj startxref 77618 %%EOF Rcpp/vignettes/pdf/Rcpp-FAQ.pdf0000644000176200001440000055622714711515066015772 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 3919 /Filter /FlateDecode /N 96 /First 803 >> stream x\mǍ~U!v] l t+#}؉"9U\.I$3+̀uuV?h{)r>@7h= dPȚ2 *0I[J *P+@ "ED%e" ANـ dN T!TZ0Rb`N4VP6R+pmW0&n`Y$Y6I@Y(2.P2b(BM4,9A T.bY6&C#" [lr Whͅm@)u@Ije9 P*)fT@1 DsUj`ĉ1&@e q)̀+@_aH*AI@Rܠ0P>KNP2PVW JRk4 TZMP Hk! d cP3eKPLYUk4 e_Ś/RA՗Z&@UR&@$f@ [o-̾r>̡UHfuj@b50^mOƃ_!Oծ0_o§_lG~>|'8FLD?&>b5W/r?b~]+vyz_×϶aW(aab!]  o/7VlYƟFMF1r}b,1N8mAlibh*IjqpF1>$I0`$H /rȉb%h1kR#OOOOOOOOOO/^x9rˁ/^< < < < < < < < < < < < < < < < < < < < x%i-cXPjW9F1x5jPPn՛ {ȁ5[߾?mPgn3n غsr_x |̾^C϶RP!AE!I0yIs@@'̅\8̅\8̅\8̅\8Eқԫz9|hp/k&Kx#5~%4!m!AiN5|jPßd$ fioPF&rP9Rj<5Néq858SpjN0ONéq858SpjN .'RuzH1~1{eL}y4[7v5TM'e\Ps3W ZP-o_XͫauSLi2̞[t6,~tV럼fޱ;ܯ?V=,"l U$ig2+Rw*ΞOGRi[f|$x"\"WN e;~GSRN$Mp-]?vj3QtWilTQA7+lbT/{ 4/rbڑ[riR=TЯ𵖎,JɯzO)3)g!*+ xmg\K'.[>p_IHH1v*iNJtu(~y؋DFHcu:k1 JLK4uxtGܳ0ۃ>ULO#{o[+!N?V>Ʀ &g6MXSswJb\#hm/cX=tj]~ x9Mğ/#Q(޶Pd Oܔq>œBv-n'gHf?b{!KGL%Es9!y8 6M&V(j?,gM\v~^,aZ{?&)|2&yjb,v-K;Mm:xԂ^өw̿'XLm2RVr2K wh x1\{jsd7wgo-WK,+c;iE9o> stream GPL Ghostscript 10.03.1 2024-09-12T11:15:27+02:00 2024-09-12T11:15:27+02:00 LaTeX with hyperref endstream endobj 99 0 obj << /Type /ObjStm /Length 4419 /Filter /FlateDecode /N 93 /First 878 >> stream x\mo$_ sXU| | /bKЎFJ ɿ]l־x avgeb*6ePCRcK|ܩR'(@ LT`U`P)8 @)tUcTND"|$(GE&e 4RH u*@T6zRArhS:>o%SQy$>Q>*֒PF  o'1Vyq8T!*bN% 06F%A7R U1[zwU`M Au#!g~8+ zgNJ+ǂK|ݠ`kX )H%NR$gcR`{ȞAЍ {o$Xh.BWh"(&E7SPB$MF!Xmb4JB_}}}ڽyx< CϨ ?ys?t9Ջ/xRU|_6h?t{~៧a<~|8st{P_^<41_>` c{g/=h,(-$dmL%4?OZ?K&ySmax8lBtbQ 0UDT"UD:诌 f0k,T%3mPtPwհ[ո K`T>;JawT$:0<ӬVnV Y,$qpСYCj8 O aLj 4BV! Yd!kĪ&֜v2.~kX` l--KkaW!X`ʎƊ:, |p͎0ioIxK̟U/AGX$Кׄqx%& =8zͱfSizyX@.D?)t^={r>bBσm \ 6`ՒuPAu2W#^}Lk+vKSԢ>VxtMgPJswLO37ɣpWwɳgq FM!,yUQW-1.炈gO0لHޱA}ԈZ?ڛ tUa C@%z[k ["9<2Gf^Gh5 Eo's1F' cLT^#S\ԱAbEHa?t7yQv5~YӃoahAyX{$@:_(tkN"ct@\P,h҂}9LrYAHD]>b[ȳYiɒ,N2LpMy4:Hrdw7ǛKH]i޵g$nBURNLcMR5)W׊$!;zy_3a:$H{ESp{%(E>øOsN.&٨mnbl4zaf -v9 8MbHV?ωlGƄa^g ͱ@n]_T. & @a%~$Jp0l^YY ō-l?OOs6$(pBRKfZ/)l,n]a Qc+KE_[ׯ6?=F3Z`6ehuLhQAiAթIܶ'Vm1&D:*{z^E3=UBxkTj*&l}"'àAٌ o.<=iudKԉEvsmEofg5W?(.kbogڷ\*+qBh 5:AAD*"f B3N65-ll mlu)bL*NS.`۳lfh\L&ft+cߜ_W6Ul\3j]k?"b@$so*] b>V0ro)U %̛[0@&5pQՇOOhh4&銚+j[lV7bBcE݂&] k&b @#Ցu |QmkiժM3\y!}\eET?m}Wf}JIL.+v_kV,B@mt.rkE0묵*j TZ:B[^]e}dٹ E>># ETFk,Ɯ,{/zQhMB00p*l>EL=cw64?0/fl\D*59Ap"筞1.pi[/Ԗ~(Ue44[3 HPLА3H "ʚ({4B:B%#f`$OW.%9$I0 ^K7>uëI7w|}y|WwWjqwus|v9<>.7a㦩1\O^4luA,oNa*!Y 5?9AxgWuח8ܼ}?|x}8_^^kw38pNw#hʜ/\sw<=(8Abק?g)A* ˨ n2a~Tyq<V.{LҖ¨*$| e~y<ޝ>td^J!yF9N"e"ﵳqX*b?xDH8gH#.ވDx3AmqM^jnr%MsF{Cc ؖ%mleI[A 5em 䴗Y5o͐Hʁ;>Ȭ.I6zFA'~מy-e4P;>dO׼]# DkQgɼ瑌h k͑ !)F.}P`ɲ1V+M"ojȋv^*x>wvQ?|qp/|{oԋ=5anmU;jrג6}'`~msꈣ\.Yb] w/~̟1Ly[?b wk0 v|mۑ7=ů '?endstream endobj 193 0 obj << /Type /ObjStm /Length 4899 /Filter /FlateDecode /N 96 /First 926 >> stream x\[sF~?n83s?'UėvɎM k`ȗ$ŋLҔ픊"3mр(ZO1i×D=R @ # E`@J*8 ej@ʁ # \D5*GnBh#Z[ L$ t\0@!0@T/))F B%-7iQqT,Қx*ϼQTrVHQiDã ]@Zz# H."i@j7x#Qx 1 u@48@'xLsk. mT"C @q_U@IY #^{eF A1nՀ9h8 B:Cdٱc5\L2Bg1ωJ,gVyzEż%L-_KU= $of{xe]F)]𠮺4R藦@>?t|=9"O#u7k]WjOn]gEu&\Ѵݽˬ}?oM1&aI6\՛.=)/'!:Oֺejv.ɦ`R/5&]8S!Z}ȇtpͼw4&}4L0bwq6|,~y c}~(}LiǬb飼/+@>c|"ʟ/Wy"OsB&_W2YMѾoXYQדI&d.#d^e<(Lw{ž1jJG(speϲIwYYTe Ӣm"H}yu\%ZCt;.o>ԓ|a #MHѴ57v@d\2[g vE;&24w`ɀabd!9kF=#ۜ1e`IxVpVqt튣|5~:>;}rO%P/N tzi0xo6̠p`% C >='ҵ0p%L7?U5sjalo?3@#;-8Tjq׍C<_llÍ]UVø& M Va 㐨o8^C-+:篞ڡ̸ `F+`mR7>^ Ckwj3i:B 䚱/Tk\yz=a.7tdZ_j7dYmWS5q]<;=ͺ9L{BY3z#T۬Ⱥ;0Gg)˵?BS˓a@β2_E;Xvu\  ̼[3PlbluQp/33&1InUq<? zJkw^?~ݓO몎~TՎ ?jk1>joՆj;JAe#KيQ1{Lyfmo7iq=HzSͻy7*Y]Y Muy.y*a[s#f6jVk(M U٦7"LP@̆gOx }ߐC |x |ZYs\+&m aܡ*8S-о&JmIqeVu lZKT/=L$ lzq>XxkřuqEjên\I n;pm>tY%UJi3ͫ" *ʒ/~1'ǩSBs&8(RUu%IQ(LYhC+0ڌ5bR"z2'DBxL‚6FD6m!Ϊ(s,hOS/N/s`?ˮ߿Օ YjV^L %.ITbW>D`sYe$HIoE;NN71p߇p(ȥ]"~9~8)Xe1psf(8FZRDg@Kд;BYp.T6.TlQYp\Ip*'#R *mhak #un#EցNDJބ <)aW^$\6  +-psV&y`UWI{mvd<*ume.+MQԂ6h0!ĆZ/,Bsaꌭ`~ L%~͔U$Ԃ%kᐢ)& ęnE_RѲ;/Z\E>m7G[7Z EPuרIGkKnL՘UkTnYG\&9QQu/xO:T nU7!.jMڴ%wֶnuDZMMrPy*X΃\CSLiSJ#{Fq]Y]z}+޶6iU,mR޸wkc1FBї` c[HV(sA&wmܬnj`eKc%:;; η=:Á fZo',w&HȑZ7'M[&ilr7C/&5Y eF] xf#eGsH,`͍ LcHg+6hIendstream endobj 290 0 obj << /Type /ObjStm /Length 3737 /Filter /FlateDecode /N 96 /First 898 >> stream xkS}ߵU@PN{>EoV%LiZr9nCnNہv5 ׁv y!<䁇sm s0rFn #7P r@!7Pȥ+0\6Bw\ eP eP eP e(}~x QmEJ*^*݉Oas: ]l1 t-M Ia0HR0q0A7P p\B҆]Δpa[\G*?^<㓲Q;/ыYWZ|݌ILnjuQpn ϓj9Evg͐}[/V}G3XOe͌YO2edz8ϪN2K^fPBt U6;a.$-z˱VqxVӓ^[(4ʸ?_GŏEY,&EULxS̊ym],bU\_>x:+K`飵Ȯ?&#!Cb¿+.rM_WtVy\40sxWԉf? dPNY_@蛳Ǿu۬o˿Ÿ+FjcME9~SNG/YݤE3Yt oTƪ5.okQ\oPcFEݒo0'gic%?Qm mf̃=sɎDg{%34xLgiܘ6ݓ/ɓjYOgjq;RwBrs%%w o_5T o}ڇJ<ԟzRmzQyݬ|5}yvL ]R6wYvM*G֝뜑kt_k/Lܸ\%ty[dAfzaBwY_:]m!)n,59?W?^_{iri;Q&%0LGu!˓'RM`~_TBɻR h7Ьfe.zͦ`T43Zr{-Ԡh[hg8`"M-Av:آAC^d E>1>'h"!wf;ԣ YAq6xl;y-V 弞WN n>.ykuM+lX.j'|.8Rg YS6~cjb. ,G__򖾤vH̃i:ifֵ<+Hghqn]ȠQK CeYlʊ Y i\5̨^bX:vvݻwMj^5}oPA/^Xk}_ȢʆO}[ģanG*GdwWbOY} e54" ׌: ;AĘPrtZy%!k{88(#$A2(>+l(9 w7~5$4AĔGuaY<,&^C[و>2=Y۪ڵx]u?NwWU>Ӕ]p=94_M{tUjHq~[e=;7@yWGɢI:z:gZ13 'Uʩ`ҵHb>$Q,zf=JfW'ހ2; 厎[rb1imsU3Jpd靠I٬68>)4Zh+q٘ofC5ndA6ƄV d=z9pxN kH  +{dHG#kp>Fw#&֣|]Ş|hssV?==7޻pTπ pꭀuB^etAu7)W]9mA=w $t,Ev#/&Qʮu].[nhAwts0Q%ccQc6.ȨYsZ1|n^ߠN"]5j~4.Wӓ~T7xjڕ=a o1kg4Ww}N0 [ҝL8ܔXԋV:C]3zZw+1*{,?k;bbCh^P0"z(\c6{ j'%!B}7i<_s X '!27lO?Oendstream endobj 387 0 obj << /Type /ObjStm /Length 3407 /Filter /FlateDecode /N 96 /First 887 >> stream x[[[Ǒ~ϯT׵/A @-؁eco<У9!)_T2#a 9T׽V ڀ6em hMTmMcSSЖbd6+ؽ\Xk.` $F¥BLU#F` 2HR@Ǖ W j`̠^⊀+ Zk\O'0v0n0' }ZnOwJ`q=0+`[

nI5LVώM2лeR\+V fepxDlgԍ}X[=M* 6Wp=32+s8#;\2*"X 3 ;hdXAHQȨa+Lat5EQAɹiP+< N`9n k^֌24>aiF]!iTq=.PRi&d`l"SE9Kڸ''wJR5{)ඊrmjehlؘ z|冕nbKqi򡒳,XN%G=rEeH"Mٸ3(Q:c4dE2Ơ52j;E8u^\UɱWձ|L"(r-L4̥΍.L7L^ZPZ~iYGuL ڑ`{tELSUVŇ=@ɂ*x!3XBnΩh\7Uq7$}ӊEy/GL–ھ\ҋuvxi`?SA2P(-wqЇq5ih뒆3U“Sj螨pY$E- Un;(H1n7C[[$p-4V9 O5Tg#ۋb4V^ַP'6B|{ߣRtЬEFаO^&޻E mqU>t2;MSN"E3roG<NZAci4*)ϏEN1=^O/#/l>yF>ۣ ]Wu/>nƧۭl=Fw@K22C]G;iq NnG Uz_p۸iT8I G[j.6*.ZQԣmi;xFbl k+Uvlsv6ƫ2xa0Oҽ,Yx?܎t֛nG*=墯; 87l½ޮC. G;Z 'wR%\>R*C|?_\ooRZ'W?, ˗ŏxx&T%ĦJ;x +XA8| 4B؆~t^by=vp:NotW/7, ^|HDJśGusn='-8Dr?xpZfFH*b3i5zGqK܍rO[E0_C1az};,kmz4}JJN.M6-M*]-fyZz5I/Ґ^rzMy{{34fUEM׫׋ iVi5)fMZM1["v l'-]]ۇO./_/w6Yޓtx]8J\%.q?(mt~sܽ9sdϳ}Hz9}3lxvi>i!uXN/6,:0f9 i"I?,ð{Zc, VqjÌjw:YMV&6Kӗ/0)h{$yG~/Eendstream endobj 484 0 obj << /Filter /FlateDecode /Length 6320 >> stream x=kFr_S~ 1G~JX[+U*ƒ]@@H*F (zwIJJ3===_&  5NVFJ'Ń_P$7[LzщFL^?щH;ba):Vٔ+2LQq)&LK"L$Q|z&D| * |]6o)[3J0!VyQe`BZ]WTĚĚ =+l±Bɫg ĊhC'Ӥ)ʗs`B-:yAɗvۨ`IxԳ0 nJ%ֲɔjHJkU(aM(LRNpefBz^vGeMĄIbg"=Y@qM@؂cLOV;m\bj@GG0nd;cb,(%0'.6Um$*#Si2 屩Fz*bpXuhG}V#FL ,OVTLHt1ѼŲO(b\aC{jQl3* l@e(XhQ]^ou* zqcFWźh^( 9JFd ^βN/NEryMnd1A &k4ZwaMZDXY9ypŽܣǂ$Х>7fB(+0!Q^(\:~A/fU^)gX*3{/cځ~ a97DơzЩZjFq)z4#fJRz$&z#q>$ vA7iwRX 6QV '8A~ !QM{T'֫DT"eL[LGѬQj؝4z"<'3>} L,V(092 TH>PzޢJm0SnEOeW,$D{lj /E׹mY \.ob~;>"r{s2Xk J.ZIK1ͦz*h^=_^wVX*5 gSA3O̧*Ms#9HFM?_F_Ge݄҈1GX ˯#lt(,_n%-vXJ5Hp4$#k ,#Y]r hct@mm1bz JaFhPb٦Hn.-"(:ݠD.+q%oԒV8zB`2 8$07fGA&$& S0+ 1,edTFG .1ၘHu O~2ўڮ'׽=CѲ4Z`f{P_g gUv*L?PktPك ]zߊv|{>ud"bd3ú.ڭ Xh~7-^*a]y}Uf4#!;]քTԄT'[Ra-h;ӭD37Pٮ*.n=/띍h=EFA0gׂ)l͆1:uU|~2.ގp,VgUht.yx_;Z~+g߿"LQ|7J ab ˢZ Ɗzm5y85^`t<Ơ|eI tѓ0G@V$uvQ)I;Ho=?/'8#,'s/R~(!gZ/!^=["Br_X}:9@-lػ,Ď:ZF])=i6R|H˧)DkձGٔbK0T^f׾bjbtCj\; tH'O:Hr:ɏD=ҹ}3&(He)#e=^Ch4GO~uOLcc{_8/!r>iԀ̦hwfGgS)>(EޭݢAZ$}@a!įDb&D4yԆӫNC3=D(7K'IA q`Ox,yYUux̜+eZ9mbq OM5Rh#QnLŢZ`5.`_ŪX>pAU ෹xPbl܂6|Cso%R?;`녅Xİ|JuʬFvJ%3FP#RLcCMW%}~k_+.& 0k,ȎaԶj,qe?VMvtl?,a(L57ģN\V`#|n7oEEFtEѨe3Yr(C3R:k*l(Ԍ331[U&GD,PVceҝ=MȞ{5 wKzH3FIxsRl --9McZݷdQ)1>2GCqs}(T-UWh^rGZ g W̅7]3\@HN[@,t>]5eWĿ8dU a&5ehvb+DXhAWje*0JnDlׄlh mja˘AnQv7pQg@Ś(TzhY[yT{D vOϑ`m:=jA-{sGEARv,EM߃SUE#Z拝 Cяdn͖l)qnπWtNj1kUF֓DzRnh6uջ=v4Z\oMưΟ<YZ1 ;} zPT6njB7JEHr/l W -tpKXB١8ăM̽㏦mA2&iU(bd!C^aO88vzNcSjǓ`ܫb @c7hrBꆆ,Ph7fU3 )b0yxA*={x ^rRaס-J*eXPǡ"+[5 $-GNb?%%.$|- %g<&ĘmZWJ^&#rį2Q]e𮻬[_?}R/QZjz}tV[D⡐ f|/_ZOW].8cԴ?]G9$3bÃ' C wKX Hˤ pOrg-,]¾jNugZ>r43 [%#^")?]O F\5$G#'IсqEh6f[tn*eZ_FգIeHj 'Qr (4h KƺJv݁<*v՜'Q*VRD&e'U^p6嚸[vL`~z$"xֆE׽Hk_$ˇ};ʔ$J51u w W0`DՋE޳o jFrmKRpsne %tXS^G5Aɤą}dB 1TyGe U@i)݁د؃BuFoKȣtM^.cAG "Xʬ^7P}P9tOP WQL u*'#)Vu[vuK<%lUn*pPqW9xmY_-]MVWAYۮw; Jt@Ff5%0U^"JLIMVm7]ˋͥa> onK}b M6"}WzW] ^ےaϸ#k4b^'N#;MdTUrʙs'{>2f'xh +A3Pd7 tts Ϲ)\SUޗFu_;Zw`{>e0Uj06 5J)m| 96XUUQQs^;] h#8j= ITAeZ_y= YR4.{ͼg !?gs9|cp?\ӁYe8)- ݴfet ;ڦF/_=;Y%1rГ˼g]Ia`"̨US3o3m.|9MS8wl`hUhSE§UL0&T=/~-gE.=A/w<'/ݕP&Oj&iUsWAZa[78gWfo_FU1t^}{.~iߨ2 'C0u_/)yY%1)wo8}^/wJR8|TBr>>i ½98)|v ́]:+V!/aq׫AZ|mZP˼)0eZ9N,?}J~=TZ~ⲦքgEy:'}}. ge_i~oC|"ܩ?._uk}|wyhBIVw0sN˽GM R+": G0fe6U\:>g"fnrOLS?@r( ϵl|n :}Kx~^ށt쿥0k9tHݚ'ڒv`ngp(t b%z[yвvEӽm?4zZ$&VL{EX ]}SȮ jKQeʛ%r8iICfv.di[ڠa4Ͷc r/ͦº+>Uٔ9:G12\Mm)$k6 C@}[gU6˴v}E6oܑhS;pGH98L]:֜x w~}+$k9d3*ra)_ٺc[\5Q;k4P8['\HBdAF㠓ꆍ@٬h7].;rZ(,xʁ %'[_rnwa p6ۼ)MBQ7>x?Cb] 2~:%JR~˿\l*8p^tUQJ)SCP7VT@.*_hXls.E0ʝMal+X Lmnv]BZ96U*#7^ETቓ-%QWXqTx^ ՇBk: _]k't.3K>iu*OIh+_Ť3G*/PRrC1`J}A4Su8b?b X$I;;d((&\ace׭/=5S\9n4h\7V,sZUE}]0AZ3)sR(rKcЋa)p۠*-XuEbB("H,+G`coAJ2OެPKlN/?endstream endobj 485 0 obj << /Filter /FlateDecode /Length 8278 >> stream x}Ks$u?"M'=JjgzFRUifU{fPef#"ɦۿ1@"$YCe<8|\.]~:E+y e,tTi?37N8<ٷ腋&rXɃZ9t0<iwg;+t?}XvZtWg?IYp;)"Y|<˅ \oEh@Ra<&˕ 0Cm;};,WG{캺ÿ iK. 9c0(ō^Ț}?Tm9$J뒐aW>-vI-dr\$wG&{Q/WZkdmlm%"X8vp*ȑ4Jb֙..? e%WޗĪR.p|b(1\`GKa=|fjk` 1|Y{I+do߽wM"Q:+kjDs}oS빎vo .h9`U|۲M',9f $ Ҍ?AK2-}?;\ioy IXX_gkLL`d$p° {'X\n/ 3X) Hu۬kRjS+%sO1mP,i#s**(_u5u_ز9zq\KUVsܜFCwJȕ׋-Bv]Wvfl>_$Kq5=l\tUwY#Xє/Q\ )Zu|mI%N ъ4QkXdJ>wl@s:pv Xmro(Z&- iU^s7mEeސ!\j/y \ZrdͤeILf 5?ɕ3Qr+zZZ{r`SY9/p сn I1ΐyDûaӴidaF^z>R|@|P/^_\3)f"'w ;.>NN6g7}WvzF~˕]{ 1.gћ4{T~r@ټWனG2%[Ͷ.nן/WZ܀V 6 Fo̷tU 7߶mOi"^. lbb4)n2*fjWFmx"%u|bc fd[W( \#msu]u@)>$"a+sM -h).ʶ h2EmMGԧX3g_=f$ }˔Rl#4ɒ4\MR>Z}m5ґC}SIg m0j 1 r%Fš'jΆD?.*q,*Y*9OlQIZd35uOKN<$ɚ QJf>wYWօ`UTӵKpU?C˵?C.U,@YH3aO͈Tb6}?͝'haGd;e bz2HUn9Xnt_21)P܆;L4#!DD/#S'4#*ٱFeItY4~FU6ezđ:hnvĒ䇌&nU]vҤe.{lDzQJs9^7߬=6*G5;VS/c b48ÚR1$zn m YzZG F*OA+쉽#KRra윂\&ŒsF0fadU bO6{E2ZvWj\]5)$<Q}oU|O1}DV}ssCauL!j57#@\,)>3ۗD!Bm(WXzle=_JpwhjA>?θ<_'V99PzĵTc\MBBSJe ]B{!g-S8vy.v"fM->2Y/3C2"zut(̓ՕdɧN#a៖bfY"\!=!qx)<"3ťxzUg"|:rx4+3'a3RFPM0EBoח݁tj۵GOW9@bCC]wSU2=yQ䠧 1XꛫծzScyS1_<* Ȫn}=#FBRkM2j}z?P"%zm幗nnn??"S &[ =:Þ ø*pg1'cqESO{%Jͤ[d8dd`zx\Cݭȥj3B K*3]=LCV['`6' B. qG'0Mrfaa_ 5)3'c,ai VPԀgb> GM Sl+z.SA#1oSt&q1&wfnxxdʘCS:\J餴v&=oFRB8 | i Ad3 dҹ*1lBաBV;eJ>yezДP dQ9ޟRE `fE{2M#Txnzj;FCv ,:ilGsOj{HjltdQq=YfJNKC9 n[H03#KÃva- HJ4}ssS_`5z,E}y #EM%;Q(!_B ,=7K{۰n':IW>@r)'W\r`֭Ci4UB`:hYIus|Vd"̓˙K@ "in_ l' rw3yrzdA =H @2@TܶJOڅ?ƴpY>Ń09+IVEm֤{DBy*LҡSKsB8&-ˉ  =aSMjW㘡)mu?VsgZef!,z# cv 0m cf#2PվMɔkw4dP9qY5;~#_D12:B6n#8$ ր:(ڞ潕\ u +vЮYw}-uͩQ`([M8fwO}@Rmu K%  uF=";XQRUWCL'GϒΥN H!Zߩ^b}Xjra}O15V%yu۬}_D[/asuD. "F(btuRU DhH%Y2kdٙʻvo*̙vyA7a}zEHg_5]N2gC&q^?5SY]ʚ renJύsJΧREl|~x-{.(8~F-p„ Iϡ _p -eFaɕj+xvu< >.z^{¦ n8f*J#@G©Vk] ϭ5fMv1/8Mn[t'Pbh /='##CȈмMQ]A&NHq'f>W-R9)c$~(̐V<(tǤ[[pAR$IrE RÇ!<LRkJ1,OF7)6~3 2\ipSǜ{Vv%4$ղhFP8p1ibIsuT!(,%e ?*j@ҼZW4JѠES.e/BGG-+UQإB rGA鹵zHSfq(R7]{p:7]1AfιBH١(:b]tN9\oN?V||u\ѢV뛪nAdCHpOgZZ`ÅPXgcmC&rأp 5iĐ+lS??WE '(f'jkTrt8KgMrkNf53_D=?s ?'c2 Bd CC3;w_ApSg n^SS#dF|9F?85g²6Clmr;mJlΘY6mJ0LSD,J\V#QwIc2.*C1[ :R5Aݘ1ܤ܃z4tgRgF =}:p05e(9ĸ4{:L֐/ױpz%ꂕ ;a!*<8_NM)0=uZ{r,ቔEJn\78׭uK)BTns : A1}|]ʰWc2R,<1T4yn-3dr*(X]MeB@ۇ kp! ǼmA7~t|3dd|Qjx,T8V#Y+ >ieǩBcvP9Unz$Ԕ 8&!  .Ck'M.z:"-1&ZWR-<8ŤT~'{~Fc'~I@WGmH #Ieb(T=-1jmNY^vZ{&@9=57OG<c m6#&,X9xn +w7S y@0=˧ I;vQǿ*B8G/L ø#)z=RKGK J_!k] :xQ4=*aڽ|N9Bn[h8m a+n\aУcvWߎFtN)*ifSo/WP@69SK'WjA)m !{endstream endobj 486 0 obj << /Filter /FlateDecode /Length 8365 >> stream x}ms#Ǒ N{*zOdٲt+[z#&P${C2v̪ gcc>L7뽺2'3/Zpʜ Uz&2ԩ2fMu`[e|D닟/~Zp?i P@RofBiNy%)}zQ|Ǐilvswo/~37sfo/L+* I W r}?ox QmVvƨԌy7cqWͧdUVI[c1}rNPtfٕfT̥Nk$KOB[lnׄSz8U-kgɜ/3k;n/ДqEۓ1hj{ެ`Eо֡)_0eBY*t).Fs1m~IQnfilKhisZf;8ˮnL3G/8Qo;҄nl5ꫯrUE.= 7HN3Eڿa/-Qv9ϭj*qqq/]ǨdbfzNn_*[q fqx _{U+ɨ٪~DoO7YԸ:j|ګg*=::b-Əd[I}5'uabQlIvJ3=5^9r4Ậ=ш >7ZY^è3"~uU6|y+/ͨ/NGiFU^^n>OhHh?>GӾ}nNSˡ؀ kL4wI*m`Ui4^䛟ϳFQDP>}ƕ; ~W0>G64kӀ"eO‡OGqCGzׅ VQulQ .4E9~ кK/ mHV|{7xOW÷7 ;{y=^bJ8cĀZc'xr4"B`8_tR%|2u>wW2d <)8w4 ͩuOq1o$&SƏnXx8 Mc2x|Yg$Hm)$k:nUy9oQ'~JԘiwOb%$ȸD0I8߂1iጜkUO$̨VI hzy ©CKvS=CI#'ic C*ʴlEMȞ@ n"nʄ  dV u w& Q*ei#GY%&\'"bD&ME}MOVU}(۲U U+Gy@C Tuj<"vn&&3vZѺx|Bhr*PmP=:l z0x"xl\=AEMǟ;%K@ƛr]VE6/CL&. ڎ%k.GZO ,:}w$B#\q2ҾmajpWW%zh4B`3 @ ݆&1R QB: oF8fLgz復VTKA9/T;pX!::Z ?+nɲ I']~GACImЋ%'uWw0YUFHʯ47&!p4Y_WcLŜåsfv$`t|t 4MY`:8HhKP-|n-g=Pʝl$ا\ToIA [_!>/p9AwǩGk[IēUDDa"օ`j6>hXr,݀U23}ݖM hd(+gs~w4CP&SL("4nn7q#oBɉy4֘b&~lMXC0i+FLϰ)x|RviZ*@q:3rd(.o.o5*O8^'UzD @3$#MNEVWVh}Dj ^:0 G*9TڙFQiztrw l:qlNSn>§H.0v?>Ě7oT8( \GIr /GЇZM"Bd нDt^OB_˦vui4XuE:H^`Tƙ}#z6>aeYJytFZ̋˟i&M]Rk*!DEQ{}o}.\eb9!(#?&T)93`o3"!WM ZvvEU NΏ˻՘/#ɕ9)rE">x#Ov^W C /héb\;r Đ"mm#H SZSBL{4lg^G pԳ8\"c$2,\ac^rFK"m+/4rА qИ뺪 iP C..Auq)q|\inyz#f+:(^-QTB?w`4 &kW}AON+/Ba[OnWz ړ6e]|srU_xj ɱr:b s'-˘=,uO*dGENº}^O[a"?襀@Xns\v^vTy;n4O |9L5uG<٪(ƭVeUᙶ!35m{Da>8V Hf1V~CqMmZjDa|_7м̐qg4c& תxP l eX1K]h6EWf,LuSDŽH#y!2yܯ(Xt)~;\rGa!q ދ`w`Fw ʦ~\ۢ*678$ #c}y9W? :c-S U + A!+nYRC_xb6g> "'i#f Pk lT;B%ECwhD>#,7F9_Zr+bӅYV۪FrqEp7v?U Mkh5mIO 8zk@g؃g4h`f`3O4r|Fk̨?|d/rMΈ(M1f}haQe(bRg@I@=w,*&M'.`GmZ tV@JGT"q'<Վf*;.d.(7 BQж\j2 ] ޓp]c i 2hΩH=ZȾ|0Te@)9C k=۬fPy> 6Fz3vLL QU1/\K4VE&cTfkgI=qey'4񤈱pۺ\"@DE1t ˬGtU/1Eэe_?v h.;Luϯw;8UJR;XD3P2tF@Dy77N$a{EEI-kr[QcT밉[ "Etx5p0P73?,%KXǧ8Yzy TK9SRiC:=B m:{괜Nv6'ZUXQ5wN˄ 'E!v= 1|;/4c# u"M΋B2SKL" Xe1nASnDgaz3It|_߁ ^Dj6ɶ2Ň .R#2fڌ 9S$dhu6M͇ jH\ e1O" ~~ٕParOTLhL)ɵrdrLaYɩ{HER~2QOJO^jIZdqS H^hq{5x;5Q&r$H8y(%ph/"w#'x9"X?Vbg?/ݏק(Gƈz0}e!-丘Ǝh *gR *|l% tN'4%5nQK_Ĕ"_}{]Uܴs`HǦz*8iZQhLG$#Vx\O-NfiOA:2<S;^ww  CJLneSob|(Wlh즽r_b:QXM*yFwKqN3&TeKp oRAʙŽ`@;v']ĉG3c-5YoBfvۦ% ɪ&eSv"#H%t&i5ʍ3pD3X d}Ys(`oӞ.v"w' `rHY%Iˌi҃JS8MBv&HI^J > YC6MSфC\dqKS̡v%9" br3|O6a\8cB}7wZL$xDpI*_7J ^@(T*`^Ly%~B)JJhVsb6?}U|\uuSfr̋'$c aWeWTR)  N/:1BN !3!]E&bAAN߻= YYGyKq?h2r͘""9#mVSOhn=y(rx줾HlpؘG_=u Π')̟e;i} J T ]ش+?N<`=ж>;I̴ъ1iZ@iëzm5ibӛaiVY׏c_cRg X(5(eIYw-f?Ǽ&Z΅E59;e9<1\Zz5,6<gܧ-PI! muaUֻvx({qWŶ$ax:.6:r>m-&ߋF^,_K+]myH@6хuT[J%uD?ro%q)=ܭҍ MI b1dx#>)_w:o2EљnaYV'_ rk05t C+ &:[zxduDOZQU``-}$7ғꋗTq>nۦpF-/ĸDneL 5HTH0ax ÍV6]`c=P%lG3&n?u=yO?% a`o`j4.X’pI (|{Y6C&lLp*w\ٓiD/?09 endstream endobj 487 0 obj << /Filter /FlateDecode /Length 8479 >> stream x|[sHrb~j[]es"47J޵ctIЍM̬*ͦ4 =et!/=7~z&׋fwg/.c .^?\(brݳZl8nn٦y ջfҗ2yg/.sGNJ/1q>.mwWoz9竵6x'#럎>JVufӌ8QcHcXǵ^!]ƦۯJCȺ/Q8.]s9l0VY.d:$;ߥ>0 kocg͞1W1ld/ٟhct;L0gl*J)T0 >^~+lȅǾj\<9Byzql7Q>"moތK`}+fS gT)iE( Z>Z<,Ǻj )%zKB^HgⱝalXU}kd竵RwS١zC,2cô.H.I,2>BW0 qR}u84El/tͶ8#a[]O|5ػջ9._iŕ2.a 5m_C7 U9s^p%_vj]X ]oڶ:Q6~jMhJ4-١ n ҵVʃ}n*7uM gp"Qڢ2o{߾?>ߴ($`tsrRrm&$vhpT8=\Kpa|B{qL(fȳ(P߁H\Hn<P<3 \ ]Ц#mV N-A\1n ZHm]m>p"TpqaǡпK!pkM-pj36?{6W}՗ yZ#k53wjO= c20 r0d{vU>A(s;f Ds;db/Cݯ ShqE"@!#CzT{x(n1lfSyp } K~:6퇕Ԥ'JILiƙu_у4 R4L4kn8 ö]GR~vъl>:\Xͅ95Ymu{u^royPޱY_0kjPYxM1}/!J ;Y׿O?{on{v?W DW4SD;;C 4V45翬dǶ bW;ꛤA&tYoY WỲ:Eů, fndit`ߌm=D+,W.gnX]bpS?0$z9 T "q$IUh+0z}Z~bWW{:o3c@9tq>6꼉\*I]󊂫IڒF ڕf3γHmާB0ilM#{9DZq)?CͣCű*[1$=FofWrlr;m7sPSb$0>\7^?<7LᕱM=<Ϣ١١2;3HB, jKK0ٻvs[5{dD<_'+ݯVUHȖ  )fyųɛs*˝ٿtًTdW"dlrX~ =1r{Rax9æU;9LȎS:jn| Q8ma'nnO#͈3umBGL!g> umէf&y3hDօY.lIĠU4[OdNŃtcکձ2y)r'<4 ˸4n- z~ 4wu ɰ0ֻ{N{Hg/4$ZC_+5E$m鞂2T0߭vEr\6-z!Sș;v[$He{puW+ !\Y[ vlmi:TL"vo0mKvGk>h>pŞ`.2eq6EPAJp{~TT3 Ǣ$_i'lIn]Q49NQj).fs;QwW@Hy83FT}5%c+u 2G\/'`a@`,[nA:̷4Z]x.w;p*%(CI)L>= j bܖݵd^Ÿ3^ 8P_`J?쇺κ } A=07<7˪%I ֳu&_',Q4I1F$B=JHە;:w]:Mm3~3|9!R(/OBըYJ/)߭S0~qˑArN5%JjmojS"iz bH;fRp{{ ) uwmBͩre/qZ[rϥhy~#Ʒ4Qt{Hdi,tNr?6h ,Hl<%ـLBLb!0ywI38=cټ| % F_R&#*Ⱥ05z}b^͋YhzT+-K$5; gW[zJpkcM?ϧ,qH*M{d .)ILKAEn2qH}닿\a{q"^|g1/nD%SuCPF,3:ʋ`:I}q%𯏘$PH6) UssE0wmH#_l,i;WcOo ,܆ȭ_7}|s R-UQT ~U Ssl`߿l'?X',Xye<}KJ 5b}>52(:4g9^ekxSisxuƒҪnqsGçLti$w-T| \~hǟGfTvp0RN2k!ZŒ%A#JKt;Qdo >[ۚ<1+ %YIg+h˕[rZ)R7h׳(nR8:1 \*lK$ݒA:N B'2vk|l2/L1n}c3estxiSt\á4l&ӱtF] t{H /$$˅nTq`DteF&sHoz !fJKrI,;QB/Vkɣџ? 7b*c\4j?n$8,9I]":*fE#rb%K^uq3N_3OeSIP`@iN2:mXjK1L:`F$WSJ#"2{7ŧ)*z>~9  Ĕ,DkƒEOhLව2L?_ m!⨷xm骱w+-0 SCׯ ";n<}v}wv-6^jk7/5@6'(a|mc"7C}}jxn=K]PqZRsO?olJ;_1XdQ:hH>i.fOI *4IPlˆoJ҇?^Ebki%~fe7$Tg?)t]f)~nWǟk7v/9hY?1yR6!/YܞO ?])}Wvj.-Gh^j^ݞR)銏k^ fA.T/k%KUTؔ_U{v%x)dXP|}FF\ LC ֧ϪMN9] xP9ija8Af-)`B,נ~rzȅK/tX S]z^U"CB1ff7\lk ~R/V@r6gT>Ik&j%} A6ʃ@ A_f 90xUX@6 7ı/wc> !Z'wwPbSkք 1=/%]]-\]K<oC1%6r/AFYHWŽu0Z㭐*] %[WӋ>?65L`Ӏ'Yw_r.JFp'ԃA#)] \ig rεUNywQKJI+ci~*i:ߖdDq.\H|yw&x92swj[8S~l캯ω4.ZNpzB:VyaD{FUVݪ`c׫ G]ݷ+iY,WObòHu\v%@(RLYL'#Z8KIPh&m`xW a*NiIn6 0 1vcV/VeG;x]ExC_0،=7U/ | RmJWBy$T]،0KZq'e4$>2tг2>Ѓ0GUpTf)n,@W>(9 $6xjvK|%+>zkqq}\L~dS,)')ճt0u6:.QC}k} AE8V|Rݪr.J I#I cCN7v-lA".ʒԨ! z2;/DZo`DZ܋[vX[Z<™'n ]Y,]08x< EdU[%Jfl׈ާgu5);G?gK4&؞#Ĕa@7Cp&4&WcմKx[)]@e1<=6} RY{X{ٶUs#iz[O4\ ܫU;4-FK<Gz<5K QR f |m.h `YK8_>[̥ 9^U+F~|L"z9p>M.:}AXf1%c3RhҢ0RIEwٖac,V%l2&P/b8{(|lO?̲ɂ^yaqi}vkF]r!CLSF)ƢBUekԔU~ŦO r8]nV1??287% sҽ妡%_VS*kf2O|)endstream endobj 488 0 obj << /Filter /FlateDecode /Length 8394 >> stream x]n#GvsP~:b4x^[#fcْ&ZvSySƐܾs#呀ҿ  3m._?Nc8 .^H.#,^|TbB:4}⋳߾G#*.DpN^]m,+ !Ywy]U=BjTxqSbhf_iNbiG̖ւZFhFqm&jLzH^p/Vuˡi=ixPPpk61jVʶn_$6U4N?{m] iŦYbi Aq'6٢y]7m8L ' n[i‘Ki0gWM4|ͪjn4oU|f_ƙv )Uߠbv[.Qv{9G.(q]V-K+kCy lt)f*{m|d/f 7T8LἜ+G*w% wwU/jO{,LFz?AV3`0FDMvZhc}3-WժRKLkEoF%;}IlSԞ f7ռy›f\ietZY}n5[0zΏhի ZX}.\FKG-B6GƎzqxGӸt<Ĵߵ6cBhXsΘEY&L}^ 1DVT-E5:c~RwN"Mr8`ay i64Fy138d1XɳyOXl-t1$Yzlҭ§Fljkvm7+g= p9oWe Y{"j @A.6WuٖVC{CoezN:ʡ'ơt;ne@[JƟQ=b_;x~ gwE1lUkl%.CF-!b8Vrh_sfd H)j6kI}]*/AL\N9wYeoV4*CVZ˝ %}8wg?xu*[9}-^_rij -n-vmPOhG/$V{2"4oڤ%x2i?0/$;^ߝ7j̗ej'HL.U{󦻪6u6zU`?25Q5XrnUח|\Dtа^Ya1p1ܑQz 9켄yI/aT`DYһ!bpCRv$kQTm n8`ٽO%fHpI DXVK‘rCh q)Tpg9V)[)ZtlQ-uU@?t) |ߢj5}GirG75]*/3h>Ws ~6隸2aUە˺吙KEoC&w%TFUwU(Bn &kphu/ "CEvdx|Uސ I-GBd 'W}xtXuS,lz隬&փ0u-eE*!(51)CDJ@}Qv%e!l.,ΝDҺ줍v&v;iÍOC`@WOkaַm-'3}paͨAHE|yxn<*AT?KGI@)<q_7 rUI!7 j9t\Mr'hU j@dIO8} 3@riz)0aqAteC/eWU6YS(P,Mq0$Rd!GdF{~rr{|bWOFtra:O/X(F"*M$\^'WInLԣe=2Ϸj{gZؑMBi?sSGmz JXy3OEH۰5)=HwR*jٳ9/E>ټPV@>bʧcO` ָgs}q3oki8rj%ջD #eU*lQ]WE.6U$_>=LdMﴺ($8JҰjS)QH!<ڻ]2)岬7=VB%~$ze"K2vH ;~maj7BN#` c5Qܚqq j anX}^@FQȶ]1Kz !5؀z=_nb:HKuvVrMGN! ~ǼV,!Y2N4k"Nz0?}<^i .N{ug^Og [ͦz3Aƛ+xY}c0D =h890\.FA)N`X%&(sR H~y[XA+:519(bY]zB*'e @W5pؿxyYoH5yp%,r#T<ީ|RJ sɵTQE}Y57@G#=aǧ<D# +lQpo%%Nч*|7E5N$1i++7mOj$Fɝx́ݡh.*;V<:G?2d<r(EScL)ɵui@28_ض~C0x-c2`Tt:9,xmMvɢQ[L^X"}! wvKYڀ-S6V O::?*3 D[DoWjYmn(Jup駉[we܆5lSDVR(~xU G;@T6X^yG>/` j0Xqb2~$İVNRҔeri#eEE*Y}⟊ LsgyrGr#Oa$3vSAE:r+6[ZԥPCzzczhS||Ep5d ;P/Xk/Rp~gc/(ύtVBp#:D-Pgڎj䏑>m? 2Yz925ހ"ڑMp@4 `,!?zZ(HE" ]M ~tLӃUUb+.Us'\);#nO>JZGf4Sh x6X&L0RY"ݺs- q<`)jyM416ܺQL(|KP ;:J>r)EJjpXaQ[f+``!Uq~wSr\hUR#8=ZEAS+ hj 3`Lrҿʇz(!x(A&UIN8??CNgjoJlG߻ Ke/ S4k ɰ*=UixtU";F-M,iSlK;t HQ@䋟*3"1ZQʞt#) Qp+X1c=j¾:+*k"$#$a. #F=DhL>B"aQF$Pϙ;CVxA\+l5HE`{2XA/-@Ns$aI;TS`5{MqcWC;dzn,hEsTl%`("Qo 3YUm`e7*18,>@{0|fy1B^N\0kBߢq2.3n PBTR[ P' ^z6XR45&z6zYP$BhcI绱.~f{ۂyr0UjT8vL <@ ~]j%;C4~̹1 Y'U+L7f"[J1 -Xz.1ڧ,KLNqPg.$ӽ<>>5$WA, !Lʯ)t8BǸ]ӭ@J;&;)^wTZw4=QЏEAr.~5 㥇ag8k"=% @"a_M !Hr흐󞘐I{x}胙<)4d|>.+ #> 0"Uɿh5tTBӂّ2G>jAۀQij-+=wF`yH)I:UA-9ȼ&FS3PQ;> o0,_eL ihĨ )ðKHO%4wUEtR.߀DHoyv {RѵQ/#$fsF?>+$ɯ9$Vq$/0op:0GrU@(D R:Tc&gs秙V}nA>WtlW8@[3n$R?k/b~*)=Px"z#c'`Ufov-Z֘.,r6`$% 9h[JmIjP' 2 ժ\/fP0:|Sy`bG_ڡduH;F ]9-V*Rk, [6#zQy@鼞LA! [qlӸQY%.-;<' gCI ~H|'b9\ӡړKN$XC>i1dAw\eOw]kbX_$} )=@j}B7ѝn/UUkr,ʡ~n:WD*[~}!tc{a"Bt`o%%z$o5+]%`Y*MSg>~8o-QqA"2?zI1_Ŕ(*uz;N>`SУ5wk8Xv xfn1n/+zK7}k6M*1^noE pnګQÆQ{Kѹ> mY!p|O|.I;O#O+:ӭL=x.TXYUjmh|7 i@Re+\m(y&T_P\Ok,.ĉWlpm4 [tGGYI<ҝ:M>s 9:,D}B ɨw+LC+Îz]2Q^ =ZB/}-{nV-blg{6h2 hd":>Q2hu^}EY`U ڲmeR6|"сΓٷ z'â!v<خ`# l[.WxE|T@Gq'3κ-dݹ!ET:51o" \/ 1BEb*@6=ö.p>JxMhMUJϠ'&MQ.mefDJ."SU{4(-ƃ= J Ai4eM5PAߗh"2p3B)fՔRuZ tV.ָ<;ؖN=XlHeQp; ˙\R0oW+eNu{R41qwOG^ "KKW8sGrǶD~ nH>\rx¿Gy'<,KC& FL w2';;BĔPhv !޹.)J1*|[\#p@Z5(M5u )t;!_\|dmRA¥k@ IkBc5m!hz^'|.Md:߿Ѽ۫`۷clR4N `-'}gq,3ӆ3oɚկ<-ùnJ\$?pc( Y}J!﷛E3t:Kr[ Wi$2?=$*97> stream x-kHSqgӳY)v Š.ՇʠM+4R4/fԜ Vv>e7~}yx!Q*0qm[\|1fJCAmT 4ױϗȱɥOAv0$X¤2ct$ª/fJ&t'=Ԥ[FJl%<57ր; ^v Fak(蟱;-2,i1!נ^bf8]X}įS&)LP+ NeLBZ. XSm]8TcravHasc"M@WkZ'tpؠqH4木 EƬܨV&BKp3O_H@_9Тkȅ"`~ua7R7Q D4rxp7=z8UoB}pr6op0sdwUx&9l.8quXNnښBҽ314Vi$9]XLvULO)# JԡR1&vڛF4)'2;/ٛAetG1C+$A15]|)lu9v\>34sPemF߿3taD$ Ϭ@Ƣ&nsh}/O!z̦Ő+6BمܣoZ.пdoWIJVIcq5\gQWޥ.LX*De\.yzE.i=endstream endobj 490 0 obj << /Filter /FlateDecode /Length 7339 >> stream x=ksƑ_X[J<Ubtqb[? ;$c Two\ծJSL- Jݺz`Zbk l_64.q7U,*GQۦ*o7^+1&Tu%Ƣeѹ4#fo @̌M$,(+]|w[-GƌLo>*8|!+ǑFޠe|jP K`ͭ[4[۪6[ ~jKJ~ޮUYU֠bP9y҅As.Q Si)rbm5BnPso=*'A?o^s<;G|u;.c洂+e 6XJa`̀}ںMTmіe.. Paf* D|h˦-=FZÄ1R  &°|/oM]Kx" +_=]3EG dKK[?K ›A\0j _zk3icJ픖nSEψR)뛦gQ֩ Ӳ[Xdi 4k%k]KFTq&зʦQ ]m?^1x\oX║޽a1-z|~h-$nRl-[gQkrFč`域?>FR*S€\]Kl,Xk9`1l-jFQeѻ鄫ǔV@gU^qMv2JhL4ME延Y{O\(nj €֤&*%I $˨2VZi=cЪ:jO` ˶ ow52]KDb"z{@EUE']LTakkTeU\T.֏bf/ {<]s o{$y))j.`8G[w E{j^TjPOiGϽbJߨ]uglA`)0=N+ooK 5_K)j,x黫~ `b']b^Kyb{W͵.<eXRLʾnfuR `|ySGE"׶MP ,xxVFX]rZ`X-]y뒺* Vdn4uN j-Gx',:E vIa-ho7j]׻iL47PBk{60TkQڛ(e_^.ݕm@UR w(<ֹxˤ-dd`uƨ7^mSe3"8 [Sp#` gP5_=pWWMway) 6k~7^lȮVs#\i)( Z",=DDI4UAE84뛲r :%ɠ_@ΑW8誌1Ż?B`Xv˺/gL 2.`L0%իRһnj&F[6>VlK{7HN\k qVl _iݗy?xR2z#c`*iD|1 iz .ץ7h ilITMo{yr8RBV{1aV[5X:AɎ6J VB #5u 1Ф0cz:nēg T_o:|# Vj)W%xUWC^_2|.17 @+B䬋zST~%돕+`{eSwOf?(2Qi!sz!3 mn}X i׉ )U٩akP|&`3`=(*{syXݰr}fMa3`Fiy]U4'C$Z{Ua.!UPsqݴҵmWCN*|h_h 0EK0:jMuxck,b.a1܄0k")QY_x# ImQ/BP2,Q^Aֈ!A G_~u4w&TdD_\L\4b Ĩ)1 }t|^/oy2$8!BUCOeGJQQzё}%?YumHфP{+4܄h1lTYtXxʊ`AEbI3iD,?Uw{L4%QS$2\&&px=Cjw7 ˦b¡[c7I W5wsH,c3 *Ml(Q5jGx7EIb,<G̈@QV)gЋTF{cKY 3%OIysnZU ]$X&TmQvS w.(+o<w':#e0 jfZmp,wB;d):zGJ3kQ@S@A-T5l.r9>gRg|u?FHfRr=amɶ}Ҩؗm79:D"2F6c6a{47m="w< ]0tzA0ޞpJ4k:DF\X~ï]Z`cA,-ڄCs=ՉR`Fwz|o.$|H9>*{]r8LR?Pz%DOI $.evB^5*[iIH',Ϟݗ}w>bP `0DeݏUZʺP#iA$ޮ.BJKVmY34P/k{lٺwȿ0[ح?k:GO9% eݟ^Hcߞ*" rSW3\~= }9a (}y)ڕWu8BZX++}ŠV?r(3kDq}zXhԛk=$ Ds`IS5*#>{w0) |@qOhVg@y]< gXzYmVn/TnC=5BUYIBV` l~Hg 9;H$iL'l(@=tJ,lb<=RtgF5><,zZf?"H6>LQk5V1oPw|A 3D'6b<$a?.0 e{N!kfh,!'1!P W=!@9g>@QT“ZG#N FbP$""X$T־? ͇zpsFLV,?A%-P9^-DfX$=tM$ROtͦ]ק%9dH$7PK_Cʪ*5bvHb!+f :^i<5y+BRAJW18 δx,T? >q XDcѭDŽ8(~8*s#hD?1<)ڵ9/3&oR2fG*:9سH)8.| ?Ì٬2IkIώ#Ho.cmO/ɟN2wV g9U9C)&_/JsX)xL}^Fe|&(wAԷv=lJl¼7's=1Y5l;qOfy\0(fbʮIqդD2RఋRlt>qTaLKp@'z`%Q|Ww9& Qiޏ9g3ӱ$͛φm|l1_HG(%ʱ<;AC A3Q8vKғ e=\x=)UߔɁǔQCN^`pu8Dv7&ާ&8SXPp ϾnJN0mC9 O'buQz圡b/ćk/>#Oi"2ddHLd'>Gq(Vdnf@`Ċ^ˠg2r`*gG{r\ڜ^.p 1; *ʱgFEvةr,I14zrÉѿ^s0gsxɕM-hNhOj?}1rĵa9Zq<@xܵzRkfHV3x0Z}`>}fvNh EW|$/ӴO?xՎM}7}.>:,z8 -Lނ`@ѪI)Dlc=6 8L5G-k-7T/jg( | 5/ڦK rsE&%HҠ-R/}b^A_U˱+ߖK_hi<6+oKluZh[Jc9<-z}x*bv5g7:0&tϸ+@Eh2:TGf){,*UHӂExpWnfn5 TR)bӶQm-νƎ:|2 td '.If~jڨcO Wl)SXXA5ȳGnǓВ6fj.施o1R{(:4ۦ vg(|Ї8?w 7/uІoՋX{]3ȫӗBW7{3gzK耱ד m$hԷ_?zl;e_u]h|lUʎi/;Yzvc; -%*{#65kI - Vey+eNsղYg-Z(O`l5cA1D4F7C7rwNX98F7L2젒 c:x;) pNdA!܁.7jnR;{>|P6}cC\B`Eej1ߚ-!yxl媋Ёn\c"3gK5\g>8&|DVr,Ph^|RA:)_xA8fZXޠoWٜE84R uQ\}R/G`S$k|Ze2EX2>B&wzNf SmnK"lZMZsi0^ iޜn5݃#Zk@kKb$fܦ"n RA?%3^(j@8_Ph`-g:<0v7 }2(;M$[X b'Ⱥ3r/nH7endstream endobj 491 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4848 >> stream xXTTֽ)\TЙ: vŧ 64)&QFTDA)XA;&gK4,;cֿ`bֿ^kZ\f>쳿)NM]&%F. 4#9!J#E!2bjGיPy}J4# z/IM8m Qs'EO;5.0~ڼ 3g41iP!C shPTojJ&S})5)jՏNfPj&5R(G*򤜨`ʋS>ʗJQ~pʟAMFR35rLDʌj(9LS](wJAYP%PTՕFulOQ)5eLP(2QkPz)}Nk:=eT{H5Ɓky͟tuV祥Eg t zhk 2B 32:-*{)֞j>(hRK+ XVt$`Qu. ` l;`yfYQվ8p0eS Y9:uBɡÎ JU#Zqvk(1؏EZ΢JZ}#u|HY!;U/%TKʎ2DE^a*'AOopݤ::h?6Je_ؿǤg.]Fd5!ޫWwSϜF4$$gEN.%|3$yꜥ< dq $ "Cߐ7цk ߼#_*MMh%=G٣)~ k0Sъß>K(9WX Ա_dnܐ|-i B:Z}i`-( ].!GI,0о=zJ矾 ~ jRPl|( <ڰI3H"IYM)\v\$6U@ 3kt/._ }R-Y5I <x ji?)WvG 4D[8(uDs( Xx6 KE˵4DB4K`P$Ɓ8Iζ2P6.8|a0o墴yWē<Ҝ!YFyXa,>9bڒ{Tztzo4W>!Ѝq\.s!<2Fpڞw!fsS"I4I(]~d<Ѷpn7= ҃3~9uTgpɐA!K"ou|훻`c93=ct15_5V)f?]ى+c&`)5zZʋOwRI[  ΍8HNS~k{ӡ`GxP>97?*j`Q>3#ɱ+~%XsʷmߛSTWI q=#b\T+;\zO÷!@p}ѕl7PC@ Cns,o @h&}wn7g'U XK zY^.foހ# y]?]8!EA5([`le$}+6^m.>->s\^X/0t1(!A"[ F> FP (=tjQ ~~NʧDe!dۑƊ 897ժYcƆL sUU[=P($]HGH x?Xy00C Ek@N]&'x hîm(4) oSZMwAv'ڟøs5Jh•ӦEM e<&T~DB7!XU؂ '?e =л^# 5v9E];v/v[Pܡ)µ.cfGi_q!=,{tj+Ӎ^ulHvwvYw;GZe&= :բ8t_ "8?; g>{1  i{V}ӦC5!=잡]y豙]V{g\29Xe$i FJׂ#`P"#AqB YwWnʠX):^ o~x%בa yToF_,m~ɻ&endstream endobj 492 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6396 >> stream xXgXT>pm{C,Xb!X)*M4tQ@ "*M ,(cXĵMr $כ~9ϙ}μkw[Bi $[7/[khG$C:FChV'a)c2_;W_:$t{\}z6kv{; 3̘qӬٙaFs̝whg -h)KNq%OYQ 55&Qdj-5R4ʁ2etʉZNR ʙZIͤVQlʄ2L952QkWgR%|aRKJҡQ) FP)ҥvSzHj%)-j4 Qۨj5PJNIJ%LKj+=5Z+P*mL70U3Vnc\b{^4rPؠ ǐC҇|zV,،a`om#u,trq=oF#&pqlw#~a.k\<#mG插U6JoekGTQ x4$)T $w:v,eoM!Elcÿ]aw kIb 4NxGJhHR7ݰ[o(_%CSheF^ ylHs< JNM&,p6$.W?D?9DI֓S+laMRa,nKBj :U0tlrc[Eqd״̫t5+o ^g=r] {ؐp1\t~6i%9wW,9O YlQґ..fhGF+V ٪ fMʕ Jaet6TR8#2z$2Ly"0L}KF+6i}9[t/w}\FhBh -M 2k)Y4LkԡpbL!LϸɌzHd3~,{u/IBl " IE)6P0JR8=3eV#[(AFԉndvr2D|- "!ʸ"߂Y pqf SGޮ> {hy)=dj)2)jw%XkܘUߜG[ 9 #A/X/g!q F\aIMx|-`᜺qd阉d.` ms`B&ҤaVNfp,Teh&k>} &-lAJ<Ԏout7Jt!NɬԔi(*G(7p(WuhOn1(ɽJMڋ/>jd#hnʻ(-ׅfEJH `V߿@s8,{:}f1Z#' `{0#+k411=bn8GI(Aw"WЍİYSVOၪҧx@+ fl`|`b VFU@.LWyf;XzF8T-r 5WW(ҧ 5x7Y<7M|DWfiv;%+yg`(f(&g @[d]Rshʝ_vu1-Y}kF10Gx&{d֡-߫3 ,9*`BNSԭLJ5 cHclGt8Xo 5V姴|\C#ɻk'`lB@F ԋ6cHlQְRnp]MRÉ?9F1?1  #T *%8Lח('d=9& Sc6L#a;Jb6ťE"#>TM Js%aRS d'a {`)|9qCdWi!lyzIj~hэ߃v(d85h(.3& wnc;$эWkXc-R5N~'{Wq3tHht0=jMVXOVmN@_WK*{Z<5|#ƛކa87'>:[ޛSG Z Șd…ܲ }I.R]a,҂и=:Vvo 15요HM'ff]޾%6 M [؎to52᭨jiCTPzN/hź0a4bO߉Bfte^kvJ<V(Bf_ylX;z'"L;%cbS~9A\^'z@HOͶ A+{J!SO uzAZI&%,Nw7L^Un`w;K^Cte)?| 1U c$!Mqw털I&wa$etwO@ )0r#8(P&Kܸ(šxLڌ_^*+yhوHTƴŶrS-&-[,8;--bA,-F@X=Ă U_Ą+EYȡ1cTDqEy`t+*ZO͟B% 7{?QItx)EU즮^7k6xco;@q3 s79;@haej}TY PaB/}NH KMF=dͅˣP!*:Pʝf]2۸|[@p =`e2_>kl!C5rmN{`u~nL?f/?^ʎR@XOzǷ hG/Ynl\㋯ "o!Aa>Ŋ v9vfsQsM*JbË!0:b{h-8#cBOk/KKvN6e#r#!>*?M㟁&fPGiWFGEAAWQPsUWA8}hbOoYYS.zېp0%'š ߫iGtbYe*x~DwJN7VR.~]uH0M%8!:d5Dyc/T zғdlDL+QǽՒ@iJ{$DE` DՖIWgqN'I 'ed~tԲ65^zuh3re/(~D?s2|ՓW~t$-8Yulߙkfc7KsQ>j 0G ,yo= sYt5qsc;#3md.W2d^okZֵ4i* ^zpK-gf"XdnGrPz_ Jֱ߃4wql;k&٪?f; >Ņ' }|2(%I PH›o\iHy;#JD<6, d&2|#cRE*LtN( 87x cc;8דJQrh2VS N&p"xJN1- ʠ4xwKA>;+*NPܪDբyҲƉ- c 8&85-,5g[R+:}XnKCQjC>~I9:<0U0Iyv+Ōzd 1dMf!٫ T Cz|ƜI4Ts]r`?mH `8oV4'Q aNϭ'}**+>'*ȿzzYQQ|B#2rMF~I/?l _t\V2<2V[+]*h"1@0"~#l7WB A F87`>k~#~70j'z6adi{T*~}%hԳsF Yx*Ȥf/i**/-;~̯Kop둴T*lfӀ2XD"-6,70@p`@Vd8T Ԯ2Mg1eM?]-jUrHkDBT KEɋw`(M* n!&9,| DVjB`+  ٴkρ= Oxlab>+/6pIE_G+ZYYhʀy4nP`4d E@|Hendstream endobj 493 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4769 >> stream xuX TS־TBzA& 2("R&A "AEb[9ՊRK C #CHD$V-uC_ZYw߻9{wBSV=(.U-^*2!#%"9edvְȚAVh-Tـo]?J]=sEJYWI(wqĐ%)sR#F]6/=J5g}ncǭuw!&OrQHQNT85J͡aT5FPs{TS|&lH ՜a-WGs|B()?}eNfnH  N?J;YYW/D f`j8KE2ݑ?#w0f{v1>>Ďr1*-X4Tl"a,a8D9%F^fZZ1HO7 Dyag8! 벡~c܅yի_ ^7zRE,K Z}x BlH)c9O/Da@Z|GKcI%MƮ9|hA<u̴F<ȼ3 ȁlb $g8c@߁< }X}䱃Gw.8-^[7%xP-yx֜ߥ2r2ywUvaX{M D65x$RjroF11i e+r`k"}Hh;Uz :*sttҌ;2,-|Z2h,d0#x"ł+ @[$c!ֲG8zG7m:q< DhE_P4?_W R6)<Kj[%ewK&6IJx;sohp]KǨmuK7^nv7dG{N8wWI摼g}[؂W7 NwO DTKTKi(8\ºpdٛ ެ V䨦_J#ϥ(ќ-iyk/[6eG<饙6 om[Н~|\-w2;0ny0vf8p6/7۝t Zܸ3 8ۼ1ӂW'*Vؠ6_x[I +G+W(5{M5-[{aܫ=|bwԱUWQ1*q|@CoZ$%VvER]'jd`:|)Bo ^,H-?,Y.7~[֖D[`9I IQ8p8'ql'%/Q:\5.U}\hmC$,wD1IJ8pR"+dZ5j&ڥZbjO24KD2L`g֝e-OEkv şBɽ>v+!$~O3x?)'}@+K lZBD.?$m~`USӅžJQ7zGT;HAoR']}I/K.f`ٿӤ'#\jm IAxvBÐ5/*g=IN 7 9ez3&a6rfldKk9ǬgY* BBX''[.X($.ĊL'#Z\r"5+6%EG_9TaGgH  m+ئ0$F|`$GJrI.8WXo=^sKz X()&[[bM#& !;\: 0!1Z=;QAE#k<$OW4cu8RZث2‹kbq V|8 UV w]Xd;T0x,. w>>0gaʊ+{U<۸(;cu5d0zZ}?zܥpOrCDC4bOlM;bfk^_M+ Dg^" 8+YB'>{KΓ% P,E> Y)9 :5 pI;uLeuPK&kՊ#yhm&׆XQN)UFl@(a3+K,B /R9{K=ض-zF{H'F /,l`5t8hvQ'T wMa4.'Ktͤܲn2b`#/(9r2^Kf/yUဒWgĭGSѼ+=(dbM`P;Q]UZ]qE{#{Yv]W B}vi$㡩ݤc$Cn}9B~|/ G Vuŧx- _iɰk[ c`D RqqO?)cHA0̑LZIیՒ0G⋎*RN䕡kj˓ =^p[lxƀI%NRYAvۤbGrd.vT%r,Y!}-'kn79 ]R@]4[/]埐Hp$ G ?ݠ& |"IDH!$6A"$Ju흢SZMH^|kIHZ]$a g4{F( <|8S9t7߽g~p8?keVnzfʍmš-qUʌћmJ<`#eP/3aR߄z|w&>'";E'NWCfb+;qHaI% ]kl0mӷh4y8ag%1q!Y 3ւAؿ)ԄDի1$Źr իn֠axhޡ7E yIy]Ǽ6̨ODƓ .{r{o~[~][%'&C˒2o)蹝v"I]Ĵȴ)JdEXOybY{y+;j'ύr{-JnWDeMH/a!fIޱj~)@4͛\綟ud!uŅ#אFrՆB  &0'zH|/ I9uJH29Ȅ5Nc/WEs.l>徯>S| x)\^ܼON;a4 v N\Z<1,\Nm']modMѢ%~[d~@O7}m Dh୸DaZ#7ON㉈HoUGIH؎נD?wdvq7:U@lx6=,h䐆uTi\,&[fQ$_xU@ TL~~@R" bmDg>U2C A{x );^8Rz0bKl< 3Hʃ Sý_`[+D}R13f\P}ᑒXEN9n| fI 00A,&Y@! DiNgh Q^ZS'4vУn%Vxd`.t$K>mO9rìZI_2W NB(öŢpv׸ K)M*q&AC. zMk8T<[54l600b.+np"'@IĎ E\m,;WRqqbQee/ߜRYd|IBq܃!h s9=q&SD#x{GAFQ [%endstream endobj 494 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3413 >> stream xeWiX׶,E-1vsEQ08D1NDEAF(TT 2  QB/z}!_9}\^sګiJOiz!bcDc2 LHo 4 Յz(p!)it] ض&anA;=C֭n=vy5r)wj*AMQөʒ򢬨H͢|)'ʚr\ ʖrVRsUZK- (CʈR(T)=j9K +E:::Dn\/D/EI`2vl?j騫;wt1;_263nƸtDz<'h_ZM U8/$Zibjg..{q:hja>E(G' w޸7jyñ Wx8ZU7oZA.]Lj!z!ڡpgLEˉ>ce[m׮V?]հ<~wWGc%\vUo'^{8 CM U):%2)N LN"p>4"4l+ToMtɫ%h/v[T9,%z|goWL"l7pn;M'po՜#) 10X$wLsd/ W .,'lL|7?P<} p!LHh<oA"z3B ]Af,{؆o hvRחs]@]%v~ jWp}4z:=bА֌BK4wp KrkA!I?^{jbry"2P PI?Hܸ74d)&2aX 69pR_y-Ä2[ y1$KlD.[uF(EK3pD+G 3OB.vb5.p|k`' ;#^DHS[_8/OK(d6-1#R`sզэʖ]Rp7;)fVn<jYuVFq8=E!Jz_ži 1c4ƅUY3=3y{eה9Q)WKJ?dĜDz(w7b3AmDqd=H9C.!Vy?0t?Z 8JkYAY d>˯;Zx/ţϵcǧ'@O*+ YM zpߑh@-iwc,_?% F\ 7EFLeq0vYJBdeh>{.12?5o#'!.i ;_ >{s Ooupݶv@=1eÜvEm-|OkץW_חC %ǝHJI4OFjŸD'SF8ɒbMaDOH4FI-lr_[}_^ F|-^:{:+F@9"4=-u;=J` |w? 924qݨ.'rV%8pHSxŞ>Q_PZTP'?xb>$L_RXB&'nM(8.'m7(fW_jyn ]Q Me˶s;+G:?EW0Ak.tSľq/`x~E;W |¨mgA zp ":`'v5}-!ifI}y ʦ'gXxAUp@"@QN@}D:@No29ޡz)2}hH1h.vYKy,z:i]/m,e E30 3`4"َʄ䴽);xAM!9kvdxQ!fxǏ2X>g=N7_=L?}žGjgrzbZ‘ 8*c=˓UU)}']; ЂtU$Bѽh ڪ&' جZO`Gp rFv7 8<%cQDo9kZ%1T9#d;p57u kZ UEq I6i35>5}V"8ĩbj?AlY}U1?f}Uu%pCji71&6fŻhp_H"l.%ab`b q]HX6z|_%uD6igh y|V'B> stream xcd`ab`ddM,pI-Lu JM/I, 154wisk7s7KǤBw_`&m}fFF _A|?sO;qOUW*߫~_w@ٯr!?'χ }NC;endstream endobj 496 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4404 >> stream xuWiTTǶ>NJ{PF(ΊAA# bFEI@)"3ؠ 2H+ c1\1j܅w߽yժSo+8B0Y}vS"‚ [Y%}(X3 FC8g8<~f_:ع7[sS8 rKi7[s6,n69ΖEpC93N dΜ΍>f ʝWq}x~7hQQ#QQ.h oߋ&xW]0h&y&O1NZ)nIOMgn4 Y>$avC+>zOMtNREb|*l׿8dPvM:  ]lxT:V [Ė4g?6{Cʆ@b?᳅rjŦjbӑ?kY0m8"d(2bf+!"yfњ;׹}⇂;q\WR>'c|<(\rd&nv6ޡI/]V|w̖%!%6I=b5mEmX $]7 ` JZI W4'Ag 3/ `tNc6jwA8Ɇ*sz10qb݄$8!|6g O|xD?# ͬ1{Õ׫̡AX[<|,TbpT; w${HJƞuA6g5WPV~(ViyJ#Z+@ispuj"2S;ٮgClP nM"^b@Xז\6URa#&m)MDWVV̬SUm:H΋GuG& >G]ԧIvUE v1w Ѳ@m$"S2*+QG۰PX|dIr"l,e0Yw?!h/g#}mxT3 3eVOfGc*R&؄#vˣo+&'jh=G ( Ѿ( {|J*?rvb SOCNXS \6X_O,OCR_ )5*2Z #] џ c%5?)7K9Ktk=:X8x Ě-~DrL@rFn^ƾh|(p"UUd&2ΒMf rLZzlRE#?n:971_[7H'84;f'ӡP]jb1gidžZjQءް9*l&qYEkG~''ظ2c|gAe(( DT`-W!('q6J?hh?M ?>]wQ|蠷L# @eSʣ*os^UI` A21dƫ%L(WSQz~Lmh#`N_.,40-5Olr_|Rvl o 7`t hob/QspQ|{緉=DW`Pgh{wqaS'HPsѴC*m89:c`u 577~xAs³#T1` hw#^%J 0 1_@m/K\]D/zkXQ  ͮVg:\Q0xclf 7ճ\Ʋyh'ݱV`SS+ +m)^H6_ڟ)b/1YvΧv՝-/n?<jk^A:=ш:g3Uk\ZoU* Qs(sbKP&[8.=IWo̲  NQ;ykcб$$Fi_ko;UTs=囗Y:^g8X ோ*sZM5mSUykD)/uiB4 зWH5ZBQ-@S'fF&O۝X_CgСIf/>pgJc]u;sn d/q%V=UsFާXw:vE DCc"MlT'(a+l4u|Dͼ'ΟgK.ҬK- ݾ2 C>Ɣ' }"NVß,C_TۣƆu_2lI #0Lq=6YM_j2, d\Wu?\Ɇ2l#Uϧa A >ba o[̂>*$DƸ4pA"޾Y{͔$YeZ"*>lYmeQmPb'm﹁)|) r+yID=:TOLf?m\a!` !1DgcfT2;ŶpI u` s_sٵD3mffŨ7J؟H,oZ~ 0,F=^'6@ n>*.H> stream xywtS.%`\lCro @B^ @6ս˶dȶ,{oؘ8LH^ |ɹ﷾%-u}^g<){{BD"ՎwT6x& ba7FƨnkqaE[˗- ^\B2T{U؞ᮎnkܝa8 zDˆ^H|HGhmci;6ƶv;4v5vOo+3nȸqҽ|pZ*ȓWf"Շo5~O',DG ` LT/6A$NaBI\Cl7#zJi|}jG]X MJ;t||k' pKF5(mw3z:U㬏c̋c`meG&Yjn'l;2e{;'\ROGiäk@ ߧ M~'.eY#!Ҩ3dǛW3)i rI\X[ *2v)BsS Wie"Fɋ@@74?Ւp9C+]ؿ pMfBCz\V},t25#+(ZBH?哸7p enI~GQh%;M'AKbX"!)okbhZգh-d9-Z{?| \?4Tj(ΕIuN8:S^`8|*!CA}3\Aɇr㧒2 Èn.4 a"Jtג5LN廊;Zb]ʧWC0mPY#/-Z_ND 1ފk!cDV8v(#Ӛ$؀ x7`F[mm'ewD'{/:#wSB7? ?B~+-qwE*{s.1F1pbqLD9: =Aa4~ ~¬##^?H"cxСDF,1dt)Tzxʏmp+ 'N&6o"}9ʯy "aGst7s Ռݸh+BAԲ"[J1mf'Qo_;Glp+-;ڍt(,ݷͺlog{-eCZAB1G>X:d3(]6OF5;MDi+O.~QLeyq]:ng#1BajMGYSw߂n8KƠ& ʗ k1bs'ڰRZ1pޕ4CRϥ֚A9 R7P$%q X=5pSGHo K%&hxƵ+K *~T ‚̺,(T=oIYS7ڌXl qcMLA>Z֭_nvu˧SÛxu`4( 1#+3bt4A9Z3<;wրT67Fd D}SdgW70 0|OڟoɮO;Ly}׼~w bv#BZʪf##~ƫ"[n}o?0U=ʐA;vNqLoV7Hao`zвYbA}#?H\ ڑp-O/q7 f=dB Je͡GGIAC _*H *A.,*M '4HjM=l8r/jۇC{~P$hB0m2B^XЉu O<Ց4.L JN ZUA|^e`r+ї =XWY}J2wvuU}dʓFTme.BQioP SӗÂƽǹ櫣>kx27ع[L3㼛-qUXP@5Gxqk4wt>iAk-92$\'i+fR4> Ó$[BKDNcBE>J%/\3Qmo޸dNCNt ʐ}W+YPRUջ L 4,nGW&$(}qހC "$IBe?W#Fł @Z U-#тp쁣Qzt 3M 4D@Ug$Bl#gjTL W:tEWraoj~Ff.2Mr7};2|I|Fr=LӣsJMprf]rkpN80ar]t}]=o 늡2RR 27WP,x-Wg+@wO6/@:_OkӼkc-+1\5d{dQ8?|'b!mNPJzm: buk h=~L _ۨiv@gzm'0,\ |Rҫַ-੗fdd\"nv1YA Y5y_F;UǓ×Cݦӈd "w-EvC6ڷ)@ő{V;K=@Tv541ΨhЂޣ8|N˘0YS8۴Xz@_dZYZ "~m2őQ'!uP}lDzYy9 t7-M) 5XShg|(DQO+DUA9̞ OĜb7ȢMA~h`jQ=b]V8DX2rD2X?{_ıGWqKr_ rDtbl C#q C`quE-fluQ΄9_C7|䟬nAcL eaQ,N9嶾=Bi4]8t C4yyd905}ĀqfłB>X 5 z.4p='s1)fZ ;sέ9iXk PR[1"h+{$>b[A>)\|:u*.921ϩ憓n޿P,KtT1a3րO/#ͷ>u_, .:6Sz:h+;'uO2+tATP)*JE]]eep 늭L.\~ݎzff,*Nߑ3ǎ]Bi;\qJQ_A1\P(qƎignȉlt92 YyUﱛw}pkv^x 4(̫ "o4'A{Y6ar.0ʮ ='A71M"=3;G!1S|cɬ,eЁq%N6A/YƈM0.U=-pɠUPWDHu^Guy:p4LK? =JA6u`y(!oJ|Cz_pDoAt͈jX(7)}z͛6> 9ߍ&M}8-PS?\ԾۿͼPAT"Bpm (5 ./%mћSاq5S[^*hŞ2} Ev-eE߳nM[Yajz3l% 1oU>Dz hI0.:8Qȑ67n? #OH }.aK\+i w⦸B, 6<^lL^?H]]6͵x:4UZhgCTeDE='"],hԒ+B]N? ŵ7pJb!ϰy:=##<wpo<ypok<y䤹f1yJtF,[t^\ )ѡDI;m4$C(Ρ~ NX1`\~1KYK/(fֈ:׳O?|LIPp5j=<;OTZ5;R WllE^OM3X* qs{ JpQ{;wPsgVA,J'Vy ޿C6TCQd|\YQ-+m8{v"GƑQęhP'E? _jⷽ;g'o}}a-rB.谱\CݰKnqE50~G*0^yלd L4xӷqD.{$- 7YR%Bϧb |~+]ݝ$K}%Ow)'t_ ot2&[_V)x.3g}EF>3C sƾ=Asa;iRNּЧ'ݼ岕/ md>}gw?Ƭ%OCJ?}U5 ?"SJ/<}͇qw]z #1YD2qA$ՑOvrD zUazFz32ueDe\濽i-8G 7sb׭2ofõ;?veæb.K(8zgDBn5Z4H㫒#t~ pHD {/OstyUwv[(2RZQє^/?EF|\Κ&xۼ6}h_c׆UmZes3/le>n|x|ɍjGT{H?@`S֕y _kB@uQf>l cUAk>mȪ8rϗU`p QI,D v7c: =A.ϔBo[y#r1]?@gY(e{k0*B͉㱕,'G$]<WDfdefB}M,f{gpPqfc{!ɉ/+f1郈VL0sWN-ҮgDdxQV>v `Ȝxf q'Ă si߃fšbeWܻ"\t4":kgyP{KE*mBRRGUzgAxz`n¹T-ثԑa11%^`VY!u>98:jm֬Cr5`C:(sb!l(Lz>' y])Ҷp`GjrŹQA6 3Ym1(GOMMfAQ [endstream endobj 498 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3312 >> stream xMyTSW3L5*ol_j.X"[Y\A=aM Ye$,A ""njEELvZg\:gN9s! YIs? ;۾cgaYx]GY*- Mͻo ΃}koֵ0*zg1q eBaURPQ0p|՚| <)XJx‡%b;G Njb'p&݄NK#Kf$aC' I,Y^d#6Ytz6O2l-]=iNv]]*B#@Z:8͝/n(K*~zlԔp~O/_1Y`֪N($-[i\PC`SWnoTDMUEu͒3p& FEnk~D(/ZsShB.g|`__3^ǚ ` v ܆u!?_Bk]f4m&[Z`fv1h)*i0Sڪ[E+٥p0X ;U7(3-BO,{z2o^ ; OL+'T0Ӫ䨌ha{ǐ]`x- 3$VٯEG@^4Q9<&V?r*~xf"TMaV 7 Y k?jJ,N.d6p0 Fs.|5.|!aFZG^X(@ML{k΍@;Ҩox,>RV 8YBo0$f@Gt0g[JsJy:2y#{ fHJNM H܍ۼJR&(d0Qpe^*C!%B2GIT=P"FP1OV&dN6vqx64@&k.],UN`"kF=8AmnÿyԵW6:#{)tH#3b?f+MEFW5s*f@aȷptYi)|- {<^d9ZXv XLS L%uS+:56_F( k䬔4^mNK[3i,{_n,rskhYzRV6Q)2p$79gh<ƒ\p2qs:Fs0!ɕʓ$Щ~@ep`yFu=_Ch[T@Db5G@fdQAOO7{pG?c/$%&Ai5v{oË+wKkV:> z(\kZ5F}̇wշ F|='1 &Qr=q-JcUgf.$VTU)V٤*ӗK|oT ӃNu; =eť'7G{w:K) 8@xپODH1>M%:RD- EEߦ1E1Ov,xb٧W7t$RZQZTQP[X'y~^C^C;7O>W"Y7%SƱpf8%jfڥxK 3#!Em wgp&*iڒq 8]I΂%l3|k4+d;<,Iv8 wvG҈`=Qn ]hò[hxm-ּUx[(ˋ}0Ra.ý}cjzf*H"LF].ËuGFF8~w;L@]_/GXSL^^I_SX$&x[rl[*(h#^qy}|%IÚ+]]Y it[H>-,Nug)K4T ?-ʨs,$e2. hO 6C/yz85*`?*1&Y-*mږӭ{6h'^? n>+puH>DCo: 9Y63g֩wS0P_ {a m7)l#|Q1J8uC 7S¶)8.͎֡?D(V  ~:T> stream x]10 E7HT]BRǩ2ԉt(i`K_~reA>Repm% F> stream xcd`ab`dd˷ JM/I,Itw?ewGۂ7 旤g2000303012D|_cew3~Ϲ+tstVUup4w%$%V.h!1mJɽ˺JNgwp=S's5L<̾3\WXBy87Ξ3w2gRendstream endobj 501 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7359 >> stream xzyxSe !*F簃l"ʸɾ#k KJ$Mm4MҤ.iiY V ;::y]I 8տNs>{?<)eVh"YrƎW;f.;D8DC o[vA˞FL\ĉ"4zio*flu'QEt}iB-;P IpH,MOo"Je4RT{rT]Ytr(@Vx7t.8sjGQJ~O 6(ꦊcgtS);$$}Us!O,M̍gBftr+eIED|Mͯ *$i?:@.{i2h;ԺkZvcEWk{P^$J.(EBu:q+Px^<9?V1VA%hUTk]X4~tՏK85.[ٺB LlZh`C弻E,!}(:y&A%Pg xov}Ly;žQ^p·k`1<2@–Hnb^`BO(zyJdrݎ0WP"6 B}eMN"UM--'P6pRfa8~^m=5@5JPO{Eg{۝-t! BCqT~4 lH0?!C$XW?ZS!rZЬȻw&K6 rPsVpG:rmqVEйckxDz0Z[i TWTRe"K_}7 FH"tݱ o!@FQGIA Zؓ)mxuN\P;]ˏ{D+Dމc4$Ž[KrL_= +1'.xMf\:JՔk}xb>2PtjTu~uV0oWO}m/C⼏w=$ % 8z`1ZC._RA Axh2b`q&J ܂ rarQ_wNtcGnp/p> qulj{6zThd:: <"O':n1F܋dt[3M^悂B0I& 1ԜK='}F3-b USQST!BT_~Ƀ/Q׵lJe?{r HSxPEW*Ȧ25-5 }|)<3j3.ZB̃lO+7IӤT WEH]b5a#P6AUL7‡rr4 $@bۼ( 4E5cÛ1zXkmD ;3S'WWvSA r[+ݝoTϮ!>➺TxkJ:?K:P.-ϩW5TGUhv:͌ *Q(f %$&g$k^sў rM.V =iqu[WACؘY\?O u>h&7z?WBn`5Nͷhh3kL"dmmE|~~G~H#j/D4 Uuy^z j ;_c0G){Y9&*ɎT{]ޡ>·l}_Avrg93WeZDtw'蘫ޞͮ<6ucmϼ_^3TLXav?tFWcɾœ+wKM&~!7%xH P֠2FTP- 񡌘NOػmݗ?nxKFPNSWX_Wɭ#V]iKobƲsA$XF\ @`lO3Kn`R\Sƕf`i7u:!锩/`Ue܂h:i'3+>8_A[ u$062`ȤҲ황"6g9-Lݲ{:m˒ $Jֺ+݅#({O ~DDZ4Zyn._GU"@U`E_ؓo*U*C!42r-Ə:\+ =3ho_+ E ANVAyFf[j4Ի]'?m@@S X*vJ@j:P2Yiu밭i }Mٌ=bTU(+E8NЫA"~2魟{а6:r|,41B)u5M-tFϾpY7͇޽oksrQ~tJÍa4y@cQhhMP[{rY9链9R\;Yp V5+޷+4hA%8@Uhֺ2+c0:kMַ|n{6 w6,P&۵ s!eR{fP՞l](>vrl2y>-EzfWC(U(}apիˬV>Eq^87.cgUa`MoFnܫ.OHdna"?XJ\{WsFJJzEQ:BC}o̮U;rrEʛ|T8a,GNG>o` &_[t?#2GM.T,I+l.3݅f !M&F A)h7={3G-F0hk 8WbJUS׍|kp&9M.:f,`ªN>k?=*\PlP5sq̍;nSQ$}˯ħKJw_㰯S4N*BOq0:?e^s{oĽi|R,Uh})z(.ҬR ~'wrًB>x:Ex7&(%+u|<S8nҺh(ZÛIⰯ"Y{_>BFT+gn sURPPJk~똩4=<V̡%Ti^aE.{-W٤/ߵ7@CT^iH6sx%&4^<ϟn)АJρffSVLu1V@~h]^56ʠ˛ Q & `TG~GTಟ"5 <陵eFc.SPmI&gBj\Q˪{AbP @yuT2}q3*[O\|ޗ[V]RD'JQb0z8GY!i&(.|]gQ-<dD˛|0Q2Oi98 )@ZpHlfxG :m[A&ω ө!x\u!CXK*@`z4 ;!ڏs\o`JJ&w?} !蟸ZR rP@Z&Spvk5O妷 n>-JO;#E#. |-sР@hH?+X%],;C\-83W["dʚv]tv̹m fzQh䬹}^f;e0un!PwJ++{OOF^((ȁBkDyxȆX펬k^Ӣ4h jMj'wN,NYC'`qߚub~ r*ZZf@Kͥ6?"fWK8HɞKhU+U@Z-N.P^'mjoCG{!5yF8j_ԍ5LOAo:x\A?5kL`4$F|Q#s[۰/|MGϤogVK{Nto,FK8HQao,5٠4꠲1ŪЫakQaXB+z:XYg G]砙e/艗^?x0fuNAc=mU~f#XGRIIAO:[IAO*B# ;z= \v6> KC5Ͽ hI_uhT-J5b)Zձn;FKMiء.}']:bPB\aU(MM',> stream x]=n@ ? n\$\]*L\<)R|Yͬ8z?[r]o{_p cgk}m~֗G>Nz(߷}Z_pxY}m}b^>p ' N =N Lg fS9\DƙDDSG#HGL*H~r Q9P<& G/' {ϹQM@ g w-R,SaXx)6SR۰FGN/ `>Q(>Q %R#DdDL7Yf P(@izV}3a׻G[q] nW}m_~endstream endobj 503 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4058 >> stream xW{T׺ /CmZj[۪>jZ[AH !`yCxY|{.kPB鵧Uӵ9kݕuofg}߷`@ c$EҎUHŸ= os_Od g̾6G"N]\a򍊤7SiQ;4ѻb$={#e/ _ս׭_҃46؛r,[mƶ`[m؋[A!ۉ|zl6aؓS1| Lybظ`%VBOj|$ uE޾ޟ,1eLj枙ʙ5gg]sR+z?/vmq|a/uGM. o 9Y, #@PƬP O":ƴX@}.q!Lʤ "+&Qf"`4d$4GXBۡted8Oy ύ|+.ҥ$F6JbLf!;wJC~"7񾄾6@@'/nMC̈ǧ>;b]Y%NWW :ޛe|;GE{^u4'C4 !ZY+=Cq"W䜆y8u3dQsX(G:|CИPxHrh$Mdȗ4r*Mv#sED.[i\C!-@_ ik$~1Cylp&%;cl\IpNȌ `u4cXfQe"Kgw)Aˮ69:UoZoPd8FO8|(~ g3@f}]ii 12QNyu^mma]iֱ|z*l4,k`Gpk+˸kˋx)RKy:v\#g%q3.^:v*Qڧ~GdGF3 4zhC|C˧Rvh>Җ=ZOdHr cb;޺G5P'dd6^ Ƶ }K'Krï F:ah3#:e W? ~ x&䔃4y~_=2WCH{IN!u%jbz7JŧDun2Djc-L8i*=>S.o4o^˳Mnky 4{S§kPIWRiܖ~T!S+#;Jhݫɽ7; \:̥ۨ UX¹ I|rѶdb_-4S/?/$|){F ~xڢƃq7˞Q"AۦF8c*} w1 Ԕ 1|fhPIii*C ~Nnh]|[ٿO.P>^w'ģC7 iŚ#WtaY~Pz.$ɮzϕ%N@4XܚP^GíZŏ] rޟjVևpZSP ذ:6Vh i *S+t~s8ئv|qO}V:Ll[͸dZrX+).3:zVCK1l*8ܔWs7":F??uOXWfal p&r9vji`ok%ڣ>.youƚ N3^7J',@_G?`*pEP4ij r׏!_mlU8Ĕl;׃VЖbՀtK6 &Z3쀸|{;ྋ8y <ߧFA|3Od^:"\\!ȍR~C$`aD&WR)͉)))69!^N!_멑9>ɍaBEiA8R4uȯɋWx,kb+(`.(CgYGrRQfdf1z舱uTV<}!x8 뇅|$dp+|fktZ5pf{o\bSd`\=m8Y:wPY4=> E3IWLfϴ[:|)?:5x$Z YfEnR :r.~K27V-l'jGAHl`ђnfڜȽ{#KuK%4TX}hKHIM[̗U`-3_$Q$MnqMR _gntY+(IΪ @"!ie/'eL3P>JxUk$1S%cB>^9anfhHFE f\Erf@yt#O ~>褾E$HŝvS1L6,.;0(=( U#g,`H=X$70, Z4tY>l"gȐ98OQ dʣ r0$glن&k mDžTB 7i`EMqﷆdi 4&39@TFqm1:edX9X6*zXx`3$jsj+0"P[UPjs lDQ#Zmp$Qg2:~ ë՛vYuB~! XJUf4F$?Ͻ0>񽥦Xʂ#T|N>Ư6ګeTyWvҳD Y^J&H!E+NL:#ې4DNYJGCXR[TrB>(АUYhJ7?&rs%<Uİ9t3+k+)i:+dtT$ghqWU? k0 Tg0SP1*k> stream x]?ܟ}a cp 6|!g b#tVji[-ƽơd7[b1,bXcO3Fw9c볟8:^=;na^^1](4ӆJ%gVhjܜ&fZBMW&M.wC.,/9g&k{j 36{:#noǝz/c^"CBPfD*u)Vz8UΛX@߿<pJz5(fͧKHM9wE* VQԀɻo z-e~HbN&r!^ق3|2|&nmZM\VuѼlweS+ Q&$z^ݮL_ U>km.g7E){MrbGI ^Vo-p Ol೤kR5~_aǝyҖݺhNvqMr}SnbaVtSƏ-|YU]C?j[|!s2pRSM<&:KLmJ NPz&y6=!)c)rJ߸&[L}[6ۻTƐþosEYx ~)\oʦ1;3S@nw8z)պ\W9*s2}d],\ş4$dSEeA_7fSOS%K.~FÎ)^f3K=u_k# =ĹkҖ˛P0G~t FL!7ƶ!)3ݞ6Jt6b#.T5N`A0;[02Wq9/~ZCٶ:ܧ Nr3.-l\}a*:+RzJ٣*v-Mi8֓f/ȬHy~5$g\f.,6X|"pwT;.1NmK,Cs6Tm(4Cqv&һ,6_p*w.* cnBPtJx5C ;/(צ+h߬3!?:/dw+3m4B̔҂z>JԌ+'ֳuVha~vgWg9{v.] *T`TPS'Z&pjv{ƨLz>C1l8yc@8p3uLUՆieAaj@g9ޜY;h%~((f%!HCP[E2t)j|³g]nwBu~q G۾RbaAmsX&TmW)?_noe8y?rE?}: mt[*!Ml7!Q=㾿_6_냙IZ1 hzrX#_mCXM4ܵMQ/~<9Wo.ȫ}MާI[@3C,p8ΦlMjgrZpvb*ٞmSÍ+?%_^!(BY7v҃DFޑ۲7EݛS}M5 ΝS#mNG|Ĥ9mN{̉hJtTSNJP}1 ƃ*2rq,+ךTU9|P//v.:=ЕYGIPWu)uz)$zCm?hw35|Y6eS-ORR~$So/MSmL^=*/7EToO㒀MN$oح?2&$PRd/Oz&VOc)rh2˩c~@)թ6`2d픒V2Ǭ`v F1z)0:z]#49Y_*I4dD/.pTxw>ݐ!sR R/eP uU?,skfޗwS gR >0e?Q<֚q?ΉSY`-5Fu؁muwݞ;yL>Ü*O;9D#H21Sccc{"?̦c,W#;wG0bf&n7W* IVr] %W`>6@Ęߥ3l.ΝGj'aD=B$W:Q7 Ȯl&a/{/6 E}I<) V󚖜'? ,Zx%ktQ1츒J$k3"LCf{I 1pxߗbTUUKh#m @P͐mQQ n9`Rn~NlA]_C1nkF*srY˛M9s]TM=ChUǩﶽ)1 p߲a+c)ց¡;ɢ l_jf-)N>;lĪ/':tS-]΂:q:cQ RB3Ln}C(H)VPw NKPt7EI.Avۀ%-26bgl_a]YMZ/6e R̒7eH6 ?F%cgp(G>Alzꘒak'PHRϨa"/mtYq0T0iT2ZLzϐ۶.wYKm%a12{FX*LL܁.$%m` i.CfI՚t,BSjM[G&86=j*Irz~fk``^z؂hi0җX U gqA%Zc3B{Ρ tjYU/ׇI><&f@CͩG-wcPo l4못)wüE]]zc閜z/ !yG_Ӂ7 7^1ڱ^pm1Of_ Oc.%qVB2eY$֋Cm9ޅ!Y.Oú!NUe!x3:iQWDD)!1G<۪^gXjvp; rAw i~g^ EkH5GѤip4LCޫ9g R`>u`.Gn{n!7!T?\˸_nꨞ?M+ryhGQcxn)kR換bca\.}GXag yb6m 8@R50QQGW)|v4!%l42FD6E5;\/i_d%hP&)!LňwJP+Ur-1@6 06Q,N 3:dt,m<\LQ25pZtɱbBM /Bh@~4@'E9z^m27lS "Aخ3"CО]F"xqߛrnj,T0~sޏͭim>WP~ ɿor )8M^L,J)CtH9Q)u?c+LPSl*}|Cjw;u*4"0"5T4<Sdp)|ۍjS5BB>0%cla:a61WP s9k[W˪E8^,Z,醜'2'WmJou#Nϔˣ!ћTJjʕ7N@x yT{eKq9aakM9\Nv{B )}5 ːu::G_Kr>DKgh @0oz'B,KC%;'FRL]!y|?PL5J ED6Udκ..`әLF<Å~Dov?Xb}MDgɕN/G cmYuNpAؔ],Bʔ"K֊#gA@xIpܹaϣyXxgpl ,vd{iEut(g$֎;MrGX{XǙ9KÓ*/H@21*o#5v\Nt*C"}X|z4?Ѡ9 W-\J^aK(b 0ӅO;|1K|#펉\g^X؏b OwW8:rm?Bʆ/|N߼PՙhhOά1~hVEY^`􋐜?gQ.bC`Do wu:?ߑO6]?řkn\Om éSm$|ت*W9X}@9q}JgGD=>|d$w5{Bg@-)B@-2$|>*+b\M'%P˦sF|v2 df}s{ 24+z̀IkrmT_ ʢD@Q-O>I&5\ YqKݏ`pŗќ~e'Y|_F{}M/=鎮g+FЂ|ω;˜ܕFσE,1}qY^JA}:}*Bd&JѿKt,D( lK Rб6V1/gr'|#">xOy1y 豳$TaJ׃,Jț_Gͩɇܽ"#cmYW@ˀ KfqLҺ`Ϟ"p0fP'{xCQ.JϿڑ Ç]'2B2@"tMJWþI׽JK=DZu/xP/FHaz`(3bRXVC$f4XKk)}Ӷgϖd3h!, z2E] 0oV+xrKy|#ҠO}a  q?h-I3\hn, 5Bt\endstream endobj 505 0 obj << /Filter /FlateDecode /Length 5889 >> stream x]rT,g:"EqT*q\-)#i6á23:'qq_cqФ,Awh?@L\qDݯ|9y5fȗIM4Xs5y<:G=DaBʛiUsbݓAW\u|&P6[ޖ7y͛8bbDQ15&FL(S;_'V E%~>:yͨ\7,- X b&H*Jnct⪱i)JA Du-z>}IH'sI5 %SSm@ًYSB,]*&UFcN(4m&&@7sz~{{zz/]әdϝP-7?y~ɯRE(Bzۏᩡ$4Tq0$1T|&ωsk?glCOu&#UaX*9fD lN_ K"곉}6M䳽lbeFvٰNgۂ,Db CylbtMdyla̲}hM[l +2>gS0>{EӺ K!:칃v{*t=0kGgz0:``@TXm'.8B&ډI*#?VM4T$ƀGYk}r,7 xF_go%^-CyBrypLRh]ŭJ=x'kb7xTQ}LXkMoޖwG4 u}}L"} Se ƄҐ5qtWd5ep}@,8xX@e(r|*Mb6]CjZt.E,bh}AĈ-B^*l;]~U-j]@}/e""ouq/b]IUx(vjų370*F<8*SsҪ!٣ЁQkTBZK0KX1M1 k@Hsaz y >JJ,5i(qB0v@qb+QP^q0QLJh$3B`b<ŨR\gk86L7gBWSF?j65d?v?=sXZ+8t2R8خfnu. SϾM:w{tp|^^@lP^E&\"ҹU Xf*Haz j.w$A0-%<# 57& 4v_CE/?D: !E%7?Y-b0aa FcúYM@8c׹'Qj׷WRrU5m88Vm6y[5جSfkh| kݐuӠ"oy QTeiyn_swy|[ہ6`>vDsAd ƀ#&k|ctL(RLD~>BQϺA_hq ؚ<_Us3ѵAUZ%zy2]݅uSaR\Hly@I&%QQ%]-7ȞXT6=+h$ []]Ww5yp\O }?'e'$+ռ}{ȯ2d|VV Tu@ r]M *Wյw-R2w[НHíJݻWuW>&$IG`v"D7S@1R@ %@~aYJ 䞞{;| 3&Sc7eq2>زIgɸNt:mִu1bME|nn*1ga7lɺO V,OIS,$(O`4>+=W{ei8Vܦ & ȳdz6koW}HRrLXpغr˱$|. 릌_:,d^],q],TJ_s^S@Q~]4m^7{Rm1t Pp,zvݔ/" &\=G},B#qVՃ:Ō~ .z,aB9e-2mR8e{[mNkXa TmV[01PH 0%i[ّ!&ZO(u BsLc֑[9;\ 'Ԓ3@h>v2]|bSb(`[KXx<[woBF*% Z"gݩrX"~3ZG?cyX&$J0.?ç9R=m!Z3A10ǽprj֗M:xپB\۞Pب /hw\;qùcvHx->a[riOKWz>aEd; ѳ;?kzyY8leLȊ%۬i7W>([Ls$K=jAIl|-ʼHIDOɫɤwsҘ$eXp6*l0 Yjoubenv/?l[Vk)_*}ެ07L>a\`jyo@*04ږ b|¨چ 0X4o-tAN`~DvEq/zY4]AI?+yڑ7u,*dZ!fl {YK6'3H/}[:X(EUmX ^dmq7ŰO?\Q.~)5gQ-  ӲOgBY=gdҐ8an^ TMﲺ.8̣ť\5ϥ };U ᒱq *m63%R JI]!ݺ 7(^tYi- P*n&\Q5m-{YWYwC8R}'XbyXGLth\qʯV &Q7"s1ݍϦ35!LƏ _n$ .@QO~|k{|\"| Y*Q arahwWQ+Qݚ馒aÒ̳&ostbYkvKl$}[k5I|Ǣ=BC҄1/wlG|n7pQ$2ʁ$y7s2ptj?]ѥakG7z)~?;B2^4k2-6GoĊqTճ>>Q2L9@an@3PR#!Jφ6QcG[ac MB': rlXT3\ݳ=K>"W bNpմ;^xRЗ=1m#丯!|?:m=jt08-B {oh-ZmG :ɠoB`)GbXbHƒIP5v3Pa 9RZ-Vnk?BoUR,hM0OQֱg-bnTc`=`endstream endobj 506 0 obj << /Filter /FlateDecode /Length 7271 >> stream x=ko#_c0!dd7fmqphKmZw378Tf˲g֒fVb^a(0g?ibbSPP&*Ť)'M6gz 78:o1H$/4NLQq0(W3FfTRYdL2.5Vwg=cTrƴ00ʸO8$7_Oxj7FM_aMPԪ?~MǙ;Hϡ]L3pa$rIXtCì&QxK(n3 e̓o-\)"rGt]S]=Δ0qEe_uӣ fQ(߼ٮv]VS/b(QD ΦY0T*91PUhkΤ]Ӕnu? 'nrn lᆠ9R4 FR8I@0zLP˸NlwAS654}=r7r_B{FRÔy%Fw'V)Rϭ HT!E::i%6p>,y`}KxsҖ]zɒu5]|+L#vIY<׫:lubzL [E|boý#t3꽌(~ȼ)a~!P Y@ OuD) bҤڡuӷY*j$ ZF fGikb< dl:H`zd4G6]3\hkb(o(MT~VeC=o:ʥz\]MO}7:GzYmQ0V'YUm7?nIw[8N2_M1&䦜wuzEGo)~DⰆ ~w2~wq"=o=)ڶ("#ݲ%Jܸy<(FvQ֒EFLbi'gП`H85qjUx 4 zk@z)W5TO@Q6Sa\K6|~#FPHWGІj%F@OCb ]HM'ؖZG\O3EJLfQ~:EXQAdU_Wi3yAy $xE3|ŻKm[4Jf-WLP/aWn?RTQށW4UJIMxa٧Џ~͛#fYʬ} oG:&ȅ̯sNpH3DR.CבI *02T7u8-r4QD?~΅,oB4rgqg64;5`#T5.NPNS/ȏjK559u D;Ac5>tZd1:gp5N*Q7#V9BЯهpebƨy4|#DՉ8]x=/yq'3Իb49k*D8-RQ Ɏޞ` ppv0?3Rw_3\}&F{)N6 9=s;zt*SԚx )! =iRG\w=kQ;ހGb' d(r4k9OՃ~5g_t9gx^z=g ~B :+:K-|/f%DhKUOi 5_ȼQAT d稆-5nԭc)9D3 O6~/JD8ByT^iP%Ow9CRT: NtauL'զ+iЬ8dzQ"0YM<3Cɚ} :d_-p x,ݑ5YȚg_SM><I>&|䠋T8?DZT,pG]efFsŶM}*-Ό ,$$`0Up/Ai o^7(daQDHUZշ ؼ+Uy~ ?q^obR !QvX#kfY8sfQ!]XМ;r['(艏rU!Ϥ6z\MI-($,Ǔg-C=,WcB#F.>[u1_VC ,,Wԏ[S?B5*>%#5r2V#2uw_T_mX _#<>O0)9 DyR*͡"OP0O{ԎO #pn(mE-5nM8KJNjI.j=Lv.㲘AJ<޾ yK/c6ylͼR,"ף7Ds/@Em^!78[;j`=2\ "{s\Y9QJ<6[ʲ\lTzLk;sDf'?$w6"1nep%5J燵O+g'_2!Wj{`\ev|\-ح#1}R?W}g_WG%J O'<!d& =!K7ewS^Fq@A}>xCp#TS:%T11QMîdUR{wp0^y& r<C0]!SIEy:`dې)Ugdf$\*ֵЂJ"eX7uI/MCe}%ˢkltƙfw=ZugJuPڮVW`o(<:n62rs-ZS[u=Vhj#58KH9?C}v:rzaG1ᰫ#Jt/0GSi*>bɌE{C h/B!Hy(R#3:d]Q^g}?+wj,j'uѡS opMuBAYm$?Xb)Bbu4ovr5`ZK! E(Dݭ)gۢIŧ4ڸC"=*P%Dɣ{ Gˈxs܈0sO|PjLw Dkuo&Zp\DJl9ފaB~ {X9_ECݭUW6nJ` r9?ַvO90MPh^{rSpRHm1TW,bԁ5.5$}< Gv`-u%pw4  }p zRUŒ"4[ 9jjII_A)Cm@g|!`4! YSbC`,P$C5&"Vk{%ʤsN.juCqyWEz?.ig0(INc@9Ţ\]ʮ+W? \~iF=?yu9,$]zM5,!,WxŨ{b EE1rtYT \CDWE8KU bYdVPPm[ܽJ).S+58A@ vlS6chPl2^c/A TFTUf˴6(<"j؏nݪCVtPYq+>o,-.u&m(F8T:c5206} 5MHuKO!:"!V7x`QSXTmHvKȅm-uV3!'Ɛ`ܸXe5iVƇ! fH*fjm LRzJ'?I[1{37p&M3h}7k] C*iZm̓"h;wE2'uoT = )yכa0ʸscY` EֺnʁMeWT?!X}?dt˦]/4snoR.:0b.:/6 vu1HBXDPA0T.:xzx`^oo((ӻh),$ta5*/`Wi)׬_ 3Lƀ#!YBEKpdEo64%c7 }(FѰX }]O=:!RdBB! ]UrG2m7`S e4Offr,`F aLաԴYhew[¿xӗh5fwwZIվ`o'23Sd[/\$μ'VFo4:fp ݲjCo2%ăeaEΌ4ft/myY(X Et!=8\&MNQ$E1|jB!sV))\,P[)ъJn<,Xi{䐺nUݔˢ-χXo*.>}т>vw 8gM9r(hgnիzӵCkDc|gZ=z=XQᐾD>9`rTa.Py)ޟ1zԯMH>f%2~clBv{np= O ,)u0:V֟ B(\eԫ eFZW9 bbβ#@0%z?Ov?Q'O'֪ZWɉc\6 v|02^oڮTuGB98b(O!C!+5dzqc&ߡ|m쀣A yQZGO*|`eDj}r<%Zq&$7dwzC 8p,@AUo%|"ca! 96_iIٶ?Gs<U+|͠Y7`p~"{5o]ȵ㼽9(Yۇ~ A`֗HfFj MJTi&Os*? k6 =.#-6ϋpԫ034۽H#'>> L7B0SH *LtÇXB8ZLr@\)&^4׻u 1wϻ]%8I զ#$!-,BH>D3ySmçDHavUͫ9)7CS3 *טv>?1߾}Sy:遟{eY)꒨@Y hM' ~ :1K8PL3(~n|zߤ@1O]|J"VIHDw5<ז4ߘd w]1I<ҿفs>h?/CM-WM+5(JFMC9M>HA%Sm2>tJXDmJ_!p,јY'w _YA9Bղ^L۰2MP 0=r 2_f 뫫o2n}3|fsoEΪЉx5:lbCH}.Zo&76efQ_BPxГ2&uznafBJԛem7_!50̦31 Ѐh\@!'H'ui Rԃ 1P-(BS,%i [WYݭΩNendstream endobj 507 0 obj << /Filter /FlateDecode /Length 7258 >> stream x]r7rκ>kk!ûKJeG-tɉww3x-.HuvIJ"/)gnݍƯ_' +!0*O5Nke'ѯGL?ӣG'L,Dz+4LNWG/\LyAPI΄C3dۖ(c,ʳb?m󮪱")VeW6Sƒ6~ y[uɓQl6t=zzz\387q0v'4J4LR-)ۇ@Y#W6aɼX#iN3ͩ~bNW ,ph7x.ts,U\OtqDzUNO}wpQm $jUuLtK3i<֓ dSM^ 慻0UQWәp 4:j}ykɲʦXkG"}ItW$弫,PJm o.ۋf؁d \0116Mp$ޒvMW.V)/&3ut|M>gz7=Aw)9MB`}1 @;E\_ମI<~j 8L83g;y=^3v8[,2ǯgOv,eV&٣INѕ+,y7Sy岜c*?jH..q/-ySTA{AmؘtQڕ+rV7jJ^hrD*ʍHxޔEO̠@wv՛`aTcѽjuY;1cchyW6?Y^ ܪ֞*o%ĭ6T=eɵ:(Ȼ /*(LҞ O0gl!:P]ScD>cf>2A>ISUIp8sa/k8&g;]tNO6?%d*R{s*A?Z"[[.,o6e?\̔spmhIWnNĘt ,$3(rmJLwY$iI@, RrV/ n%W|W6˾"zۉ⦩gQ0T! ^Vu#Et^ZrQuzrvyK uj"wҔ&kA2Oo臣G'y 4@=4ДۉP6hh"F3z*ՆA<ΨԌfGg]hGROt,6QG^6^=*YڏLpe@;,\x$* mc#LSQe]->a;E zsm643HQ\;fG|E>EF+\[bX#Ȼ|Qb,R)LN${-`jDFP2uF"Gx/%<)iX|ur$YK:"oz)5ʌqʩd:Q3t)=؀} @jG.ʡӘL/pطC_/lSv4 ¯ɪ.]YǩR.'?3=xT0;J9NԌ?hM%vYஇheR&KC2%*.'ȑ['Rxdim[LҚ}qvwlIG#JR;a/ w.^Smww8+F0=F`gif̯"8L{w'`ݎ=޵D vr4()>Dg2"wcF\ߟܳ($'mOݽd?0|0wxN6$,Q4=ٝh:TpuϚMq}gM($b4`~.0qo7gd2" 'RF'ByySag}6$LNB>>9:n 28-ΣM!2,ߧOXpC~O ϸO&Iٻ,`$ݧM*o~~O#e5ܸ1(dlDɲX?H7boL7C|Vfꦓ n%U1|^wpϘ ,y@y欍k<ʩ©08ÁP/4` K>!ڮCy0ݘC># ׌N459݃hJ[d؛dQ|{Q6eë$Tz*DNT'|z#6,TjYwU&\:*Ng3^uӉt sY=g7S ňjuwEcPTi9.Q 2m=LT*8/FCv>iF'+ OBimNrYo?5+~#کy|H<Ֆz>XpQ) Zpm{Aʢ } LO(E삻(:3I[v US6 'msKFѸ(E+_&>Tr+;.;p{:j$mmU8lhE.e7әX09%^jR)X*$q6A%H\H|pړ lAWJ_H)K}2*j)IjuW:ltXFZVoEPl5/Le:bkΙ%O~/cU;E*'?^J3b8uvb|0(+B-Nm3M7o/#pn ~3C<~>nDYSP8|.vб$.5zHMB^Ub`Mݞ[` v@Ik׸e}]-h@Đ\$P{\ ޽^V9iaT)9fIriO*&5 pDaQSmȝDV292R6Mn"yaTh1QRSӲym gn,Lz;+.5r5oax~Ud BLPp>%$yQCګ+WʘxS w`&>p`"[ʅȉ1v5uxU! Vۀ5:qnJ0N‘&/RIPPP>j3ɡ ʜrN_ԫG$Á'߭Kc.$ѻqz`iCՍd^A )j y4~۶BDqMYASH~?PnrVݾ+XR""=BdG4R쭎ޛ~cfYM]|YnuJKR4?釋Rj!S~')7elۖ)+97OBΰs7|<'|jpKAm\ϣqXSpmڧΦ5pKHذ/l}b>tY6mHc4gSuV^,Z ᪄88Z H 0xtd.Hpe&DLgm;B~EUgExE ? 7U̘JRJf#BP\$z S<ǒ2+(sv'W~FPEUē) l8('SBYCf_,uN9CtC LfӜB*'y,1Nj^,.usAFhUp<;rʥH-B*9{Iߠ L\:=6*&ViV Yƨ by. QJ㨒:o [Sa#3)hZ ؏ҽKxt \ʠd߿IP8H)ksYoӾ.EY,/gƆT}_{+5F~名7;& ~fzrVP!r񀴔{7/e: 8&~ / `9_}-H|mEٖC*`QMlҕlEء>Ae%ɝy[x8ҥJ8|L0GR9ncƉ#>Cij6M69Q3g`,Bo<()nb۟} #v pdL-R&rv`2cp0&NA]%?ȵt.~$␇ō6/֥\[|][V# G,Zh Qrb2IV9jcQ  CQFLE/mr>-3bϜW.cCǎcc4 )8lh&; 0psuќ efqvPR~v%Wyq>$:G1+MwєMo--ٕ7)=S?[ORmfE3.mwGP$|,SĨχw{Rx1Yˇqsyn X)Gc3#0p63S%`:oWze+b% rM;,5c>85R9iιp܇ܡC]uԤ-޶ T1:D–}Q\eh\]`ԛM8 &#rVɢIKDt]cS Ӹa WWjh6cm[D/p4@_ܜC70R% [qÉxϴT^jY׿2jB{0$йQ rJw[V|Mheb˺~;|V%P5TOGp6̠6Gцn2;T,fN\[e5T?A23&DOrfQ<ٖ]W.2!>T/N1SyspmWvWST>@g#?$'K5.(C0Of(7]vu7\> stream x}{#7翇?0 wo}ؙA`.KʪmI)gJUݸOq""LJpj$$Er&BpA^Yg` f]|ct3ϣzBr裙u\=r=3\DT7uWZKaj~*.fU4:t\HQuomzyw 1{0 VRpa|I5{wS{Spm8̣k0s W r[z]^IכY7kwRB E[]g{g7mWxU;~\\u^3p! L UՍoreղǨrruߦ1bwv-Qb=62<m,2DA:XVu˛wew}ǚ+y }n]G?_$e]W2+tR.j.`6첾jÞJɣr hK8AҤ\Kg V3}]/DԊf.Hi_-?m.mLc;O4*W0l_]a<і$1>3@c84'6 @ +"gLx 9V°]^j#s]%6Eҁ z'GHmM>ɽP$.IȣDc/Ř>p)94IeAPD^6.[Ql>ffP84˛<SBOQ$hץyFõ7Y152/U=|%!]ju,;׻/43+9'ZtQ!FtE$IX{uv6UCNu.d7$XAs㒶 ;+H.c7%<ӆu}}~*\LY˶~Nl%۵tř>(>SmPT՛dVvfY]7u;Cw.z@Q,Тbk!R0a "kI"#ddPVln}=ɛ%K UY< p()O@tܫ8dEzPhl5m0!z)l]ӐѱC? ȝO㶽K[Bw Q"jv-"<S,6P-57," lnϩWO-woO`f׵5l|ET%3,!̒qnT˳v̭dc$P9dU-/lm5wd-k3Jj]ۭrϪ8{i^.?p0&|pܻjX28lSmFiXA88]X]5 ]HcQm}(: eliD_lF^2!ձϸtbNТݶDz s?b<obe[I_D&pnGÅXc>MYPoͮ6CALlF߰#aX ]xכ`xc*EpyTN#qnK˝R;C ˾{&nNMgWIJ+ \>i?h–'J,uעHFijBk# Wf>M1fl%Zpi c3׹M#b ;C5zah Txӛ >}pM&㬚OŏѸ83Fr)`Úy,L>c}ŦzύI.mKpOScQ:5fbymFFdƣfNPJR?O|n*<R `n6q[6:7 h ۵A(OyǮSIB0Y%7Ngӡ+bk!쌠P[#kX UVd>ㄞ:3DrwM۱闇>C a;G8S@vR{!?%2ґ}\9y  va͵lG|e-)b }Haj 9h.!vJ045, [uFKAJ匜AL#+ [͝":!ƨ1hY(m9h[/e\);%]uryQ2%D'A,'QxYb2C< g3"a^ ?m)0QP,sh1!B"/:]J:n5`է=2-Y"yP( l?#6N6 TNB-E7؏}E։S@];gi3UXJIDxvPV=ը+zTփh<L6aN+k!|mU^'Hqg+ө99n%:;4Mr:簆i]s 쌂9n).ewYB~ "pjqx>w[HPzߠ I02e5`AJ #H@}Nptuխ‰W^@` >02:Fɭ#$F*KȞ$3=IVOݤ|$I*!zG$r{`_}ȤZ-@d#첫ɐL?9f[1c,/B}`bhhbfW-y\o Uen0$ݨ׻]CЮ& wa#<6QWHo\od~8 LElG`,'#2xK hC*6C6O X Dz%HgD2۵wd Ym\7۔նꞲ|^IvT\H4ӊ\D';t)MU8JGOJ픚-70uSsi}=`iuE:o2K;' C O_]A"`*HV}]bxL.Mn)cjDJAs qgV ?"SR"]V'*2eΤ?ԟșޖ@_uJHʦZS #0ZLL(~cf l҄r8\,斲^c*ޘP©ɄUa0w]clU5Jo`Mk +U9blvzH*}3_KܓνUȅdD_w zN|f멼Rp@'\"LAh(rH}@%֦EIȠr>c݉xy"`cWuժJm@DzҺwP@XvՄkfs:k,KޓK[́}{.]rb!B]ۻ]Kvu?,sFMO6q.U9\WB 3ejճ϶ q"ήnpquo~<GWB L+yP3?ye| :'䤊!9YU|;F6j *Wmz@@زK W QpdM&Ѣ>/ Gd4e?6u,^bހUT2 1^ t2)Vvjn=]f%;_v/:nY7N<~ ypfV钗KҘ h]a]us)(&ŭV,7>"vf$cQU;}*Sh~.*#āzU!GiN%8v !;,Sƃ0ԊTF)yUuWKDCO#I'jC7Dq@&r EP*U9^.gyq/M$d//j{tY&P&F@=`YWcz(XW_ gj\ /thǥ)bxwsox*Tsmo y]>&pX~ې?c(|h$2%ok$HNq@ieD7@`6*RQв;`5yMoR/<(>,P*8V~8"<!=wӝepsTQQI"ZcFl :}3BUN JڮΘC7T_2+%pNu?co۟򕬳/Y=ۦkc,}=v8p%$G(p=Fh҃! !.VGI_b~Zǝno[aDN27$AI=m R _8)JHx&SreYVpddol-ѡ/{Z!1h26R܄;%Rc)D_9! !ĉFW%F oCφa~P ɨIߒ3O ht[\@P4B@|g`yeE .G9 .;|M(Bzϔ/A/;BrWP&@J5INܚ4E9s4/ +F ,)*5xdZ)ɣ"w*>=#JFnEm8G?/ROrIwKC)ǃvq.^:\r;B_IoE2)fBKm  W,]fC}3ϸe̲os󎂔Liw3 -0Gk7`f:L6#5{' F4S>Xn'_VpV|d?SKK;VYLTOzAztn Ut5dt!%D>Ǘ)do)!qrm"z_HhLOPْkD]6F8{6ћA{̦#J:)jN!ڊu?0bGvKnl,S\%@R"kJ|K-ӈxÁWc4}ܦ@w{lۜ7n?YXuӳ7NˉUTXk㳲AEm&Ex spA]} \zʗ2'a/̟T'$%%Q]69f )4S1'^=7)=$zO/)6g_J˪5#nti*ZFirj|.>,D ]Į0΄5d4[\le!`"2;'H{F#rT^ tC]Riʏ8l2^x8nԏz99'BxwFR.9]]t]O#d!{P_V͵³Sɩcu4ebPqq韯臮R"$BS3d;>bulR(3і3Sn7{# 7>LhEp6eӀZIX˭sӉ]&+.ޠ [1ǕRACfeAӯ {]wzBKÝ3%54NciύuO9rBY6E'Ё:Ⱦv2tO/.<%ЇXVw8-U%]qW[BFOB W>N˜? 1&*1pE{m`{|hbAy:iTJd4ձsL6)S|" Cf?62R`S!'(DzoGCԜ.ӑ| =62W =I"׿?Dtq;=?.aR%o}Xz|U I0|5\JHUƒ pC¡$jr 01raN%7Z^se24<d`ؚ(!ϷXxޔr.F?OȹB(g 9OvFRi?̅22}z`n99Ir C;[jrd=7f*T>qk̊k}b4e#􂔣N!> stream x]m#qqp?B1h89pۉâWiֵZ3;+Tfk%u0ê&,zr~0' 竫911jD(eSLrd}Ũ0?}F~~rQBNҜ:1QNPtw\M5I'ɲRYdRTjy+FaZ R3݄Q~jn~⨜Io5B5 +jrzC~L M͛˗Mݴ?߮FpᝓFgL Zx6p掷K$4CQ9YVoqSMp<0석!\**@:LeL>3\0YľQ-|(sm, GUT?nUpC ^ni_qTY' @M};`XK| WgT25jH[͜P_0*%M=|2z'׋+  n`>:XM8΄u;Gveo2TnQ\YX+/CK2ԭ>ZkEVε?g9!5xm }PdcIKԑ,50W5ݼr>+ujy9R9A _GQyj8݅G15(f7YcbV>q(ir,3jH\9a:x8ӌ2AcDZm|h*Z}yFDu 7ӆ*elyXczk;ņJw2}H8+ַ"}I{jQ{ysS[+W(fNQqi4Ȼc==J*C[gCA`߇SUM)O O0޷6 c;Ԫ f=eLZRwә;UɻZߦGCEx1 rGڻrq iJxR$ 5Xʘ"LY65)HIRޒynu['Y3=FsA~MSvˆIt&,<2nXQk׌/&Z8d\z>wn:I#(c\N5J~XJ]eQ2Xr^T- NHnS8 5wE;IP>R xTsR,LPP^|W{1U"H~+(!:)_vA߯&QM ><8P<bѠMnW y/`X6+*-bQl5^n`8SߗMS-1d)bZH=t1_v]DKp|]6"O6|Oߣ:>8KMYCR*$r +!)LX IW]f%I*hP1f 2*/7-Β^1&MdӔ}m)G'bvuI3$`~ZSOL0NhZA=TبfΉtR=ywE|2Lzs?0ia;/**NuAJ/ Ǣ/޺7զZMFb tנn \ߠG\uV@E0?QFR/i[Iƭ]phʛ)8رy[TolM&ٖ][7@}KRק,C-½M/őf.mٔ }&‘m[AT6OyŎ;C6ɗĽY!B~oyoIi2r0{a}Bkd/,P;͠58M^G9UBU;晄Kw'ih]]o۰򹙡:΢Y6eks:D\zzQñ:c7BC.F\ afZpU9vK w)KvNhs6'$|*BhK9 B! ґ!A{م&6$cЍLW9ݖ?< +Ȗ 7̗M}rW$"&epG_ ٚ\[Pg@19STGtpg}6g@㼐O*CTպXZgX m]%?۵395Mٰ572טHGT:?l]AC)4I0Ix=UvO7C:H 4a}Q$;dǸvXǼj}na`\ O"%ëN*X%M|3il65.. ?sl}>@Ex+!1EՔM(,.NDBd'=syޔMͯ%$@<c~W-15ȓ*'>rl ^%)ggB0*)?xw٭M_wxv[v {JHzX#-> Tbgmmϖ 7Q;7RlmţsQ0C@u'/X&H Yn7|g629V=DUi 2'۶n2eF RB`-e*Uh-r[b25ԖFѿp%(`Qv B@j:q&,PDO qӋ:)dT-C45\`%"HaMO%L`b$9\.E/dHxq*L}0xҟJDWJ~sW4ż-W׏qҚ=( 2E*˩nPu@OJҌSu[O>q ؕ F|r#-ډI`pI8I1b[˗/ٷraZʼ7Oɑo6Bk0 CZ|+0^*$xf\ʹH,EǺuٔHE ^oi@Yiji"oLGt1!jsWl,DRi'0EyƺJQqd%bNrs"&Sg "9p0.0`{5t#Ȝ;"I)A9r.K>y'%#'fsx*<- ] Se@Y: kMac~eI=3C=@(SLHae.RXbrg$Zw*ۑ\q*%YU72AjMR7#H@]|B ;uoCž_~Y5NuұL\rϩYQzp]D-3;J"]>lx& UarI؀}vDAmTˌR{2SN_ܷ!}art``xƛ T!q\nSw{"<3 B&7񥀙fv*Q[ nW̄5b p@_ R݄˜p,.gXObaw|_6K u{H v[HzwrOR|ty&W_|DnfPiDl!YM8ctcavz8 ,u۶ٕGZdl2chxNXnܟ乎)GRLx.6-jGbT>=VD:E3:Mg^%⒦:pC&Mg'8UpHjxb(?Q{X"ߠ3xSnż}Bgn{J x޶eH<Ȱʰ 2ۉZR.=Tುg!HE;KCѿdCSdq~MYF4y'Y3y4 ۔xY!$ᨦ hT=/C(ymSB\4i_.D)cLr:S2ױr9\(g *o8-pS>[.̬ؽ8 ] }A|ȓؖ)p[C)ϖ c܁/)OْsT1F:rПa_tUޕh3<*:*ۻz- LHmzS܆ H #0A)G9Lڻ݆kJBg *.f wxEJz}!!MxsBHP w}InNS&)k9NaM>0sRK- q|ǼF˹K! ;bS %N^\70Fpryį$Mqį D@MKn"S'm&)oHy˂A2{jsGmB'.D Dnf8G TR ?[G# 4[XZ6qqp<»<4R  XQ=F"4X…ɛHb,_bsXp!YskɩkWȏJ5; GaH 'R14v,1`fuE߇7HuAQ9([٦hbt$GJϦ *tWB40nqeWASz܅0|E a'a0џ^\ v 6{4]qppWeE&޽oّT<fvtwѱ#.3nt U WӃ:ׄi16#oFE syNk2t<ėغ0tia/5Q* $Ӱ $-y%p&D᦬=JJEW7MZ>Y^PߤR)# y;1)}y? {IbS-jzᏁ˘wTY6RGFT(p@p\ 9R2k5@"^\F=ZuE 9K 6ozM6@j1yp, V±Kݴy!N#%av|ij}W${EL9oq~iҧT\u6Ih͆|Ѹ펜\̫WgbGz™7?a@T' i ׎˄x~ޱsUeJ߸mtM4uJ5 ryUpׂ֛*̓仓r6'{y}'fY.j'-~sZz2""'LL]@(+ް[r1^2Q+OhW"i{ʐ=|N-yfGQDuiŢ\ ~HOveߗICh%*ԃKL=bz"&>]p؂sDO9m<Md{u@)XMx]nFO.^6{"P}=p:j|}uUNendstream endobj 510 0 obj << /Filter /FlateDecode /Length 7015 >> stream x\{Frϟb`qOi\tl+Cpwisٕk+k9J3cCvWuuuu=~o& Ηo.26l'L00ev䓟&V Ep]<}ܶǂ :aBRl؄)P1y XI-y ŅƄO N(Zm!)/^^Ln/\P7I|9ˋ/(1RbrysEC'FcD3\./P-=˫E9KJ" 4 1SISJ@`y'Xj>ǚbC kFZ(̨ 6Q-G EI(5eJ+b:c`k Z/{֠bVc5(ZY[U/>ŬJOQՏY|{HE9Din*vY:k:FF `X*9\&J5Ofn'Kf(J~1=F,a;ʓS E1X(Sq bx&Ab̈́`BkiPRYLkI0aǬ\әd[Q}KLE?n3wϛ<늺=Zo/.y; -x̟F^vR[Ul[n {[xK ֐2l%~REQw;b;5plNBͺx Ze`b^fm̲hQ Uux-O=kCO&BWyuuVzA+ 0N&Ub:cX BRiQyrzTyuT,WeJV΄YT̳EJ^W30!t,i){U>E@<x+<(|6<]dZ'А_9QX?ɎU4ę4CMgpLG Y# N)hEx:ZMQGj5]1_*( \B_ľ|3 _㇖y7s'𲨜\b`Ϡ:kRe1:^7,mwMOq HS%0aD"0zL(E 1@Cad no|yqc`A-y3;.a7*м^lw a {_Tn1v a.!UFbxlڗ XMzZX0nbZ=!qSO} ?{]M/ɮ{Bghlw],a++G].n/48)Խ? 4HUw[+tcaA'g#G>| i2U)gώ1 IW2oyC,aϩ:ɺ-(lRךVX<9y8'<<#n&̊>8<ĢT#W)4Y9%D:l-8raXkGlT!5PByH,Ч'^ˌAܯGSbO}XdaO䣍IqY8(%0 Y3W RR')Aq:Fq~y*DJW0,|+ė'wM(BlϷ%D&2RO=jXLӧ}N/D<ԁx sx)xigNs~y/%u;Wk#]xgRl̐$Lc8ʤ2!J8L<&˺ \l5?{ i쬅 iw.}sL >1397(!uMc?1GT~>~5M?&1Hr !V0V(L:Hy@hl)(⍫F57%6,n%x:b5vE6Ʊ5 8`ɵD\LvZgD2˄/ V=!TTzJapܠ."aZ%ch !}lxڴbK5m9lmjA0j'՞ Wڢ2kn 2=YQF8ջ޼.CuUQE˺ B ĂtH9iSry IԋT6 ͔`Zra:cXByOd,8rF9&ЩR3r|h]߸4  ^ݚ| yC)|y *1KXC'Y.Od.LzW%bx:,uq?Ab 0{8Hn|aS>izGJ۶vH@ B\3S͛ \z=b̈́%`ACi*3>Qdxu*x]]`ʀIAȱ>Q0Ӿk|00Bs|3V0QGVJ׌o"HLhp3S*sCy5>scy5u@haxe]v]]xc); Хai(-*Rnò UA[-!ʁumG`/ðԄP+&6Q Eqm&P MXvh'a ,ЃL l-N[?&oc~n0KPdPص,]VUz(lz r審JEtR?y1 LX= IYMAnPnaQA qPAAVBL'ϽAy; 0XJ!X]dqp nms~)+4.lXZ K"CJƁA2^~[n$4 h4ۓhaDr  nBZYwS7K,U^-T^xiXQEν_+ni#&wd9X0g 6v " Kͷe <<DF0,~량rrM[0i+U~'ԮoxwM@xɕrC~%Ҟ\wF\/<@pM!Gwu C%fp ܝEwX3G|y/GRpޗ|]!>աL0CMk!vGʘ e9`R(sG_ڎy2 BB@3V*C$-6<8u >dB"3bYׂlyϯ_^)]r?sK;2/,iN?L|- igM#WJQOtAE*^8XS$74iik7k\,DS+q.,W{F) EZpY.gEqI}yKWK1g2v溯n1;|0,̸ۭKh4pm(&>)s9 g2#>)MpKx%S|eP7:&D 9Kv V=fzAU T5J& w\$%~IƱrLc@bqC^[F*PJ5Xi0Ŀ.ϵ*݅J+sf S:++i7Api⛫z卻vj8 ׊)W-;||湨3/׫~sp׉"z̪A˗%c%c ɣ`N f}$Y,9 $id1ƚ-\෥c>+}?i !h[&lG5j>ZxXo!;_'g ?ppB͘Ho+WJb2zO]o_JuR ,HI .3 .rl%=Bin¡P31.;2oWet((:x;sASMeRO&Ic4MFdy}tF-S)0HDv6RXv'(TH*5dž׫>6J=Y r(ԤNcpû׷wO"_1CAQ[?̗.հKgI. j.ˈSಞg{UpWDeVT^745_T.P06IS7ӻw~r5P R;WŲpzPևXŷx 7 =}{ ?2ePt>ٶ 5y.GGSCn%"ma=ڊ9]`:<|`p w2@ |!&8k-FPbp:#\}BXQH և.r,.y3x-IWy1rW6"O2ޫIv2+?ׄW7t{>ޞz 1V[vܭhv:-hB'TFC'ݩ'[ 9=!,fJy ɦ@h%%6:)),R:|{b)B1G]) =;.F4bDrړ!H T1㡒@ǘ2\ƴSOѪTBԫR(sS@YLǐf 7:92)WVO獫pw:7̝}&.ƄU6wg~U8_:tOPw<}X/3λ./c@lcIp)G)DԞvogu endstream endobj 511 0 obj << /Filter /FlateDecode /Length 8399 >> stream x}[s$C?B~ĵpzfݒ8Rf?>X%ޜQǙVvƨ43;c3L-og} k7sfoL+* E=#=bڤ5ceG1az!` 2zEav?xo8;<%e\✠lZ'`['x^ Pv^.v"Pطݐq^Sm'szG8N9{Q'dV FyWÉ@0FuA1'Hjr3=N?ӊ[9Ihy8ڝ1ʵy% O+&-)OL)o@B jԔ'YY*t#rTZ= P.d> ÇS{M2!)}ey]5'&[IjϏjVfK8!LIe:1Izr,)99cTxƤ1+ x]9lgfזq Za-8-xd.2̺8L{GA/u;G6}bfހ1'#s6ͼʎz>a;=a8GVG)_/RD/&8lI5 y!w{P=XuTY!g2PŔm`I}qS,tw9I.Vj~o.NQhF³N_^T~RLpA~8Urʮ]c& zq!%? ǃC&}1ajETzY1"|Z{d9n_\[/GWWgWo"(M>_epΩdqC%{jͮcByDUm3_HmwQ}\ E^;8~S=<[i+>:v Ekvզ9Yus\pN*\/Ȫ\ GN# nSfL9o.5Ü<1iv͡ݑa`[^~(Uѭlκ{Hӗ#,n&ιM_ 8e/{Ea]k}*|/7e;u/̢4T}FU[#28КtAG~.ZnꢫP[peOx t0!afY~s)c"Cj@e@!^s3p~զY/=Y5G!|fu1OPjJpS q|ɺ6x4 #˰@%j)srjbEX<nn4PRf[; %H !72>Q_}TAD||\ղ~85GmXU]\bѬ`@ܦ?dLjeT)#9Y^rau gM%ZUn;"l6"@sR 4"T{=]Y8BXT-IϤBK.ۡ{uWR֐%/H vVf٠%vIi_i~hΒ,)t.w&*5ڧ-o/`GR]нm*;pٺv]vx$pNެe2Ӓzy̒)="$gp#aJPom0ස`P_6{ kLO% $ oUio]^޺{$/sTLj뺽^^w40L^Aы>eя`4,e%ΠHr[}6Qk=%^xKP`O 5b=GfO2E*8.x9Zbq+(4m&:qa%&U]o+q0o=;_̲ kͣp'vxsC{SO䃟 FT &h'CY鱀if# LRSA>O2%'C䐩S# 2LIj %@\I#31oSI*G! גJ#~=%$(|!AR,z &Ar}E%g {Xyb1 G(?{<fjBQ3ATbо;|>AB8XOBncPq.)s֑#9gz^L12d ' jrUTu#̆Ly|057p+C+GB^vӬ*F_HCXPM':&  YAXx 9Dj!AY.Dftuea* PnUL0z j8N-&aI"H;%A=P\>aVp?D" O)8V,V+UƜF&?/rnfV$/zh.ͳ/ysD eL$ƤgzGЍP/_MFS S|cYa?C}+kY\.Wb>$ۛOcjReM]^Oz=f<2{1@x$ S.[St0 $8&Oex]Ӧ28F0>CnqaK]hᨵ"n%k7ty m0&PQC{4WUl`^CnE{5 Lu4B|eIⶌ r] ȺZOud}dX4] AM}6xO拐A7BF8It uw0 V{t?1 qr_58Bz_u|-Rl]{}MvE؆RxaՆ}*"X%k"x*"|x`gcNʮkѰVtMoY3kVkY+ qnmSN7'u\o90͟&I҄<_7ۗ#]t2V 3Й5f(pWvO#]}ɚ*c;_6buzh7!8M" BC ./`'㨘Ι)A Q&T0O+ ϴhdV``s@}N>,5(~%!Юq_ j%mo_7EJdǨ!LO>%r7<`"UwHP[" jnE#f*CԨ҈ wXqZᓦq|Ra푒b\B(OsNQJPakY&#tɐuq]DpT$C)E26Oηmr]t ͘MHX )p85%9^=JzCy#%TV->"-]YW3T\`E=%YEJ8$1Ogn ߩxG~(qh,0w+QbҙTy\>e(]U8#)e|IQYQh;z2/Pٔ KЫi?+Jbt{[acdmC`Xڝ^|äWq[n;?cuNfl:opQY3?? )V-<Ƒpqv6e3& 4P*QdAP@0H|Xbc(|_+\gIլk4;KBfPJ14q|]X`j( _'~PIcEN:|\kO Sc"=!a2ZW߷+upursK*pTC&_첱>Morćm<*dф зx ABuOā l 8۾C<>)4(ePFXb$jUc)~,@@dra-$\DžXD7gwTʮb7'4Mi\ﺲomnSƀ/dvJ5\uV3Z'>̬I 1 e uv}> ^Hweҡv!x֛$CI0J/Vv>[Eɩ1"(;tF2)=&XyˋNR!T`RxCS4I#ao_9VU2j :?rTh~cp&Q@\nӕuN|S(<=˥iAͤ;ݺ(** RuA '/8TW]Ƌᾈ&8ŵLٜp!<$@ xm#w{y_wv)z{cBPC2֘hV:zc##|# )ǣ}K5N G|RL8#<!\/u>\ M[7A6Ct<%Z|( ne]❺S;%T\-TR n2AֆpnIm})EEߣ&ch՜(W+;u_Eq~1Q;"41/Ǧ%sC!:!C8ְršPŤtUazZ]z4JS1j”4'SH191-r FQ==# vhR}{`8( &岡BÐ SewPԅdJ %:k":> stream xm{PSWo +Q QM|Vm}VEiu+Dy1P@[^" D kXDQlԵ;wݝ9=ߏG cuX ژp͂-]eSMˈB`'dXjO {PNÓ(rhzŅOإT#c/͔/%fS[?@yQAT0M|(jgSj)5HIQʎRPGVUn 7`1f| +zx>K+DX%\[3hMLHNb O夹kbd %C2i5hMLЈ~ s6GzQªoȿP?4 "0?gB8ɧd.q,p "vzW1qh { 2_K4&ϰOsp̒5SgO2"VTu^FPb,Z &PJ.&S%b2u]7TTgoq;!SJ½1:Ea 8۠Ia)ST=/&K!Lq͝+G)R=ډ r,t&Ks =6&tڈ+pi1=0|vtvP$5V'*q LL,ee:qZҁLMaUN5foGE!~ r5]rIdg4; 1v}WӚd"c3nI2>NB_ $30^*G:3>INA{.mF">hn͂|[ X9>v&hfD}ZYky)W YzHtgy^I7Zs#Edk1KOJ<ԇ @pyh{fYDDgt5foƃ/2jim ?ʠ }q #0qm" .fw2;7wt 䉉}sa3qΔri7@Ց|o ޖpO 1NP*] t&ʢh볓r ,7!Eeŵ`@w*-Ҧ 6ہľÅq.>Wsqf9G ;ׇN?-q Nk!~~;2n8U1\럐/&~|K?ZctQ/W@G¢hcYG0ߖ] e) 42fOMf`fҢAv+ʆWu`?x5_Iul5]/FzʊE N 4&/W*亰5RO\C:VX5J`z1L t=@&F|͐?V13/n&:3"'V02aY%~YxbcLAq 9i?p>T۽ ӀN2h{kkM2+ e;0Lendstream endobj 513 0 obj << /Filter /FlateDecode /Length 176 >> stream x]O1 y?\uA,钡U! hOٲ8'2e3Λ[ؓF:<թW /*>_)PZk" nQiL/HRX+ zw`?H"8nN =TCWK#{JsQsxj (zCY_endstream endobj 514 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 215 >> stream xcd`ab`ddTM,pI-Lu JM/I, M541k7s7KǤIBIe20003100`Xj!g]#Gn;;&n #GB[.`}qߧ9׆?x{ɏ {'wO\^0IOq>'V}endstream endobj 515 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 225 >> stream xcd`ab`ddM,pI-Lu JM/I,154) <<,=< E448Y燝0WEe۪7o߇[U9H}w8ڿ?`{o߭gPCپf/[2>9.< M_endstream endobj 516 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 157 >> stream xcd`ab`ddTM,pI-Lu JM/I,,IL 154).Yk7s7KǤjB`Fm&FF_|?sO;#8DCb=v*ئg gI^VϺOq>'s3endstream endobj 517 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3954 >> stream xWgXٶCSJn蛀zU ̠bBE%((H$-JtDҠ ʘTPq1Aq{wWUwgk ]F |GjWecY+pDլ9}ԦJmFVзSMTd@},VVj<~1K `)bKh!azMsYهᨾIkvh'wop757Z V`곜UC\B lsh#*m|b $G[GgCͽJ_kX#8i&Op׀|F*w[Vl_" aݡGUWb {/ynϱ.ƔPdb6p|9pf.MO-lU_ HK~`!*Faen*gKg/H@'jUE;^VvT՜R}vFn\x܋_z$%&$E}T90 @" $Ly@9I܌->3Xq 1qSm`{z3NܜjUOGʴ!GF"rH[ƓnH:G' o`h!t{8Æra OqWR [\qp1cB=H\v{sX[VKFUc@˵[H>;CjGbA^L)HuZ]̮ݒ=m*KWdȲQI-eE!e"<sV_&(isGnQϊ#/Q #ع:B؁,P/ļnAy.$p#HS  Mn^-0StXVVVAAuv p7/zLP|(<-,neĺ;9ۃ G2+ҳ.Tpz܊v7@ÊTE 6cϷғgdo<:60V8.MM>dEx%v~N(;6U ȡ!`!!;%9t!ڠ#_o K#bv]EϩuXhIA#kv4=^ \~SIЧS pߧ ڃ֔UJIhAz62;F{$)e$TVDϸLH^VCJs˶y`ao `88y k>W|3gsrrH&U4?*,tpwmCbrv UR7Fio3P:Q/:m5N*\ߋ4?ݺ:rAgp+v4=RxIýs-Z0sOGMçh8Z oRfV'E`Om,x, ?( g,[?_v$[ɟy:ɉI2H'c I*,,2cOaam N ["F8Kc㒢ŚPR0U6&Z* ,nO_Ubن?D(^zS^n HA*d%e?S"HF##C6)lcW݇O T0ts*4U<^*+%'2OTXy v[7M;1Ifv  I#FgHN),p\ooAYQADzwn67I7oHָR%$pPbz_;NI ob+N&[_(۵c#pMo_U^iJ/:x~ V`RlF4| cQwӰEŌ. X mnw Ot 6xqN5-3p'|&g*\`}4Z ␏ʧ T%`l%Sΐ& <4/9"Rٓ >p&dCM]n9Kaoss3-`Uk9_= .w20 7OQ֡EDI |@K]p$E)W:g.ӂ=Z(.).,m̹ W:`ɈL_C{UxT'h}}Owk[z6 `0ލ-Y Z@Y-\57,d2K%gFtP[5D"ՃvZ}ޣmSKcLrzI}S@l}>EɨRHآBNm`dmyug%m{mFP5R ; (2~νo!ԃ)u Z]\U,vG.t'{❚mvؼsa)u mQz%0,a>d{E<jj?3)Vntf^jR@k+LUŏ ذG^Ԕ@ؔ}r{_+k v{^O·ؑҍm'M;$|^i ߞ6{֯6sj9=\GwUv^Ʌ3 ڧYJҾ?)Pȍ;u<6UΉ<lɐQ#:.ky_;6v+;8nuI{M jou`# 1SǍendstream endobj 518 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2502 >> stream xuU{TT> gH H>%fBRAP1T.iT#8C@<-Cb> I%hxijtպkwWw(%ɦX2G#z&qҡ'R-GgLmXLF#"51]p -^M@m6Q|;ZMȋ䌋i&|LAv0 lʬLC]udX"`; @`&K`a}QUs!puGw >$P^H.L+ ܤޝW̐_ww)ٌ6&H+eW攅cFxg%'GK % \Xqc<'u-&^5BӸ#8#*-=:HJ]σ(+y`zzk29|2$4]W'\zR+тAKyLn"IiGr.כ% =Fra:孠o7#W`-yShK#H)T[W +"kb 5eG.JuU 3t/"y'Xl 2#5NƏ'`a- gT-ǺfZ\RJ,֦ A@Zft\/⌼j5^w~dFˡ0fz9d푱.J6Kx; 3D>gayv0:ojFk]kwpoZoỻ0sz/` o%Ʀ`7֙ tW_!VdY0^h_/ssJpw([-ю 0r0fõ1zd&=ю3dSlY'T40&,L1za'H0C` hH9E9TI_g8 vXpt>ie)Uc&62iײǸ f*ΑW 6l9$)8 "$8pD'M[xiTɤ'>"!:31-sۓq6'n*uُMA)B(%^`G =O s{D.0+fKljДX [KTLē6+5=}_N辔8]5th.-GuV4<@W4O+kxю.E}5*R%F56;Eˀ+7 b_$oXijS>uzf0Oj8pq1:XqMX~ KV/*ǚj bc~̀}t伕Ԕ.@ ӷǵly/kW~:٥Yٻnm1jꚻbEl1~P<K.lK?pr`gqj3]<)ʥDT̑?TcMk+#( KxF& ZZ*nw5(1& +ض"ޢ{momoynѲA<nqoory~}'91n5v>ٵk~(g b}{+um^;ieŶeA&Q!KsD~w>w>/> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 520 /ID [<7508fe25d4b994b42124f2815451c5ff><6edda05e2a60e345aebbfa15f6cf58e7>] >> stream xֱ AQ+Eq(]\ (;,< rL `$R?wtpY!k3QxNGmInΆ#mF ^Q鳡mW+RWTV+RWԼ/P7bOLP{>ՀN &0abm,V|v榸9-'ݥ8̎E{ 䶧XkèG_R/ endstream endobj startxref 187053 %%EOF Rcpp/vignettes/pdf/Rcpp-libraries.pdf0000644000176200001440000021211114711515066017314 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 3338 /Filter /FlateDecode /N 57 /First 462 >> stream x[[sܶ~_o.4HM%EXrI>q5Ir~V+gxnMQf H HAZ@ " Ru  PjP@=Zk@(Ap0Fp9!r@HX% y€F  8qT"x H^)KA*ZEҀ\k+@q@n J"N(QIJAʐV9WހB 4)X-yPXt*5N6{Jt?6ms`?-:;(ZO,FY~Na v*չ26/8I{[%:4~xBq֣6'exnC]ބ/z>OCݝp258<;۪iA][@qK`?à]^m{j2jA{S DR0S$L50U-5ĤwgSRnԏOz _i,zz!;M%vJٕ+uW]麲EQFm!"~0,3ʠ=U띇ԃi(;3Ehw`g.g_lOT?|n/Z2,9@S'7!fgw_-&E>:٭!FjXnȧ;/v6AC2٪N'yW5ƁixJF&u Tӡ.7,!aIwŖT/զs^ӸTk$9蜎4ݥ3ID/sO&cf̀*$0vzydw/k>cS;c]w+6`FlPl aܲkv]jRv 쎍بVjؘApݦ`PՐITmYP5cZ!S&#>/ߡ^#M&nrz)HO2L6 }bztSN)F77fmW,{} |ߵ8y}6Ի;]>Ztmڮ7DsmmԖlhc|FԛrtH+0RD hixV:Bg X`%iT7Om8xpӓ]s ZzPԊGMC%iA8N}h%tq=@$%%8>%?"Տׇ"Eƹ>#v~`v޳_#$]M2L0,2grmx5 Yër_ë2U$fB-M f]z킴nn`f[t!tS^Gzn&f&.w|=k ]]V$\L=#1v 3O=X1Tg2,fp$F">F[~ztڊ'9cA8.h+з;>w%{w?/^^ºUґ$/W׀ݜs=V|nn ojХ^uM&ݤ߀n=@;__~hQKAnbzsSsjV0g뙣f/} >i4ccEd[o.^Ͽ ĩ{OO~Y3[ipTcVd=~}^m~gb ČV}4.w~]ZH%e%T$)pSj`_ĀƩ"ؔ}fe$F62i(Jxw],ZB,aQ& lDhbZ5F-( roܿv~tU~L-Wm[m@lkd1{wֵX5ռOc>'Ph Bo" )>z!>Y -a`yCSs<ΰ*˼&0 a79u7iy]|x)Q{)[)Fw/.2E2Q,pE&$I2͑2eeB*R/*R/*R/j1O ~zkϳ iqb^lټތqt`3o}6t5gb>mW?W-=_F!ǥ 񄝳ˈS8B;OX&Yߡ eBEp^ٛ^@iW٭"&]DT1? ].qOZkkFq*B?fmg۸ƶunZrݾ %3X4:/y]cH,'a[6Yam%ZSMJ/ڱ_M%h!bfswdz=m̈^ܶ\|̪W CqмSf~=Ρ|)2s#]=ZɌ1sLH&OU3=/s;M3zzMifZ1. }&%*ΜҠʼi ϜsfH UF8UiQlp^gKEQ Й(,WW8a1szA8/3i'־ӧlh8ZM!0јNa)" 7E{; a(&mCxLll(MfVU0C 24H3`|笮hWT8|o?ܼ)6(( d=.RSr/gz3i/hob^a 6]f0JygAx;ƆaU$`Ҳ?& `>$6o0Sjn> c>?ZrLXyf-;ϔn~fLDNeJ]c| $W $ϤxNYQדi)|* 3577y3iS f\:ȳ継$b nc^0t)43g |x2o2ڹ%8(.y8X6$kB5?zwxB-^$J ջQ1إv7zXR!k\6^rYeo& m=+s+7ևmx(9o=y:aDߣWtbo3Y !]b 캌xkzg]zԳYendstream endobj 59 0 obj << /Subtype /XML /Type /Metadata /Length 1388 >> stream GPL Ghostscript 10.03.1 2024-09-12T11:15:52+02:00 2024-09-12T11:15:52+02:00 LaTeX with hyperref endstream endobj 60 0 obj << /Type /ObjStm /Length 2662 /Filter /FlateDecode /N 57 /First 470 >> stream xZmo7~b>Jr8y(Nsi; k[WE2$9M}J[bm]>3h<ށ<C|tA AĂրX r 6X@"b$D Ec\p #G LX=CZрw*e2vlXd}l8\w['QH̢޽ن ٚm"b[H/Es7q;>d}.uZ4ZuV v;f9նDEv9*)30|gʶLKϚ#p ^)1Ci~ݖq$K/bICZvm-ts#gP5rqQ}Lpm!k&ܱ7YzJn&ϑw[SH"r7H/ws_fyzb;G|_>;z}2-|?n6MfMf{nup9Z#!/x1Zy[A\r"*X뿛.Nʾ!^Nb_lgvGl~e`B#fGmT<^5Zp:lL>߷:[|ƃ>]V˶{9ZT+J>o>oH걮ЗzSA\_R/RLۼ7x/%u?//'ӊ_aVd7V`@,E%`@vAs#$N˓(//5&5:5EM#֗?s^sMDI-ݎZ#]驾^ B-W0U>BNl:]h.YVHhI]a79sYwU->$-tMoS7XJJґʘo Bu9m2,sa4G*PshbMir0-ci5u`[/&c:g"cL{uy[ӿ󉔳)Rw!Wq*8 rT蔋9v9~o!f1)&p֫ũUH1c=hjU2"` l 3|y QDVCBAq@C N!Ӎ`ЃR*EXVGU4Jb1B3?)8*KBTG8>-b!2e37эo 8k)}i{UH Zp+o㣁 bʅ\ p70oM0*tP=144| i-6T0a =nx5ꡯ.W?_*lY?M<܀J`b$Q1 jzVbyki+ EEۧgAyvRPp/[.tZpΒ21>8"RnJ X9bPJO *ǖM9#34H`*L%;f0=li2lJH(ŽhiQzt# SȪu0с#_z`RtXre] ,zAm|g>&im-|m[^Ʀ۶C@n۔76;7V?}󮬗WtnM*޳vZ,D bm>MN3S 6j2i\EgĶLWS+uWRy4_mڨ9LswP{_CJ[Hx>ݵkǰtn+e(k3^Ɲ{Z; h_lAp_N*>(گ~m4 Ѱ#Z =s=Um9jOz9-/rQU_gYƘϯ& Ӑȝ_j!o8endstream endobj 118 0 obj << /Filter /FlateDecode /Length 8180 >> stream x|[ȕ滢&9~mףq$w ",J1c?q9'֔C*N}%\ _.Q:+kJp5~ݾ ^|Fŕc[G m١j"T`uYtM^Bm\+K˟oKa t]1$†^]Y(SG; k\ۻjOKGaY{#<~:i++PhWZf(SWQ֛Wzq6vBg yu1:Pƙ`~Q_aj$kx 2Y/Zqo_ '{zdJR{nOFq(!l'tjV-7:P툈b2̢6m*1Ќ me$xd*QĀ ѳ펹W*wƑp) MbF뀓#$2 *衸s=&O?D/x0r>@~rb%d:+[~Iu HoWN,DAK)5R0hK7&\NRݕ}BDx@=eWݕ׬ QlC髤RC}jmV:=fzpH]KiiU]+T 1~ڥd9k]Wenl!Q^ iN}WL{+Zf/& ܉UάQ!DCݴ:$!l{ꬒ.WJػHFpH`@e)٪bfvEs;h-ẁic.s a]ف/E~zHLb}dT;k˓{ d;220}efAYrg&vt?kSN5g]ٷnG|D72y'h#􁽳mu;M`_ܔ]ǎI.Á&Au#'(^ʼ]X$;uwc\ZPیX\IMvvɌ~XK?Cl%r3UWЂeUϙ*R{! Ňdl 2v1j)ZIsu6Fԑfa!`!R}c{L<ڐsSSM߳gQl9.FiP6)2B4ÓH(Ga8LYhAN;MoR]U\=qįR\7k9.&Ͼ/BȽ@oA}d.D(UNEϧ} VpgOҤK )!AN I@F" w.,FPB9͕wj#D=Ҙ؎Kq,؀P HoPI(Ez;`;̩Ow-,c@7,PAJcd,@fW6}yoW>}P޴Ӕ=+bLa68HE|B=OQ _2&{M !8]TsQ "m_t^1JʴZZ6KN 4&[)fnX޷$И`tiDK~ŵh݄|cchF'DT6ѿ 51QV~ƀZX-s; n@P>7Si$]cC&+sxL^P0 ]n˦c/Alx 8*v\ѤKAO2D0s-?q& |_x`nEK}4.&#WAF|a3aǷCeld9oUQKz3I8QsI"Yl(@1̇}")&WsM'I& 'V]dFaHQP.g+(=US?ɶ(pH2:rN㓔']![k_|;C JE^\Kz#XվL= E.RBDvj&w)0w%B/ 4^0DOV%XQweؔ=U|P@;)C!g\,Tӝw6n*${  qQH)Q_5-eл}yǭ2))t(==GQD\SRȀ桔з F,1x agԶJl *N]{ܧ`Ͻ@ 7/7X xE#f0:6"n6~ycn89-61I r5RݹDw"%Ayl&&R_Cy$,f,ОIĝGbj9#KzJ31P*(P~<]5fr0<ʔϷ%!g^ 3h`><*Oal{=x&YQ7+ڶF7DAmއ 2%иUkPыh߂@F9*I))#czV]DG^%9hՏ}ڄ0iHrg_r'wrPʹݵ(Dp MzԩchVZraV7űgW3ZKS`&ƋA(/y&`%8n#Y$:L\*L$43( MM@$5+*3vSGS%!J+I^PM"r&v ͎IBL P{iC{5 !6L1|W"8S)brah6llbRkϥ:M;7W&!(t|JS}z^#VN4SHw!?]6x|2居x6,oq 5(I\<~FKPЕsDҮ\#:4D#`S\'5$r Zc$K@f1zPD>@ @lv;UC1˄‰ ~Q,!GA8˃]o %fcЅ4_IVC~G!{Vw&PW}L_Wl,2~咉\Vv`P{=vnO7Px $1:|eS~M.$DO:&B;w4IClFK?XT }*qaɢ6P-Cl zEaz1B@(Z TC JczZhAК!S~G;0+c4)a 4b Qm9$7ȌذXB66QrU6ANOC@n3BE`ul,2~º7X GPynZd4]D|ָ$!L\ m1nNF9'#5'{L58b`MF~S +Aq^pS,@Q3 d#U93– DFP6!rŎѹw\HhF[ UDs\6L)!.%*r1gLNȝx9{DLb:Rj1gB:F% 1iE?zyX ! S[:d@Xwi( BnO&HeHD&@5OEAW#ρڪ :}jiw#77MeL=_'t>9?MBqbRnHBPӰe:vZ;}@eQ 1cg3*؂Q_X4AXמo>Th#{H ˛!}=0#Q[(2087na(c󩭒?gFY./Sshr6cry.%žҀ˞`J3p1&=ed(EXT}IRdTe,1D$?1#vz%eኄTc|e>m.fu76:ZLCmݠTUkO2تJHLլl6& Lf ͈:李@@_ߩ7R:>EQ9ջyq1R83AY5-rRf}PeV Qq|ȳ rE~BZUSXR[rbƚԍTZNB֧-j2udE)\?&EEH1TʕsVwYˤ#)4,v"CF?eh,p&)L([f`^PDͧvĜЛ T</46@vc% B1X,LĘ^γWƯ3\RdSFwb5 JrI bHeKZA8֧>DwMPwFHzCkƙ=)]x)*iIHCMR%r$JnқX +aD6Vzv\Saڡ&Sy2uSV_4wbrjC1gģ+FR>%='bS;3m?ZrUZ"EvpNXzNb#D3# )&xP|{ eyr~JT~*҇f L0-mݕl6.m$n URyy xxr"e'LLʖ釢t91.%frF!SS,<~}95O9(͕+8{J 1 nKM 8U*UW=bO{=a#4tyeI :C%et !;D+}K7ψ\ MynJ\wK7VunuaO lƙ 8o#]@g8ݽX4J?]qKjh1ݘ$gxD!q{+#Mx) endstream endobj 119 0 obj << /Filter /FlateDecode /Length 2376 >> stream xZOJa^IEN`oB[v)DhCĩ@}qK!@9;g5@i62 LQ!LAj! qkht Q,\tH $0E5ss;oU0u{sd6,ٸZ$c0Qf<uc8Ca׀ь*4LBn/L);!JA"F9d6#u0%6;:28/Y0̽3F(Ck&<`3C7auy"`-ghЌ@a7l-K{nOPHysaPF\0]<yAoe8ywb:2-S܂p J o¤TƸqh6wq#mbZv58(0 p0ZCeP/mbt=sMgK*kl%%TEf(@jT*ۋ"Mʌ.5E{ui碈| 9J@ ;h4I-;*Aa0 KU,V?kAvJDFZs0M0{Nm[ShyQnYigvTYlZʼn`0Ԫ|dpw77onWdwo8a gQ/rd{Ҝm6g̺8I8ٛކ-JqͤVa:))^df兝76!(6ƳfbcJ@p\{&1}7bSrwZǧ/,7M1L~7?Mzh.a-p:OG]y6j8(XvNEEaB1;*n4n["ͼq|yb$|fI4zߎ޼Gt'+X] Wۨuaۺ7r)y4;*lVڰcKXOwo{!AppIZ@晽XQQ^l捒lm9 .]}Ӫ`87:!:h}EKh60))'Ϻn: Ev35K$QuI[r+.911mяfN ^o9l*+z\sib3[J=jPzQ/I@)sY)LܘtmifKo N 6V+p.5lug ǻ4gy-F˖xmȔ*fLϠ$]ĕY?].bR=/[~x.aN4y0`j&.䎁;ʁj0a Vs>))HJ3练Ye W8ÇgC#?rFȆo>|xY]z 5혛VXw:?L2*nG/ ͚ ҍw=ˣs96-'/E$rn[cGFM_mCr\a.):uyZm;{[t6ԚҪŢNJofG t#;IhY5`Y8۬+ ුoBt[J"M(߷ho FWHV=,ζ ?rF%tl,"R)(!D}]؅ɳF<8m5T-oE&=DܱrC]M9zq:}aEiA@q<=}s{{k~ؙWuo)0iD`5ت*鹜Q$#Tr]bvê"u/E۝h8b\) i5zx'_gbI}fOB\F D(Ӻ# tw\A4L}&&fܝ\rbp?rIQ~?̾W]]'p!Ds,-9m}E6?--lQx/&l> stream xWwTTW)CF6ht".X^{HQ$a2bC5b" bbD31&4`~w{~IZ7kZgκ}~e=<҆yQI 5?$;#Y{ ]]vl{^|>CBߘ6?|A¨Eg&̛ NJRtXE'[.l޵kkYW6=vvwuw/xcM~sBOf nEo+RC~DZohHE3''`) BWjܲ`t;zSm3$Ǫ^?;H`ƿ$E]%)$nFےA0kAѫ`gڎ^bWjd/V_NίM:hR+} l=zŅ_}vu |,8*Eص_- 0d<w!|70*EXOu%g@0~ & yhP+ +Tg08L^̬jZuf$1͇7y#K+ cX ?#3DLr_B}} Ǧ癰z6mЂ6| ̘N]Q@H>LI%d$w[%:E+ByvԬ Eyƥ[>"d犫**vdZڱvSrQFV*ﯰhdA\Q{9!Uaep|[qб?~n#iٚkRƄ%DaV'ӵ+;62)&aF̊+FBfDns#Qά0+_AnT8U]mF6z;LV5iku!C>bC?D dV=paP:j/:u6ew>f{eJh3,d(0[pvF&ٓWҕ|WdΛX+Z#RsMò6wtyu)El=ά<2р :Zor( YSL6g˭ZsJ^P|%vU,fo]Sd$hW¢S68=62:,Ňψ^<7kj]çS1k1C*3+G_r'Ooä=fU<^*jX+-x"c4o]Za.1Ep yWҪl[`F"lU0ZD{?'|&DU\ -mDpJP%}ʓ,Gg[)Ҍ2ڿJJ :U\8m &^a$pFq֡#ie2x^&s>$Nv:įהȐi ~˫? M 0c̺&CtѺV,,6}t9j򌲄X8KgiKl{Lvg ]tlZ.d&̢ZpAM;3d_w&Aԝs3_rmlLQS;r=#0}4"yH,5j;~`O3ۚ|twȀy'i!/h㮢Bf'a/P@;D@E^}bu \{q=SqHf'T7dqH,tMYV jjiVz&2ߎ^/mm?TuFr8wosg睚/^}bE& Yy\գF*8"z^o X 7GF4Q4E)nFJ€7a[K'^w_G9/e*{o"榍y[/^w˞Um]\VuuߎcvB$P#ٞP AD=CУ\MF jPiɲ}g7˟Ik漽`gq2[ 8ks=MyEI4! }2:q]ʏ^:cC>j-$boK(spfaV~kFfL²KZM#}GbS< 2ű fiD399$A?7iioV^Yj|21t C:#|:"۷3Fz#2qM96d9vz¨뫌XH?nꙡ?ؕ.pȞ<Ә> stream xXwXuF0hvc4X"D:"Eai"M"Xb%\17oHs>gy̼}wVad2٠Ϸou^vVڰ`m0qaC)!_lHy,|2>+|MLwo*mN-\[ٱmNwSn>#ufI_p\f$όb,hƒb2kqZfZR'ܗi f]SJOvgou6Q59!:]؝7(0h]4 /q%y\! SDGt5Ln'MCYpD& QY0|a 1d HVBZ{2[A8P:nFښV y렠N+^~4Y{хXIg"PhF?U {^?s1Y|NQ { "$#c4:,hꇅPOd򸒃1-~@wQ+&̬uAa08N`g'L}1' Z /N =)եж,ݎBVHIVAi,!T-<).t '\UF?>mܒ\ mTMt5J7Zz5Wzꡁ5d@eeW=1˥"i:,DeQE0f]zDt!LHSGKRObс+MO١V|;ȨjYpCN6Oq}]VOӡoUMsja] Tdq{/X^A`x/9y1jkj%nYk:o$-1$586$9P:e]yA\Z0+Teal#'B*kȠ;Q0B[+Y9/+98s ;iO?慲}8;݅z'8L'҃OJȯZvV+i,$<?ppd w:rWutDUw|dЅ\mP*Ô+T [ ε(VMq@&?Đn3C@=P94g G%kQntF{ ʪ'H-aKFhR!\=*[$F檮ϝH9;GBɧgW j^(9g%gn]># qT&K%$Zt>,ːաԟas:!zH\D:v`9-&Ψ>*1t:5ktip edu`@vf5:SySJoHT\.,TڜF; kt4O>/?aH|̚ %oM.q.UkQqK,]u/^acȤSAȎUWꛀS= lڷN?fyuUy!d3Gނl(3#:"]=MNɣ9-*&=8ؘYܤVh@Hȋ 3O 8’j{߲mho}hU|N+iwDԪ;Z/t#u8@{VcRu24,+Vj@jPM Z<1O'NgOYS}v9ZR]脨…݉wEg_0X}7߽>VZ؛H>lYg?"Wث5՚VPgGv@$yBR}V/vs {Xp5GTN*Z9b~0 85bSp2NaTF'0VL8$ .v_+ۼ GhB@e >ڥjK30a*+i˚1'[2d.?\YY̯)գ|&esL`,B0T+6d?uH p_H% [|uvbt~cT+Ynm•Rt7-*ڟwaΏ&9Oת02Ef ̃Aۆᴏ~VlQ ^uʊm#A!,qI'$?vs ډpP\pB/< _hx \ϭnPT2|ۺ˚>˔/q<ΈK?p<}o=-(S>u0GŖ ş:YZ:{E-< w^ &8fj[N5e kȐ=B`r!9ݤ@5ts믖{)Czd~kirH]'1;p!efƦN\ub~8%58}UB]R.}Y_⚳00#.@窦o94j6?*@P[2R~x0jmD7/nǽ{wS OcH .^JOں Rsy輑PК-_ y.(PoYa k]3uaiadH*=0}2{qG$<9se'8N-̾%`u79%{B3P:7'O0|$v@xZsċ`?-tܪrUS :|3*R.\Ie4Y'53D: =OKgaj%. Dj^Z%2Hc%҂ӦM0S4![$%LIK7- * r:d6HcSsdo)t{lM5}e%H7upB4kHE ȾAj'ntq)UZ_߮VFbdNŕn%ȥNs,dJLJaJ@">q3 y~:YeE:j UR/E@/J:Jmn3mkv~~V\e ڥ[gKQX EQxR(jeH6dmIOΞS×5FCq_/X Š]ttЬ\sJ3ToPafBw]3Q}*tz#e1C &B&^\n/ZhrJAsJA3#a |?査?FS9&nG3%PAvQR)Y`X@GʊE3MOwLإ0:AO-l+/QylpBFfr/Ү|KBW(KOL(F 2N"P_61ۊMc܇#>lkzK.a:{H!YB$<2:YhG9jumu67/u.(*'সwk6O^rsu6~FŸۮ `9sN&P5~. 8}ff&΢S?p3AB,'n=ߣTqbKoK҂RN&7%Xd]/wNM%NC@?]JAuYjf +~??%=fV~}('Z.C'azӤ_$XW!jkJ a"[><+H`pV Y`P)kf-j0rxg۰zm@B.Sq[wQE^ynEZq+}ZS%5"X+LDd?9"[ae'f8={Y!^>[v*~ݟۧ5M5'c"6 ~)".ߗa=aendstream endobj 122 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4437 >> stream xW{XMi_jvj[ޔBJ("$023z 9*&LBΧt0{vl4L潟>}Uy׺}zw߿[4e֍ig ¢G-_/1ȂAf_~65ד~~{'iƺdRg. L J Y6ka+笚7#:q'La@P(Gj5M Saj5FSéyj>E9Qtj$򦜩B͠FQhʏr)7*rfRc@j,DS) JEYRUZMYQ=)kʆT/JR([eG)%P+TʿESfD*݂n3V ,Sv9>rv& KBc={8b0cdo77Z̷gqɲRGZ_e,RI_ZV={㭷YY߲m۬BaR8Vj#*Xp$Cj҈d#pRкxMmg#ʿy;S^#ܪ}4&PA[="T^ zTY,a82'!p%,;,,۰f'W 6 h0l帡7htRAD}v_p.qOq" sR%F㯣m'RO|B1(6#amJRjyH ~{!l>N8|h(UׯSm^HNtQ3T43pd&zCZ?Two'#<׷Ai|xB9cꪢ92(Lë&q8'}sEJz/6e}[@^ڝu\Q ίq _&4*gR?̡ڙu^C/Mj^^gr['Wa>*0?4w M!7ԣS5/.ƾ{@Q%Pl %!#92Acv$ͬX%0䉆.fMߴHk ӌ*ѹC#$$j4D2Db'֕U7-K͈Gvi{|ϏS#'>v2>ߥ,/,BB̈h` ze+qD{#e3 74?^Zꕭv!L1&UDI|I0ZDP1pci@Q8&{/̑& v*#aK= u 4$;-IJ?WBIħ0ǫ*/+gJh1 U"lt1YhWQ9*;`sNlԢgtL! ُfљ)'6DQ˜ء $!5~qx16fG_ bC Dٕ M[pS%j&]/lcBntnud xPOB[ƊDx>(AOJxF݌@D`uq36{/;}P;ԴЭ]tyf/ƅhJ 5#ȨKb400Y>P‡XMeJ`K6UbHC 797p\#p+=8/߁C@0k  [a'd2"- nAQԿ>Vendstream endobj 123 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 139 >> stream xcd`ab`ddM,pI-Lu JM/I, 154Kw4񂵛cw>W/ 06##Ư 9ߧg8Gߧ^u龜^}UWdb(.aendstream endobj 124 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3143 >> stream xiTWߗ]pT-[m[=DY A7@*(*@.NKK "*hmL:33'):gN>̗yϏ$$I. *Xb{\_\gTX( U/[7.ww#l82j8:!Xs*1GLoᆍ$*‹XMx>—'~(q8Hl"-ħ!b+BvBI;$=rfGuĂ0y{ S.94a{gg/ز,!z 0]3ijԻE>z*2?Co f-[fR0-H^fCkŽ¡  h՘WZQxHȨXf +z 5ݺ;dj[jW"%A=S)\H}@cWȨZ4U&ITQym_=%D9he,y% xD;pX`1;F}Ѧ`=Yɧ[䇞a7!1Gv'y_Ryl۔kwƋ^ _J>*Č&)2=23 pisC>H?\2pumEuW!*Ñ*rlPp@iG?mٷxeL;'MP̬j & p[o7~bE:vwWP@)/.gvx_knp];v%Sa D+Y! {8XVq(s/7nz*i F#V'&S nKYn hD-rY~h0^ MvIA:/nJ-?XMG@nڬp=UbSBDw; Jܙg4F=y[G+r ÊҺdzriJp|<)gxGt.dJx!Rw 1Wp'z*>9d z}yH<ʑM IT tB4Pp}^E!M t@M 'J-2*>+3U voM9:z6&%MiR+O6 j $$ދykwFmho&W) P֗א`2(Q*yn]?4RrMÏ5\ ,>IXitSsCxNBT~-LVM F/NP+*8-;|b!Wx ΃lֿ&&D6,R~bx\_bO! !yYPūé8f9˴;d܉'>1Dz\vo+ʤ3հ-L&hOåW:[sRVUٖ_pY)9Yn. h(1W~vpO筃ccKސR57rxɻ8a@?;D 2Ymf( +1S`%)5JWWQ|zdq;xδ+|O킒/.Cr W>sY dBħ%dŤY5P!?>`15c|/s;`Ck?E^.y!2bi|!@QJmҘhm[|(Orty>426` гG^ӕbu:m.ƲZ{ K5q'qu$v|ND8Xk+%Kֺږ+Zx(VQihf*+PVfǒf#qʧ!ڕ~hnWH H` . ئ:'^dFsw+v4QH_[*91:2W?אy! PzHosWi6Ѻr+7r*pЛ^F񪣹G{<< n0d3~oxe67W+"5i1=gyu:VbTBY,_8ItDȀd귄Wv#_hOXy%zj򫊫r@`E+~3 Yu=^%,=xTLǷ{R^4b(ZA w7vB?G~ eľrqb[1o2>ccLVd/qO)5Ns]b͌JcjKU,ic_]o{?/S +,ۯ;9w/i%k]mme\ RΘ[[ 839_TyU|RסInI*A]^K>d34?~qk }g's^xR< -svr}U{ݰ$5HK73 r`xbGS*UM M +kT f*=~[B0L `IeܢKGh>%37k0ߤMIuןZ.>nZI(I=l)`.@na~NN8s66v@ '쨰iIc멗8|M#C u6[K%-`bÛmܶ{9KǏr+ڴ -H'Cձ'e`<09Ƌ)KYX!|C&:&fqʧTed .X-c,fSkkY&&UV֟O_?,'.~endstream endobj 125 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6047 >> stream xXiXS>18!àZV8TEԊZъa$H¤dFQ*mWǣvmZk]w}$A'}ߵFD"ua fmP4Fbÿ(1;4q ceLe\mYr{ĊȕQToDkvٳ.#obC@ঠ77x:s^=gn.ܒ4I-P(7j#5D=CI=KmQ^sj:F-fRoQ˩YvʝzVP/P+*jzzZCͣRuKzMSc%K9R2jD);j%X8j85LV DH?L4lٰ<1ݒlBk[`駌>|n#GF4z?+/;l.{qe/)vts~Y|եk{['D7&O)gwbP LTI mв4!TAધ@JF T:%7@9"|'Y@54B٣Q,r2n@i;>s1YBoC*cq}&OwN',Ìzq/ηp2:f#5}APC#}'!:ouXɋd=tp:4lH_V`=u&q$GKK9=$ѥf-d__|텛\6]޳Ӻ 7[9]VY!Jî %R4{op,Ɵ%-;^t 7) v`m0ۓѲaƂtY6[ *+EyyRE1bg3ҷpHL+-[4G#bI&=klESj 0u5M~я<:]XH@k͠4Ǭm@b{96? aX uIerbB97wzC[|D*۝Ft2 mM|6Yf4&Y`>7Bq[SM?i}o1a3֜ӰQJ͖@VVTxW=Y kN&Q'XHX2^tkVx,>w}'qY'JӅ'*Ef`(72A<~&.8lwkEQh "iA9g1GwP.$&#$U9J^܂VvղۅH-gDGOx<;aE_NjAV-GimĠz'G~@5DmP~De48jݮ9/xgYA[ uSвޗ%-VkC8FGwnK+[7*'\ [ڬ=# 3x%-q:ceK} YTadqoþ w>8)[e~ꎽ<&!b6[AOR4aoi ȵSܦS9oA*I41H$WET-ce]Ι񠵂A0 ̤Uu[!3XNJܙCXْP;?/e^od 7o>V/[zӏbap jB L'9 ]ѠW?j Ar"@=6Vp^:8$z,.,>dQBlj1x.d|O~T28< w&'t\#;0&ht JC(6QvQ`ewz>Um҉3GpxO&xw|ܰ(b [ [3lU}5mI3؇m~Vhkj(}&L]2/T"wHF;8oN[Nԇ#Zh)<&CY'7[v)ʠ@`f-]$2K# vׄgeڽ D: uƺӲ3))ZIf*ȁ\c5ڒⲬRC^DMJ)0uUYCDr/m|zzzNb!w3-;vtOA2sa/K\'[[8~2~_; U!YlZF.Nz6=n_6#z?pKkt=g6G013Cpe#5Y1Əz82(<.vox11bY3X>$Cj>b?$2}rP6<#țTu*Uxxvp],S PmݡN( (]VvQ!8XҒϞ1%+ *pSwwYvY ˬyB^rNhЂD@DP @gfe13dHm'\#t.q4bV*nq/҇VUYlS>;6$ ݇4>مZyJj!/rPLō8$CٶoL2E?XN Pl{k(!$!Q7\8qݖdL+x˥& Ey9}i([ FӨ9I)TAtAvmV%إp(ȈhP&Bo&g=;"+C?6 Ԍ,wΜXsM0۪] Hdt?(;Ï.ՃL~$ m Q(CCʶ6%2H$[FtV)bbc,h!R]UUzceQ. j/ C׈p$~(+FMZE-sPysm^la<ȃ壅yPiTN΋RY?\S]0WjkrAH29Bʛ+hy>Py#}BX$2|—8oݭnhIO*k8 g+<}9';RRSSAj\o=5xS^KHMMNfuaQ1}qŚ ebxEL\y\EI~Ȗ6WA!WhB=47՜*Bkq L8)!7v ޓaq& j63?GJh 27m9tOXh[{Ԝ_h*vCvN:"&d.:A.(:xb/.mi8K_]B,UrXq+l/ݟ#3Z*n>8 β \*nwHҺJ@4z@[Sr0G_"R^R*ҭ]`{\4 ϧRw&/X LCtu64gy*ZPAc%}Pv:|Ő$( CmǮ0ڀ\6]sm G>m>Bfȡ:'q=.A$iYr%$4x7f0eul|5QE,h.?g}:C.:d>vN aDߧKC EBfT9xdW6Lw?[BgeB2en}> b ]yp99TSrm qIN60JS\aYEN AkdmBYnnVV1(]3.6wY[PK'.7 ?SGN)LV^8Mv+qsV?<Lc^u a/_>ƽW^&<]-L5q2aa ,^~w=;BS$E7}y &'LXk:a~e/cCB< I?( ,X"\\rPKSd q!+ M;_m<1J.=;}]XߑX4S-,׈PvKba_MD\~G]1Ck\:KY &ht-@LQdEn$gd%FIMs9y* 5L[me:)췛uY`*>HX^fh~$;ns]CVV"`(p$endstream endobj 126 0 obj << /Filter /FlateDecode /Length 4300 >> stream xZn8臨P;.?"qҝә D]J5*i/-zsH$7|D;|/_ҿzDʙY7;<8h9uϬJ3;[| rSqMP_K\oF$߫6WcE,So"S.md6eX'_П~y[٫F6na,v˾j6\A7oo }Xp)qmY4 +>|(c]Sti!P.C.7K3ꙟ>8.ڲ.1Nh1FSy_8Egz*ld]~BkOv]z;B@)U9$,U]wd樦{u#pJO&20^˜h l ej\VuyQ2ޑ'ܐM\O“fbW}]}UQnv}^.V;G ٳnDqX&F˘je]gs`EEb²4 UBǀI@.PB 5D7Ĵr]7m_ߵrW>lg2c\(='tb{]aIQg0ʼ QVvޑRϭ=1婗iO?V@@i%j6񆢌hi!=9nW\ժ{lɭLzs=eU$COje~`yL[tfn6Ezٶb͹TJ5:CB7).v}.ZVՖs֔Eh!DK/ڰ@ ;mg6y6OJΌps4V}(əˑ0e5:_X8_p0J'#weh7 &SF9ס]Q!h! "jWXՄҏ窄0yC|tQoBL .z,"'^8K',˪ZiDj!0C%K&2&f Eۜ aRjtk\XʜM-8"~%drTelŧ ܤNr wCXhUQ:JQR0Jyތ h/9}~yP3>~Ye[ p=䧷粘 b9Oq\6mz xn?RXSTلSG:^䗗g9:H$jLzaFRӞ, sE(똚!6~Iq19m!{B6e?C_>_ԡ#a,iZV3E/$Yz"c}tx/Tk1\ch}X%XL$^u83нVəւJhDUxg éRvRuK;;T0Muӝӳ7hߺzL@!z]Ŝ3r}<~ze)b h/D47(emu1tQ;? mʂʑ<>2 A|[(v}YuI6 CI8ؕO-UY_Y.w0HqJ7`%eSwZ9cTJ>]*U:g8ir4RSl,- IcβC# ΍K/؅ujƾ5˱(YD,N" u/o&J;0 ifJjjlOK6XlbԱ)#z8 Y/! Tu=u‘ۆER^8ǁ:嘯e7@>s#\B$2굜¦ɛD+ rRH4٣zSW fG!0+@ɬu<,r_:d22b5&ikLG|UQMYPT-@'Xa [X`V$G 9iING"t]uQ_g#!ɞuOF5:mN%Y-1Y虥LB'[. ΨoV1Ax 8@fȮ@b(ɛPuyQ#̍$y*i*8 m^Ñ_$`8%ǹڒOB{*$Yi5 mp2+%X{m؏ܡ8iL1%I`E:<*ϝ6?.\ L2\ס^i MY6PL/<yMP#X,h/h#k<^y!_5;pAȟ=,FvSa\h$w"XYOXzHP4G~"S*.HWsBW:$"ee^QaVXG'>P<+N~6<ݸI?3Frr!!i:M4_y@Iwr\ 3C9b ,1`s9׃Rendstream endobj 127 0 obj << /Filter /FlateDecode /Length 7190 >> stream x]msqRGL?hx.{T۔SrDiI~ESHpVfRwU+Ih4O7`/].]ֻ?x}%Qì[^pDxha-JxxGJjI']\IwE? <}|;Ҕܤ{{65Oo G1 ɩ1"'슪_0j;{oߵ/+,eN/VQ)+,ۛ eܓ釢Yx2IWnˮñ1&Cmү.^Ycr$R6kd/ה1zwܔUsoqG C1b,$wC_TMx;rD*#ϵRɅ( j5r%C.)y: )u1ݒ Ʌ\\:Au@Qchv{ -8Id6kP8aHGUCb; qhSdbL+ٷU3<@J\{("-GmZ*IQmb8ȡ U:RW7]}JwhQd0h2ѣrES =ڠYׇMg9'}+WaݞX<.wVۛ= $Ϯ\]l`lNl k(>'7m7<؍ -6f> WCՑHƑiVR@b(wPWO\R߂+wsKn>mmf C=?(HS }I`'ܕ]p 7LEiM=*Zn}مqFnai1) O Nr=5c4EWk[M**;G|ߦ {d&;<ʿ+ ʄ h)}F]"$E]ܖO*bT[\p%+|Q(禁wT)ւz&E4tD K %z*2d\}.)BpS`c-jW\[l~G\E&{Y:ZԘTC&%lrPC)&]lݪ9n@ۃl`.]jiSS6: }]NUڦ_'a.@ n1D0RQ.0J`^?߽ͷ2?Zy ir/zhōNvac # C7|gCSmà?cZ(GA}ps"M͋]⾭Bn3wMXثV9#)b6~ش'Q0^Qf콪 B%dɯ3. &P|&7+E5s"~$O$(,.SCbvA E$2u:E. ;9w$N@غ=t}bO1?bVa8,}۠3PNw )a;Mþ˩LP>]+|1>Z`š+T=mh4Y:-A}LEf}15􏓈).xX".%ꊦRN26UWcBnȵx!]u &CGY_eX[ڛG-:q% !4Fd">\fMŨȞlۺnH{b]~3ÿ^hb-8j!!TEW.h@V_؅J*JڢY0w6㉍q'i9Y7\S)x&7|IPo-Fp*jO;<+T*3 3 12K'@EO)+;=ՄU!k3{F+=CNcw+-w f=JYӧoY畯;5+>oM R2-NF+f1EN2jno᜸lN#G9g=ZY:IZ<<X;3yt͓8]YgrxP:g@ @-c+t|Yji7S䚓6bON*HB>u*x&p<0 7p!J *sifqPڀ G3Qt< M`a ,OG;O{\20CUʛr[jA]ᕌx!g+Kެ[ĽBc 3݇9shVeh:7Fi{ۤ$cs>d{K9% Z6! u<B yH9x<@hun)$z<#"z 6"8 f980^ aP#hv*3 UN1jD&. 5ć00)+7\KLAan^ZGe1"*\nF{t>|@eWn.ἽNnǁȹTB8wZ|>OԹx$@ 4vЦy9(O؝48a5JG7%!x ɵ d=W ~DA 5!%xc_/WaD Q/N:kg~ͦ`ȿ?Ts:Xf=u[a{ {tA_}贶TyaI=/=JCYDjtLC >U ]kL -5]TM}׾yD }m绢jf$we; 8/益wWΑw ¦ISwtߗpB 8i+~$7\r7Shye Gzy #QoepSƣ ~% y?2l>x&2_4ƨbb^ui n4!pIbv s|Tu}.eL.WFx"~=Nz#YVMzׅĻw3*ܕ 1`Zهj Oiz/9H3:|LKpw#;XNw&Q%k?9Gւz"1UūGiB+sDxk) XI~'j E ;y;$tqR" c;Qլk G5d%fp,=b_&?A9F]9΃5h_VYd{&FIOMB}- scb*L#Vѹb|k 5|&I*4R9s.y%A2bv81#nς|C )9&c"w_P'GHMq3ӓb|3 B}b|nY/V2̪VV3S^{/Ψ2G# *! *`&VFOYgVW^:cv MJP (Z7'RL=#VϥQݲ^}~h-%YK-sKByϽ=$~6/ʹY׳ًJ(*C=v_m vϛY0hskF\//OB^(>NH5|'v@dOGmSu'~~u4R˓HpP̏_0w3 L{GN+rr/,1O5z2p "ie<0b/f ,R9N'ڗ.QbhVϚ<h4g< 8 \3떈._ =f2JL7L}P=43Y1z<領+8X6 튘5w`[ΨLlP0v!lW_L+ܦuQr5xd3ߑWߗ|yghzSi6_N}lR(Kep]{WL%={S1e,+ˆ]%BXZ!AͰMmǼHu_CZ; 0$:- Uݷx7B '`YPRg%رfϦeY*f{< 4ŧRYAMcslHT'Gl6ک\bqH;:eX?8B2h.}yzw%S_BEt,HȿArh ʄߕфڊ-PkysNƚ6!\k3j-#ܒr|@p3)lT[spǢ;Xۡs8m:Uc]>TX<ԹXAh,L=ZX1+=֘glʢ13BR0ؐ!jL*RuM#,Aq<84a>M&F2L?M]oɯ~7ߧzRWSX,Ƞq vzVXc[ynW:0 SƢhr5P磅Z]>j#8DSj¯vu@d\c묜f3/Z,AOt!hUP<|࠯LD %:b8ű*n{Sk4O35Q*Fr5T7r_t# (N-m$b ˻g# R'cn>qq_t0"(Xh~>'<=b4=kn&n~g1ZACgJrA糆GjvN('I;\ߦOq"^—|s|He?_i1azo8nJt(FllfVMuS'it{ͦJDYI 4QSurm{a 'VԻ'mwXJc pnendstream endobj 128 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3976 >> stream xWiTS1fUD!7WB{m^z:㌠ $A ̛2aJ@Am-=om{Vu~ѵ Y+|><1}p潸yDi rbkwbnmA6%8<"G|l%gtRsv$~LKKs\58遤}(ȶi#s˞C zLG+V5؝ngqdxz;whKV,/5C> ;R[%=Wx}?P.SZU7W#5[>JTs@ 3YÌV)9R}Ek\֌_F,3+F(4EFsӟ[4bˎCSpY=8qRS=eh@euGDe"|Y L8.-R솚xIfWAݯj5 FUrQRY!*%I@_t,3,͵}f_dfpylrVe?D_ ?'wLE86;84U/҂Q/g6^F0La7]# ZJ eTyKu[sun /D.+C  Ng^tCcCw'xjn5=}!^xǃb:(+Oh/B.T) dGنPB:,OqL_g)>zH v g8kEAGƸl,Դ8#pPr=d˼x7㤋@ɬ!(3X-rDSZgފI>&}FӮVMȠ:|(犿]aNC)҈4F~V[q/|`Oc,ɸnb^(gE6cꅬn_jjU*}]P R/s$0AOg`u( Qm-dh\0*ɪ%Zk-mQd9xtydgd[R_ػlN8hh x}@y4UuFw= ۓ}z?gM$7 h_W*R>p$@c֚t Ġ|Lś*ڧjktn,G婮Љ>y ' L׍zhVT4Ўzg=D_S[RWJ)~@-UJ]a噓=.:UM;\7GIk\vȪcjZ/%o;<"[*@,J3KowN'cSg\W{qDL6qRHnG5ewN,\!EC @n}0PUfdDVT EvM 4,yM~η3gj $/|۔)R)ݥE@w]= fcHFꍌͻUahoӃWDo,sU ߦ)/w{k^5e- zbw !=sSq^-B|.C֓[tDthH<>?OqqJ#UK_n-bFmS P3A@[/68mvhƽ5p=aAlxWH:o!k*5qi^d2PR*{us|%oi wY'=6G%X=ǫH'/E'aD䩟^0],K5:= y~gżAE߉ibɺ*掆f>_ZD&x\\cE((;G[v,/ ,<Ɨ&(H$kMZ+֠ )[ > č ֠8GVURUNCzqn qhqc_4TB~~_I g2AAIe+>@킸bv W]r}: zIPbvEب45ZWjTbDZۭ8y[JS *^`FW q^:Qwv t% :;@&jar}hxhdt4)~ۙR3jAKŜH]LbMfCk\MϚ.J95aKH Anendstream endobj 129 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2031 >> stream x]{PSWo\ZzA=׎XjZݺVV+H"D@!hBx?H+[KgWwN!֮cXu휝n;{;9?@D;vT; ĮzKEA%8~L bYB] C Nxa?JJ3s1l^kxEK![DH$;"XB%D@@( 6]D<x*n  H%9DG]DЋF[aR|2]_="؆!5r"$nF^ $7gnʌJ jLY z5=W${T'5(%z-ZYvd\b᠘hLE_Ab$`C=~Wܾx fKf@>b(cCɾ}EB/22bPY,ݝŵkx$48?bQ=[WeD"xarYǽjo^T占w (p+ncE\_zuآ:nR|\B/kt M* m̀H7UOu3fo)Lr]+ǜM HsZ-JU[+osNH}ߜW^!vZ,C).:}RIp Q{fq̗sgs8̀87|555=l˾_/.lÌGBzLM ԫfhe=8Ͻ_J人Kf39@"H,*40 &}dAgwp]//> GK&`ף >F?;?W8' QϿ3m ;̥7j 7X̦sH,iPr֟ЏE#(lÑ#p|]756 teP:""C?Xg?i H"xGp9fO(t,ո4E[v~lA0pP2ZYo)Y|=-dV1S4ri_Zy+(N.-*.2C-oӝ6ozQb5e/rݰBI[`;vK AG}ϐ/J8ÛU#s"HnK=IN*>,|R?}gƣ)Z^n|orHT\vEa^ f@.(/ /8NE+,6^92;g dm!K9;@ӟVfJ`LW5+;t\'O"DXN)YnHZXlGY8~DQEHhi"ӉAKtR>o< qÙ\V9YzV M0R[\h(h2MwW/1M pɲ<m䫔#V#N;QЈ646`_ܣ7xh(AhKendstream endobj 130 0 obj << /Filter /FlateDecode /Length 163 >> stream x]10 E7H$T]BRǩ2ԉt(i`K_~reA>Repm% F> stream xcd`ab`dd˷ JM/I,Itw?ewGۂ7 旤g2000303012D|_cew3~Ϲ+tstVUup4w%$%V.h!1mJɽ˺JNgwp=S's5L<̾3\WXBy87Ξ3w2gRendstream endobj 132 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2946 >> stream xV{Teaf4$KX$>4hbE%* (Ke ξX`|QdQP35/9IMH˜$&ҳ.Ӟ9Ιw~2*2d1\YXf?Kw,*fGXvtT[:cpteT|K]MYW'ścNϱk]Wox^ks=Ku>#.߶؍! _pX?f;l4oXǛ6ҵ 2!.Yrѽec$.ߗ(D~[KfRRM;xM :0V۪m5N {m`/4% 9Li~C}6l#\ 垜̢@w(#* `gH_Yw]g934ū7Y@6? pݏ^b58< O&s/aڎ^5l !ߛ1>ہߡ|18V I??" o-9= :6zLV[:}U|`(i~vvJ r7H&[h?4_!9>$։A b7I1UzpHƝfju B O~DDžE&_ _2 È?*%H PFfU~^1-Z$7a[w'0a{IcYsnĆpsy D{<ē4NjXdsǡ ;*ۋp:N(qSfr0Y6)r*c#L2ȳYu=yB6F(q׬/W`{w /f-\ &,NgCTԛep6*n{ Z&y^QwU 't"q)Υ$&{.^].nMe$BC~T̒Rz fsy|,`͝l7)a4RKߑPbLFpmpt1n`ViCmUlC+p\sPo KDOu-TR(L#)0f,Q0M&N$/*na`iJ 1z/s[utrN#Td!Z~C}Ҕo32acv6Pt՞3uu!G1N*AV&MD>ԅ"w2> stream x-]HSav>NfNICAn.Ya$Vg-P64C{wn=e.30ɰAHaЍwI7 v(B|# q{[[\uI˭Ҟ/Y!YFU-{#˭ԑ$ #pa.%1nYS\+ 1}Vq,Y)X_G!/,K?`xDQ"ê3Ԥh4ЊjÅ[zL=@&a4R_p(?5ao9 ]M.%NXOJ(00O(@$$?L4rh%FVF+x׳zyw1V 5pJ\ \> stream xmY\SgO|H H9X@ө YY*VA$ E Țl"($@.[_uAa>.^>s^sr)9\|7֘SsB/I}SwM :urXK%(]HJܩҘᏻ]C 9? V,{_^|[۾ }*qKb bV?l8E5H)yFjl0pdDowg{潤OYj,w V55˸9Ol!^M],&q1ӲQu;rF{V7n/^8T܁cZkruD9е#,2_o똝gyI:k x-sI#)bvt:S[xɳr!%#鸯]z XqB6ko6ֈ~k;CEghjF@:B(HG<|u6hdԔd'Nb!0?Ԫ!l^lkqb{?9y44Uv&pK?⌱endstream endobj 135 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2906 >> stream x]ViTWg&SJcNW&$h6ƈ " *BMvEvZAd #B# NDCx:31fW==gNz3^Uݺ4elD4_\os@P}oB gTi<MJ~HhۘX8{}:;ܗm"ʉZLmާ\)WCʍZBSK)j#eKm>({SʁrVP[)ZdDє1NݥҍFFAFUF"S.5ƓLӃVSsL]fobg{c(ps+q e4X1OHY n#"F7q #FUÃw:į#?3`[,? Œ;n_XGKvL)<5O8kg?)aZ/W[ƍx;Fm&R[`I& '3=8S%y!w18 59pD`̈́ a}͈&wǺݛC`hk^4u7.lnsSCN>5Xo巫U|`wm`ʹ¿'ili{|7ll >rR"lT86{]_5Lh$mց]d;;GcO< 'EBxpxFtpns5}Sg XljީQҰ}i}Wঝߥ .rDv薦 Kٮ[ ,etJFn+O3#eɂ,` y+j8!W8Qt/))l)mƥ3gJEpPlgxq\Q Ml本9~5E<_/g m-} sXUK y[)͗;:S!'l/p'CLIgrO0a,;3CЎqRyr%Ps~1 pBhX^e5 >` ^zB_{oֻnNGU{· 3'xiZg~36 !țDLiTR_[Q\ZRdm>Ȼ7޶sSV;#d+|T;o ql7O/sNr ۏ@Dn1 X>Җt)<kl݂]R~"<v9Gx< QZ@*[ArHtyI>1ߨan3~v1C2 h[÷8zrŦ^UduF̤krp!ݖX듰٠ܨd K*@I\$TXQ<K%J ︺$/s C%Y3{#UX<+l6'[ϵ[nu ލW^(Ci/Wp~d  >IgCȎ4CzCc8)Zx'Gu|ydaVY Vxx)#1;p/~@$sY̠cSO<8y> stream xuPT]//+վ7kR,$ЖS D4)i lea]~%rAŠP[WFˋ-Cxft:2Mgsn:P2޹|9 i0L|[LxyOuwNs?%Y~l@MWVfwdX6(G=SBtd,zݼ8}<_KG!OAwLIQ#؄T<} K惌)$F3_Uw7̢4]ǖ$dWo/;j{~$F Dޟ~833K[Mi1"zyBysrG8|r:sXݮ&c\WUVmAnwc-(PGendstream endobj 137 0 obj << /Type /XRef /Length 121 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 138 /ID [<4bd17bbc4cd457db5dcdcffb3ca9978d>] >> stream xcb&F~0 $8JR[m( aꇰP+؁–s?"EAD.@IA$X0i"yHf`  endstream endobj startxref 70334 %%EOF Rcpp/vignettes/pdf/Rcpp-modules.pdf0000644000176200001440000035274514711515066017032 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 3916 /Filter /FlateDecode /N 75 /First 627 >> stream x\o۸~vZ߯Ź $Mf=IӤX,Iu$W/lْ9I #Ճ9A(`̂8(L#p‚ƨc80#90 LgS4N0a= Rb=a% JY砱 Кs Y7` >[0q1rp;r 2A(`TS BrS!kd;S.@2`s8)qG5H LPA*`BPRR9̀1 &ࠐ~FhP9%(L"aA)`RIJPoeI(+S 4NS4ThZSR+ o,2R΂6-40MCiLKC+,Q(?`40Cȱ/q\` P8~Qd)z:)w g$I}U?8{ gȪSe\Ɠ~9;+o=21)1M=(/[Rs[[q6y6|>MV(O%0Q@NgQw^fy9tb Vb«Yb_é4Jl_TUQ7T}W[_z7pQ_e}u{n=Q'o2KKq%~{fXCl$,pʃg Qa,uy6:%k J?a(jxt=PO3E[cP1CP}ODfQ9Ly"2uL2[4'ɶiraEVZ<5IiR`%  ]Mxgh5Tk E''w.^Kn/gie1W('5$Mdu˛8Gr9:\`@* ΓqyᏂ AtoOk萚fSX!= ur=bi{[ЎwֺynGG3o~Hs*F(F2tHo|r}<93KKO^䀼%G䘼# 9%%ȏ$&6&cIht7\%yrrrMnOIB %)Iԓd'S2ECKS'٘L' ˧HHIʛ{R~ȌE;s %8Qo&5A *fK[Z܁݃ӷ/p2J}9nsp]l0 7?Jq71 t a0bmJ-`(A I Ap RJy0FcZ=+ .8.k1ү%Hn@plY pJ|o7J1P$ H`S QV:nTCuG6hk#rH~.\&_.&Yڂ'D&=22Ku:3_`Oβ҇j᮪VmRú(&tbzŌJf\1 ce050F.w1ma=OoːԭZ=80ڬqB˴Upƪ No1 y(+:[hCi -@vjwGC $C9 }"s@ZrhA_gAi vҌ/' _NzgCb'O٪qJU ZC1Ha?mwJSr1\ M~<mm PXkt5u7ր01qXzinDZ/ ul=Tz9"Yc˙[c˥J`}zWht%EJb>㸼 |x;. kbEפj7E}~g8ۓB=a*׆^fulӴU3mtݴ@7-o՜. TH<6J 1(qSvmE+0KpB>dnnA5:+ `""Q[[X>~Rڕ[V UQݕ. >tzRu K.;Ңpd&mUaQ8[תiL\ r\JV$wk\aUc+V%l\xxVwEݽ_>ƕ;8-`N5ՕPo5NPܘ 2גGd/oDyΈfh'_T' -'4Lcw骜Qez$^_jI"2i_F۽GYLuTD7(PCs\uk#^7j#V3m-Ye1 1o>/tLy!}<UpWxŗ_|YVl2sGBFߍ&5y7K0E1(ULYN),eߔ XITI&f.*\֍ a6J9TU<)|b ".vwjJFEwB0`+[~/{xL&cPG갟zuuIOv6 Y֙&6%LjC[遺fDzg<׺WFJ~p_z:vSa-k[y_g]V--cc1[.-%+k,߃l]5Uzk:{ )D[ w`(|&nS g'gMYN"d_"?̗Dyc۫h؄ j{ՠhد"m9" lGIeNnۊ'B6N(Lqdd{rrA3uz;zw}QuUI_1CQ{(ɤCg&Rc,؈ ܜﱫ7B;Y{Yo[vY[;- w޾[5c/'יo; ֤o9;Kg:WUؿglsy[g^֛vY|Y8i6:5փ&>* V'*f]Y*o>ZEN ӉP,xD+ )("n3&2T2"rf {ExڒA}emͥMyq[[%;xTf?n}yeэ1E)<,] ϠgЭDi<DY7DxSYsY-U\?p4Ҹ[ʀQ)k0*qf21!E4Jݞܪp&l膳ɡ"~C?O1A[jWb0!-[ WAr, I͝x\aendstream endobj 77 0 obj << /Subtype /XML /Type /Metadata /Length 1388 >> stream GPL Ghostscript 10.03.1 2024-09-12T11:15:59+02:00 2024-09-12T11:15:59+02:00 LaTeX with hyperref endstream endobj 78 0 obj << /Type /ObjStm /Length 3154 /Filter /FlateDecode /N 75 /First 668 >> stream x[[o7~8[&ysx)A$iM<(VH$'šf4Q8I!p߹_ D "X Z x!h 2t!@oBH3eg Y!0$6DaH ɃcrRLJY2"@eba`22dM6&Dczr>6<{ 86n XVﶼ=~97Y9|ncʜZ]ܖ"ߥT (Šꪥ1UҘ %մ*婖ٸuWh~{+*LY *и|^*K^wY7A%[oycxC?g"M]:g Y;c|(sKgMK_wƁuĎʑ3`WGGJ=6Eذ:_̯V%~,>͡Df-u$ҕx͆|nR#C;ub n+",ȢcnYm$kbiQR9𡘮c,melFضERݠ ١Nv?飓d#*T4V UO;@t1)H̀c@3h:ږ@̭byDILD_۪qɰJ6 R(.$@*ю@yQ 4AT-GpX"h8pw=~u6$J {ddMC҈NT[3RҎ, bo|&n$/%w4VWmd,FqηNKCX`w"ǵEcJ|1D9tmx ioE:+Af,nˍޢbooȎol)sM={2;.].r/UzwHt26oQb - ߤV'-RAlb۹F~%2dd-65>nJBܫd~C+DѰkZ{yPhw5٪ؚg/!?A̟5xdSJ1ŞVZs jNʦahWl!Y%0Ɖ=K*~LvНGô"k(wҔmxC"볠r6HLT =Nuu+uD bc1%+JONH̘$kt;*1@Y*w=i!mW?ZU5'gO^=^+4' d:t~:_M9kxp9ZO!?Vrz^,m2'IB~6/6~N֗+y/A"'dwV<2legoa3&Z y[1aj9oգjzqZÿOLXOtS=o\/^鵾oN ݰb4>zstV9Fj Gt~1~6]n_HGT UrR-3D 栠VJQ@?}V{Bw}T@Dz/:t:A|:/֟&bC*8O~_0"lXeN% VYbWXZlI2~1lO}3Pv:HI>D"CJ6slHv| h>HfbF%ٙr"Wζ"+>6LQ@ި* (,}m;%ń-_ 1vJ2`'WƆL>bЊ{Y% Ĩ%p(o+K$ek1Z}p#h"߼MYe\ oKп=NԿ.ZZ\-VZ,/h[wX@JN)OS؊A̛&| V>R8:p#)ڜaofL{،#NT3`{=mls{>؁]yGKpmQ?>y7׫ӓZ #KSrשKS<4iG=!mZ<6Ùk|Qev׌7:寓3lجU*v p[~'>/z/f"ZN}5^e[{E1Ʀ(Nq(#e<2VŇ[V!ncC7U1-~~ƤzYT<e-v߿WojP[~9]OL]Mor{_|?èmJ\C ;:;yqgץ:(BBAe"w.BƧ9}wO=[1l<6DA~""0j2?}jZ3ߡ447].ROz+Us~Ыhuח˪m8SF0p8tTg7>[~䃚,|(j2jjKi ?0+Ze^莱cp*E/%\܅q*>܍.hIG:O?Yz4[鳓z.ogA I0N#3V1F*sQ'R#"ElݗV%XVf?"vX}eendstream endobj 154 0 obj << /Filter /FlateDecode /Length 7411 >> stream x]rϧh[ >#b?'JQU=o):M7_Hc)TKb9\eU)R߀Wz;[I=g>pq )8 3#&4yIo$|7bfAn +_`i?Zy{925Ws(뾯WiLS+J7TIN^.@SÜ-އYQ=y]Wf_jۦ;F19ыHTNpn5ދق[*KBk eS BHnfR қ߽yi )D*2zz.5N<_Jag7m2ap)wѽyEuFkEΩ1όUME| MkI s .WܮwͪLJ2$n?q*)% 535v.cW2.Kn5u $Mw]=6 !T^o/!rEJv#+*wG֌eZAΒ܎BݵswLu[u;z$%I6e ⫑|m;+ a5РߙL~d̛% GqElɻx7o7GzUͧD9RW 0ҒWuPNɧ:r)9M9%(Oų|q=6"gZy dis$; ڑ-~NOe=eMfݬv .5~:Apu2#6% JǨP9k\iL -ښ"oj_F'St;ywdtG9烱EۺWj٬C ENN/r晠L]w)flW-?VDK $iHd՗f̝rIp&yXV S^_"1eO=` YA{ v,B肝T0(`(|rT)~$`rczB QVpBcdW$j_m\qV'Ι`ZKŠ1>0T97BPKk[o x)) 8]6_7 ^ianS9ѳ$&,I}y=8AH9fb!9(ypK-CwFqTTqVܤ9D)fms Pwj 5A8Elc:j);pi*!>!p-7ݪYê6dNO7}^U˘x0|K.n6 88o3G,'Gs%?fVMSZI2Vj߁r~M_nSaT9?d $n1Vr>:du~QT~h5XL!N Z" 2s1F Rſ{AMt}D=~E'NEw|2j]XZQ !aԪy./~Er>,cD丒?5΁1K,u#<iF1>ꉑ\>!Ș3먥-<-`d1daܡ ca\p(:3ø=ЌZsHDSm O1RlBpe/BDww/R5{w6@ G'85."@ַ2NP>}7fE%eR"Lخ6R #͔dԄ$#P *4,ALl_WGAV>^4FM;p]h' 6Ǹ$-)51m]\!,F!Һ?ot>C1 rUq<<.⦓nnɸago(fjؼLꌓZ)tot!l0A׿ܼa<3a?>ץpInP){u]4ݪ^(J @A*PW멕f&^@V e]qCꛋU,uxfk!j9XX6WvmX ;Ta<FZ =*J&`_j] FPD R[b@K4la1nb*e֕'s2O8Syd̸VT%4@e6Q[i>LB9rKrf,O`R{u l5PRI ?Igc8IR<[B.o\sJA K!=lո] po%BFvtV nH;4NM=\\ p:4!]R]8qs4 ~mВd.%.m[v8PW3 ;I4<ӭ*@vs< <;^f q|>(3YGlz`|V6;``[zk ̅ˮ&sdYV ;=gԱqW-= Mq2Sb%d n;1v>xWojvaT ;p8zDmpa{N߷ \ئ>239AJ >sh,n@<ύ8KozPr&߂^Qa9fBi "9p!J8 n j{fH~:PL()Nͤzlԭ2Ϯq^lv (Ȝ:1ғ4>ȏF3췏!=_.C+O+-`Ec5Skm9_&`hr [B[>EXGZIsj&lw aӪP5YBi.ƛX4,X6^ߴ^3 ?iUfMT 3Ldq+uxXvwE.?Th)`hc['1P rӵquP"-x!mӾiU7\/.s@)ԡo{B <ݫ;mG"bcJvNJTP bjz C]|yh;ʟ=/Dpn"4 [uK OSclNgL=%_<7E=V˰>LGaqxcKNcQgd1^wxUŠ:m /$^=] BJ*\ Pk2 ܕ z2& B ?GVޓp(W|:qqA7/K,S&K@]|5< ODLbjV 9q¯oѪn,$~9_,s,('?fpkUTimD21Qa]1ԘƋ]pTKjw érbm94gbLh{[*ribmlHȞ_d$"Qabd^Vpr1UΨ䏨tc.ecSbdTȅ$|n8S~i8őxx h6](Nb9UDޒKd#PSe6 A67DP$'3P p[sRk[ZR/,L?P?,` wT]8/TG(2+K't\jsva  jl0d]P, *gBT%s[qį:; pJlO f {jydynup(G(d{%{BWf$1);v/oФW VW% ͠|5z,E7HSLﶷP9f^FfXQ5qWl n)4@0L#{@CTm՜s,x!>loao6BrF kH|oؤFۛzl.lV{k%)pR?>e 9i̖C&iq̃8T{S4YHNV#r=0T9XzU_WX}=5iRP?oϾ ]S/Pi8Cᘄ"qp?^2qP١x~yh)Ŀs.,XAx3w7$fcu <^i8L{zhjy 䜲Tܡ4 گ.æ0n^.TBG싃l:R}\&?+oaFYrj,붏-|.ظg8[MPx1/ͯ_C:*{ MeˋbyTPS 99 )ߖSeRLPKU1"ۊ Y 1EpTByŃxmh 2ӓ:v[:I+h<tWx7KLdNprrKu$&^:SD…kB5n{ULP+X1D|:VtЏܶftY [*%l+f6(6o׾lc(6#+R MpT*rF-Ct`fսC JZ-q}aGUh hpmj8p|_|: ZT~ıpr0t`l9֫pUm,,dW$*:w&A=xɐmu8oJq(ͨ KC{b…49 `ܙT) T@g2 & zIͅ 6ڷ!g: s l~GZݕ?zB٧?wf;*R };xBJlh"J \67Q*nφq| |zDZQCа"k@$uur=\)p f}2ŎE=v#9 3Gks :cS4Wc&ϛ|8Ċ^9!;v;pJ90QQ?GLZʧNp3 h,!.): :{fB~õ_σr7ϘC3MC̗s:/ # <*En64/'2QLЦbRLUAH $y\r +^牗F4]=i%@?H8Ou519uRN+=Cb ix'/ `دY^B䲭n= 7~!0ԌRAA5ŀӚT91pqlٙ2Z/:pï/2#tXzB)Lj '4W/IT/obUsx3Ht>Ծ7,_;˸kK_S8h)8}c__ȸkOhp ï̛I~bbCǘ4~]7fN9{C<éRą&u|9 Ih@TjA A2bCzsuc"UlĊڀooɪ~2- -S; ^Xb|CZߌ/SYq5R棅`x qLf{7+А{b v.JzF?-cpNe=#)#'eU j)F )sxw aSDnB1pa׶:|vPSE J~"J![*㩑&㍄7oPTU =^chp%Q9L֯zD!h"<xjZ7n߆7O_z'ލ PiMZm|8Tv1_`0×f@dm_視 B>nqc _eRcgɟ5;yBaxSC7EEհyzsxzm86?`qvl dzJHendstream endobj 155 0 obj << /Filter /FlateDecode /Length 6308 >> stream x=ksƑ_S&4;8_^o.ڽڃHHM4߸y3 `K{fzݣggB d(11fF9HuS602Klf׏/]C͘4  Mu 82FR`fϏgjf3x cff jQ3b=,ֳ?L##%:sBfB#ͨ)Wٶ-*_&_zog_fH aA"4f34FLb P#>  a aǦ S$9uss?cgȻ˜g]W4Uw6uYuEnoJ<_nE7b%sZ|u. Bg?|@۷Uqab FM6qc dKFbz;) S"4Ar>Th4OEvߝh*$7akt[)$%53) 2D=E]+Fq[6ۮv{74dO6Yw)x(O{0c'rU($<.i85sbL#-t.okDUJɖԫc+:p4AD$?Ejr>e6tLj\#lTua ;G(NS2|fBOYD !y3?+*Ufjܱ{[CʫՑ# )& jEXO79§stD dXqq|> 0h&%ZRČD!!xmЂ&8b96]܀`R<XQdI>94?L氒Hch #)4sd#¦ƨf;}@9E|gWX gb5ݶ"oO 4DGߊZ~trcSՠbv/ `]8djyaGA{Ko'XVꟊlp$mws>`D 9sn K.lmmXe6)(_ͽ*kWu ~C}l9bawp^-J|AÐ"FOwwA׽Dd!ήz R[ {H}R HDe*b2*ኺ^g|S~]x[2-oep3&*ܖe$#"eXT`KF[wz* ̳ {d&C ALvxҽ&o6M񮬷lfzYxey{+ATxf[^W5κ3˛241w1~γmU^}S/_Y 7eTXKh5-j9\v7E5\-AxTPk(G+a+ c*@ %F!IcJxB0(wջ-O `bT_BX4F@#1'l>x+{F0Vd6Ov:]gƤ9"88 ނ5)IΝ*j,B> TL2H L<łbKj{]F&Y|kDg!t uĮ륆ԈSWt]t./DŽ "7}@"X^uDIj5DeYqU=dFc.cDкKxt2ke[lX򉄘 ۷cdt b dZ{_u+C^}ŎJ[d :5x"C uglj ͎|=0=혍c'<莘  ASHAuD+B;~PN.I\KD\Hy }+8bo`Ob3EZf+4W"h Y2NH豹Øx;"׻CuA3e,H .>aa'(|Pn"3i a q,*Q(|Ź:xN&(%(C5OS5o"5R5/)wpobߏ0J3a&{$Gӳ*2_SМB'O9Èt&\Q8Hd-րΙF7rL1< }kM=-🎔LD!i(DuYy@ SD(8!57:Ʉ@<bsyLi$J@6fIp/(ƭ+4uUO\2Z bv>s#NWWQCȊUqW]m~6&J$C52/4RǍTUaXPPoC5*<`}':!Mxh_΋Hy{Ƥ׃Z3+2A)0yt+6EQmY4sh2162@^R*HNo)_pcTmtVcP*I)ɖAkD %ҊO=Anle>QNYYj[T [\o][TaVTLj}w"(V@>L7˛]qv]m͉BJ]Ǻn;tt\YI8m&vU^6yh0̨8jV"%( N1//&_[l|5xՌCon-.}nζUۭwf&z$ Ř}xOc4K'/rA hm&CߕVx!cKח]E[$2^'#l/y0Êꋭ nz4w ގiN(Oapx(#h4*%.D[O^-h@Hib5W+OfuSo7\1$Ewӗr`79UWv?z`x6{`²,{,Ww+. {eWH(>oFܶ6b)jG#돋2ya&maw߽?믎6DG1%gʮ@-бDvjlY,Vyw¿F> Me`e&24-)oaMCۦD -!p|HCs756; -\ߠ;},U']4&av­G_W]x EJ㏽TeY}F7~m;^kD3L˫e/qlL!m> %('7Q,{CȄ}+|bl*IJe1SKy76M}[Y-oc;v;'[S[^e jG:!Uڛnv&no&.0,olC*kmM,q/VY|}lE WD?P<8VOtbӔ=)!^['}4w+%"e`M1VcbpIz8gzEorB&.яU>\cP(+3pB;Znh %Ǔ֊VmmCʊƘ a(:{Q(XJr8n\Z/T"W`raC5 rj#(&?™@f?J'̹N|vC5(稌L`4f5p."%|J&!O?=EV)[bN9aO;=r2&mX4g!L{a"sR/D#xn0 Ǘ~F>[Np![0۪D}JzmHy+|0{{ 0wnhhrE5ILTRCω|ubYVRM?QL\HߍX !Lnrflf)Y)8kl'*IN`P?n\;tIb|(g qVnC2|C)"Ą]{dct HiN{NAZ=$MT-1Y>XČct iq!,š&ޞDh≠ :PAFFD2lQX*NK!9x?3G*mvЁahBۂQ+S9H̗P `"P51aKH{b(}55A=Ź4\]ʠp|ztUڟY Z!}[ i1!2:7)R ;+r(\.{m܉YStMY -X*js {8\Fv0Զ-TN!4qA b!#Y᳾;HcCcC/;ՇH,I" R%Gjqf`9Ÿ$b@KP}4x&SN `TnlL 8]Ԕ>S`=K=I7wCC'zqiƇ<7 +$-Q3(ɨwv^F!j)xtݦE3' F_@KP\?9\.3ȩ}'~?)(R)I_-*sE2_9;CCɑuU}[3endstream endobj 156 0 obj << /Filter /FlateDecode /Length 6274 >> stream x]n$qH#Z[-yY2V;Pdɖp>C0"/U=ޙvwUEDFFFfFDz;a' -80'&H ORX΁+>4.x Ox|oa,~ j"r F@w\M/ͤm9Y,09Y~{q!Z\p 3[€ql.^Iwo7n&/D+zb&ߦ|Iz7ϼzo^x/qݿGnhôR3]h >QƁBcn\Nn7_$̥iK7UOi\aUR@֛Gk|HH^L〆\`c[LwOO+J0ºJ̃0_-=VToH{ ut׳j2n}jAlA2n [>ckЪI*]rS$X_PztAmImLq~VY1@ӁǕ-ArO}kBcޥoBT6_SU^>- U /FZMyimʼnn=םòY|o\5{`LEܻ2oθmwqJ媺@پoƘQhCZQo6eS!!s-o]i|a*!E=wZp*T7]XԷVϭ?֫]mUXWw .y=-q|'UH:aeJp–- ayhxZ̷qr<*$64|C,{ty ;]}f;-) aZ{" BPH9bQպi*ZtۤDet)m+^uFЄ d 0DB /,8̈́6~>;iyTv7{jۄH ffXͭa{#Oz as(G.sr@x6@ /la7D ʄ=PQeˠNUD1PDہ&8=M8DׁS<Cs)J0[o"s|Ҽ_㠄,x?Z#91-[xL rE7E1*^0zB/_ڿ&'H8+6pE8Dj5Hnruwẑs$BvQ66n !8kmDzZ]f!3BhVf ,eAӋN嶭3Ui˘1_V]zX?")9|R TMsm-X&9W92ϵըϜ\YS'XGO_?([ǩ8qQPφ/WKF܅©5V [e}+f17rֱ8cętؙ(QVڦ.M>N@nK ) kŧąH ΀P_SsG\Xhf@\z2J7A*4ǂ5#/8]$J7`DAr\~)\It#MJ<5 \ئ~nK86 uUЦĀ u,n/}׿HIVgne=JޭJ ѭ0*h24gz$m0j,úܳzq#peR;]cl!-j${4"V7QC9˔H!`ʨCHB']a əi'1O3FqG?@ZlK87:pxjeB2]\h~%z: ;8K1K~U%?W 2tZPңع4 O3Ge 6д'zuIOa )(%'y/$C4jӼ7 lG Q59a#R&mGbsM91 ֟>"hfʶ,oHS(&q| !FHEV&8Jq1^5j'>v_ZLUi$ ˡWիYSͮl!6%ͤ]T~ nf,H_ BS&I7C4ǩmzhPxQv"; %C\X֫ `d m~ 8L\^#SӢ5P,.H+LiPU;‘DJqPshBB&:P\w y)B3=6S* ⩐m!9˦a#$L16FTÕ`rYVEW4bϡmdR dϛ(e.:r\HabDqBE~!9mE@@e)І=Uh~5Oq8DX $xk' T*}vnSxDAכ*Bx_#aТS^CFE$:+W]{l~l:qD7]Z,mrΠ/~f/eVJrauέ}J9p$]YYXLBzFBYP}Zwl@P=urUxq{]٦>Ld>&Ven \ i`fV` GkVN}u~*ȟMת"ڥsUWaIY c@(CZh@ (tg1O֠LUWyjnǙֹ}݅hVċ&M^eby+"'fIf!)x5Gk@O z7z WjsX?la1y}\ovvҌ0<. ̦-$s[>P*͂|3;]xZEZIM'P-}pdês)ѕ=c}-3S'x0l!kޫ E**Y 9P>×"`QYk{ eAr,UP.S&܋[i;x)>Z"F9 xCjÞ4=`bZB.F b_t<(np[Q2s"PJoXa%Yp#K9ÒRx B١¹.=AxEiù:䤪ͨOxi7 N:^g['nVS8u7*V.qI5l`\#W`G /\Rwx߬g ҼIaw[kvWcg`q*dw6L6ObYAR"P~<n(U4?bKUۧE!ESTcaMHBh;q4!sKOiG3^W"2Œc'w!qcɘOفqv>X4\+YbʫweښR}/34ǚbrV)ɾ՗spTyV+c٬ ng~ax śr'i(1-~տnéDCR:uu1^z!Vo<̆zܼ:OB N OEMipҗ2H);pb1__^Y}Sm|az 5~yвp-!D(b '~UidKsm`H|uTmt="!sj,Hs7 ~1w͙;F6mx* kka\9TGaN %D|I;·xEO 9r\@rs4I &:smE"<& 'tMBP^O,386@2IO1R_8x~d@?u Sha~c(A~Br!a0fHդ?!9Nc%Q}Js>e2D|'O9 Ov8# sKJ㢘"O-׳?vxύqa4nr1O\ŸT ŀ٤׀ D̮0nl{g/իKMWKR6}|QNPzVbf4[{DCyyCs(DҖ`m.;Ǩm-zp $K"Ƶ$HגH[F$f:jly_"Aw0 <.|ɭ~E 5fEn4bXDt*УƳT ^z}Rv`>. n5ҎÛ '\Ċ)|MH!HJjX$3Z0VBv>aܮ:>Qpmq;kx=ZwˠmE*|Te_]w/vCž cJW=Ԝ ⳛ-9jjkDAƁ0ഈf6kSWfkXP2T)j3ss, WuZ2!m8o_R^skMєe.y5|+rqe`BkQ_SQ6w3endstream endobj 157 0 obj << /Filter /FlateDecode /Length 6223 >> stream x=koG߅]pדXLl\]$v+ȵfZlyX6r7GwxFՁ?X=MX,Eؿ3$XF̎ Q&054g{qvs٧/4n ̈ I0|kݟPpKGyL/~8#@5!B2G۳_Ψ(7Y#V)19 #ipfF jt8{UB2jY/4/K$`t2GP.J^L@0HG"P# ǎas}({,m`.WEYPH!XDhQQai|3$ ŀ[Y;V*(w!@dWՄBEk'A)fG n`f,{0+,ͮ41 @$]mOՠ) i2 YCle+@ +`M;$Z:ᱳjPF.(KrzVDB_bS\f0w)jj[VxN¬wNImb~9VSX |N nX^8B5í-#@ty$AzʿqfJP;4g=Dd;@qྜྷm h$ϟ1SxMSajSpHf^ Z-s9Sv2"@|0?uF ; g:` h6WՏQQOM@cQșFu.IWg1ivfz6m!XchUw&g;[M&zLvMw`i+_IR:hGQ|(Ȁ"ڤʪI+ Gwi֘jR/n ;DU6>%|> hr2@gt.` l#jPO/'`TG?6gHBqL_*Ӥ.i ߃a_W}JXx)̡s"6sb0s)K0X.ER s'ذI] o]D.7L.0h.E4T.Q"s7Cnp]}(\\8%("cdٵUuZ&9"Sb:WJ pW0*䆀6ml҇"}~bXfZvwM]J5`8a` MV//W,tNv6m"ak6rd OHz]JrehO~9m6j5,Gd$;At))ٺ0<9[ǥJ~֥eRu)au)4[ dRإu)rٺߧuIq!^t] @.W0]9Dt] tݡE_0eV7klM/aY%]-V 4fUvZnвh_[:mjylµ ܼ^ kmqB@P?b{>In3[ކD9jK[ᯨߘwxbIwk_.>.47&:~cˌE種1}qb93z%\cY wʈ^LGcG< ֆ.}KC*!e4a89G|AaGsDrbTwmaUWJ$MU ]̜k&QF>R&qg,/-P{ /hV}f9sO;yb=fx yY-_bek#bGq7O#:Oi_7A;a^ζxe|F?'-uJQ ս80&s':"됻N3qhuk9P-Q] K }3ArP[0|v/lȓlfe`}(jiڐN!1gʺ (N MjY\ _yVflDbCrZ{T[w9vq! v s I*j;Wx9M0eJ-Wuɡ~:#m}T.b GS%l@uD+Y|6gnr ɥݭo,i_8 6QcO1 X/`‚6Ԁ 3BhU@9Fhqs~&@đ_K+ 34B1yOoibp%ğK"tŋ0>z^ޖD%4CǸ@'1!BX,UG黐xQf+ ( J`w\أe,xbe02IP!W"WZ9 €G2㱠 8UŘ,hDžmqwIcj[1#=>.W OOB朦N+5ר8NH!)³ g4dn#Na [:c*[mq)3b~CiXeFJPvJep}6Gj52Dia$"8 YVyr'J L<7kAZe]|1[U q %Xcqױ JG0v.LΩ>vQ:WRŅݭ4Tb]n60Ƿ.|]&Z^f|\ ""W|E*G뢬"J™fw*0&hZ~":LhaO2 r #l!  0s9Dk \y7%V$n^ aWF|QK#O4Xgc.~E-c$-D L;w6-x]/3:H9A"[f@p㉔PFS8-*w$.xMn ͨSW܊dz"H!=׷L84WftRMu:[܂r*%P T+O ѵcVDNa`2:0]X0~ʤLd t(+ Ȱޝc 2p(u33ڇ()w!O G^MTP)# ӷ}!a'>47*>S 5RmJ# zV&IA-W@P?}L`_A,C歃XL:qk@(ZR' Kv%,c6: V!\C톰"l0EךYϽrܙkU@Ipw8px teU-dM哥ݽ:̫nlmc Ӯ:^j]oEs]6 JߗiBH0֦y),8?L^3թhE^DY t27'oLb߄~6;/c%JaGcm@6^x\s3}ldk5WբٵVf&J1m ?^ח>auLzidy^~ K-O- lޤoȐ,kYެ6f,~YAgb~80 BoO<6ufiEt*«ҵGmtgO|^^XFP#Z E+70N%Oۮ'e5ͿNᰟ8`+3%4vdž!IfQUCLIJuy7#"}S]`vJtNqN;@#A#~y}>M,HX\wM +jm%/88Imb} %cG y󺙏-wi(uzYh 1E%mGL:VW7pjŌ8O&X/Ϡ!_]r l )x$8wK [95bl'w'{$iUlw"-y黎M]0tzg&rJ=r1,݁#)P!'6*7X]FJg E)! Bff¼zTVX--&|LQZbO5{]gz`Y7ZԻݡoVR^ZKL6]:Y/ *' p?n.@QgTQ%@(rj܌15*\VA AJU3e1%Jӗ@F0uO30Dd_~ߗ%;ǃ,I(a2LY)Iڔn"C.}TB0F [owTuEhE#)vʮk5^wgzެg1F+46ĺ 㷚> Z给w-GTTѶ| o,{vj_\v>&ac6l\81aFHfJ=S1)<ݯbV=4kGưR6Oν[yeM>i|ٶ}<ݽϽ&:x-l-s6{_XI.qRF1-򻯾{6Ӗ*Rm,w?Id#TbaBؑ \> stream x]mo#Gr)GBpū~}α}9.%$)Ծ{7ꗙj.Ik9= ÒvUwuwS5?M 6=鄇NW_<L^ޜ0.h98'V8PL^ޟ\4H8;לr=[ܞ e:~c.<Ƽh\ 3ͬ]_Mxcvpk+|^>{85q`u[#̀'EnնWf@I%nAs& ߺ@!aCƁ>KOiBGu3כt^l l}7?\C}yO'EDq&PʀS&v_ * -NnN?y²Yp93 "&{Vd jLz>SXp .sr@xƤ0 o'+H+zbEǸnPmv0j{)4ש`|WJ#Epie' a p@y[0p-3@)﹞է ^we]0JȂ#JZR6Ut#l>?~nc=8 qQx Izx9o wR@Z]x6=ud XU }e!9\!y ֗(ee)WgTDTZicoaʀcVו#g+}xAG-S{_ʒΊvʪ&ims^PFᾲ)RY{tJgqѼ:CPq AnCn:ɺP}X:]OWU:demC8+Ɓ]:=v󺲊ڸcrѼCnZ`nnW LSe8# Y}+qu aXoP 6 в2 eTǕYkdK -C7$C"8(& szL @z_ z>>ѦiG*;JzM`r`\P9g>i~ ſ/OV,x: YFMhrU-Q.iKy:S=K|9t\`ẗ́Wq1ԃx NռG;w(.,lA)&&炃㞇 b|0"e}\Uzz,WsQ T%h[W&fiUc'ч#aqaWy#qA\}d{w3kף(ge$E6tKzh&CH۝tDLy|>P GP)2,2?>^/q(6Ft81R0H%c Wwd?X?PHBT;TA+]0iKd=N8~%>yyKWyKld)  t</F0+Ѕ D9CBfk&]$hg #EzNϓFZdubJ0Axn"!#~~y\ݙg E@NsRӆ}[,M>H B+nmpz:͋y^7V,!&dMrfڇ:=db,lcѴ6izu0]MML5BJo D0mwUfimsݮVlؕ+->IXI9e7$LΕaiʍ́-Brn+v92))PI 6 ފi[ rܔEYR~eTݽMg£dqKBY^e6SF 3{zzoiParߝnޝӸ XpPV(/; z Ǿ~\+ pћ{)%x̽ DxgTO߸I1m?}eTGy^4erC&.@^5zIt7^J5e첁)Y'2{P8iZ` ϡ dL !7fL+XZINcZY9B_:jk- 2)FFU^?y Ʊi|5|_4}ғ!5ƀsiN0-F3CTiJ`[LuM3[\V&qbXL7'‹ۻh{̣蚥E}0V&{2\4excFgEY s8uG :}Y7?^6ھ@ȫ>K$nF40b=nWNcai\8ďL$}3nBg,^5LJsiq7r·&@-B*t@>~e(a6t& "uC4Shf 70§CJC k*-'~퇧LkRb(q 2e4|I6T!:܄Eţd?I(A%y)r jv*b&˸ HG@)4iPz#$\ƁD0hNyPFZιbF`|堙5ɖ)p3jkYJnTkCkm( eW1_ <7VvnR{GG`z#\U{=oG|ݭ>s2O* Mfd !N: &Uʾs drb~+&K2]94H[> d9Qn,adLC##YrpD6~D_CQrMGDfϼlۆG7憟8<} 3͝qwkanJ}Ws$9O 0axGqd}{߽knWbf31V¦\4eCkkK`Wc|蠘"͒S 2XiPש =`VC@##F6=B$,sM Ͳ*(QX2' NW\"ٹ,8?_Nu/"خC_m.t: Ţ?aϹ.(~x-0ܬ haX zաu̚-RJ&@ryr5ch(U Vb]`/ft?t,@ >h)AXȣoj z\4 `qĚ~{t(o7#C௩ :o"Ƹ:D4U:snv9bƄ Mm1Զϰ6ML/t@p0\8cYVӫV`OR%4i rA>'TlbÀ;3tA<&6w_,;aW>Ec>I|G]٪w˷}~xf3oE]B1gwX9\HO(;v6с0Pfo-D%x!*> QgQ{FT& V\*xEI~=[y$*cr|G e D *&@՟,Ʃ'5#mJ<^pxBJp!+aТ#u7GI] [bǔzC !Gd^ bMn'}Hܙ'K!(5%LYO BpBǐzI] :Sܩ`X; 8QbiPrp9TPdٱAU%FyM7 3ؤHL8BN+PyKc*C3]P\ )G2 [!J{N޹u3MZ~΋6G i+;Y=.arXH:hb޶gZz3ݬf\O7$kk<^[5'olA_0 M+xO[Egm4y E0F.6$[Eժ]<P6C"J+FJ<31O";{o>7|:O1I qwG,!a%DR{ FS>PIyt`~yd6n> GpN*P.:W-1!ヱ^c(/ȓD09JAᤠUAs,(,4R :ʈmOˡyd~K7^e%Ӳc$ɩ!J}[gexčK2> bB_#}!@kT mQЀ+BimmcԊ>gC6 ƭ9oj7f5 ZyMr/ 4?~,Ť8* 1/m!c-yGZ*bp鱊BELe XKMT[=w#/Gm+УR 'wT3yZ뎐 &fU"X,W @aEnʛozROyrK?{q}L6g){rұbY,{Bb@u]MMyf^„~ٴ馽>XMIާJ DpVӆEQ2 T;9u2V-ƇoWToͮ}M&:wb-> stream x=koȑ}4#'d$@M;lshh{rqơnY"0ɮzWu %lB_:: W^Nɉ%;>oVZ&+b\Ί^3FleG(ղOgRBYVWUnSW\߯mY_x⛶/+\ﴝXⴖ)\ZbПo;~FHbȧHzv 11LQ\% x8,-۰ hYoUHkxԋ}`BODQ?h?Uᖕ\{S˸CLWUTz=V\}އi5Q~7)Xi& n: r΄g!Lmj.+$q׍U]ٔKaD;|cx3r/Xz,}Yǘ#~5h35aLe~(M<[:2+?m2#MngvETm|yO܆[u뷆1 #̅FZ)cγPry-A-Ҟ쑉j$ 񩸿KyVx@5%@KVg%rև)2v%SPH+T0Ux $k+?KG~{x=c(qJ{46"_=J\f|;e'PatXM”&B0֓NΤ8ӯ8f~֭_^#sXUf%G[9BIĿ;D2c6E"M_6z_T6b1-Obv9 .@8 9 0oʹJ/ܯQza$ƊOBD{Q}f$* (Lsy qH܉-3b AJqE({}0)*ofX!ښ Ƈo# a4_w\avh2(F%#ˈ9-:ɬ׋z^z8夿޻m(}oΊs/}/.^%'rۏ{9^9V4UШⱩ۶Z'86pn ޳Eij_;;Q뇻,.kFf;t> @2Lۗ8 G@|D[w OS]WMw ;=M 7`>MuMM xMƘ]03RF;%Uj1ZMj8C %2(z `Inbt11T![]kruU)߻$SE݆5ު1>0}nkoKÐABJA zG1M\#aq4Rެ_II6E޶@lQ# xtN`M+D|HdmSf4,vVjBEkÝ3gz$ǻj^LRol$Ym2VR`1V8%g//MՇIBR@l-HE7,~mhyp+jImWQ[88XhI>"JO qcD{~L?[/EӞ@^Lgao2^˺\99( 詊9'B&X \#^:{\gqМ#B\Y,KDlAq, 1dtg8 E>wv"I|6P{,2}ޠ=p$]w)L R :c&ASVa>}K bZIDAP2BAΉV&PF't'y}e_e5 -ʸ}۾.D5t#zܙ(x03bsW5R*8ZCS63vw K_X bag5Uw b=DDqW5כf`aI[T˪!lшoնjfɝ@O.n;Mpٲ?DDVx'NwĀdQ޷U8ɺȢk@"Ekt.% Dc}ke`E'Zj qz)L:bDl,l`/U苰@&kb5ٚ_!krVͺl*. z1qE>_Ax3dA}.HLa` A%$JWfVAA%W)/`c]+eZC>S0B]Lĥ|AtWR(PE,֛7UB|KN> YuՔ}F8va=& $x1L+FA81ƥv 'x=aLgKPI #=q(G|ۑ~н6ڂ&4#;eG0z {+Ƞ^ (gQ> jۡQA;aS*@y +)6`H'pG=1m5߬}AQG4:o0ʄTP 6U h, ЩVِë '2d v暨P5ᒂ9rLjǡH>=1,tY.{cX.v`K?n$l)l_4ZZ4Z8FK j"_aWPSË!!)m3 8ݼH[Wãm,Vpħ3P/UCmP6X*3X??ucb,X-1^Z(` ),aUQ"@F(nx,cHSH;MmqbA/vnz<Ŭ1N`OJIxEȨ%\\ۍQO,ϻځwU)Ӹ5dٵ8XteVڹ1kb_6.ZY]a# p!.].p7_׿*rX' mۦíQ@#wUf`JƴR0rH#k!Dx@b:h_ ?M-*e*wP<1&ph?6M-C >bSCC9q}p͚B`ƕuͻɠzaDGg~sm.O'-qo Li2nvm[}{D@Yn!w e>Y3KOyFL)a>dx2^j8~ Y73]1|/x.rtK yPseKNwB{‘*>LnE+:?r&:@CDl/ص 5Br/A; M!5DJ^Odp/7ӡ/Bcj>Yp"\@k$ᱳel]֛>.8J|k IP#vwөewr@2x i;5tBt>4ܤ6sFmNEm[?ixb2` WƷ"LjOEM*G{]VF=iUEp"MPH/o#%P}$X5wq0>\Q<c指8E \w37<}e*O1\ Ѐ3Vqx' 'Z;TGlAB=D2;$9˜}A).7;̞/f8a&Ј-LVC~x\.}؇͓C`JT ;'t*ѝeNPߕ(}nbAS]/O/Nf2NcHS,02^{nz(2 V<H;y x;Qф)x+]p „̌N&34Rz HbpYܶfc(פMgϺ747Ŭ7X> 2~XT˫)àkq_m]J)Q4uIo,endstream endobj 160 0 obj << /Filter /FlateDecode /Length 6057 >> stream x]ysF_5v}8Oggʙ$vUҖ "! L>~4BwExw#A šN1 3K0m3q>(.\㎣ˣ>{䪵D#a M 82ɛ#̐ɟ{$ŸBOVa/ }ĻG/~8ˆP5`D L0P&۫$7[M:S |rzyF&!(ʑYu.WA92FUzմ7_LHpQz1"Mj`5<"bTBw$PhΖu۾;rL, C%"$~l󼃦I'`cdnab63^wԱq))0 @!Fa]Pɒ W>Z'jl&|ƼꮛW沾]vWBfvY-~ #bVRHkErp%by"$ւP4ѓyyqktכ:4R9f:A:6MY8CNQl^#2&s(`5Azx6izYGM G<#D) 6)ĥ*b6Z0%ZX ΠZ_ QFET3@ͬ$RD8j4&q$kO4Xi8ɐ&\OHapzXHRbﳐ捿(!K PYԼ42FW!\!9.q{إ-aDڛYT wwݬ'Mf٬u̇K C.Ǎ>3ܑp}ƍ`H>yӌ٠>/f!ٻz^ 4`/NFE"MBvٌo,YȂ ZxCH&I ɫ# )t4 B"u48He)ұc LS{$'!̅xĐ{W3[)bJxU]ޮgb!L!d:ΧQ7"9RB%~^Ό H+6P8yS(iHTLJ,TzJt7:&VMWpBh8)Q3U #&<ڗ10 2 f"X\%i"}Jfuӎ (${n2R )zV:{!35l"0Eӱ|쁆Wa7b4@TYdmuw,JY\KLŸH`p7=IlcSHmx".z=kƙꯛx՟~BBUc.4FUi "Bkӷ]eO`2Q(;lXH2u #%YrgY0)b؛m}s7ɽhO o!R>ܬnj MEg&}_7= 1 F' |K1_" Op[ztL}Mr(CW_LݩLO)6V^,f`[cYu^+;ztqVs4Du%a<WCiU̙~TTQ珂zd[ q]4b;g֬CM욻T pNR~gN5G7^{9ֹ0H:\4ĬUM=oV,7Ijr:\i`#΋ĿHT7b>2.ޓEEpˡ.ytS=,߽vv) ƽsN؇ a 3)}sYX!rWo. bl!|4rCqqխ h/Y;$FͫYF}t^ahg촩5:C(~Af@;f]_8 ;h0wF޺S壔fٶ! nV1Z6& Ċ$c xrK @]fq*W}x\V%I1J(;xC3\v(7Զca':t1Bo]+/_K DBb=[GFT&? |r54ȋ7 HN6"x㗂ܑ1[nn/Y0#c xs?ÄB3_c;Xd!u6 O)}#63$կ=&j& U/j&(!ϒ `rhm\eE+f;0j9U;W7B&|d "eC󭟀ޙ'}f(')"oj ׼ hUVtAons+8(_ Ê)@:zx6;+aUS}hvǏ|#&1M|dbWcH\c%6YC@ޗ!:ړg"`nE ^v+&t4m!=Vt-ÿzH6h ec "}G/XpSxXe!_.[2SSFH}y*n<{-= dʱ I0v2W2(0ATT@`ՇB+aD4v ;0!3֢(y0ĨI tXtOE%>`P %= ͱlQS[}:vOVuc AT&ޕl̨dHij(F@,v)qȋx* y2"L)$Ƚn6" (Y +5,#UݶuV.9waPVxBvge `|2BCm.~\!Ȉ>ebz@FUE}nȝU]t8,yyb4AøD(F"r q2mՌ^I`@ K #z]4W=t+ emwRٮ">fwcubu;KiqHH.uF` ca+]ncէcZf=(b85H؁k.BiȑFAz%c%%V2aMkfE\2dotȨŝ $ % 3TPH/{Z)$٨2/ = = E>:ۦݎ8drȮzunccc,Wb[I0ޛ/|xؗn#kc-m>SB8Ĭ?GVo7MJm_kEXV>M ZiCGQvWܶׯ.?FwGHDH<) 3-pQC/CQnR_践4`bHF.c+`_>+^9^Ey(eƊ8 o/&ؓDjpZ%z@ ڨcŤ`1FN$O1cR?Q6@?L%~5؇}-/Uv@d^;i 6+?dԱꬲ̽te?Z3 \\'VR̈́' -ŦH;^_߷WM{SϚ1MpA1@o*xU}_)"@xYd׊P/ΰ䈦^06OxÍ;J)xVԳEn 0bA2mE (Jeuk%u_*/YdWP8C)t`@T>gb\<׋w'b%"^ȉq>” tmf:{8g " 1ƩGw84/2rhŕ”Ut|q%*GTp"*1>"ߋDT,[hler@g&LBDp2GT$C b =!O~6r"$)aI'|,/$[fۦ{=c=z6EXqU®28DYwZ[b@cţr)!ԞU/.00}d*)T<%wtTMaF#z>p'OMendstream endobj 161 0 obj << /Filter /FlateDecode /Length 6321 >> stream x]r#7}W#ZϺ8ҾDx<ލٰv' 9:JdID$^?cqc#q(&Qv?LD"q?=D* S#&#F1 ڎB;~'NN~8yRʩ HRj@a{D b愀[:NBGN(|jO~<ᄀTD ="%!֌Jܫɯ'(or;+lJѫot5(HSѫۓdUnͯ'T|Ʒms{,DTWz?_9 +B}IW F)EaŹm7i/0d.DH;" EhxZk>M[EdrZA!YW"DDP#r5ᡙDLNj B^ht2V(3* (.Fg%vjZdr(ˀPLTٰ#tz\ץgIu8Дf@uZ5hra0懡@5?eϏDi]zr(fJM8Ltt(Wq'*ʇJZ`FO8ylM$zZ_j}sϹzC3Y/Mmş{|իfmu5[Nzy}Ä)Ҕ iSqC#J@QQ LiZͮ}d`MKR(aYkߌay:0aYJPDHK4fYz HGZDo0HKfXaH*Ze`Nj?00ԔGYo0 KePIۥYfXNW7<$ f(0kJY 0TgDΐ3g#M |>8_׫ldݐI{?xCk&HWWG2ͧ[܎ N(7x~&U6l~&tz~>L~&QR0;3w-tp~wg\tgI ƾY?2R; uZ ΒO`njs3bz62\U4 pg,؎ЙfwofGGoۋqڀ1ٌ >l#a(eCOA!2y&ah2fA Fi_K ݯ 0HhEBECC>TvU+נ:&(R6~#Y5ˇc|@cßUI$X3ْ$G%;G,ւ/9f lS~Ӫ9 V1֒4XS7>᠀c DZ7]։X oG1(ۥYefuxCXZ/Ԃ5LV櫻;x̕#~37ӣ/W z*Pf9׳&U{XC3_m"h殝Mf7&˦1V-5 Ec;,O')Ǎ&Q5M6hս/vsQZ aP%@pG6ogm?;/u7{kcoc}ح g|(ZeOd=ʔ+2e.ʴrAwfA tuXfm%ĸ_5<98u܌ozc@p:{[`Luj;Lp)X+xrS/;@FS Rjzv Qj .R;'6rvďfcz  c.H1)/?2]rvynVq7jl807u[QEJ(aEgj@LueֳepI*{rc%éaW41 1󳇷Sc˴G a 7[&:6P7M=S!1A+Qؘ1"D#Y&XйXWc2qA3ȁ=|yd^yuٴ7cHMQH3==d󶾽kӘuK.|(Y^Mm{'5N-zG蛶 \ȼճy:6&n@S {hśf˧!%v?C:eXЗPPaO]'wZ TO]G|PP a£3bUmqp-+$+9N~î/|e;Vn]-׌o0y]&++-xH^ro(mW~ޤ*X\}SםTz|`0lhgX̦7fSm]bmAc ? SbjbDͰ"cϣ#|\\\ )T&h~N2GMFFn!6x֬lׅSTI⧒Y&qh9W*mKgM" qe*l7ޏSQďƄ!ygXOh:I~'OOA %G7_ȑ' j11mc|3-{d /"ٳ̻_gXx11..in)@p0k'KT%$%CBSa1Y,ŞUQ)<9ٗ<=nlOxA|$mQ9 K }pTp!Ail^ۗߎPwPBcww:-;b fsN@Z0q7Y#nWe`5:?A. \rcPU~lk?R67M9]ܖHS(ĪݡYQLJξ8|=6>?b4rXM6iߏ;։qlu*Tu59lG],n C- rPR5qI@ VD||Lu< pӑm>=qlzz_}ooã7%ٯ4<.D2WGq  XW l5o]=ipׂRPdR/C@Hs%@4Nxj1cg-C&SMlI(n6lh`ƘK'Lh:l끠xR҂҇B*"8JȒ^RZ/<H[ )iBiR(NP:<>vuׅc0 351 BH °T&RUE$R=Ţ6nKqq.$py_C-9Pj..2(|p24|tS3)L yֆ .剒c})2y>WUhAR(0e ,5(=/jq^jUY-nVPq]dV-lVJJ̊T^3xĐah7hOɌ}:s] Sw|iSrQGÏǍ!'jYZzG#:=zz4UɖKK0H_u%{6O!YuxE!' ;Nz(ayX<jyB*4K^\BDm~b@Hk~3kۨd]6t־.Sq*?oK;BZNj[uתIYⱋ vipt9Cz2p;EoKNWT񅓝Xsׇ(H#2%$Vh-XD8p{V԰Цq[bMene "{Ѥݰ&BbRE"Dw{a ư;x664%^qjvZ68~Ud涟,ݾQ, IUY %2 Vˉ}Uo{>9 *ꨒ\}E&ݟL"D9."chUXK=-yhK#dѕ`L\p$# g]fP (|u8Rw=6# ^m[p QBSMm[oMwo"{V&jCv;a\anzU.'jٴ z LJH\"Lڥ[դ'|ySo}.kHJk! u$=lL긓7'qC[g/'EKw +u꾍e=tv5}xgkҼ]M>5"OW~)OQT4rۂ)EśY;ﶜMa/>(0@)Ϸ0zU':0Zw aa;ә"3`io LdWu!\aUz}zdĢ, X^?jUx/f0]̤Ӧ =+1ȱ)Sc,W1.K[;~8[endstream endobj 162 0 obj << /Filter /FlateDecode /Length 7222 >> stream x][w#~7"˜qgFF"[&n6Glgoܿ FS$f? @._U!L369㯓|5k&fS&G#MJ3X%_rQwәԜ2IM5uًF}ZK9~&3~.?-5[?[/7q$nHvk@n7F!rULբ:0f1_a܌\=oèzhNu†&vLhKSzNl 7Dpeg{OgHro GH}Im+ɼ]HY[P/3cTW0LRݰfzM=|}q3`Kf¨QF95˜Òae9*TJ1>C4^: s X3ay^]:RIV?6>Ȓy<.-l,aɼj 6(,=wx66K=rD!Ə}Bqʥ9oa|ҷ`M_76e\8AyXT;)$=DR$Dwkd@\3MZI#nk|<ۓ -(=`yBʌ*Zb !u^__5Gd0ҔGv+f$~l Qr2 enrSdmLXG#jUo7ռ~9_δ911ZjD(eSnUJOzd r*-ήze- VVS`9ub­JF3MvJR\u(KǺAqyW@gQdJ(| r{ϙ\HfKk*EwOYg$~} "{rdе N gIYą!UWO"Um(>t;rIuۏ싉 府OeSoxnڻ!cN}۠=e.Yx jlUMuI>ibXV,|2 4HThQ w,Yy%)1ϖwLSUw˫?$:K%feb‘|k`zl?<\ksƎ$N'AFqTY!G~<*ّŔ[/G=lǙViUAkӲC7 bԨkFC,j5&6pʽG BR3~0e_:-#5MTEg nNӗ Ԩ`<UX1=(yʴUað,ZN Nͱ}$% >g y{?^H߶s_IOSϤ4 2aۜBm85Q`42oʶ1I\#ӑ٭;QNS]mTTHu%=,|<JkPk3KX؂&M,eҚM^2vX{It:SaW_՛WIПhj>2f y/յdUmА6*Mm&(Oi#~-AYLIzAt7Cmf%M]mѳF=<+IX C,;=}|Kz5n!0B$b d׋Dž;spU*q h)l@+V[uHҮ!T<-ol%b<.j+~ǝ@ eݨ}| (8#jHA9dFQ,ڮk(&T7F1)Pp@!RZEvA'pkN[}ui%WNSn㪟 .b:s9ZiS.sr¨I4ڄd (M5]I[r xL 3~O==ŀDzMǎ&Vvx[8NE+ud1<Ѵ 13>pq/fvx2^SkU987_c!P=őMATRKDT`aT-nSqszɢ7UW/>+ &b >lͮu[/#Q*xh+bG"F0!^΄wPJ4$fja!aO_զ3'3WKg*{vSbn"f0e?r6OL[)*<XV_8CX֎5)<倄NaeiG->jyhG&׊^9/3j?ʉ5ZF4/]=M(U« !!.j镉`|>y:$5f("?N9Ht9kÄ<6SDC8KI8(,\P}>)X/؞g)FGinB" R:TT]EUPAv3z&dM\^O$#ڑ8^.\JBR6誻5k2=PQ8n߂Vi"q&/ U(Y>( sޔ$aID;fIw|6,RpO{l!ΙqN7'^96XCy %k[S D >< ]:@"=MDGϺpbry7'!Ijo/&`> ˍn / ӕkN9Z5 YF(*=hߑr a|YN Qi |x1>匣O&T%91*. BܭOrg#U|? Q(Oxj|?HcęNfSYߋ ɹYȢ'O[Q+ODVӿa4ռm(X)'eyANa195z(܋*ȉ'(3bxJCtYdӵ jNg8ϣJFġ)Ƌ%Qʐq,~b|^o (1 Jo!FbC[&BhCdcVڸDƒD8yU4v K~ѤoN )Bg8b49r.u\O_FD2ltKOxs Y%UADI)Y*ٸ*Շsj,n}<+Yޒm_*!9v`5Ci-5kc#0cE AW%-5 ^fj0Z|Y}mS2Ԋ3>5ȅ3B#K:9Ͼ]fkRp! '̫u8WYQҐCdά(X-"Бuy: 8IG6 s7GI+ɛ&+ g3B*5XawC6P.%Z+CFIaLh1,%њSCAN H;2'hkeF'm m甿)5.P,GQlT:rX`:#ly5 ݓʎtj`_@}xqr \GTyT])4@X,ɒZSu.!=]Ln|dž  ኑmG yJ; sZUfr}vDfk]?6\FQ9$B$c[cenb' ARY0dkG=;L 5(@;qiu4b 3Q '.T12&}rFZϢx,kMytxFy+$JcmEp?NCCf}׮oܡUm+l TZ9 D97C' N`{e >"9PCo?ruJS/!uhn1և4Ty{bȞPAn,x|rPnW.i >p IQ!){AI|, !7uw˫`lDpE%AB9Y¥f, &ȩ@ ̽>NGë/$*|LJvqx,T;="%0eK̘Q㗦b҆}W7ǰ!u2$ΦS@BE7~eMSBhk_9b9 o -\hmOxe<~W~rmm~oCIݪMX]VW0 r>]*gLnϡb1fjW16lF VȄus'r} ŃqG/j]O m-3ʍ+j.CQޭ 8kB^.=1#ǹ[ѺibhMd{AH?oW#y@ȐeF`DZߑw7ۃ8}EwY3,ĩ|2nÛ] OU2x 1vq(apI *uW-$ æ4|LaԤXT|(>)/gh\ bC},rHfP]-1:zam"2&\ru|A6ȳd?HfPk0~t60[\Ce/=tcTqB٭VIy/jCt#qRu]qUϽ)C6?|E k b'Glݶxi`[p[[ 'W$Kq-!aE U4&h7LzSe=FҖrGte#urL5zxHc[{n4#{TPj~ae#%(׏ٸ{NM LڛZbO4> I8J%rFfRw֥@W:\"8`^?֊7oɣ09JWW]"j UWSmP{}nOSnzy`̒wSL~Q pcrIcr@!xQ Ve_anW0=H&ɛ۾S ii'bBvPr |c=ά E&09j_ߤo8'{ӯJ=B2 "fŋ;znv*%N]uGCer}bWX.MC7]:: :ex@v=@WMS-j-[d*'99OJbQ7WSujKvuM&_M1S7S#$Cojrh.?'ιB2pej"˫)peN_j,(g,'=jY6\ϛ^n@"#jɬ..xF B'\&.zSozu ׂ<䁽C/FQ;? {E_endstream endobj 163 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3955 >> stream x]W PqetF83n & .BdQT%3&Q"ʈ(D n 1ny&ny&hNϻWz0)?USMWw{=;*ή Rڇ'Z0bfXOx{94rŒajhXCKOp^@/9&sج &&GL;9%o'y^|0p!>}87ɍzqޜs8n27M~tCΓ8/.{ ₹\7ȅrXnƅsit:p\GN\N\g ʵ칡m8gǍVsOeV6mU_4\/#lᒨCm۲{gusHqұH IϜh ڥZ]vMۛQ$03N3UKu䮁O[R54?S5O]eI4JV3^pH3w#b`\{I0Epn\[}1zz##a5#獋;at}P^:9{laMEMEEv݈?[':7V_te':[1p.$xi$ț'y7+焅Ϟo`^+# 1|HE8 +1&H-'M 5rWN]cZ2AނԖȋVT5H#JZgrG F5ȍ?ŋ$?@ g؟>Tj(\537^ʠ43OVuFTR+$2FKD -|,xҐx*`( fQiDاK'2((0˗u Ss0[\PCͮpZ/ _&4G^KvLJ&KI^4g`14w&5$77NY*WCg5Z 3ˮ0sߜ?rmCXi-[ưs7t86-%Tttt?Sar}5ڨ`$riԛmHR2wư_s◄&m/$"u?# VW9ڀ]xs|XMz(1:GGUB(=jIY,3i&Ӡ70a@s8YaWV^vl,HH ԓާ%4h0zYξx-ft.F7wW3R;I[_7޸ 9yu+ 78T"W cf Z~E_huj0'5VZf^ \АO* RzlqrSoת*k5dTNSoʺ{V־Vˆq視w^fYr#aѣ+LlؗtjC*ƂVFl̚:XtϬcLɉS,}󪂥"4и耏VUr+|i.6bz]t[4i(JM2){`p~yrBګp ?֋xdV]x TT_]zvViCB胣YZԞO5TL|5{Ջd/;gTp``T/]oO[R`1V[&5R27\xv]X,mg-a/]&g o cLcql%VpJ{Б+6,bQ,z'EWɧ/$p|kaI25#!tkrAn3@tTw`6(0@mʒaH嗐4`T?nEZ;VZ'WH>ѥaL}IGh#CKENSSo~´éG0n  L c^3{(mS`T7 Z5YPr$šRJfl"BT &BU6Z(JOت+ 3Y[ɂ?[T$b>> g;+_yU/?r/O:<`ta][!1Z8v۹l,%J^tLԢ{)gD-vd$~]pTբ'K-.&e5U C`"}K=Hsn< -5"пģwɍϥ A81G0/6J껜9qy}VsI~)!:=aem%(/۷ vWD7etмw0/#EjdHm|0:\젴),,5g.;α}{•},C쐢ܼf֥̼|qo=͐9q55˃c_5֤Zb-"]U8ثq\zʗ-s*M"(Acx[%$i$ ;~֤1!ͳv3Ggf^ a"iKv$|u3᫇J_:35#%͞[m_x*&B8G^.Yh%,%-l:9 ktE2&r:bw g<QrJ8ea7<48 zA*)LٝUp*?@a|l̠$F#O<2VLD y?#ی}qrUYVd!J#'}ኡu3F)jR: =^ 2w &Fa8bķ.ph:H"!N$*)H{ mۿoQvL=D%zW1ɓ]S[wbtIcb>p:(5 [{Fͱ&%pDg(*Eu%|ͤz2 Z5WVߨT^eߟ[?N`&RSo pbCA%"u2<2y_zOZ1Snj;u~鋊-ͪ*S#FYHȓW!+avĊoQ-}$A_ ^QГ?ѝC#wFnwXQ[0c9j7{{twxё Qendstream endobj 164 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5628 >> stream xuw\Wg]fVa@b[bbE04ED"A 梀(HDT HUD[LԈ[}?$O޼;g>=\cЍd}nX0gZ_hotI,%ǽ 2J8a}.e嗾sn??`AZ޶nqWmm=<78l\iS/yqk&L 80iӇΘ9r 3e2v fc gf$82eƉ1c3s331gV0q 3,`&0 %X1kf |07seLKƐQ2+ d1fLSƀ dx;3d12ƀaNȦBdu|!̦z΁΢h9wݽ{\9gD轲Y"Im}j$(%RTUj/Sap@(5n4HkL)Z?L,LM׳-)t#G!nHG`yJڑ,a!EF|Ǯ dFcu+x dvݮ6Q^b Iܼt4~`[ Al#Lq[SdRT0g}DX Fqc}1ON,>'SWύ~)~Ǭ 5JWczܼJQz1 Yt1Jc GFUcOs UdVe/ΛLu軸G7bN ,؃叿yV*V訏IܢCVl0O偑 b "v?ޘV ɑ=k?#Ezi-ޗQҢ]`l-Z3n/*j`/H UGHkzv99HOIJ@POE_CJo㪣e(_w4 `{H-A#=9ݐWyI%.Qɒ땗H8}K) l|+$4t*IvCWZJhCfieqd<Nbs0X^Lat:Fe6$Z vue,<~!#DJa {"n%j*cNa̯=Ej.7HrndNu请b9@@o}v(<A GM p/a\5^ êV!6YIJnud%%6Ouw,HR>olBe %_^v_%W*y䄁ﺰMw)9}1\VZURHE_ufHKaW9I4콾-4a囂`%fZY gw( LFbX"}qia+::.fm,6M?jۙ}5L$wK' (3Gv.P}^X@ ֆm j5_Et1VN\(%w+i*d򗭋%[c-T+g>/ٷаӱSU+ mcAWҫ\+'b/2m|vJ;UܨV~29L^d MJ!T"ئ`΀_F;"I\@";*1-d&oDqԎ|#X}9 f*\C(W-՛FrBr.jjxK8($ٓwE-,| 4G/ }QC&TDMy:v :zdƺzIMܨ鎨“FBeED;~ݑ;N].aΑO :\b]꯱;.;nRtv߄h;S; K]HGF_S0Z}Qd/s3GX8'KH̻Cet0jFG~W_RY>qɏ/3NVH9Ydѿ夛n8ckoia"2LeYԴ1m:㉦ kM_Nϩ6M `C70V+Bjeo[%Dh$,dAT}GV;/>{寤=3vxg?F\upc@gT+!Ôr.Um `dޓ31FW l(gZAro fxF)?O a(1==f/E]K=^x0t̫lPVb-TD{de:33'dyK [-'1PT: 7{{[k(7 uȷۋc%kY*5N(uX9 &estN PGc UzW:F)zzv'iC&Й2HH9!k"hp։VukKq[̟Dt^iACjn .٘ 0GΝOx3R%^;C:p %_fί??DtE/M^GR iH'mǂL24HZK 奋. 嬳&B&9aVQ-Pv\ KǗ0]_06"_1= 9CK/<b1c<@ @2tU)YX;No-ye3ǶAF> #r~QpTu>TҞ;OFHR0c%OW5FjFyڌkD3XoB",W ˤt48>mqc ܒw,ڝiyt &DIt$'0ԛ:OX  *x-vںh=gE籃pp6dt=VB>*΃7 WR6(&!3H|b`F:[NЍ[N#|NRKI–@7t%U:laWm+xP,HK|u-F;qSY4hyȽ::vvM d&dns3eyaLt} PD?㲛wO>AB"R#UW9]xǪ987ZA~]`sׅ] ZGq_QZ+`LV7)ݐBt)( A = ~KK/ߠVJbGdʕ-yjHO>v}8;pSG^*r(PsԿ 0oJ:Tjpp>~w\߿T+H> J_b"x՗Pvk)D V'C F4G~r%7.!'gu`Ao`1(y`gݥ";iAIU¬}o=d,5TFb$$7 *SS20̫V\~Y3g!Wm^k[Ex¿E X.:Ty0q/|˙f8Mj;thovB&慤ϮehjQ;q-AAO fL)RT06no8i=)VhΞf&¹{r rʁsVVed<W\.]_m群7lPӓz$n5`pa :lhƏB3Wh$:n.E@D-lUNBFcY:,8:\a7 kd̹#~a-; #X_K=p͚IcX:9=,\hNA(d?Je;6{n8[ZZPP=AM`ͥK5|K$ kOUa.0Z~؈W/_^W-^q{bp,W,d rJuJc91֭邠 Ӄ`y6! #FG j0 O^!*Dpn灙yYدqޔ\Uo^d1mh@BEw@W~@QѣE^EuZliFbiC4_`N/`a?.8KrAuy "'.!xڗ/a拳#ٺmo6':+w4~\cHIRaavm W٣'՝aiendstream endobj 165 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4201 >> stream xuW TS־TBzA&  8 * (T*j+ZPjVETp֢@J%F;o%oYY+rKSf}(_X~]hLjcH|zclX6I$}6dnYX D?^sR=W{I7}F@f̼ٱq$.L YjQrXJbx_:9Oխhge?l`ʎZ@RT(5ZDSaT85ZL><)*Hʛ򡜩/5\(ʕ ܨy$*LQSTʜ@=$jj 5,(JJ}DT&eM l0JFR(>MQө?#Ov?;WqfbJ~fry\#ox`/T7o}ߎ~ܯCo13chi2 8#(AZ 4hter]b4蝑%Saf9RWĜ#%= 7VJ$80!%ylnh]kw͸T1A/}/Tȿ4x8pc{3J&NOUC6-[uЪV+PsMU}y!H.H Au5gE|RC6 m=uF nkx;&qèrƇ婋v$CjB 'EިfXif߉%RQC?pYR[ \Wz)>K@c2"~khQvd{x\#B\*NSHo ùrER˓f~?EB 9qHe 5ZKu8JN%W>n10?`ϻ5.ZP&i(鷯+D+cM0PiQu䈽 #RֈJo:^G I^2' >q5/5xO5,@ 2|78ogpQp:s`(e_qg -tU;hmeh;R?\wy" \$[fbbCe OVG()c!R"_Aߖ?@%;Oh꼜)+>DB@';J} O&5UlJ XÑ: Wje`Y:(tuv{kIB%xbDkl I7x(z \kg G!a~]c$XI5 PhR*z!h\z^I?10Gz8BM FIZƃqHFpc8 Orpys pu$ gIeZF?D] :`uk9RM͝Sܳ 5Y r=[lXK^yRCY] =ҁ.^8T 2RF̉AuKf_"7)N3X*kO,>'e~H 6@<&񩎐:z?Y@X#-3Rק,ţ}0+oY =jβy28\Pc8NͺEi*b'вK6ᒎn=+̳gU_8siDdÄp3(5t*H汌U(Zg/@Rw-MXK`.J5^a6ŶnaZ`'X f? v }&%J@!6(.#6e}jfԦh& ;T\\+mvtu>?Av=|4 BCC1KX_n0Fh|B92oxǗ%HxU[\?Τz^M:*B4 Jq1oiar#8˹Tpdgs$&o):OZcI߰cIē9躀 E<, Fpoj6 qJ(f ֞# =dapGJO*1~&|xԼO6;'#=ƀny̿ 6'&cA,FQ_䃢. Ox?{3o C;1l ֎;SixJJnA)X!$bIl3Bnn[ͣ3s^(Sdwj Ӟ2p ]HEՃ6x޶|RCD-y)ރmݷ{}Ȧ@nG[ 3V槚U"r a  -^( WM vvv@R![u67*]  G(85!2*(d)885H!dY,ʂ~Hp7{]3(DZNKpy\hاe`)vj Bgn r@^%la̹9FqU u2xWh_}uc*c*C_r\pZ^uywپ#G?^gwBfZ(w^L,#lp;vZK_ZP{Vu%zˢpK/M'H.mNB~C:L.K_<8~ʏC@21Jf_ȴ\Auѽ/UMlEܧuS>L=q4<2  nXwm.'+u*ˊ΀N 贖⾢ţ"՝0G-I}u" v{{y`(zz9zd96^|"'W̤hN:qRM itCS7 }XջÚ|t3KM7mIGρiƧOѐ僳QfFvӗu :Fb>g*h 6.xMz8XD&"r%u"a&7[9#I[&"p 1`-,ĮD HJl E?wendstream endobj 166 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3795 >> stream xWkTWBcB"( 򊠢(OQGQT卂Ј("bq8:IfYw_Y}ER=$1K7D1!&rbehg!8ٺ$ ZC F&:19%^yq[Ikl]n}QzSN>c欯gϱ%O‹XFL$,bXAV%@"p"@™p!Wb11p#fb)E0"% LzIH4iFn%/zz o%G$Ww%AUPE aƛy>|~+F$HvdȪQQdvYj4 Ge 0 j#!5"hX<_C}.Pgs7Ɲ ܞk3o{JsJPɲ/\뾂O-yFPzAJ>s(s0M8~ 􈜄f1X|>s+\۵ 6c){xS@o|(ϵA/ӭSa/!!]ڏ30zsl |-rN3Vq  L{h'/ce-Ն'HNl9(q RxRRs \cFYKp{B &` w}OW0%q[,_Y7@`(ă!DDw{o=p/p] ֺjݦ/6x! bf"FA`lv; )n[J`HWQ2i@jh`͔|s'; K2T;.CYj}wwo-Carq0 ƏO=vO*g^wb#;ׄ.$,#k_F?3^K,PF(G¥؟]tfr :w\ٖ~1 `T_֬1bG ^/jIaPΧD ёx"B'ZSݴ3~+7Gޭ؝Wéߦd}䂃{s WzD΀&_Dh2aFpuRoj?SOģy#wmJBIy^Q28:g5)HuQ,H-dIocL|{jc^5y ӖG"زEwnڌV`JjNru =aB'؝s̝aXyPQ&(BQj_N5К{,4EI ҈Bg1ؘtqQubΕmJHٜ'!䘾,$u)}6.E($62XIt_`余h(=g4$E +o_ϟ; gjJ?gp\ TfKR).a;q?t3դC䁍b!`0 ;|O@ spo0ty"߸PHuV_@䁧jR`?AV58BDq Htr^OakAFLyZqJLedFSx'ï:O`#T ^+Tlm<\슦~^Ρx8 ԅ7LEo)MH+}[[t _sISՉQejQB^rNj-#jP&M` 6( x_Dy &dB& nE w oKcoKa9]ix7?CX̆bq#rRE~ ![ݴ}C[=ͭ؎cB w`}) /܂55[b׷.p@ѼȠw`<MbFv*.1a|uy%Euͥͨn-ٗ"XJ]G#@mL V mc^^bgx &j^ŸcR 3{~yO *v]ͭ=x) ̲>М$d|CSLEN|H[##R|7DU`a " 4'#^Ha.^!+ݛ{R![+UJNCߡI`.N5B=ͧE@=?z+ }2BS]HV ml/t.B%Pq#a0,{P.5s{z^޻uLQjNzfй v *)`=`5m+VUWT2ov5m;[Q2/l3xt(M>=o+ڂbR#7EGEj(ː!clLvKKLX]]ͭ9 ]x}799gW&IA̧_ثWs؂LNG)Wܸ̪_PO-mwя&1Yf";4PiۢWdpGT@r#RR"}ڵ;KL*.E@󚒟 ^_G}t=0YtXnxHɻol=yq\S2<5;=+_1txNkH9>5+93w=C[s@iVy/R-An((ˍO-~:h=%``&)ywm_S /` #aŕt4GA%-V,H Qy"G{& @J>s@"YL!X?& /@ 6c Ftr-2`pbm;q%6ab|ESmid)y@_)kzl,C֢vM4IcZRS[#􃦶lt.lm&Nv80ުFLG]pb |ƍJL;a~Npl $l$Ib'< bQ~vh5;=+]@]ʬdz法QP8Ȼ7_lC'̭[<?[ZP\ZW_ڌֺv^~AG!P.Ҹ%SDoJi]/4A' C|btΟآ.;)mAź,{Ybyx'h-<0 f_jhc x2Ltm_X!U0fK7ikx8GcÐܦMQoݪ^M1 (~zP貲qSy#״7xyn`;"VYbbͱ\?.>͂_wlmߣtǿ@/sW>iF10zS<9"L\w}|Z`Ԙxߐ("v=< >VcދO2eQ|u`9 >LAxendstream endobj 167 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 168 >> stream xcd`ab`ddM,pI-Lu JM/I, 154wisk7s7KǤBw_`&m}fFF _A|?sO;qOUW*߫~_w@ٯr!?'χ }NC;endstream endobj 168 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1509 >> stream xM{PTu{ٽwS5ۻ$*bI3T<!7 (XRPA ~(dWAAwYda%0i?hΟg眙6Mv[Ls&5Z)9`[]z8/GyR(/ʟ m(SIԇ2:ofZ.Oo3 f^z-)`;),--lLVbuk9yH 67VDCG \@1ɨ?'!mn[k?"hA)I']]Y5Vipբ.L!N1oo88`9.= u:)&D#@[ڵ,W]sq`ݟP{WV|8&b$F"F1 ` i4bn7PEl=8^)l)!9)L`>ez:P*6|>=ʬꬊ,(.,9ZNޓPhQh'#W¬_ \` `L%~z0G켷{^{+I0PCTMheAu]&gvc/G'^Lɧecl8VP?ayxZ>eIkbF84-Ә|}'Gnt@~̽4.qp!n`–8&R*s#’~&xVS ٰZj,!*+(8Pp^/2q=nRi$FcM_ *; S \u 5Qn2)"i[`Oܬ|=ր+&ӥ.d%Tĝ>x\Giy*s$ut;,te@֡='20GܝUċY ޫCbQx̼ȊHFRkOA'o,*0T6t;,ppI^ؑn?TKq߰W \^C2m9ygJ aOLu^`kz~D~@@%kv"=rrփs d \4nmq7DTE['ʹnTuXi3[FTS?F,tFmX?KD>hV8ˉh "X7WOMqҙ-*~&ɨoE"jނBɒ|/{h(dO!߆S v9۬mF[;ba'Nftz3"x *Ii;1S{ldI$KBFqoe欸M9/5*17HtHo7r$Pshz{$-QJKI80kcZd+c?>CQtIendstream endobj 169 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1827 >> stream xMTkP>wqY5~~٢x-u\Q E\&4 lM..I * ()EPlE+eխu:}_ef;><9Ix{$I4d:)sѭAʔ%rތSы5V uLjj;+Y>t̑68Lp"CD{@b8@P]bAy2Lu^DBEwzp5D!FzOm FHz`$2INe2s>ZJӓQ%Wsn\AF*ǡ%\P'tx7nF+Vl^R ,G8*%~C a Zc\HK}UT&wq輬RA Y :++xJ ٝ]9„;'~8jؕ]i;qR9q թZY1ryV_'Ќ-xś=r'b蔍yg)\KA' OkLi͞<-XMA}c)1f~*̲k$2;} RYkؿ]ֈF`{js5)1ۃN3J Fo\/((3Yijp?dS_s_p2   /4]hބf nq t;)1(|-Ehr4&eM7'SB{=*2Pب۵[I畞FgΚ^4co/Cp˩DMRB/7\VU @T2> O r(ۘLe12;ìS"cbk<*4p=d6િ:,v* ~78~iji]#Ӣ =$$u2P *J+FBzC6͊\\K'p$ ex~bjb?N;M יi1 MgFF0L?5Riˢd|"!*PcIP:gk[Kުt&c[e{ ex>kbĤY/H~US[^Q']ŷK0dlzOƧlOZ0^pp_w<;p5(!\&,fǃLO'&LXď<Ϛ Fa4AoF#"9[ړ{> (+kN\o?q_o}gyEGsѨ08}# N. waj, 5_$sJUہHgD4=@@J _''`6a$\fc]{JfA[eK]+}jzvwJߺiI$x]xT}nB&Hn+(K3͎ ~+;jx1t.Cg gۛnK-( +-+ endstream endobj 170 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2322 >> stream xm{TSWo7h^bN냎Qy1P^`B =Ny(H ТRmk+̪3vVg矻k0D"q]VTNf˂((.r(GOFu,(UNUNK~V3L|o c^&흲Kgz&& 6.!1dKfgf3& f0Zf0~'3YgF#a5sR2M&!;qc7beo"Zl{NAN>&7\U`7l mw \Q@p7 h޽C/z_bӗ"Frw| 2afm۔|ܽ$gaIlO(2U ٸ@mY]Z}Y%#0qquw*> p1TCDcW}u0E,)%#$UFg+ 3iP~6(01uX3TD@LY3F]9E{^e~qgkFrb=PQ%{ tr /?އ)rA.H&"cq}A-~Ti#u݃%rp2qkKmG(*iGf$A`eEnv+-\ӱKAt1/?_xAOLdQ;x7TT)LCPjS.fP9:tN$ΜѕD1l-cB.ś |֣9D91dB|萘!kXJ,hBwbnMxD*ŸnP u7z9ajgUWTKPzYދb"\QN}~Y-a` %ރ9P3:ںy ]p2edrpAu0@7XzT-l7B_qE^yaY.n>VУY¥ֈUꮯZ;/pzl0,b%˃:/7/T䣮:)yr2~G=5eϠ2ёC}ܒ\zC]Q5~P_F񥩗Ӭ_Hm;  z髪Ed0=`'650 ߁nSSѭB|rJ\'E~]"P&\I;vgOHGJ>6| yMEx~ka)Y=8Mm?Eu_opd}}lY nWC36NO?mғ.$ CJoe壷m6/1F]& Gw Q+kc+'Nӥy@>541K\?]JSO)]ec2$TFL:i,.#a dGQY_JujԗKPK*BHNz ]UrfNM 궀*h2M< @Agg0:k­ =~ InTI oH ڳ$F!X|kFtr0Ԇ(o(gG%[r> stream xYyXS׶?1prH<ڞc[V[ZkmgE'PQ  !@”+aQQ:J[cvڪjoo/ :~;{X{Qv(H54$t>ʠ=LOV01 ;xr$@Yua"%K#)+"UWEYMo6oyc)zmzg|ϙK̝IFͦ^Ruj=Hm6S-Vj!5F-P۩ԫ;zZJMQӨ uj%5ZEͤVSoP,j &5zzK FP)j$A9RRj'5b JLg)zPS!Pmm%D-%!;ݷ r2.ˇLнCo Kg _9utD|#F~tF捞>:a4)ѩ.\ƈǔ2~z=shΟG~~>s6\=0A%jBR+j.&CD?$K "Cz˝iꡔG]mJt{?%6@I/OFQ҆fdt"]Xn ךGVMn#&^lL/ͣcC!0<ҽ7Fh5߅ hi?q8b-G"%!h72,("AgYO)i,#rj\㬇*~ؗ5@[k(hiuRF(RlEW4ߑrlb.PnĭF&T6[BopVvqZp1IX߫ 0*> ~2d}&q­8޸Y&"l,8RwO1F&0 baʏĞOHIhv pBwnO\sÅFN{}IzWw}rHL 4NGy!-i׏JK*:j*x%%I*!9^ٰ2ɳd9Yso4 7d#KI,ę7?tCb;&ď>8۔[F#`.4wI"u쉏.]6{8_0$3qqሗJz htфYG^H&cxE&,7d= ]8NW@L .ٻj 008gw}@ϥ؛-HٍߙhՅ[]6^5z 56KM-&'ٻR(n )Pt@T}}Q>qmj7Qvߐ \`z!Am}$t"WGlrZ$ҋɈ_9bZn99B<PZ: e*k[~2hSI, l^h昵*m-f~+zh/01e@ ,`Dި0:^1bќБA-%^uSJv(v2z.#8 f@(RR9 Y3PlLyylcB^YUuV%U-F ?UykIqncw To~@֜hvBX3qd:i~ 3o/|W ڍaXLqΖ2>,?|SRUm}sֈ#T LMN&daVsi^J`@w-Q)^_ZIZN;M̸h]bznLsgd:br % ~'+2Zzbxa#)ߙIgUBTV+ %(] TP]VK#QT+BUzz<1G} ȭBY TKA:7=U BX^d[Q!V8I t͚jdq{Ùtz?9`g)T MO5TKd|3z:35GYwʡr;7΍fNM49I=6ԚHȍWgd܎`~HutmiKq1 |~,` Ogx&̻:kme2)bm1;aص{:O<܇z-[ 92$\g^mH̡l|"{4TIJ)'b/bI~$:Oute5t ’'8 S,ɧ+n~rCvgVGgX<H\ktUrt x[``a,ߜ 3AQp,4|= \)aa!XH^|x;=?;}'%Uר$o=fap(*4b!Sζ@,5.5_B(qIӪڒNj >G{WB#C5 +:++N m',t?%Հva.-+&P@.$~ٴWc{<<}c{鉯,uHD˿Cl(Rł% xwI=S.ܜTXDH$F''$VL>|uio/d2#Ր_{ Y$,]23/ }70^õ**5a;dy:d> OxI|ڡGtw@{!YR-&:Je<~BmWXhdH$(;NOYwxpAޞgp)h1dP2o5{'+gX2i@{>ZҶ~JۓO@<(P"omohi5oL&?20JOƳ5Q%ڨ|B!EQ)5dsٓy\ LbAnek&#/1d%Y8?1[P d;.pʅIdyF4Voc[B:ɀ T q2B+E/O Ư Ő]%I6x !icX8\%$XX8ӅB,^1:m\2KIWA0*)Rmyݧ'3pRjd0 Fbtp0Yjҵv)y>7_Qh9m2,*4筛Gt-HaJx^}3Kݽw3K3ѝ 2,? 8(U/\)պgrE##_.PXep=JdFflF>+s¸ʈp?/Tg.l||Iz=A X6qgCґS'9EH&N]U/'^_bO@dBiV-e:>7dz\s:'PL}de:H td5Z<,tfHc7pȕ"u`S߃;V1(| Mh7&߳;vC"}NqZ`MR& ,S-sǜ8hOw/==b>dݺukOec~P~N# -JKNMKdYLU]n,2d@Uߞ[.<9| M'i(qemg*3sOs}臯XQo[~yf?.w 'μG"Y!\n\ łZvxC,Gб#;< th+vNA7@!Ƴ,Tt6:'ejLJPixOcdT]2DWǕdggdpx rIyǑ,&hs=pX}CfO+fftX ˋ'|bnu4T3"l5<§W~坞0`BS:u~!G/¼ȕʝ^%$D6|u{. njXmWZ ¢|8SOrC6Qgdd2 endstream endobj 172 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3605 >> stream xyTSO:p Rk'Vl^[pZXAd CH@  0(U}aXW%pk~ou;+{w-0@0Mr{YKCZ~Bxitng`\Vcbq ҤdYڢů|OWZ_`Clہvaoc`aX[6`b͘ M"X4D [ 0oLWq"atJ)@#BKܞBOշwwl.p|/4m}u/ `4\p;-u閐CiP<`5T?Ya\FIۙp\J2M4yՁpI8%8|u Y W ;nA4F$J{f.ězg+q3.Y74\ !=A>! f} IQ#^5bݺKϿGjgC2 v0ƣƓq  ۜ}||rO4I=ng睧sT|w8΢WqIУgz̺TVx/7\77El+8v,"r>aZyEMv'v1-( ǵrFʟhX[Z,p@HJn&2ߥp_u21x$f`'9/(2s`QXQ=aN_sZ* E2*9hADK?TG]`/b.hUb+"Q*" +wA_u\vpy_N>z%!=.vBhgjپHfuG븍ieY;DBbQZG|-_;閐y)v^x9'\c($Px_0qcYgHeM+Ʀ3) MBR~qÁ5](2,h`p_[F> Фdunr 0oKuT?)So\&7_y29)\6 }YǯyUSPka[C*+?2/o.GٶpzTWE賃 , `LFHݪrF%wIdBn3 S?p'Ś eUZ/=ΤIcu>\c$Z~ ːj~>n٣J xF @^ C&hW 9lm͊!^ ނɁ]"6l<.ٽIW2yHD]T]D>2d`v # [8@= /^Q tl2brX=r q!wB|+,-y3Bqm#M."= O|<4t3&~~džKPzppSmWYU@V9ų?[,?"rF99?B en oA1Z̷oµiI?!5YV PDq&qOf{jjf,=wbs1.W'U^}nO5>w{Jȓ\ˠOS-FtNyUOS92 YZc+ְ`RDRMi' _Nї[-["gK]RT.|.g`k턕Uo$Tp]I-w\S[\ & kЩl`fisJ&Hƪnm_SKa]jPg0^g9f[Sw;h!&x吚dySbғAA{3PWq?k}qqEX)rXB Ǩ\b`3";\pU}m ؂:,}9Rs/+A ϔ__o&btYHkqpu;%w®ˮɸ2O K66Ȭ%V&kszNi A. 'pE 嘚-S,Y+|q5NZcj$ФH-O3e| ih1d׿W|Ȱ8;/OBq1K"H͋ZZ:UPVr _}a0Mb]Q6n{fVR>[nq4Z=k\ W4>4\y~ ʟ}L3>I(*-9k*f7Z+Ϡ32 =IA| ل!i*~ٕcu f]ˍ >¹krى D+DҚ! Fx~fʌ|S)_m )U,TTð;"H$endstream endobj 173 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5735 >> stream xX{|SU>!$8fh{旿{XIŚifaL>TZxv/[z0}{jf)?=0cŌ%3/L:;kxߥ\>޻ 6w+pT9MsOmLD@!x=-?d1NŬhVQTaTH bPp{ag+jF) FЖ@ij&1Fc1(?R( h|1EHP, r"9c#!FnNY O@ HXPmxazf4hcxSէϣɟ!֯/8Dc\1lSf-[I zҨEWU03.B$Z9J-R@ % oSBMs=np3]\C%=hٌ ?zs]aa>mQ!*֔(vz,OE9ڽB@6TLfU3o9c'DL=4{σߢ>zz [stB!vy=! 7Mf#h Ab( ۡ71h,.Z^WK17bf2 Ο³ HC91cnDtK"-U-WuF%h:XKAuaS)Ь۫=ܳ(L\.LMfqM=uDs{ \~r&3)1#ͼ~Ͽ.tlE)\VǨmsЍM# =rz#`jv\HY sHoPij5G=gǠGʼn?@ʸ]cMr;%ý9h.׬3AG=/eu;:-nv2jT}%Ag 1\HB>|9˵]nhtvG=ApzMәPGuܭaYn<SaItCyLVQR$-52"dz$2͞ehEp"+z4cF\@~")ZszhIxcJ4® Cx9.7H64C1SP f4wwNY9rXl~ *p( X-r\W1Sx)g8>8's@n ytBz oRa xƾxu`SR uB:WOHq О>pX[DGlހ ^t*N_Kϓ}}ޞcTz3 x.B\G>g6@7T$$z[e6(@OJ>Wo#`)|`^0lS @ZMYWC Hd|ɗ;#c1)?({Lw|oi(?@g[T`#4WW7v覗t*x5Vҧɪ bڋ R<+l3lnqWMmi}1DawC9HrMV!y!m`wE3vx_m%ǃL^c3C?YU5 %eqo"_2VA[+Q4&xHLK1/vvU{8 ']ޖ"Hå>G'QRaj/)xAz|A j z\@,yMC+ dK+hy1+7ѡ+g#Q ͕%:>*wTHA kYFZ+e^z. -4y81=15EbznqcN(w5P[P ƶ@$Oڐ)mq~&_?ѕ-kb_`,'}m %6JyO/W bKo@ǴVCٕIY;?鵩u&m]%]XɇG,6Jxê C:k"!ӖÇ/)CO&ԎQgl~EMFJ"-I@JVwo>jZgBYѪ :Z)x.zKy\ð/`h28B]¨Pg3% WYTV?#>btZɄ6*JV#(A6Ub W^Z" jl^  |*P!E_~f1'CE(7Pb{H|n\݁ߗ* Zarזg |n*{5r#q k8Oڼ.{ph4nmݑKbc1-7꽔лz?./M4~G7{b!u?22q{4kr-9_#6sBR#U2߅9>L-耷bQU$f@j4XJjQ 0Zt罔?-CФg;&g $^óO**k |wEHm}2⿚vV]Zz'vSnīA %g!?S<^fPԤyO=5l oo1 3%?r %Ti)mR$Rc-M plyoMJut)7 cx`ѴlM*oK*ԇ2Z POxqק?@Mݛw~p8pzO`qgj{.ok2tTycR8Z0Aj= u9[mB .E }vX=- <-o-~K5qJA!ֹmA7XmVǫYAH$q6 %S$O'O[(=0Il'r; dkʘ1=Kr=4ZY-pb647)} >hc)g h|b׬/R#мp߸j]dRj MjK#*7S2kDw1[*:^OB+揵%dgQ;6XhZ}!74o>?^f _r"d ښOwO% `yl}7]'@ L* *ҋ%gCG#.obw)e`~6of5e3CQ>4ZAHŶ+pFe-* 3 $ SgU"0HL<*̚ Qz9.y748.?Dn2* 5ڟZ.~2W|غ d)ʍ[MЬJ:e\U9M4Jw.׶v|6j-砥\O'y2Uh4<6Be*rK!pO\7ALjGMX:vk~fn>Zwk`띠On G'x%FJTP|8w抷?@/Ƿ3v-,fOtlNLB^ReV JR吅}'g, [rvN}$q6s ֺ5uzwh?ȹCPd}yrf4 47$!|_¥j @I 6Ѽ+z{ev*7,9jCE5C#p I Ѭ7Ѽo}f2VO=y(3SSO?֛L2 |mMqQ*X(*-k;%C%,$G#(03ʷ8.p&/y*3, @x)d@y| B9V[+g2m!1z:Zt~qo,2"΅dJ%F 'qfyPRh^,,}OB*7/d|Mt7WS]T(lp6{l9$|vx&J'Z4n.(NIP&*fHQAy[et/:H=/%DB @O=gLT<:k|IaTi*R_!aO@{71nHeP JL9O<c,ݎmsNhwF$A h> ^}WecN[q0Zn~|{29ǽӯ &߾=ܑS({b1IXS>Mz֡ pč dnpNjZT_@6q%>\ZE w%>H#ހ+ hHs9v7P^ol JX.f⃯i =:ŀmFCtBGsK8KFu^ d=8g3[pI֑K'w].RRP(F=Kx x މ'5H[:^B|Xl1VB3lƅ*_KE.uy\jm}NAw[> .ѕM| UL %b_l)۪T:ZGm.R,Ӎ 0TʠuR4/x4  %#0Haf+){Gn,շsУE:WJЕuܙZo0AO& unGk<nlj|5urpCgkhr٧O'%kendstream endobj 174 0 obj << /Filter /FlateDecode /Length 1214 >> stream xVݎW S̥qz, *!l/dv74, mEb_T(EyWh4Ltq9y71i1|-6Ńd: H]bbPިwE|3y zFFda_w]Ve PEB@p"2[xCNN9TU+60 jcPlq}}_Y˺ڬv8̇.ٽ{ vĢdhrveuf)+{ΌO"yFb'uʮ4*䶒$#uB~kD𲫺UۭcE2]=V^\w uNendstream endobj 175 0 obj << /Filter /FlateDecode /Length 288 >> stream x]n0 {"oOxHȗæi Tda'bz,mI_> stream xeVytSUmcr I&03 ˨E6QvEh閶i&mMi4lMҤtI7l82Q*8Ρ+A9?$Sν7SqqqvUVxTL}23 Oݙi/ 0_s9YPp_WOf2ikWQ%Vs5㆔3QZPOQ{}~uzzzBm8+QJN-(MWJ`9Kކo :9S^MW)LaCNdihrjog 9ıN7?;-# ¯Z 7x%k&B"<ɏ|Sq&Ƶf!rU_zml;Q[_/$8fLv>#RhNP?_ڛYgM0AFVr~qa yG.K7/™D_h?4Yqڬ/gawN/ y, )%o2@͢q07/Gx.3{3ċf5$ | 4ޤNO&F͈2jd0ՓEb4۳5I5MK]Nkϯ*w/iv: yTT+S)`_6BsF׍ϛ/35g殇$8\W~Vՠ`Z4-^QB ?4(ںkư1"6O¤dz9D"v:!,ڪBo*tm}:@ d9jFps:S@O=e z4vU]N~8o'NbŞQ tzLxBTBJY!n`T'3F'diHK,Ewd0\;wi{3_7C62".su@sTjEaJ?eozf.deCN,pA/:?T*Eal_rsW칎1=ޚϥ>u-v΀I Wf zkF"wL3/1bDpft0{$ӵ]Y=ۆ%Vmvdn ­NV7.zoi& ٧Q<^`/IC(kSs'<1[BzPM`M@wkܴ<{kI,/MjWyƹAWQJ|UUy4 | SO4iGlߙi+ $)&CTk*M|S5cd!dZRK ]͞W<fXUܯ ?`9Y /b»ư),Oqx\cK _qr i C 8[x,vxU>1G7ࡊl?I'&O~z 8L:fDdbI NeV`=yd)Ij@|gޕo'CB"@Xl*'@^qAVmQ@;t7yzc諰iR?KlkwH P *|Vn)5A!xԌ׽娱t;e 4rb0g';@sr#\v f("%>qI"(F=d"C:5ΜV%D쮢L%0 ȗbӱC/E<6Cy"{XI2,ThEt\F- <,XC:3A(٭`?|#/c kKeÅ3RnouDɌ, CX/3"n-GY$'7|-L3d^;"؀¬ *@J㑇vՒeV cAW)n<#6ZudM 63Zmz "pw30Fߝͭ7,ʲ\t- ,ϲ\4|ܔ2lJD>h3}@Q&'[N臆^S(kv>xܟCb~˿D`򔑻8Ԑ;xwDT@2d)̙攀@O>̽'d%Kud]1sSϟ3r? 8endstream endobj 177 0 obj << /Filter /FlateDecode /Length 163 >> stream x]1 EwN@X!ʒ.ZUm/@b!Co_Alr# (laKH0Y4|Lb'hnϦmC, %3NsO:;RJ_TJ@7s%$3![3S:endstream endobj 178 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 220 >> stream xcd`ab`dd˷ JM/I,Itw?ewGۂ7 旤g2000303012D|_cew3~Ϲ+tstVUup4w%$%V.h!1mJɽ˺JNgwp=S's5L<̾3\WXBy87Ξ3w2gRendstream endobj 179 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2104 >> stream xyPg{n\$ -ݘHV4 qEE! dNA%ALx&nkw [à)+l{>-(H 9!X-3dđ%/n>?_2|mɕ+򓒷RקefQZ*ZGQF*R2*ZNZAR5(΍QT*))ҹMwkpzz|Kg2klVzc[d)o JqJ$+0}ո?oW?R'iX"e\"0'C- qF R-ėx*sXT3VK{sudB=j)W==ibȅtIKL[XnK@qi50 T2c{:y\C0GxFE(-{S8չ>+ՔPaIlo{k]^0V {+-JC5C8G meGΖ@<NPs!/3jmIEx=؝7r?_ ENwjI)oYBt'ҦFʠTg<؜†*1]%bam<. re d]P-4ԵPo0^YV9q*cLcU;U *feeJky8XjS7B@!BQnIaLJPJef0^;)dZ9oqgҗPNKOd{g;:^q8PK3(SvNzxB( 2Y򀑨fV7-YIG>>$1I5`wfI'Îk>}AOhsPv@k)?{1xknL&`\ =H277m/,ݴVCfݦO/Ve*&SL>ePE冂:8f^&ǹ /;KBtBҠ5kVMfdq0MׯFO2 BCFR \ofYZ"xLx!H=eϲ3K.VW` =+0u;;sŎa8p*$xd}=|9IDMK~|xz3ͱ .Ӎ pD )\xFO&'6ŮGQkl2>4dh#/8,c$͎~+Q3dqӾ#wY aع篇Ǹ8ͩgʵX#cvv{YDJ?  PgPk^s[ns5`Z^G'm^M&NoЙ://endstream endobj 180 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2911 >> stream xMViTWG ةHcNW&z2h" 1. ";"; " ʾ؍!D@VȎ FrH2J&9 13Q߽.MQ4Mc'wڹ':=PwH} E`_׿[]t6o 9na==#󰗷}ifZJR˨==r> jOm) j+eIm>(kj-EP_P[jESu~'l2DDu s+&yVY߾FY0|a1Үv>Qтs$y>bf׾1 fpG㧌*~WHX,nւ#Y53n&F܇{-48*78z,f(@ sG' 2p"ahnzxѻh :nͭe7Mvȅլxꟍ탓&m#~EvTIz8 czb<㭁%Y)w g18_5z%F@OX{`ʇ <4!깏K}'z%XANZL?#o_=*6p.fC^>Z*2Jci6O.fҷu ,_ZҙH [U;\/ yc@cuG舝\{=K-G?T4Χ ETx0-\WbHF~k~YlhuCҀ"t ]pyo4otW_z4uw5OA%D;7h6K>a%{`. VQ2 is/=8'vM. ywŔߪmMaoͅhc9xTrv\ #n 7`-Wj9\~ :r~~z?Lj~*L@MiI`oֆN V?= z[j2ebYI:uUMfVx(0xFH"3' b&T{ h-p #«2f"ԃ{U~%c~DrჂA$DE1E;&P[ׁ2D.H0`LI!vȍ vv/2O*uZ$ȵ2г #Xo`|j.)2{*#56=%v Kjl χb -s@h-tK5 "fW& +32ZX|U3; gӇty&گp驐 lhB* 2]|-r%> :["SeeME޺❚S0-&#:qs$'9:a5gNK^gS R 46Q=2~FTPv;\xmN:nsoaYv *%_'gV; 3p8_`Ck|,}]ZUėrχ;pecRFJ`݃$QQ_$  Ӌcr团oեL?Z>{G? h~o71Zg;F]Z|KSFv^'FRr!,;& 2-z $hsŠH(\qIŒ3y~rhEXze45:Wlg65Pdc*п?ʛ/I5m+xJaLwqw\6z]VsWΆzƜKb&E8KjF9$W% 7+GZM7:GgmՌEI| p(Ouׇ:ǦE/`qH3YE3P&%YjV]u99za9{Z>]Sk\L 0+86+` C2' J MC$K m+=qM!脊䪸 A*X<,LbjU6Զ߃NhJ,:[A5knܚzF R{rAn_ccAq%4+5sA.q~#3 22k!O UQg#Crv wmp jnvon1?6]<1K)&\&dKɋ0¶08Z"n Dq[L?ju/:o[<0C?ϰ /endstream endobj 181 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1563 >> stream xuPT]//+վ7kR,$ЖS D4)i lea]~%rAŠP[WFˋ-Cxft:2Mgsn:P2޹|9 i0L|[LxyOuwNs?%Y~l@MWVfwdX6(G=SBtd,zݼ8}<_KG!OAwLIQ#؄T<} K惌)$F3_Uw7̢4]ǖ$dWo/;j{~$F Dޟ~833K[Mi1"zyBysrG8|r:sXݮ&c\WUVmAnwc-(PGendstream endobj 182 0 obj << /Type /XRef /Length 152 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 183 /ID [<6abc6a75f5c29fe0ae13577e7160ced9>] >> stream xcb&F~0 $8JI?mL l@hle?PlڂQ<"%fu R(,QǾX8<"@$#dwu 3DJ>?"Y93A$E0 4 "w)cr endstream endobj startxref 119866 %%EOF Rcpp/vignettes/pdf/Rcpp-extending.pdf0000644000176200001440000015254114711515066017337 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 3949 /Filter /FlateDecode /N 72 /First 594 >> stream x\Ys6~_okK7RYWXr9I5ILFBR>o<nj4c{ݚ$hh4ŁD"(ځ5V8@&@4 JPi(-8C 0ר-pwBg xDR+$2\"pJX \f7-h+pYᚃ@0ie˴!*fA(`:iApheP9  SND@f)2 RdD!H60NHCPBZPIPk`d* J8Q;PPHm@9@B hF#03( h(2%4NVY Z*nT2H 4hT`fRA@Q sR*'UF?lwVy=O+ПEt}Mr]e]B٧[t?E~ONw뼀G> $G?p%sQJ3QrO(cy1/cn x˪m=ϪYZ-|(5# WXL<}͐vYWSRԧ_nHuC'Oէ/UVT݊R-yV*4Syi!q<<&)|Vv>V/NS VN!EIKFm+檖9Z$~`Xd&.Ś7=db~o\7ljJzlU̒Qa^"sVb a'8Y5ng5 UJ+Lc͘LZ1d #+CX:ku=!6Um]æ |g g^Ԓh6>WDƅ7G;^RH4}ݻWOOD/@e|fW@l7+卨q"7׾k^UZ3Yd80~lPΫ8!]3Lk:PaIʣXB]7>d[XZYdapҧWuR}D:sMiFoiE?> +_|\aaY/' ϳy]Ư*Yj=N2ͮ"'Yݛ%4j*_<􎾧G@W9P;\AuWjb*'/vN$߈6(St:~y9myegʓ hIkL;a{ k-h&A  PFuk4YDID}U=*f@ 2<H! PZF͵Bᾍ(}r,h6 J;N !}t d{>GgwcD=V aMƷ<"")bΈ%2/e:=Hǿ">C[:nluHs_ǧ<uW/^-4@ FU{qpn6 co4e'Wm}9lQFk۷XMMlA5~D O=៝"{$b%_wyL{Q?63ZiTcvG[׺ 56*h.T ?<8<}q ! 6. 0c` ͑ypXxeߧ I'+|!0dskڭ… M .*9u@+חh5ŊY} (LN6htõyXY ;}{rؾ[Ji'_\ 2o w`1)"^ `K!a1V6q6!З3}fv܌H.o4#EIE! ZœގƋB]OB"I%)CFbdvZ6Pq|qVkфiA7Z*w7"+$:%a[C3G2!lX|g#L%qZ8H!CE,  7!!v}i3X͗9E0|m`fX >l@nR֯ǵĄSfnP BcEAO@h!>w[>l&9W1Kʼnn5^-kvQ$'<v? T={ןŸrcŶlzl({S(-6 m뷺k\זVݟ7]Kۼ숩a7iartS.ޯS1iұM1)Kdі #h0$d$ev{hu5 |C׌0P1FpEʴvDus+-Ov_7_qGKEBB!![$!U,PKK!Wد)aIqd B:"*sKpM?z c z^^gᛪceb{ӿH?endstream endobj 74 0 obj << /Subtype /XML /Type /Metadata /Length 1388 >> stream GPL Ghostscript 10.03.1 2024-09-12T11:14:47+02:00 2024-09-12T11:14:47+02:00 LaTeX with hyperref endstream endobj 75 0 obj << /Filter /FlateDecode /Length 5953 >> stream x=koɑ߅b$͋Y 9r+\9&&9!e߸xPIJ?#NwUWW׫?N( u +&J mf\xIo&cN./llX&9O.Woɛf3 9C^OgPZJE>“)R͔U cf]E} 118vm7%SFRȢ^^M98wz顿|DVZ5OH!\..H5> 45MfًoI^ h 9]UͺG]j)(FKWH03|od pA8ZZyf) zhm)pIowͫ/M71+FCI*4y]=ogjs3 nh`B}ef}R3ڱ4mw&\6mb(79N!vi"bU bEYC821(;F#M(Onw5>q2I⬱CT8)0bCSOFZ^G@Fm1lw&dMWVugqErb\O99#rΚ_Ck==$8-yV1qW{P*'g yGEVs )׋'A*zH']6@ U\Cq/I/ǐi Cɧ( ֙GcZ V rjṰ Tz-yQ*'/԰n7R{س;ܭwS#N/GEuH֐M|pn[2ݢP@AAԤ7 rA21Gv[oa:RCI|ꅯܭ.N, "zRA[Jڻ."i2ڒkN3T`o8^pY 9DAYlQ.A\{o#pIL3qpIxjUhPIԘ_-8r֋4dۮv`(RuQ;1EJQ@'aV@隸+(d* O+d= a*(R.ЬTͲ:3,`e1I żUFx>akkN`!C1Zc2hDP.OФ,}&_I `aI !TQ;İaOÁ 0L:ֻ.j%I|*:J8)&F[HQ0PFs؅?O:lYͫ%FR DĜ|pm2ffMWo=MMuQ|C,.EO:}P #~T ?rodJBpV.=$p)Kp/7W^~xEN>4:0R`:Sz*'±{oM(Mt  e:aM{&RJ0.˗әhB).,<9&Iϵi [f0~CuBAqIG ֆ t(c,KєQs ,}Am=2n]GχM)'>3>_rӽ%gUyv #Y; -)m98 0v/W0 iU)%ޜSFPW:W4&= !#Ϙ7G>frAF;%zMsuqF v=T\{˅'t@Xt\JRBTjlf)@ Lډ0PoSDd;u^s "CiVe3ovOSjN^SUzCYkm0rg a"]Y2[?h?3G ӛ sD8a?nfCL[=n>]}hﮖos#^QD _$MWIyxP0*8@)<㚁2!FQk\D50 X [  [ >z!<Dz;әCkb FEa~( FHī[rκ/@WZ1\ FpW$,dQDz{H^2|H{#H'dVsz3,63N8SdIyWB1 0ϊC&I#KRy~uݵݸA| zUlI(7a|:OqQҾw#=5|N y諫j~d:㹞QGl gl1> ~xi>Fg PVn'%#dZm`^MẙQPM$].\O3|ÐGtA{)TzϽwGi% ŸjS?[n^Oq%G|1T3Ϯ> RdўJ?Ky{)NUzO9#Qq9tQf 4T؝)Ɓ>m`1靷A1.W[B)4{t<}dmj\q,u\wgcv~<iAfQYRXt: i (Ŋ}.aXNv:ASR`| (Hk}gKujr'9E!n[wEuƄJsW|m-f}&yqxe_ 4yzMtiLՂ# ~z&Dap %,?v*wVm5ri(ݷ)SJ'`*ɕu:vmXY(p0M&v1_:}7`*r^`c+ PK_o1C TfHQ䌡X,?-HtPGKcauwfTWSUu1;uJs*|Xʙ?{=ո#XY4ak0W?1Bې/B_o;Ȣn6~Oy ْ*yn*n3məM/+T$\{4 8nu ,)@,eAo &u.,Hu߄۰ؽ]KzʽSHM:>. C]Ŗ)(-v&c}aUCWwEAs V䪾n4τT+-]0"H$ҋll[N&~E Y}zәWo?~+M=oe _\r@7Oe֔s'=r 68v\ea#!c)b3Asa<=e}GA˳d-GYz/Y ,p,"9-DuUWu%m$txAWe@_=)kИۋy g0~'j Fb,QL?У H.=UM]V\$OȯFiͶ~4uGIy& AnmF)\e_%3B&XG{> դܫ1~obOAM.|%tQ`wh1sno> stream x\pw98P3h8vWq{74GЮ8胆dwWWwu._?;cgwB >DhT» Vs79̂\߶>{`\W5v-mWOp,|ٷew[u/!<0Y=WkEm٬7 Vͪ\ˋz_(0q n9E=8`˺Z\Y]w*54W(Z{ln\;VRn^ljxIk^b:ճqb\b` &snU}ݮhTOݺ$xy}?ΔC誛9/|)d +Xq1 @]Pʋuú m)wC4^o-"}%٢]7nun>5seL;.{SvmjӲ]ש.,O]ZTS˶Y upqWn7*sFj=VjjQ G(}ǿiwY,WfVTdUe]¢b}6jiZi110Iϋ?=hôjj%ݎS8)\a-3(ˑh)l{Ϫf0t|h0F}}ݶW*"r$x!sN3# #Ǝ' 횓t+4҄sRX>G%A=j9kKj0Iy% }8Pr7KDk͢4 +yFD#C# y$Ԟ%I0Nh'pf#Hϸ͗9#Nf8{2tXeI /u=pLy3-x6":ʂtq`I۲Ÿemx/S'$ ,<0;ĠKT{ l qi@$ڻe3ʺ eӛhE\?$ CO\媩X)jVW$ʁ=S\x0߃$N/i$WhFpȧH N%i4`:̷]8Q^_k`vj|x6jUbsΣ>'wC3_\_0_ԟ޸%7_Ӑeg V;\ /GX54!I jҢo .#a$;A*yS2m\BL5<?8 R.,"Ɂz4ZB*t zCwLIjT w$]f ՇBEP#Ӷ4r%XWuֽfW/# W[uI;*_jK;61L9, 7z1ó,= h$DryZ?P31pa(0auԺm:]eyjMWcK YA=EJw6s;k#xُyUV5c°:$jؔaBbt`\&ZɏX!&z}cxqС5Gar'O͟).|gKcYpeILtH\k*A""Cfx@vhluWbfUݥtѰV}YΚꦷϒ3oo鋃 '_HyZi<΂err. s2 %mbT#6.]vݠo̊,uN)!q6!):ծ58s1K zqAn\(\a0t.t =p)nNASfdN>^:g%#,0k#~׶*~㤆:7$zjLG'x7r0ohq!&+*cU)A{~LL6=Ջ Gʹ6^8+i;u _E%E.o(>ZOaGIObNHi@x^A2w@m}>%(I&",|Ns}D*֪  嶽K? 45âCd=IJ -0HK.Ⲉʪ4/ 8 E XB  98y$&\#tAOc/Pхf zby6BnnUwW|鱦 Vϒ$4e=/Y 6t| ֗(*2ϝS.K}aOw5=RphI)דeITISᾼ5LC;+E4 dÌ# (FCRiSW/_N1.m |rNi>vurYM';9qv3ru07Y=>r{쉗兌Yղ\M0m,5U,endstream endobj 77 0 obj << /Filter /FlateDecode /Length 3249 >> stream xYr}G*/*]Det*) {XXLp_ozfpYjEUzӃQ_lfg3gJ ,Rj2c1:k|]V(8#5u7̮f/fgd- `4W ,HpfFA+*>?$^((M4(u6@ 5׳3lMճ.f,S xfF~_Vng.PZvϑ7bzv{Zo6u'o%G/q>W\tY Mw;>˦hnrˋ/E_G]v2~$lE_,Y%>]'0kKr}~UחEqJ.+dEAzxX([Ό;kEF;J((3,U3GUX|@3@rw,fNהQ_9C=x0XiaY`>{vMQvzI T(nr(uqќj cĄjžE[[RڽS/AVSzO“q@DzO|n:<0& 8ƧrڀzzZhd`x(e=l rJ;<ۚ"OZٜqԹl.3/d,XnW㛏Գa`8ȑڑlvۭ/JR\atf; 9QrUnu'۽eА7Xڇ%^J:pLd7Ѯ3456F-2i350#c4m#cb }@!hbBv|i]&zU72Ga W S 8Tr/G.;'Iʞҁ4*qSXp")AY`aJHpƑw)Үz?[*x|BRxxa YU5E"]Cpw܍F::.ϟqRpf*&Պg fΣ5h'߭e ɢX2@H9M}wƜP4Qt$vMt1hDQj)RVmWTsm<$,bȹ 8ÅvTS$ÕBN{O5"`yO)\&X4CB>΅_uyI -rrj6aʧ'&ɪL#ο&stuNc{ux&V!jA=k}3P"~'4,* J EU&rWЇ 9ySRCa~OGbNz*>Qoܞc>nĵ: );~ T[ nTU 6mHӺ[][6MyX"ըfQZEn|3tHKeص_KM_bH_-﯎a*=G7D17qx*r)0s9E%"5yuXsD` aάP=9\w}Yv <q@,ceE_}Qu>nJG:1xz@4 YSCC?lr1]p^_u79Cm`L03TDd@$4~˕~E([ 촀ar9Kji}K;yդXLpREGq )(6MAZ6G`PI JLG 'GƁx|{o@CA:/pu.n S1[RM@``b;>۸ٰޒ(c@$_8eۮ|p< WGIfW9^"?wNbuze y޿tUl.}ӎ/CFS|ؼ M|ϹŖ*W+SO&T܄SXYbqFzY,+|R,9pt7E8+g8m Eh;Mۋ&k,[ Lƚ5JAX/s8s1|8MAi* " ƴwF`3T@ ϝ3PKa#m˧9Gme|K-OTRƸ3tySCFu.8/oZcJrZA + N"le^׏b[IAypD9q{2/ya RM ~+0O*ƭkRFF!&[8&>n8aj):،SȄTCQI̐h3=nӥ!4h`Gpp*ƄEbpN{xr:"3 /_֩ni@& -; 808dd4Yau|?IυJ!SI[Ox?0} ӄbu|T!p<NCBI&hw!P0h7M6\#.* NW'ibcqMj˔?nz/X.<;N w&TY-$@]䌅0&XmXʩ"!x*UnJHk_<?f31VE6 h.5w¨ ~'eTw?F(JHLpiKp-f$vbTؐ~y$I *GN.1+Sɐl\`A pb?Sendstream endobj 78 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1374 >> stream xUyLTW0-*֭v/Q* efa8l0 2V"KTp+nDLb$5(JҤT5 #y;"ݍD[M \C ΝĽ^:%gͦkfzF"7>!Q=BmT~T0 (N%S~ newG2{O~@ٲq[( ( ,JY0b1K*u]"Uuqgn3%Oo\*vq䠥g ff> L,4c{p"纊)\һW_~| ɀx"ӱ@|"Fe5 2Z['0=%bal (G>ёbrؚ̓FzFUGG Ւ)o>x1ÄD5(p=9baF? Vެ3B9TVg(c*lˣzTR rP񫟸6ՅX@.:kAt(c [#:.Dt; Z|sq1nցL(yOoSJPj Za`Dip_izn*}}NE9u`st N=~v9{ #Ag-ꠤ/;MLv SWPU7VU[ j4=4k0dA{7-{Ej:P2G?+A; F%щ%<ɑDEYR!1@wwGWwI/93."{B>XЩ >Y=vr*>mVoI?lYIMd@ZRqZV/-@]+Tsъ; [NDlaa$>;4l3|x $΁3PL:|7kO. KY0Yǡ*R!JiL,Yd}|mT># rleyR"o_ϼWMW@{h9AQ֘?E_73'76(因zFEgd$- H 4!1{Fχm!CKE{Ψ^r;T> stream xVwTT?p m̈@' ۋ]`QJS"·( ʠbPT,Fn,&I3b2rd70Ք1g&3{%/?^ϚإC.9{H(xcO(9yjGۊwuw@ ?4NQ1JGDe< O01Sv;1e\}#xx.g]JZ~u',%H#[{ 6Y+ ETƓ|EtIXb関ypg{V׮iq %x,ohĠ^4<y IqՅ{+ʋkv8O)[x4(T{mY'^ OEC3}e@gd"!q~YH@(>'܌ɚٲv oF[0 ZeWgdm褲'OJ~qFZb_vqu1Ͻ9dOS/ r#̈%+(|oڱuM^= T~*YE%qOGGK:j-ZDTu x{2&AggΚF*+ʬ9.&qLGSoDDoiW%iݦF77 .А#1Iqz8d$atE)kv\g Q>; }V*Ie兌8mIdۋު2z8J2/^d-ʵejfr8+۬o!k Y1m!tɠ=v+C5]P$Oi{?5ٸcsDƧDhXyb_]w->u` ڸAzqV:SLA:&yWW  Tw.Pa_~wg n1‹l:s+Wyt ERVhT s Ƴ-fsɋN @=|t1 0> stream xmWiXqui͌K\Qcb< "Dd deP ".Da]fdg0 (nѨK&%ƚo32gsOI>D"(pCx_B.aTw?X_ æA`fqa cMX0l[n\iԆm>Ѿc6:;lZ)q猟0hƉyqf0.Xf%3qewf"b2"f5x1K[f)>c,c3 Ɓ|b3l& f  c2>1ch?89.Jϛ 5 ;ueSΕ"P)ߏwu}=e>q?~ 82lLg,>h8}`Bp7Rtos}D]<:"&9s3-gZNF` *»/{`STn a+-&G6JB*iJa LL 33֯S!ؐ/(&-Xe n-ly*tەZPL1\xr?]+m?u5NVۦs"FiwU)<'#>|Fx{G+R`@S YѪxޖ"jtބaiAJ~n&%~ ~)#;rvy)~>=-5 v'N;goBК#:x \͐cʻ.]Ze iu5 `6R^`́HH\$"|+ݤz2A^{l8\Iܔ:SvBYW&;`*,#'Lp\Ɲ1=ƗoWsyueر㊌)N&}u $zȇ"4)("%bOl\~G,S!HFvtiUEn^9e kqpBX 5;-:%~p*o07 A7#k%?V[Bzq,iAt?R`L]. rHB"Etq4سg9XDgZΈ]f崦Z$gnݫWK:`^` [w96ȧ7Ǒ6o UûGJgFj8w#|h@/5[3׾J2cFAA :ur QZbd8i^/D]沓g-r9yJ'ܐ&-ZAA EgZjZvelJViM4 9=[)X#Dj}`'[᥄*鏪c9[:*V8R˔mxRFvR P+GKI0iꪤ0rE9W}(y3RF ~qu5ڻ`Ճ[V Wl|?C~è蜺c~!x MKljK|vtZQCk- jg=d_ sRq:Nü0ʶ)l(vz_UwmsRxk#}}{e"vrݚ;+ 5dhWf|o Ri cuH1P<;m\Ҡ^ŬF/Xa4Ёdzk\&21B4IBysg'fKɇ-p.> stream xuW TS־TBzA&  8 * (T*j+ZPjVETp֢@J%F;o%oYY+rKSf}(_X~]hLjcH|zclX6I$}6dnYX D?^sR=W{I7}F@f̼ٱq$.L YjQrXJbx_:9Oխhge?l`ʎZ@RT(5ZDSaT85ZL><)*Hʛ򡜩/5\(ʕ ܨy$*LQSTʜ@=$jj 5,(JJ}DT&eM l0JFR(>MQө?#Ov?;WqfbJ~fry\#ox`/T7o}ߎ~ܯCo13chi2 8#(AZ 4hter]b4蝑%Saf9RWĜ#%= 7VJ$80!%ylnh]kw͸T1A/}/Tȿ4x8pc{3J&NOUC6-[uЪV+PsMU}y!H.H Au5gE|RC6 m=uF nkx;&qèrƇ婋v$CjB 'EިfXif߉%RQC?pYR[ \Wz)>K@c2"~khQvd{x\#B\*NSHo ùrER˓f~?EB 9qHe 5ZKu8JN%W>n10?`ϻ5.ZP&i(鷯+D+cM0PiQu䈽 #RֈJo:^G I^2' >q5/5xO5,@ 2|78ogpQp:s`(e_qg -tU;hmeh;R?\wy" \$[fbbCe OVG()c!R"_Aߖ?@%;Oh꼜)+>DB@';J} O&5UlJ XÑ: Wje`Y:(tuv{kIB%xbDkl I7x(z \kg G!a~]c$XI5 PhR*z!h\z^I?10Gz8BM FIZƃqHFpc8 Orpys pu$ gIeZF?D] :`uk9RM͝Sܳ 5Y r=[lXK^yRCY] =ҁ.^8T 2RF̉AuKf_"7)N3X*kO,>'e~H 6@<&񩎐:z?Y@X#-3Rק,ţ}0+oY =jβy28\Pc8NͺEi*b'вK6ᒎn=+̳gU_8siDdÄp3(5t*H汌U(Zg/@Rw-MXK`.J5^a6ŶnaZ`'X f? v }&%J@!6(.#6e}jfԦh& ;T\\+mvtu>?Av=|4 BCC1KX_n0Fh|B92oxǗ%HxU[\?Τz^M:*B4 Jq1oiar#8˹Tpdgs$&o):OZcI߰cIē9躀 E<, Fpoj6 qJ(f ֞# =dapGJO*1~&|xԼO6;'#=ƀny̿ 6'&cA,FQ_䃢. Ox?{3o C;1l ֎;SixJJnA)X!$bIl3Bnn[ͣ3s^(Sdwj Ӟ2p ]HEՃ6x޶|RCD-y)ރmݷ{}Ȧ@nG[ 3V槚U"r a  -^( WM vvv@R![u67*]  G(85!2*(d)885H!dY,ʂ~Hp7{]3(DZNKpy\hاe`)vj Bgn r@^%la̹9FqU u2xWh_}uc*c*C_r\pZ^uywپ#G?^gwBfZ(w^L,#lp;vZK_ZP{Vu%zˢpK/M'H.mNB~C:L.K_<8~ʏC@21Jf_ȴ\Auѽ/UMlEܧuS>L=q4<2  nXwm.'+u*ˊ΀N 贖⾢ţ"՝0G-I}u" v{{y`(zz9zd96^|"'W̤hN:qRM itCS7 }XջÚ|t3KM7mIGρiƧOѐ僳QfFvӗu :Fb>g*h 6.xMz8XD&"r%u"a&7[9#I[&"p 1`-,ĮD HJl E?wendstream endobj 82 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 568 >> stream x-]HSav>NfNICAn.Ya$Vg-P64C{wn=e.30ɰAHaЍwI7 v(B|# q{[[\uI˭Ҟ/Y!YFU-{#˭ԑ$ #pa.%1nYS\+ 1}Vq,Y)X_G!/,K?`xDQ"ê3Ԥh4ЊjÅ[zL=@&a4R_p(?5ao9 ]M.%NXOJ(00O(@$$?L4rh%FVF+x׳zyw1V 5pJ\ \> stream xcd`ab`ddM,pI-Lu JM/I, 154Kw4񂵛cw>W/ 06##Ư 9ߧg8Gߧ^u龜^}UWdb(.aendstream endobj 84 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1374 >> stream x=YPWn*66Ck\b,B qA0"rAY͂ea@dHAMEcRcܢX‡~4enF4m魌IJOڽKu0n6-*$i% 0w@oܱfOPޖt495&-6>FvQK@j7DP^j+򤾤>,(2 H3[lv19ɼ1WnQv1  vq!+ɲ)WX SSo I,N;b}˶IwbR'Deφ@`?8> =Zձ}d)rr ׍Kܘ{0 !8X}y?Wp 2?gdY'& P%@k&GX# Ӟ GvdV #6)r /@J3pe )ݶ."r0BZ܆/֕}\` 'N7tP~> P fRρ Bb,IW:[Sp%Ҭ7{X7Lە)^EDboAP”r<O%|9SV*tʞNW%> stream xXwX֟uQq(;5F5 KTD ,Uv]XTHPX1Mlo/9s?gYdMnos~wFF d2jwwuz~a^J!RǿW*`yB 75d;Хaµ=}|=Tk!(x)S>c+o`W)ʃGRuj=5z6Rj 5JQKetj95ZAK͢VRUj5NR#(;j$E9PK)J B(*"!!KtgAo/ו32׆>lְl[39]CɨE;:|dWG]; n.8u`T oMIKɭ\[(( *&K IdXos(PF5Bko8A`P#bQt*pZNcیLr1yqĞJZ6 POļ;}yjSf~O Af]A6AMaln. _˓  l2wN,L2)O%,E 5Z-a(*U 1_rFhhRYEL脯q7d"JAP*B 5&lrx(V|3n8xq]"IUcC.ԺL"};4'hGwV jH;MMأҬ&]f&l]*Q.`0S' :m>C{5d^xڧ3y;6$ɡSS]E' CHH |JF<03կWU"r~`ڡJ@AYA<R ڪk!DN^"+ BΨxSI |E'Y5_vΏf}v$677)[_Sf;ݲ#}`P):3WXY}|'W/$"r) {8='x[CRӫ.g YG̿.龡>K .dGERYϵ!&N}0tЧf008'!}Rl fs͓XnYu7Mnw-jnxT$:+e(-RRjtPBd9NH_8=t$h-wmI|PͽJhvH[C ɢ;]2H Wwb%{O?ȧ}&=$9?^jJ._ xTKR<\fꂬ+a}БC78A_I]1`Қnd]AwpKxܩe-votF>Khz0)/MKN}B40䝘ꍝI¡ԟ i&855|ruZhte hZJj`5ބ#mщ}&y"x>#( zYʁJ!E٧g\e~sNl pC77,k?COzpg.]7*@IiK.bu2(z<1GaP 4!UuP.Up|< R\ʕqf["Nk4|t0ôrAZa]*v{ZIoai$#}k\ Bݗjc)cy cP sn6ᅛNRynȏOgaqHmT}yKi) d U_tYm=6O YZ3l[NHvO[g8P2)>xd$@WtZ8B(bŠi˞(롭/l}FOl 7m}&l-r"|](BןۗL8$ u\ZojO{/"Ɗr)8XY*GHR1̳vWg]I`HJ$;kUC4Oh:Z Ay҄܌F(dzN|@ɤgCi/$_*U_eLoB (8 ]hJ91!:*aQ"5-^g\,Һ h,YP 0"?K*q51}Kcw/eWiGWfBPa4&f4&X]xkl'kY_p$kl ϛpc!2к*ﺍkQLF>ԉ#Gxvq0D79s[r l rpIgXx[./lVUC k(2+#2'hsQsip _̼`ID?xDq'EhW6q޵,nc¶pqg %g?;WYcGp Wr] wq,|u~kV~Fz&Z @4{p'雟ٚC 0U / +QKZi! }t!ЎFO ,Oc7B%|5N_LEwщJʓFs])!*^]PT%T%AB!!Baw:+cYtGVCFg  (ȁ܂Ƙ`o>hMlnj˲Jy5IUU d%q^^7{utu9B${Wjo=v&@?Bw`VW$d6Kb>rԐ |J_Ly|l[H]Z6ٶg>}TM sVdP]bd޳smv0D9ͪ8خɷ ӯa/6r )XfUfyf?;#\=-(9ϟ 2ş'xrbщ.)pK7E±w  -12a.$ Np]F?58ȥAtىHL)omnxQ%RdH]K9t!&pڢ 06L!"ZAtn HnU}&*$EPxLԉr)EA2,3̙ H'ucff6زȉ< ZL e/56" G9 ).ΓhebH_͡?9bgqt$+RtbQM'oHJIg\܅* 3cUzGʉ^Ί- #}([.P gPs,gDTpk*I΅xEE $9Sum jԴY|.wstbzT 蘘֟>DsFa-GtK[=8\}A^B{_,X9~)Z4-fId-O*O&%NĆ(&1d%Y8 *~1w-w2twq•nܸ2/4ڄvz&ri]Δi3D'%ƦK51 ;;jg*8w &m09|-bΕq=gdhT1~骅TޥBcVV sա8߷GbĠEPb'պGR/Ef귑||3ܮ1՞}TK~n^1)fo=`EL~s4U d*<}O}Ƃ SuIg#hyјc?|8E/endstream endobj 86 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4776 >> stream xXyxSUڿ!$\Gν"⎸ X֖+]4[=}iֶ閶4--Zd`(q\qOqŃ=i;3wurr{o8)ÙZbbqQ>Kb!N$;."xM#/{b#2@ "8~{SgL}³f]ODִR=#ʮRg$R14zmP B_5vӍ~}9x 꼔x "uC,"HA)eQ*w_i$_./?y!0M|<붂˗ -qe$(D%'Y@/A)<4%avԺ?D<;\;yB(]f~N 1rdgDwyh1La#xSh귈bwoQ. C`k2NQEU`Rs{ī*|Y.F$Zz}A媨HdK@>OZDhHokbS 蘢N=G\\Aޠ>~rY+ꣾw}K)f%b!Ib'Tivw8i{\ȦRѤ10xm9/,XZ}!wIBjMݙ Dhz`09U{5x.ySRbqDl\ʾ/_n;hP Kb`ܴuE4s$yw.SIJ3h4OR8?Afj %M`W{afk0>1 ] gk~۵GEoE9l;ZEBe_L.)(eB̬276y<(=y X,7E*ZV(A֗D< ۹,_4[=+;xuAUPi8-+;?(pPIV+;l6ufyYMW]lQoh29ό*1 3Ccho^E8"mzV[ȄR]e^s0x֦!zh+PO#7҃'B~Grs’As"o_Wc@nʍ{մ6J<Ѹ߆?i%PZj7[Gv*DRN?r]Ftީ1n 1 zP2 -qgcE7js>B\v$ R?(O<\r#ia1Ϡs@(*4Zj-WAڍ~?yhTYM~ƿ=c2kWњ\mR/iΒ U&.FpuD9ƾ饊J8z74qarmoihi WKM'+$s^8;/cE q4 %ihMBd6Ì븥|0e2w=x`26V`?ϟ5a%}ƿ+8:h1P\FU-y RVo<{OCh(+ʉFe+d);# ֋#;mbfsltM@6+uYJ9o4ftӂRǩv\*"[VB?`rMxcu%;Tgowx(~,E[&腉,VCs7[[㝋&}5z࿍wd} k#0` ̓;vyݮߵZϝ0jhT -gچD=S&$%1 (הK<{DAQ.[6r^0:x}=Z {&s;q7n`tKk`1a jwY_hVg|e8CF;:[DIJMbAƪ *Lꒊ"(^7Q@Xyk |Cl(Sb*AJv[+O"&il.P9PEx~7[ XW6#<ʅ^g<~.oh%-{wԣgpPE5T$@BJit&DeX#D8!v3 Kv60!yu?>i-/8bb1#}wjve,NJjsNroͼ (DRmNO߶I4j:Wf^slv=t*Ȯ[?}/ŏ ੥? Tr ?I 'h#6u}ſ5r]a*6ҫb]T[:JCo\d(6IL)(I]~|ҿV1O"(~sfG(92љ8Ťy7[>(k-`yP0ҙ8uKl,9(BO]CUb笍A{bRIh1 11y@\ n,-/'̛$Ws.Z *"lhu4Y$?c'؋7FňsQv{7]\U\ kQтdZ}WLnI%YѨJ][ u}MfIW]_h+ЖdxS^+yAW&z`+ǧٳMgVĠ,C~#^:+ Ӗ.pYuH HLjޕJ=9+tzkq{.L޶/*NQ&R X`w,99rZ`K+5Bi-SWQ:0 #Ƈ"(UPPX6ģPb`Q_M iNJ!T4NƙjXlFټڟqg+l\a2WfBNNO̚n=+ܘ+ FgЏ|O9u] Pq7ʌWR.V ;X脇jnhV2\v7xb.It+ (]oh>|%|Vչl'T|'-ބ-t[͝@ۂλQ.} wr.qHqB|J3&Oz iDIhxEAv3-My">Z}k=>Qq-/=Foҁ9)Fw1Z#3w3&Ϝ>䫍=zmL_8}endstream endobj 87 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3221 >> stream x}V{TLDkCm{S#bJ[j1 $@<9G @ gժ=եb=G j{|ZِIOӱ)pt0\)6IZi➴xg|z#\Boz坝oS$%1FO ϝmSPV,*7\B>'r)\(iLdN^)ɞnJM(\'g$EZC!K3 Tv]gG"wĥp^vrW0A"pSkVZB2(MN}PdW2f QN_˭lC& ȯѦpɚ{[X"R 4LfQF ^#ԲrGC+h&d*=5I| ivq"PՀGi Ä7®6#!QeQoF=X?|ՕkצOm| w;Et6ИHͣفbpkmLw7[u&39mmc&qk7iUs^./យ <Z04|[ǕSXvzMIv`GA'zH}6 &W  )NNbh]K AAF0nb,jE4&/9'A PSro!wfMcA38V=H?ut0,"F«{oؔҮjh8Rrq"sBт} Q_n7t{"#'+ګ4zh65 krSlOr_zaP\Üv lp n7L&Λ|U*?"\:*V5J_:366bǕ2/)=W`q̫ٷ_sہ~^EIei[`Q˴j!3wNPS5Ws>ݳ _ɻ\ ERD[X* 5w1I$>f[^nk+1hNhA>;kn|JbfgS DMpﰁ1(|gVD&nup-_O0e]Lc`TnLraQyaU6pz@Yx>U`))Ir/+!@+[:s_KnX0 :588vECUz -62=넠b$a-dD]gmS C3hДtIOe#)#@ƞ#@S?LWRʓ2{vnB#ge4 dA: Ab̑u0,JFB*=$0mAE@h5YlspH=BHJc> :-J@B"=I"/e%b%QsPȇ F@;hknЮ,V_ K@v(k(h,_a&\7 w^͸Qz#Fƕ^ &#k8#z #dTF>钝wۿ_{ωkZߥ`9uF$fSrXPeӣRФHH7咂 C-nhh'H?}8giZ2b r4h9Qt[ 2PԸ@~Xb&qtd3_xqybѱ\ }W&3f(V&'1 -4o:Fϣ梦z5 5U= YF (QDÉҞo5_XSEmA np;FcF Apɷ`!:RHP=?_i@MG8V״r|vw">QBVYk*>RNu6`P$ZSh(:6aa.7NTx\[Yoh d' PpHo^5WM&^@QMثYV =)endstream endobj 88 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 923 >> stream xM[L[eC9 49.JL璙9I;[F`6Ҟ^VXar)+",S7 Pmntc*2b\̌@Mio</H{撞ҟ.:_ҩU{0US}3;i&=:7BPA (Y,HIH-`xp%'ݔF2|@:N=A$PR/nzc.~&3"_ N Z*l]F{W)k7vZQa Ky+X&7^ak'JKi'Y ?F~ =J^yj5_& rB'|07甿MHZψ/H1)q0LOW z0Q]ІxXE:gn@Fg2J;fǵy7z?ҳ9@}8e@ؖw#NkZ麫Xsw &MvRi e¯ůZFvX5d82ӀBm߷L@vnVO3SH@PC JB#琎:ř<1ε(}Kf֕JqxD[rH[=O9Q^$i`ՍxD̢^.fjVRa q1]a'v u~{265jv~,endstream endobj 89 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2912 >> stream xUViTWG SƜ,YI2.ȢP6لffeZeߺB+FeSPbhy9&LzUNw/MP4M! {FX&wN2<_$?'3`.sSx\_;p)zs̖ظ rm]Gx|%[҆ޡvRRnrjNyPRMmP>=j+@9RN3F}D\(WʜzZFcBє)eC_YW.AT$zl޴t` -67k7ӳԢEկzEjm,MՠƾjZNKbzCš2G_1 naA-x)3KmYpDa-|&uCw/ӵ=74z(JLr߫vα^Rq[Y?c)|| N-F疊>x M^Vrmo܊=?kd >8sPX,BZ2p*7niq,28Xr< NDgw"B2>*8$X ;a\X9N?3"u ܽiֱD4nMH/n4| ݇D4ҖqKq s_FՀVǷiB0)8Ic9D.7󤖠!U@{~ڰ҇Hw]u;vO;~2tWȒwڅn]Iwzx <)B@55ΈNn-M۾kz@Ow;{_,64%Xϰ%R|YҶ@4-1 .d/Ŭii5rK o*AüJDv-LV2 faoa]:%>wdYlIElYYP+%PPUb 85G]hin*Ou씪۪i!wFC 3(*JH} 0tp'F0bS?KOIS2Q ^랲=ڗr61@; Ws7 *%ѓzNM yѤ-+`>@w> Td$UՇKj`t z _Cߟ7+PUJ@Qg* rs 4J𖀋I}0w\^XRZ#O5ѧ|o5v{-c/O{+<'sfZȏ/>֛1{ْso;:#K2$- !6wCF qjC轅4A<2=a8=6#j IjsfRWYIsa`5Ka{:iNR4ym8k/fHlp]E -I wwK[N`unVƷ6VҘ)jHa/j0F:l2t;\m؝p$L~(J%v_CzfC_6D%B39R,>9|&gTUFA"tⴲp JXq +~ZvԵj+Tjk+K+Y6Vu.%Li᭗!#uC}vMbYکTyLtX`v{0?OrAYӜ5/g~1&,};=Y*{ \añ2KzU~&#(0vÎN$lk)~09 BbBݒ>0+S<$3g^: =PՐZ'?+#,ţN+8WtFU9=p!PMJY$DCV~v!B֛MB~P0R3" anF?3lTD?aL~!<ňޯಮ映|e%/^UNܽ9g}S"-{f=4CmٯuG{hNe&3mfp-GQ'`"`ȟgP'o1hq<'_p8r WUM=^li|8c{@O __endstream endobj 90 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1563 >> stream xuPT]//+վ7kR,$ЖS D4)i lea]~%rAŠP[WFˋ-Cxft:2Mgsn:P2޹|9 i0L|[LxyOuwNs?%Y~l@MWVfwdX6(G=SBtd,zݼ8}<_KG!OAwLIQ#؄T<} K惌)$F3_Uw7̢4]ǖ$dWo/;j{~$F Dޟ~833K[Mi1"zyBysrG8|r:sXݮ&c\WUVmAnwc-(PGendstream endobj 91 0 obj << /Type /XRef /Length 99 /Filter /FlateDecode /DecodeParms << /Columns 4 /Predictor 12 >> /W [ 1 2 1 ] /Info 3 0 R /Root 2 0 R /Size 92 /ID [<4d9d658134e25e77e0aae272a699f7c7>] >> stream x=@P筟 grй kD/QhwfV+9@)"U(kDz#҂vE6#6Ddm~! #mx| endstream endobj startxref 54255 %%EOF Rcpp/vignettes/pdf/Rcpp-sugar.pdf0000644000176200001440000025513214711515066016473 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 3671 /Filter /FlateDecode /N 68 /First 565 >> stream x[koH~E&wGv1,h9II$/IJ(ٔ,쮮S}XAh΂ X("wՀP z( (@H%)iЃZ࠽  :BQ\`R XDBՆ0`q 8zFD9\+ ARg3 VtB8@nDRD TPS@Ai@!eIQVJ 9((9  @RTBVRK mpФ{Ia<*%9TNrH@Dj s` V܀Zs jӉ;IxW1XF$J ~]_{V jfI VO$$>n\˼~;x_?VgU^$֎*GG?.(Ѡ|?8G[9'7IQ$N2yO'qR*/r\7 1ɸ UOiBgMYV:sMkï >b_ZujeyEuZRևZ'DShM}O4ɦ>mJuvL ?6(zAeO"ɪv2RoհgyV6A% 7?s_ͺ/T>DLU7jiU]TnMp7]PfJ(1uwFLLrG2LA[ИzPL]S+}0jngt{(=wIx>=xɛ|VA>{I] ,>EY^-6y1dqSFH MQ1TWaaH)N뮚_#Z;o~5bi7-֒z u*×K7缷5P;b(SKHgv/=E~öa7Y~c* EY]`%+봖LrJ W*Ul~go;wR䏁H{Bp`Ϧ%qh#6 }N :M|l*rve]`ΪH:gLN>}y*)8jLPZ1&mս*L7ڨ Lp)x 䵐a+ɏ"dՁZ`%3iOtWk5@B6 yƀF pFВ ɐ*ƃ"I--Ay ʸŭa9}Eqn3_7+>ԟ;MIE`sį[!~0ؗa>&IQ"Y yiZ̛e[W z$ެ~n@= oϢ_ۡmpY~ в4KhkW:-`nYpm뻞}.n.M⡐[+ϳWg??9L/Ӹ{{ȇ.r\@Jفdw>; f;Xh}c:Wkn67 [o|zv+1XPp{w;e77Tg+K1ـ=\'OTxaxnMr4AI徝?TA[σz7tHҵrO/ٿ!Rާw} z/U˾C}f1Kr,˯1x\&yk|oi|_N4)mcZa1\ybnd 4]D $qq+&ƑUsGl.i,=~F 6VxhN@; kmrC.ohķXob 1oɝpӯI5560ys4^ P\qHq 1G譇 _tOo$>"waOh;Y/$:>| %.C6nPdK&i5J&dz>K*FqH<8ȋIR4yi#Ocʊx!M=Ἇ40#4xyC]8",(/.M<_&7lZ#'zhx$ M\{A = y9i\=62D[hr8hȆN+/_zU(FLR {!rpEmCiktV&fi- >v.1يkA |s6 |n_9HO5Rl348A:pށ DݦU)_W+t:~9=}(DY߷v-8C\.Yׇ_-_}&M*ӛ6,S76)9f[ q |2MmJ Dcgedz/96ihWi6Etd.kVI>fq6%+deF{ɷeU3nbz{zŠȊF,"I8ѻ-uO%3L Eo`JZHX]uD= E_+\qFx#&h#ZFZᴊ4w ᬎ[CՐhsGTM>hַftKzJ !ۅf]o$O!iٯeRCtd 4}&\n7*F2>"| mAYQ nˎVFɹ¹ps?F{;?r9+Aur /cJt/qe#$ }!˹GO,<͑,ИQGTK rq8*/,iMЧFF*$:67X׼%q^\$Eѧc?qbŧ ]vS\܅֎endstream endobj 70 0 obj << /Subtype /XML /Type /Metadata /Length 1388 >> stream GPL Ghostscript 10.03.1 2024-09-12T11:16:13+02:00 2024-09-12T11:16:13+02:00 LaTeX with hyperref endstream endobj 71 0 obj << /Type /ObjStm /Length 2781 /Filter /FlateDecode /N 67 /First 573 >> stream xZms6_ $4I6cL>2mU$$7I"!ENSD J/σ>@4>aȦb' PE 80"c `<F!"/" B$01D,тu(Xfz6Q8=B0%`dBL15Y`RfA d`8BI@"c"(@D A,h,xxkSw!n #!= B0 Ap%qҵMMB3C$43d](D cRkR75I6& /xy؀~2[7J_L֛|oo6٢ZIj>?0W( owDdU-6Mf^;G D%"zAST'-[c Ec4rOTHZ EV[NQћۓJp(Pk ƕ7vf4fD4؝gm&LQVmA)p(/Q+o+ԴH}Dz,eM,fm(Bt=0h(v2"v;=@"ѷ2,C8'p]0OJO]sqw &eqp<4:sQYǔ%mOHX޴e@ 2V ;N`,TKr0O ֔+Js;[]v^ҋ l^]o-wv"Ek3؏sCfac( |Lɋ4  gT#rDe|ѨY^8b ~5vBQQ4{%skU2C8X}oAZSŁG!heC< o;R0zQH$>$޲f], P]E-[MPLWAvYuX(a)$EƱNV jy/7;d]=Y.6o_}d&|h9?ty>[\~=[<\g݅_MVCz\=ϝN>e&{5׳:ܙ?lksN!ހ3\bWrDx*z*с~<~Z.ӫTOT_^kk7d>\mT X7 7uټ)U.}3y[훋g|6}W_2 L@gY{z͉yru^2yq>@KULc%gk~;) b)zG6 rl[ byp}S6 82:pU4+p(ưri_9A(zUX1('yX 3ZlEY.sg0hLs"zLLK箰T';|*Dar"Ǽb94!l V=buiPZ`utevU92*Rܷ\.:e;6jOn7;b%IXc a{ ϶rQ_j^CjP׫tK}=6y: NN[HhY%OYZwpnvU+}kqJVNԅJ~/)➦&=@=f n=o#PW i WL;G؇U ~x_ngŋML8;-k3loLsc}%خ{fItT`'h\k7mO+T*~>V*GJ?K}w_TOBOoNWz^襾϶_nPpȑ^g2*qKk>b8w?|_|\,Cw>YKa)P)t}pԝ*}اna[{oW8)wsXެLzu-Z߫^|қUUr~BMhȾ}8_ewkiz*ݞf9?9nendstream endobj 139 0 obj << /Filter /FlateDecode /Length 7048 >> stream x=]#7nS#^qw~9J⳷Tgϒz,|]FbF JYuˎ#AAe(0?;_]0ʼ QVv |5㻋N=n"@ͩ~bʉɻ{n:P-Ng2ip8 {!B؉r; .5(fl^^npzZ/hU_f?E%<w[mxCBr$PV)LQKZ$+Nʻ\]+.$D03i JȨU|b^ȜX-YM ֑Eo|5Z턅alo>j2z̹6/4- UYQTf˜&~ )R=y(7S` N;HJ `Q <ըk[< P~ I3;-A.}^L=* |b^KX\6qNS+4Ql2G2&Q8ї3#Όq>lƄW}hZr+v%1HGv]m6gH2Tҷm W 2[A3CpJ+L+Hqm6ż Ft4uӛE?q򸩚\w&i73r.(S&(֣L%u摶/C <[WXjQcSi|]tHU-j=:_fLt)[HN #hݲhmՈZ91RNt9'ɗWXmA8JVS\`z\=0aѧ|A#pIO[-1Re9ϩoX8Tޘ`4Ar:~N֏S@*2VS3IpQ̚N__z{4@ҟyi;r vS}\awS)qz'"Ng R7COz(9eis8-PY%k\岾[:(7b" I޲t6it}[ϩ`?=c߻?p-r\܀' W`D5tۜM|kg2l4)%# ca[[=hc0dxq|ݷ(CH>4ޔznfHY^!:g{ :]H (w }2j 9d 7eQw"%Gz[m\KgKpūɓh%:EqKQ.>3F-`ZTFRǕ()D {/;*`( /h<w)&NV;Ϟk~dS78eHP=x3OjX)BBjcWuseue>~♚-D_\JJ۷BCTΉЊQZXȢO6'k`U+޸3P'7[@8Z:*D(`p>aPU<^0j4Oy pܓ}x uϯM3{'QT3q^0c@cP``;2W*oiXC0G>>0Zhԫ{o0VRn(e۷&AOޓ_jc9oM s\ejpniTS< 1*lQiSh\ ('x\z9(7; R-G,Tjݜ\NV#bz:rhO#@/XV-%8ŇjgTJ~VnTMؔۑBT`sx#/JϨ3OyբZfTeE(S|2Sc\4!Gf(ϵ瑙n,œy;+p ^W8aJډ\%An jϣ2 )tr# i>̎,C!5ɑl5ܟIvޓ?aA^\>ma,]C1hJ){zF\D**a$ T$P!9`d ܙ#Y$-R<ҒNȁ_ 2aPӴf0^Ѷwn. +E\PR3pgZ䧎_ alIOJⳡvg$;v2#g^Qϡ=@tp\.#$qI Jkg(X3b Vql'ꔵ6 x6ie(/HTHŬMmkzu DAWݔf=@wԇ9j G`3'ԥ4/!MWj˫$$zrSC&dB4J+◯I,Z@q"n.u1! qP  7 Lr%hQ9ۣuSAX|뒁`ѽx#훔#&p oʢ) "Utզ^LtCbgf|)RGC ?bg')!{`G53j?@-duОZAT9 k)J"azaa!X/$H*!>蚵/`sP`rbTPO\Tx݇;:,d=6I$yqjj'{c#cuXҖ1I= rS:tw_RܐJHUX8fL @Cn7VJ>URQE5ragRװ~(7˺XT:i Vv]'dwTNƯeZ=j /*ɨ1"G0eYo"&Q$wA Hj%%w&Q0 +I7 ;Z$YGVr eţ_[V:ܣJi3C|0?qC' D=l|6@M鈽%j1GSr:ܣ+ ٔNcNndOa8zA<6 YdP9]99amD\IV>#6#ztY?#LBDQ֦=sǫϺ렔ܴEϩ?1F|]p Nފ"^QDߜ9آoJabUd2 ΅T膅41mY^7FqCncdȽ+'?^_gxΞ26mAޑd.4ȁ''e1ݽ+@iNj)PmM?a㎬Mzb|اGc^c14OAy!㣢jl_b t\Sm٦@{lܒ.CbU2 mN;irj2G?&lN)6Ȉ-$P&Xc qdм :~)t<-Z:!#dHBP!~[VIR2]SJ&R VuqժjQ`u|.z|WmMU4ٗ IP - _>&HPhSlXd5efI2Uges/t!p)%a6Gܷu?nG*J{mM,5;"dOW'LJdz1*2مi_B3`gWTĄ䅺iً]"\wf"5'LХA}>:L{Z'==3F"Bç3' dj,fv93Nt~,.+BC]ӄ> stream x]Y#Gr~oGPT\O>di1d,d4k lE7ȣ2C{Y4ɪȨ#8 >aw~w6'B)NMlMV UW?=%Px2q5ywh&=|?pRY`zrd\5w-/~\z'_^r&/nD;pR f1-֛sݦNտ]|q0qf'l9͕m4};}SGµOҽ/ZHkH_IZyJC[q-eϟ/`&\0oa(HB8r# XKaXp$[ 840.ZBc-X 7P-q칬0oa-HBma-HB8ˀg:-PZ/[X 7Z@A3݄,ue I9DCd=wUпS`Z/ү|bull#dy #'F2rq$.H:Sbs:buvd8ye8p3Nab!oRXoZYz~vcS[,rwi) Xc6v{XAln]^M.֫m㖶ψWT̿MսxӗD7dJnKzZ3t/e܈\t| 99B{6-q &.br#M\o:qm%є?\¡O4s 63W?#W1o>sx^C*}әm;K8 f.aP\`^ $Bk?a`~i|bs+CW)kSfғ azoml370c[N|naf ku{piA=a^Rc{X6sD.|>[e{{WVldLisRGڳ饒 ^w~"D}AK%L/2~WnǕ%# kP֗u)3O^]]FE8,\~ღҠGɠ.S2$}Yљ=)v)6dI8WR,3`SRNy$ZYYʂ ;b# }^xPJR#*NU(zBFG;BU )dD9l\cxؒ8bGf}?UwSsHO1 Rg3ʼ#+H h ƀiYF9Sѷ<z7f{ݖ/!`vח`E 'q6eºEJr92FyDJ ?pQpvFt~P&_~)R1'ǗA7Oy9% iˠ~k hW aE'XxҔGAy| AǛ ~z)Ƴ?]pUj\Mb@Iv׃+ng;$Z2_Cn߽KF]]L߬zb 9M~:?˴Q݇-e>mjэjvSB1v"Y'Y~3h w뫇bu1 \r"kn \ρR FmBA(}d1N'kD[$ ^g;>Sx4X)Wv4NΪZl8VlW5 l10~]ē.{[p:A//Y}yVӻ~b9,?LdaH%W YTiyf ) \(4JKD9 -.OQ)3 0A X,~,>ŝC?ݤ9e}VZ_:Qr׿.(QZY:Q{o] E[ i72[ _k8@#M jeI&Py4i@{C6Mx4iBo$&h6M8iBz$D?s5w.rÙH Va_׫ĬF%fCMvۄ\}?.%>f^CxcU[cÇ̰u9F.Lzח_ռ *i^|FxUzw)M\opjޜ܂t6ET`nZoN,ZjOr ^i#^Z̈́S LjxY tk( 1SKKcQvϮ:Y=l΅4SIhZU=-ځE<- JwcNB3~Hx߁)R}z!c:ўe@): y"Ha'9 &:WXrG!&H0ln^|]M>:?$*r{wڥpM[ \x3&1ޫAaZuմd_P2ʃ0"XځqJ~3<4hh1 9zm8 %Κ=yG"x?ډ,5p+z'RM% 6']{BRkS ;%7x Osq<)=-(dJ9=(*NJ֝am\EFEhM Q4$R[U&Ro~#U@ȧfU#j_d"r]Gv}Mj,*#°-Őɸ9X'"$a+ Q0F4N!:JG4=fG TL!^1EõV:%u"C&@TR M&C*CIҪPKQa&$m;\X!B* \f *yȁDu %DY<@K\KԮcLX"kJA1=m0^]-VS iL6-=| +09sPJ߰+,CP<*>d0p4"CDORUL$1H}Qz1߭&zKM|ԡ'O2xHQ|*q|~|?5\s ܎u *iW[cL\~Vv\j":U\rLEqE3P\OYYu`̒vqD` h&u/(ƶamkMRHls-W<@=ϐHjr#+j9&;!>#ΖA1:'ξי2iĕoHj<6:Q܂E+,(bvC$[T" cn5!Cӗqʽqw-^rH&&vכ]١B_;:W -q q?쪒5^~jp vk#w=?NrbQo rl7Hǟ#[q)+AnFt(fn\t(^\)fn\t(n\ SS8ΎeQҍ8Z&~2aцp>gI?\u@hPFg2@5%PVh[pnb4ܸFC51BѤ-p8P>t l-hΛ xaceY35`Q7#ʋ%7XIP\)rEm/WL $$ y𾇿y.u:#Op2|* ^ZF::G:BR uߍurOtcԶ!HV$*+Oyjo\HXa&Vfa.+tov:Z*`?>b+󟋸cj++:z!ajeH|NwDS TMͥĩ4_mB\ _ !O c?z/l,mà5ݡfMt#C=NTQ_j!_٠mV6W&>WE@^ sËP},ٯIeory:cddkH~ٿ_BpҞӢ^ 4{V9y4#(;L6!$Vn?vE}u_Ta}anIKѬzqwy8_IN.N0!D[ "(|% V>[K > `.I~w`e]Xp8[O(n,c+e B#k ӄ/O"Ƈ~Uh^r$0J81Arǩ[RIh Fԃ]a1^V?Ėqa?c|<<5L7ԅ*,T Z~yX20#퉰`.0]$%m@v3 g<)~S9Sf)0V%)w䡶E[E(F݃ 6ao¹GNɍ3#ǔO JWⷀtր~%oeiL xIJz0Jkw)!FXmtT=V Pڭ=(*xCDGW{BjS3:!^N*G*g W.n`pC}@O3 >Z*%H:y(tx/:];CQ߯:0AZvbx£[뀿o%~n̂ElKIM~I{8u4a`y}[' G`;'$4f8Ks[Rꡄ`h՞roڌ`dO~t*,$HJR0=']2C^&gޝ l|=R~amȲg(L[b~.M:c췻&AM&G]StjxLL|vc/2hޑK9|BOMt_x8U(IEY)֋A<-'OՕFgOxt]i 4ea\!f]ao=A=t=T@!7 L«X%R:0'+\ fC˥G$|fjɢD67_|3 %+\N/pSZcK_XonËZ7g74Dzyu/߄RE'~뗩Pl6h)VY-A(Dendstream endobj 141 0 obj << /Filter /FlateDecode /Length 7500 >> stream x=ks#mU}"ߏM|UURUT5ΐ)cKRr&wV$4?;_^|1l$U ؄ a(i `PN1*9k5 -> a9P"#P1y $N~|w m/'xD\^yӉD3}ϫmuW5u3I&S|տ\B,`(BOpE(2iN VSfA).~;9`x<(?)EAf@|(QSA+Ђf)|J?{Bm,66C$k h<(ņ"p[ 4Uߜ RHR"BSxHq 08lD>I\H(""tdN$ xŜ"@1Go'ũD zd)N " 80bOC+H9g k4> @.3IJvj-iQ-j:c焽z+h*SΘ@(J b"vwW6#EyTm[Ww&}Մ53.[E'H%Ewtt&pm/׋*~,B>mMu&~l_SGN~wq*`ŬҦTėĊ1ÑcE}<.pySnڸFt1ugNV؄N HM@XoHBθ+Y{^F M8.r|L0& )-HղZm3fZ#d2(nw>8ϔJ )1=O)Pa&Rq 矜3&Ml &:pjnLP*g kԋƤI_1&?c ecJqD~]|AQ2IPZ{:Njd6|aq ɝ2ڮmn)AezomJ-(nt;\[n|bD/Sr D4\1b6eH3mKW!qa{k5h޶Q J{ǿ9FEˀ{%|+@ E!h5Hp(0O2uHb|{5{ax* E* T,p ifB2ff 4龌T Hiu -7fir۽eݶm*6XqPT@H..ىS#ܩ@w lwsNNxPՒJgjg(H00 -S{pp72Es(?] qXߑ0d7QFI>"v{ ~| ݈ I1|sa!90"8='§(j$YiL|SDcj .7K|;K Ch5z Ib8L2=pH2jTn}PRt&,ArYL)zFSmp ܚQsZp\]Gb+ jEY`fؿ'P n5.M{?zOFRjXpp'LH] "):`S<7LI_!\ >Y>Wa\kBa|z})9TbOb|-qhr o T7yu~~ ?Z>ꂭ,n2>=%EA q0[|>3>Esqp>@c>ATNJ9˾}vF>:!J@ -U*1 e8E8/3N:$6~XpRvu|y/: rgs!�U&sbQ?(tϖ es`6! =2 raFqaH0d3aH0Aa%>6Vw| GPᕛ`y}ͨ 7_woXUOs,#6 2Bi"8$<#kZP6Ň;fǕѩa ەN7-[7чt`>ژ)spyl-;L1{577 l1qCߟO(u߯&;h~5i x`ZĸZ fE[/֥p){"Ws2CmxNFy^m6Ax ƁH38̻\,XCyQv6XԮdyS'Si gbAU|?~SH"VI K)+($`%.)V8f<Ռ-C)Vesiʧ"Q .Ofs ڲGR8Jj LyHEA>19i0S#_ 1GOQwH|Q*XcWf|Ηa?}ЌFy2Cc''d>8YVTju9!vLH8턞>5R pF.#&Ks9-0a#0BJ8: )$` `^Wۇ;RJJTڬ}tV!*>E![Zg\|F f:c6j0QaL!]1EpN49D[ Bڜ=QꁤF0BC ="ʟ{+k2f& k'ʸqCngrcY>f$0j2:͜!9sl H*3xs'+w!8- (#J$'vܮwqN@Zne luwwT04'R>nBLAu2zX?r]~[mʫ0,IEXqf.4tES.!K*R.7D8!S :wD FtIS B%d8r: s#>L)f}0لXN&DQ\z lFUUD 9qf@Y/tĉ ,P{Hqeho 7 >a~ +A1!ϥ *rY$?4(lk*ҹ$H%!$ ,L"gpYN)NJp$`P#Q,ou$X ƙ#^aά>+kdkvd)kCRsٞgmH<l@Ɔ4:Ѭݢwily[Cb—Jd2 pI lgS&Vc mXI9 87S1kv8m:rcQl!،! Wb$E2kaS`3lv0H0 1x#iY#qc$~^:pJQHB@B*M}U|9Z#.!| $s(_U>Z'~IMl@YbDSWE}K@7>ڼ׈)m<;%MHLA9i]6zX74Ocs[u|0 cf3 &Oh(pd`E`,+6Um]}Oƥ38ߣEuy|M9WmÁj[tFs3:^@7um]g=n2 r{[ ~-ruz.\ w;)tBr=T4k!_=T[*qf0ĥ=;om%.x"a],]Tm2Ufq@/ט0%bGݟy>&;ơ.'խǬ]a1cXN{T6%bvo4zVwq9ɗS̫u7bl\`CE<cLA$޵[o}uza[tG1'섌J,+[zϞ++Ήfg|Ğgϕ0{kWt0WU@Y+DY]ۛ&/ aӣY[ f7,a hs|-^At}S{wHzYf>o;ǿ%E{[zFV"t!}W#)H h$2&I=JR8d 6IAN2aW$r}6˹FaCh P !4En3H )xs9jК"=)#iTXF==# kvk >_b m B[$Eem6{R[V([7t(uEիK/Ύ_G2$W#]C0,VCO?|hGP <:C|1;M@$=L&<[B9tp)ydخ6ai|9E4yCJ7G >y믣}|㶾kU!/K*ft&q\WŅ}uZ/gs}S[n O9^ò!wrYwy)RٙnjML)e}8;1?Ѹ+)Va~U[_ySVqjq+&KE<[m/@fi YOU};u~ZY.CU_j|Ґk6%zm ڨ ; πb =8-dk^V%_oU}( z3[T*<(TɓA0' BYj+DJ {6Ā6a[ ưքm5LrY{(9^Mӂy5rq`5*guN)3LtT(w3q gi-\r n5%Ʊp_5Uӂ+5 ݛB.+q:mSɵN@u&QX g!3)& &;N$40O>åVa*Pˆ fSbZ~S y˅Jjyq~[ץubn˷e =!(LKiSߝNza0~Z6hVR"қ) |1tuXQ|l_?We9U3ar.\?&#ġ}',eUU S'~ 'k ?ܮU7u{8.)BDK;#n0/ W]o> Fwzp og?pּ,:\yo]Ñҙj94!j.f{c6 &p {9A {8CugU\M-4+ru~H3ۣs` ̰0ǡjќU=eƃ1]VTz~QbO''D_]/u.zH}_wsKUL0zsuSJ:כM`v;g|Q&@XC`x\~,~{ߗиwE6]O[+zc܆4 EKj*O:~v9)'"]}.Ϋ?Mݼ)3P+5m;, /IwFV,TX[ƬG^&n#X4B M{TKX}r K1j`T{-!H\€i8:*Yo>caP ݛ}򹫶oD|Rx 1\iY8c;gjLHB?ɐ`B'w$ϪЉD,5_[j9؝!|Q@,H`WP1gR` 4`P Z0g{K<23 )#u5v4 e8;m) 3ު9% 2߻|Į}WMhYo"CeB߉Pt61h C*R[D?cm -.'M$}n]FD.utnY"wRr~j(d#tn3Eф6#gUm|-/x2dѥfp,W-@ƀ~?\)endstream endobj 142 0 obj << /Filter /FlateDecode /Length 6381 >> stream x]ms7rκf]Z/̝|.ԕ#ˌ/)5\ɱ3~F~cF \RvݙEwh4?(a3 3J\X1DQR̚6.^Ulfqfvq{iDH13\#b}dTf.(ɢjng.ͺ,_/wgt[1DScR+g:b%-.{&JZVպteWo7wIJR}X-j<ܸzov]o󢫖}i:QfQog7RQԡ # r C@hi B|fUNrRPvW6\>HLhr(/5ŷۮBbEw_v }Eq Ipp,6YStۡu)\׫:HR3+C\i$eP8RBKf Xѱ)S%Z\0<>IWDix1_p͈3hd:]^Im3_QG#lz땙bm,oב)~Ӵ]y[4Uy3,c ]cȘu@e\[iCK ꊦ#%XXuЋĤ"J~6\m LmY7.jWuuWB&66v~lQƑa4a,(~Z-ڮ/} ր.veUV ="Ύ).zɊ%t׵)ʦ^˶qXNDYܲp,>KXƬˏ+/>u\qW6VީWMk/uWOfhUݪ^Dj;5ۻ\V EE~_ĕC۶m}v[6q2۪zwl++lAA 46h,~i[Zvn%/v q̈֜X=F Eq(_zoWsݚyT}1s #yoZe.fԯ5UۢmeNF#;R8Fu!]lB̀Z?>#`RK][BOZ<%phs2^@`{;#eZy /dϐQ+$7A >kgsrD b4.A|3`)V9=_߼ `yqrN%-MՔh&uqm(Rt@31[0Ju~.tq&QULiE3)%Lϸ3'(F̚j4HM-nϾ-RYp`h3R1b E $Xm9pn69G34AP"Q1tfZf*3$qԑ/ NA\*ĊG f7AI*FƝEL⎻'MO 0x*p4,lF2œ.0Zj}Ur k1ҢZT/ ^M1>8ϤY<ޯqre;1Eg_-tcͤepy*-.Ci&~ʌ; ͛W7jwDn9?aM Kʇb|Uhk2&;Af͉pjvS>WqSůO%Jڿhg5$SĄ)&*"ET'dv:mXOƟXqcxcxxo7uk6uYSV3ñ^ÉX@u;҆>Xh4v*` :}}>@1T+ ֵuPW\W݇ F?2?-4 aK,6UAOAo(Nq2mS&$ r>)P.U@e]u|M`;ݟL@脇G݁iM[YNHNa.'lzuR?>a?ڮ|1I\ߛ.+.ǟ]x!2#I0`"& 16a ~>e x s3SmӜbR&coD12e2FO)I7"W~%'ڈR#mD) 7M|&*ϔ>I ;߇, . -Ч0%OFHCXΔrzJX-)RVZHӑTKdI0b؟7g\.FF3gc 5fAo˄#P2EHLjˠ\qmYBsR[ږ%e r(zŶpfrޛ1 [@;\ 25q\ϔфP~P͙tM,@/5& J,Øt\S;GsPdOxjE3id|0VrmtѸPW% o]( ߒӷ9(޾1ȪeDR>SR#B /pXwcXI蓇/L E"|a0j}]݄hGPH40k~BaoFwhX%+-6)GɐAx"¶5-=Rw', u8n[ޗ}_,+c"je;PΉҚ:~8! 3?S^B9ba?A^s||%6/ !|MR/Phi1ָ N kܞLOHFR*l r ~*B(E+Id{1`47O [3 5(xʃ|xt\}R;mot9\|D"=&4`TJv`(pCz eSȠTJ :bzHMAjlo9̡,6 oN(U#`Ub=:AjAt{_0$%y::). 6%\c'1|cVc5n0wS=D*QAeU,xЅ~:i⡭M}[=.b ^s%QHd -MK) ey"~$@! sB|z*\@y s:^D³K}P$r. ǀU RjO(%BLx\<ӤPV!)8yby>x[0CAyD$#h2qNg\hºx2:) pCgLYe YLgNw/"Nutiʪ/: F܄(18L2@>P'p+RcDyse|&H +D=JҎ ;xBr;dzLf\x#2:lEМ%^N17W)y7.)SRLMP,'ƸĎIi)檭~ف%B68 ʸth!y`G$bv|?c b=%狫W)C'L Py`&4c fJoU F7OMYdScQ&R-,2i,!Px}r S>b@@mp90:+ I0uP_܇zbcC{i 5ɺ=xL7%Q6i:1t8)O$> stream x]rבڟ<~%x|%*+rlRAh@s5\fHs!\m~Qf.o~Q#! zv{{uƝ6&ݵ:{}%;kŌ(nF;3^x?ٟ.]\Qc3#3 ٛtW_Ws/֋z<{yN8L ©D8իHXF43J 'Tdϟeˈ붋k2ͩ#f0OCÙ#"jvq]-PF'qB&,ŻW.ۗeQZŨe \ca9V˫ms)O$(4S᧌H.20)fhAr@ ,Xnm7b$¨/(;2L[2}P(CˇC|WX,kbdlXք)r^vf=r88Dqڭ Ǜm!2J^M|Rx^օQܢE[s= w7XVyfjM LzGEN3/2%[褔pceMVlF|NJ!@0 AY %DkytDquz97ťO Qbȸc ѻ ODfNAJ+'.ܕ9m D'T3fJs $͈4R۹?͝3k wrv(q5eht졍(3ԶGait/y[Z)/He(}ڻx?n.y+ Z,f))~+ hecݶ>5DP3E`aJÑDqD&YQRe06(|TbwDωMQj FͷzBtW:;2?`㛏" g9bnP$]}{*Dڴ̀8VڪhiB W<#|D"l ~Y}ya?SDs*4!L6"z1IL3:޺eG'392Q NJo3Q eTL Nћ">#"7O2勮R^T)&ȕ9Va3lA|َHs8&(BA=#&Y>a) `Qb5lhc15pxK~#Q>$`r%kL 0’51‹Ί$QCVEtJ;~ OE2uY< 9f*1QFޤ0IL( "7I "Cc& ̫P /pHK&:zG^!l>+B@P'[I-)cQcWgP%/&6)#Ead~. Θ⦞C3*;N0~ 1Id>{&Mg9MrZG;he| n][n=ߔ@ AS+V-׻zݵd~.$qNTٶ@_=_:|\TAUt۶٬$oMc&Fηrsg0˫rk0m窻IW9^mƮi[Xt7o81;b v̼#7/Wv'VP\e3dHDžlU[/7sd~ !qRYma)3!+K,Oc=~s~ǺCH3,|lʼnxgmVݻ[fH)2B"&P(ʅO>$=z/C` }P '+?+x ?hrpi5^y_mb:0 KS"N16gq3FaԦ9Ɣh 4~4wJg|~BP˕̙ \Sv&3MSEJbMFYaVۻU ʰNE2  QA,eg{;ߑ+$G rVH' &HI"f|3 4:ȁe aӤ a aDƺ#¶!g4'RO15#Mgd28UJE*bFEj*}13|79Q pĊ_!M+ƈjMR>,X 5i+8Qz_}_'pn@HS*/=VVy!+/4l0vA^avb-T/ QP1m0m Vh'"&HY6%&JR0b:$}$4WpbЛ>z]o%|a7&4>OLgZb[ltޓٶpɆX[UC!znu i*?M'hk% "E' {8s+ϺſP߹?0(|>:5UT]lt>^׬ y6HQ"&.4kx9#"Lxre[Fn7᳭BWBq C,)80XpHe`  '` z (!l#8 <p`|+ )(&g!a$14YmߵOwλz")! We|EO [kvޢOէ10yt)8¶A#PZȁGGQI)9tdG`.-%=JklՏn5ъJcFbqUJe:C{ 5@$` d]hJ b1u9!J ze\b 1Be3,)r"O5*^#&JfYRBM6]-FRm^Qa!2nb$>Em5)gt0:.5 BE 0Ǡex7nJޮr. p&J,n:hm(wMipq,%vtV]mR)qx}aY;墸vćL;,#7\L ad( רACOJ)"D5mIrcӛP7c;fL*(Sh=¹Oh>9Bdh1W)*}`B%BS8{pOQH>׃#59 du=7NT%_{ ,}*GWٟrn"3a!O( {W*} x,u2!2dgTswi,vl>drQLx3I{Y@Hpk ^gWmM W:U?- lhĐE-qv} ]rzׯS)@ 2sI`4qҟ/7;gp)L '&@ GCiFCr=E* 9[/yrc"Ej,RZa2Y0 mclTlQ`^"!N?%94/6~QB]ZC~ν"toQ^`iI aiS/Г!zU_vP>1""B/3lcQ&P#W7/y0OIo} ͇TCMQo3LtVb\ʿ ݭ5m7bnR ύ3lpMx+w9[0ղ~~/`D!T+z@oaOm a.9dBu~<1t>~k|R^hy >AFiHc,7QtPc TKkQ1ʈswVbr|^84 [c0ɨe1t(+X1J7a'6]uљ{0t_q ϣ|NUBD&e6p_? Y&s#" qosiBsF w98-fBq"XwOmW>P t.y.x~(BJdIi_ # XIP B2f;X7zWXS]m7aM:'F8se*c7xy=ӃsfШFpbcLSJF3aF3l4M81иċd o(sNt 43h4V܁6h⁷ceY ו+ 00$%6L TBH2$'!20ha Ct{j#Q\TthBPcѓ͡Cw R“M.vWczNfFax Q. ZH5^d;(ixKab1y(j&3E0clʟ{P uJ_鸇>PFA)CԦ9zj?*>Ϋq+YE"t-uj/4 kH$餋 ߀A`윔NmWG ֚75 :=pvicYw&EnujW~h z9D3^ץ\riaZ5<{vnj_)6q{?D25)Ws/=εaoL _P (Qz7h?sy42P6pirC.I}KPA B%Y& ^;sW)2-YZ l?.b~ivZ;Q? Myp qY]H+J`#Snدex(0LأEBDG㌸̪@ (5J` u21ΜzYen@=o=iY{ |[|2m|pށa ̓\|]vө8|>x`H[pCW6gɆIޖTtI0ӽ.=.}ReiKnL*cxXV\q!4V1uWxY`}l~A3'#$TË*44 WꮫWE :¿CaBVm5wz  H9W3H]W߾Oos.OD?D9@a )q绶endstream endobj 144 0 obj << /Filter /FlateDecode /Length 3247 >> stream xZݒ6Sh[{1'dwx6Ȥh 3D*$xS־yS )k8k.F$t~.8`/_lf<镶.)og7iT H% +4XiAr9wv6~Px ( [G+Z ȕ.xqC9[nU̚mhie~@I"QD3By0n_阫>QOmMhi"GAN$]s pn٪/UO,pt:Jxm]XMNm`: ^)_6,ʹ2$I$/TKz5}6tuݑ nO ] ]8dz67;O"fUQyd@܍9o'p JPRzGj~*:e|DS΅q qT!V~PG1ɗ8֭6ðfmUxy0IVm&!`$8xGxֳES m&hxy^Rg7lf ˲ oRzUca}Mn!{kG6MExFzjL ^B{!Q*,7 ,P|_Ԅ o1"⮋$Ph<P"4v;T/3Fs귐z={5;' s.}A /-=1'uS'#CBJS)*X 7刄5^K,8ɝB&PZ=!h?F~B?Z _ u?mwmbDR(Rfufn h=™U6XlˣnwyyFdGgYHSczeYZ(&4~;ORPLmǛ#s *SHaV )8$S y!hܜ8GN;0'*z湱BzyL>nF˝8aD:qţ^ u.d`&>vThcZ1T{K׻ͦj9r˚_+("f$+1ҏ9K=W"_>iʃr/o27YW$Qx ~nׯ}cg攢t&*OrG G###CƋXpB=7ݔOʹwAcOAz`QN}{o9NBgrQ('T-U,r6zP bb 9Tڧ?u]IRb++~V  0>;3ܳ_wo4褦~={t٬iNK~ gK9҈60`pax+?pCj?ޱZ!}S )ޤU %:" =dvв?ғ_ 3٫kWKc /o]Wt>&6 (Lȣh4W}1V ctbшp3hIE>T\\;rpt3:9 #_J;rNq#Zj C2uf]탤$utx>8Ar9~qNhx WrnI;Vo槰#Kړ% ~DJM H9:Q2).EIx tP&w`<ÄM%5ю|N -{q~B4ePrLε:Mr޸1oGMPe^%.ɥz@ T4b~%:H WV}>O&;"dY96A9MNQ8#E,%MgYE$EPnڴdf!Z)I.y ߭B]W .6u=D%VULd> 0;ʁjK@7Ⱦx,nZa$U)M39) QCZzRM-U*m}YɰeЩx!qGX$a&Wt~rRTx3vRl-lk1ʺf.B fXH76G$F)rI+%;&;&BRŦgU?jF m؜EbUAQiY\ݭV+ŻmH݊7t%k2 oS|^EA}D.اMtk6FC@Yihh=F߳F-U˯/b8rRϑÚYesClSAw:R0C)S}Ԓ w!&#zTJÚ]Ƌ:^M>^2S_FRS!4"!oMY9ԙ6_sh7> stream xWyTwמ18I\Z eWpّE `u*J@DBQq7^Q[l֪E흼7w&sn&=yДEӴDmQ\Rbkq!CF,$BZƺlWU5%~>LJdwr~i+VGΈ ]<#nf|9K&Kȑ>=f8:S j5I fQlʑ 9Pj.5PaʋZH}BPޔ+CR#)?jOP@j 5F(7j:eAYR픜J(kʓRP(7STeO8'eFMAєBmړУ-B2ArZ,IeٲL/&ce'_.+ y,O}[H-FX,Ͳeoa^+,_m.+fkNzW "D*8P 6pI 4he8Z0IkAl9 ɺ^mP9&yt^=yFkŒJ|j 7 Y6#Fi~݃f<@h c-g'  +&Gg#|X~99&RpTt΋KU )16o. x i @FWvZ-B#HD ƃ{ ST(;t3e]]goU qiKH  m뒎uia4F'܈ 5LأBG&u! Jϐfr3w1pUGW*冢4 @Л>!/TITxfKtsRg-Ǽ |6&Uge,` ?Goa0׫\P&ã7){TIjtuq'~> :Ja冢n\DQ>^P-ZcEˁF 0}k7C0H#4ctDAV=k9f&,B|7gUg̟C4$`eKOn"|$eGV38 0EɇN.+w}pwE8ă7p"3Fh7?Dg'[= 1:9lo>wj6 [+oǟS5 $ty\Y03|i'_E7^XhƔ."I\ CWŒe9Vvؐrwf([sjrbWޯ  cϓЎIY6pޑW_۴JUXQYXG. 9v7̮Fpq$\㡏 4 5h Z\boc':e_l j՘$,:$rUY3_=:i'U7sh&Xv:~馩Zi `'-*>7$H˦3k_lҖQl 勎7*T2tzzmgO=_!դ*SRŪq\7;7]4ΐ; @84AZ?o߃%+hۍސ.L7vD\̓=';ZNx .KT c>M$uwof,/ٖ|ͦnO]M8ɮw"SP@ (軠bVA3{w8\wL=x)N03.aB8O"j`==F] +" ]>bC}%ߨD&70F[Кpب,~󜗓4~}Cf$0Ԓwc앓 mW*3>_G8|hZH{FS\eRYpK@vh%٠ ԉEȄ8WԎlvtxKJ!5lx:ڙ<&eMJ.^k&-c´0v+0Gq(ڐV+ݺT5Ln`n^SzȲH%MWЋ}= R~+g' *lʅY:4sP <B c 9b C 2bBH_*8h+K%w.ROq0~ٙ0/$Аƃ"> stream xuXw\׷uc[eEkX0 R  `aUDA#"j.ET,PDcX+^{//oϝs|sFtbd2YϹlu丛AZ?ck%BOFk﹛leVmk,w XkFn K<7:x:v5z̪'MH8iC g"f3adl3Y e0{f8`Rfˌf3'f>31c1 9cLd,I3YLaeb'ӝQ0=7!d2+ez1"ce1<әƚ9&.K4q9+7 17xz[%rP_=M8r7vuţKS]wu۱=w(.cMozYmpyûTPUbe`&^koZ8O +!Op)W!r(iG6u2f:,f!AGɺR(F9v@ҕ\:"mnRk-\#qN1),ϮE5J-lyTm4 DH@Q`:u>v 5 Q!j7z2PqtØ|BMEۢV]x9P.+jV9$";bN &`= aӾgR~=}\}B-M Ԕ+H{%ek D?6gQ/BuU;3PѮ=٘a?vrvꠖ 逸b> ay3h÷x$nP+ܮ~}' ][|;j(+7+ĻX=MÄJm)KhMeZbJy1Za*%a+M?@P(Ƶr3/reY=yꔱ^War 'xrǞz(5_>3 ?.zdj0Kעw{a ,؂?`tID?+c"gn`yCUP˔F"+y|5n;Q6-E xt|!{"L6R|rrFjHQth /v#RR( WOKKѷW ݥNZ%U(U{.-]Qt' j:iGf(_u()(. qZTMVs KЧ-ϑpjn'bK%iMM+j;+8q1-Exy$]0͒`.1?@ڋޣ^RJM4[&*g9ZoR];x(&726=uvBSwUBP9x ,r ܀en^: qY$K"A$:/NlȤ0sMТ8:6@o[QswT+.d$TĶg'5`!{{X+v㝏ol79je G3 $fc93jHUQvQ W{'1"[ґ $mJO5]jJUz dߑw!ffyײM^}F l8[vJ8z >OdHi7h5dP虜,Ϡ5.0?&懩)i(yGrd2̯/IwZO$1jV yBI#bC9y)6%(q+Qb6o9!f4_בq'`~^JRZr"Njmy:j@:i4j2JrG}~  m͢&TCg0vݡ];h˜%_[Β=]f;.-B<[B]х4m$ͦ6ӂٶz' ='rwmٶeb~z}qDx1Q_ґta匒 _\suRjz$ޅ# w` i=++X&'x"[su1a*+Efx&| Lor'c'ԀZS 5?9=W.S{n[ez41k-.Mi]/\={1_?^0jDMPa*pK)^m({/dP Xbp +Vܳ}Kne,2%0IwswKZ0bvMs-p#A$lAɌn_*Qg"|1vIp NNޯű8!WlQCJN0ylW'[[תK*“0׶+k!aؾE&L?WTRXG4uKɟ0@HG>PҿM/B̤ՎH7Š= Hw ҢR3\sdZUe՚m'q>7?`隅=W~W]`}:[BAnۥ 穔?)_߿X cKE<o?sC-Zy4Edƴ5pxRdeIA p :2l:jK>vRv;bIJbAw`1(y`MoS8oL”?-Ԑʨ75S/DB q+9)w__ݨds ~)T('#/ͧNw#6( 1/Ϭ0`a6;.ezヰQḏ?wm+y j̪$3@s ̐f91Oik~eʒ)k*iQ/^vx&'+E70k*oB_&<]ml:}+LQOU4Tr-rYSGqLna ^J%;7i*,)yYm[90hK*c!@sG.e2y"b_slۉ#Ni- 2}jrbw`:NGœm|&Y֠!z>>]5RO{ai5UR_~ 9H  L!~ 2+w0;endstream endobj 147 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4246 >> stream xuW TSWTBzA&  8# AEdXR(jpFZ"*CQ4A بX|}}kee={.Muh5kbɚ!qKc2I_,2ggV`cyexMMbJ/}RGX;+.~9 BM M Sn#׺{=f :({*rfS9 j0B RT(F Qé4ʉ STEPޔ+5FRGS5EP@j 5KSJB,^eMERR3J)[7eGQ2j՝AywhʌOe=tE7i92M2?2o͆M11+6{ƱElgMrZތo5Bo!Rx={~?{a=޳|yE ' Oy'-[xI%,-Y+׷J{hNHH TxɰBl ++XbΑN+XV%sV?NPZ7Nj[X47C9/}cd?ܟo>3\1-R&QOUC֪tФ&Psuc}6ڥT'N_}UWƝ;7H#DX TpƑ(f'JOH4 ė! {A _&I]Z~$:;5ҥ-Pa\*!nċxia( iSϣ M_]DlOWF N.ǧqc0UEK@j|WMp?j8di d$PNNqξ" Sx02LJʻhݮl5ݦc`&<adjöNV 8 @Jܢkl+3cQs%Gq3OxK˶eo[7-I\)H^ H 5x&!W;:Nb60K}n $ĀacBʸ}0 ED,(@l]-e;O,jH5UQ||]8Q4y6D?U _ᨚ>Ԍ>"1R9b3ܙM=ZXJr j`;+eUH̞ MO ^8{aH*|NF@oMeMe8 H}5 (8 yhυ*jm^n((y;1PZh _3Vi6x,>wOGޣ&LkDUGiN [I{@^!:w*^!6HŬ3G ?d90FTz{%51B 89`Mll fngJTHh(_._ã~9̯JIZ|Aܯ>xlGؑW^TN JI]$ǝVvPݳ/X`X#tM:"P`B7Tc/LRb֥S pH/a֚kf8N H Q9H%l;g,ި 0II_^!v*fU'?Fڀi0iG">X90.E?rZ+:K=IV?SҸ7. 郝X7 ǮN@v_m~ƽ_@GQɮ_trKz='Zů.?^*dWbF϶`VM Y| =fq\6@/zY~ɴD -ީep Dc` +ȓNKdةb ?1;W4 +ıPr̸eL -. 'Y8Zl1X9]g= H<{iPShLAl<[a hb|kNDO7_\{vً W" v&fd r sM-p1\ꌅK}QZth㛎^Պ;okFϨhkVifo-}Lk5 Ţ;wfv_VgB¤Ȩ)r7ozB ^wyr5R/u@!.={o$eQnq_3a|k MkL어@U#Gbq2}w~/H"IzWF]_u G?/ikgGqhYA꾌ﶜFsg%ROXty(UO&*t|]*7q+"_+:7r҈=xO `O\ Oߒ}`I4#C.N_@0_spbN|SΒ)2Rkzi7G7Uexi (uf wT}avf6q\ۨBClm҉N^F'i5 a 9~8p9FE:$Gc5:űb '}Wo$zT5~u1X0TC&"x8#*CޤoQMIZ~6B'yw.Ϸ0$OR`P z,:{Cm!U%Cׅ'5UoA s3fI >, _#% ~[WUgEZ H+𒿼2Я@uHC+[!mh%VցN1 L4a%%PPI x 1$b QP!:ьu q| /`nmdj؛*%Ҩv`{`_:&R~4Ɗ${6ٱsdW7;uUjFRJQiK~^y`YdKe9l^GO2Ѩ( 5t|:t>\IC^! kloAT* 8PPr|Dd`<%RpajB6gY|ir8 &C]0|K\hأe`&is$B%^lfMTC-E4tv򻫽z1jAV_>}f>_4&ĭ:]r/(s`OGv ]1}s;s ?ct$A|Hn?l8Tx A<݉ =endstream endobj 148 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3483 >> stream xV{4U s6{-1tKbHKidڨHyʣȣ]GylȫZ i:F{wsNqg{Ǹcos~j*H$ew}ANlwn wQ%h*V'sY! #6D=q`]nݷGXifL WBp#܉I^ Ml |[Ž' bp$skb Aք&s "ڄ!TFE^=ETMZR #_PT۴BB;>?Ng ~欙&3fq|gͶ}P%1HΛZ\yy+HХ *W^;Rm{32UH^^[#z,"<@ F@M4zP z)]L\,}— s_m 6W9>nI {!yg`Bd0σ_Pu4>N0gklu= p+|Y}2+pa=* Dywվ/z)ѹKsNZ @Mħ*ѥ?nAI玨H ˅.RPgzL{vǠFh i`L Z)G?=y#AÆuO&RU#K|?;[]Ehegd5Zama,`~{7nvrθYhDzHܼnnj5yvӉBy : k2'dʯ_*2N"CGQmϤWNqA0TcW []NzC\p 冼o#_h3#%2@ٖ.j/2tM߅6YWZ+ `mk_o+K.BrIcI%i;u43]*729yX4KT|-:$֥±>iO~J?j:uL<$ritϩI䢷`ʷj4^!p#~#xﭽ\S[-/㳎&d&D^ \īE؈& J$3"t _Jm^*+Ѓ@cSlRTRέ)+A ͲʰZb;M(E<|WF%OƧ"!5]PHr>=[3 n;vշif$# VKa!M߈hߘ.Eӝ++9-9s,8{ Ա$:^ V GPŕ8ב`I:XĖ_frX t*1wA6h-)H0T5L*@@u|^ v HlL=Wd'nSTNE%EY'j?}|yUUuLS_S=޳Ne"Ա=LpZևy9?wOchXiX hȳʒ.Io*j{PI)+HIɞp?B vw[q;f#A^>Ȃƚ,>U(/r!&}6kf?S,&=C[ܙ߁Z]Q-:]O٠uhmf<-7@f j9*>8 nBTp^ ,  *JO5Wf԰$xRN* cg0-PoKddktDx7*=oo;A> stream xcd`ab`ddM,pI-Lu JM/I, 154wisk7s7KǤBw_`&m}fFF _A|?sO;qOUW*߫~_w@ٯr!?'χ }NC;endstream endobj 150 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 454 >> stream xDCharterBT-BoldoH3  :pcRQD3yVo@ggܢoL|464 8!ZYubP^&\c}|UR}ܾO PB3wvtp dZm\|`.N ђ!~M$* ,%&%ȝ3V 3ZƆ}{{PZN{u`,[^cxHmvxlti[ŋ;/(R]9/Xa ~{z?  ?endstream endobj 151 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5196 >> stream xXiT׶,ͭFFQ9"N8LB4CЍ fAA@EQ*ICnrU]y[ 4 ϡN}jrGd2aa3&߭ a+Ht0P22Ӈ!ΔymZ _8rZ,J3z׊X^U]~&Iq;e_g;*E͠FSZCRQ(oj=5@mSDj3B-ޤS%dj)B-RӨ)Oj:H SC35\(F 85 ՟@9QQ2ʁJ,~goțF8::8jtAVgF1'р8y8%8=kw <`pАC:ov>7t\&f+ÜM=,vX' rUm ]]·zhR؎hnio/\œ`Po'X#KL2XEHʱʾ(B>G8) t_i-zPE#CTd)rسmኇdc H.̸r_Dޚ(|Kʫko팸"I=b]&>tU#}mavq0bePIZ-5y*I/nb+fG"r)C8t#q$gt<:ЙM?׍/zgoiD(2\sAE Lmh¡0u = GɒHE\x|qB$.q4~XA5h*[DWqUxjZ"0gw/V}'BVD-` gؗ.fZ N,~/膎{jI"8k]Y7)ޒ4iψh|vKPCЍ{ǜ?" %$TME.B08q,@;nX*ʥd4pd]Ziû3gO7|[g.2t1/3LOϫ˕5!=HxDbkcihQX[.q_A%?HqG!1NΧm3:j)^b)_[7_;,{Si.Ok)ѕ SnVTw4>}vBlhhJY+᷏fjٹ{*l(6}Zݐ[I`Mx> TEr7׿ * 2K;6V#Vꙣ)ʌ?eP.]`xYrNDH%͖ 7݊;^wȨcanhULMIc9> LJJ#n>&ιC-8sk:y5 j2lsm:rծgثN2I|i2' =[u8|lŏkj PLBGAdG_^l!T on\6c?Z)GZkӣ OOc"ƋrIw{("$^|(q/N 3vK>=N2,k-mїXtl-NLPxi)Z&Nn^L.\ q0;&X~ хBvZfLˊP҅j|C#rҎDmqZǧw|MZ] ~ (^!e\.O4z>Ys0o/z|/8(4cQhJ*TQa9|ȼd2cq/\EL&&$< A{. ;K.uxEya5L?}i !_#'!Nq8 G~P#A|vp Nl͝PǶ:9<UO13Uq4" ͘l(lĉ'?kF>`|H7|î%1~zb+/OV^>w_v1zR43i׫ UaeL7`pYK pYdc,=&+ _H 8HD AȂ N֥]%iGz5ҵ?zVUuVX,O0'CP:/m.ζ_} Zɰ}FܝOҟ'K^/\~7IogUѠ5VBPY0\wd䧦2mz_~WGJ]O^SEA# dfrIdTի갰ju}}uu=^9v\seURIrOQK㳶> g@EY|֞:O5=ɼw`lλӼ ‰퇒o pY[1pĆk+Q[SOWtjYmuUC`sy`qK)} Wϱzl} IC_n*RYv]D(*-:kun<=VlX~Ņ<>hS_&COzCۼ0ݶ >0ޥ!ڕ(YV&Rtk 6Taaiߠ=NJnW7Qru;\}eMjఀúU@=AEN*q;m{zH[WJR 𘤨tx+i lŧeE5BT-Č C{~݅ l'δVɓX>_4OX, WUZjnʥ8SBOx8eO"(A D( (8-V2܂:/bOҤj53MX}at1M/>D civqGBD[V_}Ƶ`edS&?]324A.)ણc"I)< qr]YM^YA6w~[tω,%ā8%#r9qEt|#p9?#cnsPn1t` m:4-|zlhLU@$l'iL*=$ؔ'"3~`z*fa(Vw-(SAYݯKפF[Pzz>eٽ\xݖBNr ݶ2Je)A-G_tw8(֬ٷ)gWԕ4d N՝i|D| ɠs8ZH)^TF=OFdI.̊C۪eDA!AeMT4lx`ҝ'iLMQjd} \<݇R=7/0R͸r1l|O =sH,ۼdOULmmeE]\d`V !ƤKZNBbO/N-ڸbͪis9y̬ZmexZ8=|j;f ;:}la>P:G QLhc<=TȥvB 9Lc0>qD{SL+),~gz>e,41ƴ{+KpBV\` ~}I[; ܈򀃊\ra\[t*k5uqۅ<*U[o8ۘL zkľ aiф'/ʫSNE~e$gO=|p`R4}M=Ax skټ'İ/% >'T{>|i(he^;t5T=/.B(r]V O3jf0#`PgDe]NN(K~^5⸊liAn#GS9Fy^Q\R. N,{EF<@t8 XIјe,80p E1endstream endobj 152 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3277 >> stream xV{TW 2 ZڵbUwkR܊ڇVVy&@H$@$^;D~HxUbZbn+ϵ vs~sMn~gD!fqc*B!M/|7 8S gz;y?9ل!O^H|6KUҕoG_/n9sͿ+]h H@'d~pؓ7V gla\hdn}VAzh)ПzH(-zYMo^9ŒKN<œ_ST*PPGޚ*;j|שL L`8\KT\X1 r:9DSAת6L1w B.ERxɕlsHnBڜi̚~H s-梄dPd 1 E_ǯf/Q7=3Rʇ{$E;-㙠^RT,V3K%ZN4:pL9fjZusnLwLzijj `*̆8zAY(Db䜂rq:&19dk&~=|tt<2 ur@.NcmBBNuE'kcZHo%8m\m?B7x3p>m@Tq:l6# h²WZt퍽#= 2^Sv6=ǾUOo=jRdRB:`qÉUn7!8:Ӕѡy?Tsa@\@ʠ"4 F^G +5Y}~VwK  M2S Stzg!R{br TqIWe7ZN^F'!RzXiMBPyR7u.zY.Ξ:Zzk ̑x&Cq t$&@ {-R6'^ϱ@oJ+?`3\J x}/ϝ9Ȯ]U$TMVaiV!Dg̀#:L~ŋlFckcVER\L6=1G8 OeլcKM~W[z ` O |CI]*+Obm j|4B &!!ȳ'*;A.Rv[/3uGi4i-VH#~ytG#n~,fp'.դbi5m fP x;5%%#CҚ3|K y6~8g<ӹq=7K{rC&|Z!Yr:P 2u}^tsꓛJ ȵ%>'m휳7RΠW$؍#Mչ&f%0wө}9Sn7ڥyAlڨ[b>qzCl`!ʠ@,#\07dH%!n؃E1Gz>f(2:#Yӓ4C r# J˲6i{B>/]"9!FV -Rۅ]/xlAj%S~|TYg[^U{&r_Oٜ}ϪIԮkV++ 5,@{+ڸrXڅgmf;a'B%l0j-z[c4.{-s _J?UfCʸ(UieZh V\)}C2gONUy>URŎnVR(idPK:3sw2 K)FYcT6ă a]5uO߇?D#Ȋp.S QGrkyh%*^NEL⑌C_#?+Iqqi i U/2B-i9&O!pܵlՈoОg?(lrڃhjϴj eА 8PW`em!4̰RMk@AUW@MMW,~Ey."+yt@x^NCfnJ_~/]yBO+o?}N5;F=Si3YRtٳrO[ξnД5s RǏ+X*,ȔJڗ_O^K E{z·Jҿ <\3!yqQ=^0zxsKS;bԒ}u34aheW ޾ugKbs̍5i= w>650+a|yLtZ u='  ԧga؁M3iSUSQϟoɾWb~)UjF4?7(=g[]U%Qd8b.prm-l0j#^a!,((ePz<C8KW*D1(U Cl~F2n\!棑R [Jm _8ک |`7lB(_T a:7KY[`ds<3J| s>\ 7`>1j`1&jBFK7c "L0VIUEx~c 5K5襚5fxoK{Q OeSŁ3 _endstream endobj 153 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1460 >> stream x-S{LSwnE{wӋ)d*f >s*L)o6Z 0%X9Ƃ(CA@ R%t_8 072t<[v?'/9D!?MIUl ]M, QjRcV>X3=J"G$s&x$s&D'y;"\rHnrEkvoʾX28 ADJMfb @[ Wq D@t8pGqS/J.#uVaUdIG8'rc"{xW^K^a~H:aW z `3w3 iQЏKّ ,,ʬ a e)0C4xx+o;DG^6`ZI̬B`xt Omv_d4g 2 Է%/G`śJPlu&T*΢cOק#B:t[FWғ ~CedP&Z%m6#~-eCṐ%9h,<7]D 7ʄ B+}BFa7qC ΃}Yre4Rw4眗l"Ōp0 5TVIB¨_qzŶu^f*(()Rlwn8;<<A% Ͱ]6Fl6LB hִ;gmC=4kjrJDtd@=k!8Udy(k㾣bsb೻ *+ uU~M窍a?M,WT{yFA7ffCE<FU`Vpx;>"0žVu2(5 3JRMa..UDmC0fyYXpg\]`^2yB\"2=ыǐy-E'I\7"t!ƋyZVqg][ՅP5O-ו"i}4;RIل@ r&*N(lM +x.訚gkz w=GSUSuFcyN|S8L)Imʴ] if*m>0xp5Zaos fxɪJLW<rA]endstream endobj 154 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4797 >> stream xgtSWǯ,,.%[聜̽@ a !B@0`Jpދ,*eYՖ$8 Jp!L$L2yޒĞy/˻K=vXĬ(b-_\TmH+͈`]0 g}pXf_^HDNJ7oEitIF呝Ys/(|tǟX^ظꗫ bXA${>bx8@$oī!b3Bl% ^#OۉDE cIQŜĦȕr?[bQ3ټQpӪ B,09VLu%:DK @joֶa o3vdH(pVS9@P'-jRmuwr<@+:]ތ{ur_Vxvvg|ϟkKNseiFL3OJ74clƀx׎n>x8bbř h׈K-{R#Tk0@7`7=V#P7g|hfMP%a glo^Dڌց.a4De!n a6cB/nt8lP@K7jʔ{JY}@z˴Ze &dEA5Pɜ3@}mo#-xx0+ḟ?A 8Uzpͨp/P j/9mrL|.idRJ/L$^ZJwѯPtpRaz%Q ͺu3swh l67jHO)z@)릀rZƁ^]ju2z+dP @~|H9pZ@U,o6fzb3_<ܜdkj.hl z݃`'BF_*2Kk]/$?Wf?VXR~G?\VA&Ts%t}(`F<[^(˩>=X \^NNIrJd X03)<#+b?8>NcwGh3C!bJJ/;5UTMFUS-fwkq>^_K#6ZVh&}m[AzPc!SBGn{ \)aRJZ 2%`E_GMw@,Dq-2«Ns5x<:G 3䌔TWh(HK \Ox\vZ*+_~m:>XyVm LRTҙˤ0Bh_juT t%T^kb&&x5CT1(^R9G-n%l@ˆVkCjpPSY]W[#]Y$➺zp}02e!&V([Ws?d:~9Π'!L‘Ơ% -$`R+nH͚ֆ.n:KL͍}`$JB+ZQ^pkh;ox.D*UQuZ\ZM[y[ph{<[7QrB5յYJ@I'^RVy&1XWczNlYٖ~Aq%Vo@6MzRB 9Zi?"Fw}npCc)RNf!+ed*ʨ`-e[1+=`4ѾkA e:UNśo%ªszV0^ıΓ`/tXY?č*lFy,yyu=_o6XŸ3bn(HV X>SG}?{ٮ2Rg?dKo@紭/vzWښ8l2rtTzzD~uG%|d3[@ JsA; u]4΄#WМOa5Hj4z%( EG5{tr;]U,*|ݾo: p,~ x~8_?to!8of1]R+uT+ Y[اnzPII4(l Е7VMr?z(}mT81}!b|crϮPl=TM}U kgHg>|%h`]n,%G]6}6bil MKs HNiAAW4Wu\v>bZދ4ki1Aaٴ)gM{ )#-~D7Ix[_}~%s&t"v, ?3Oo!6wF?P$RL=reG{]u0 RJCYR!(xsF_=7QU)‘?ޛ13:bby$k)% VG4Nci{;eJzgbfc'`ciPhYqʓaȋFߌ%ݙGSȂxf{wyBIMFKMXkgB*Uu7(twGl&O:f0}  cN]~fw!*D9V$N(V4mѣ ȼ+ka1Sx=ך2Z٧+ת% yZ1D)8Ω[u1X!f*4-%|0A]а]Yk<=zD3{-z8 _&ʭ&7A4C@ش~c em)2Iz\RMm=pTWS-Sö*rCѩ9f>fۯQ7;:M6je Ã)_{sLइ8^x`27e[a:C_#z*Z:~E}~\/BtZB2d-a#̌ F+4Ld(kL\(i5]f iQd7yru\Oe+یSm(&6a".憙gxeY9YEe "<'D4b^bGޤ1e w8 ~Q*j3$*|ԋ38U60qy#ۡ~w-Sf~s@J9L&Mp=OgGyPE rrM9ASx#b!UlAo(=#ţr5&| v;:/kދf3;xpYn)R Υ/ۀw8JV]))ɽڇ.D,Bfc+*SmVY־-iη+uu5r lC1nk5na~MA* lTBH(l]8vwF JRm0IyxNZQuZ Tu{|^zAU͌6ڍ> stream xEJPG517-!~@VD NhI)J!PqnRKt H'p3``rgh> stream xMiTSg%k%pG{vu)SmGk]lAVW6$l Lyæ[DȢ"RRGDԥ3gy_˜3y=_?Hڊ Ir7'c!1;>ۧ c +ffX( 36pђߍ.&K&*&V L “" b'qE!6~ •p#Z$aM&'7]V0Z[6P? ㅏIf lmo0ڠ%3FIR:N}95#?Qơсe YF` Uu E~Vj44-p`d{#}}\])ND/53hF(^){< w f~nb44> \\qhjn&7nxڃ~!; ff?u/5"?ba~5]IgSBL銌HbO m{|辰;iI8[EP)V4AK֨Ai[6kl/bisiju1^S }C  FãN]$+h=īds] m Lp2j`ի CgAWe,5QڄӀ9Xf.˭=wo^-27_\\XEZy"c)F0$k"(=- +<ʎ)nfxFD韞i?k3NZ?6+6;fd ͈6>%'pI,:c-hf,!f/}2O?C>g05Ǜw̷Ǹ+gQk&~} !pW t" Oa}Fhx`k2]x=%oof$ˡ ?Sla03͝;M#c\~sp ]EN/Bns2RƉ߁]IV1+3e秖@AW T-) K=ɫӻ@ic,0jcܣ7gn;Tå 2tc{/ÓAh.$k[Wp|j*Х"ءCKP wxtK"Mƺ1:LTݖjeijK tsJƀ$-Y ͯ+)ኹ~b^zAJB\O J{g'xrV)T42m\J8Hf6_.iyZ60\Wty5Y{~}-ӶaV6/O,[G=WX6<>`_֪WHRj#xw|ކ ,P L>Yjʊ jLD+yG5nk5@aWN.|βmUoD(.^^`CpA 6>Fendstream endobj 157 0 obj << /Filter /FlateDecode /Length 163 >> stream x]10 E7H!T]BRǩ2ԉt(i`K_~reA>Repm% F> stream xcd`ab`dd74,ILItwòmW KKR3sRJ Y\Dz":}aR6ƒ 5k1gܜ=7oJi?<'|vKH>Y= 3mZH*endstream endobj 159 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1450 >> stream xe{LSwpձꨕݽs-Sl:DqG-A-r.(C8R`ckb²n1,3:]5?#K-f1;|9= hV~*:1[μlOLx!v "lSCgH,L֮KZ*SjS+( Ҩ;{eA 9X($'*SՔC>}5(vZGYɿt>-=|E/>OgFS$Ͼ6uoΞm6ӽy)AJQPq Z|M>]˷{Qs/ʯbOC-p+] d +6p~-lndA9B-az#(˂mwa3+2_l}w ?v^r+sp+edo+*Ɠ\\ױkü\ @e訬 ckMLQ\dЖip)-y&%eb:0s7uAp}7VIj|hax}'*1=j&kUV(+3n* ^»Ƃ<֔ Z n^ ԟ.Ayn=ų4t>\ 8'ɭl58CPY!θ-/uc+pd>5qBn*v2rwm(nåou*zрp db([(+EMO| m%5BAaw%જ.@fcl)~ i[ " d&O=pGQ?(Y7e~ gq(>zTM>Ku#0dAO,Q 6eC=*X\@@3D\d@ȩ58LDNdkڼ\PP#E lyE`Djc[Q/`H5-l N6۹cNf9ӏH"19cpDQr.I  endstream endobj 160 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3145 >> stream xUViTWڮKI'cƜ|of"F,*"," ,Ⱦ-o @-,J+D!Tr9sun<ã45(=,-&kO0P7@5AښA?Z?@!&afϹEGz9/h@QRǨu%)8Wʖ6Pzu:A)#seLP:L}Im) +JzZKţ4)^8oVBCgkJ444uZ MU`mvÕ_4G·M~>aRg 0399 sqa#g`!֜KG,~R4 t5=F ~ay26;z!M@V=vot$b CMVfoƷgu42혡n`O_߽gW-o-(J %`NGa{<`mӧ{L g>mnępQ|TWs_ԯO3|Ύx2އ"94 IO:L⢜zKRg[N64 txJG$OzisUNl_WbpH@ .ŝ%FxpK^3?fgG\N^.eC>3dzwEiwO=8ECbXN]RF8w%)+&I"Ά;*E,[#ي.C4k 3=gnl+Qy..)V Lw]dHN?/(KC'p$a<_Yϱ,y"w,c&u 7pڿ=!LbPϋ閟u>9A2EF3={zzVc aS}%j+ J E pm4ح?YOXSzVH9KfdF/ǃ(,6(CvY%,R lsf^s1+Q%ѡ sU})GӢv_'2>=;q5- WRnBd;)RuB)h%:>k0õ^K4qq1WFjc+n#*vv8yi0 [8M@w|.~ e\A]*ְ <팝-| 6scO^*kꋺ}$y 0ƮeK5=$[7YokK{AMIMI~aAu"pXR{iSG_ `RLwVݓ|3xFo3/#fg߽|D_=%ԗ'Gv٫5!`mXM}2YNfd|3;pӾhɒp9~C\*J[@t pP'23A {d:F36\)3BOGF0;=rSXV$ .̓а!aÅU qJD@dQ&Һ~.@hЉhi+VTawD$Gt<ţ%}]M*9aa)U` Wp!HrGp1!F/NDk gy$k vJ & .2LΗB.g1¹Kt5̹(l^VwGb2Nq,g( ɥWC!b\ݢYs<\ѫ4SHܼrV;I߬*<6R>BKxvE{`=ڸmN:¹uNe B~/(|Ӣ!!گbmޝQʤꘊs>ס#["oՅUMuEO n'+HJON=8 r$KTeq*UC(j'/ "~VmzjK:@I$-|V4}ڎ@8^nyh|\pH$?S"#7rEP_}ZXEP `KUf`.c󿌖ϥYRz"EYwnCj6n pTHc7YZ)r%hbjŧ7j/0o [Ow؝ANpSIJRg < :5~EX+}-l#endstream endobj 161 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1563 >> stream xuPT]//+վ7kR,$ЖS D4)i lea]~%rAŠP[WFˋ-Cxft:2Mgsn:P2޹|9 i0L|[LxyOuwNs?%Y~l@MWVfwdX6(G=SBtd,zݼ8}<_KG!OAwLIQ#؄T<} K惌)$F3_Uw7̢4]ǖ$dWo/;j{~$F Dޟ~833K[Mi1"zyBysrG8|r:sXݮ&c\WUVmAnwc-(PGendstream endobj 162 0 obj << /Type /XRef /Length 137 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 163 /ID [<60660e165760cc84ec0146f884b039e2><57333595796cd76ef88c0161073a6b52>] >> stream xcb&F~0 $8J"?ߙL l@qfh &?|>&Kxr@9?A` 1?Ho D2)0010.l`ӄ%jA$10 a_f1W` endstream endobj startxref 88255 %%EOF Rcpp/vignettes/pdf/Rcpp-introduction.pdf0000644000176200001440000105545414711515066020101 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 3586 /Filter /FlateDecode /N 81 /First 662 >> stream x[[sF~?oTJKjOj'MN|$g7@8Iɉd$l$?4.MD1( BBDq-/mCY7â_mG ^>wry+'q3ܷp))z/ILiL~މhN@M7ihw8g>4"(1.h3=Lgz<x3=.;w݌Vmy.W͗+ m Ra{qӷqU]vփn3Zwv='+S/xSo zfffefedfdcfc~LB~o}xѴYf Jx7ߜ7KݏO:~}NpOo`ן~Z|˶zB@vp3 G 3D,1Sb ӱj%A>m[׫M]^kȌZjo֓ڡeVKD ރhBas^-lwmW,KF. A#H{r2)L .ˤ2)x0IäaҦ0ial˳ڇNTtDE'*:QщNTt'*qv8Q8Q}mĉJJJJJJJw~9fovvֳ]<̃<ķ'.MK'Yݽ+q~x.f\ðg0t=.sӾ9?_mN]nj3z}ԏ]uQ~s7^PMjDL91xηuns Gnå9 \fhYMkbN_>B9OI RDVTBA-K1rH% Ɍ,^S¬R5:Il)1l%a r.{bkZ;>=|t=X7=7nڜjso3.X[z漽^_jqosn{pN]|oqu||? m哣/F2xo i$sTT8Xk5AkY3[xD-՜&bE*)FOkfJjeZKMV1ʡH CNHH2$WMݷ{fnQmԝ۳vVcջԙuL4Y*3VѬUB;u&{z|ݒBDq2"B9jyl%Zu¦QHeidk ()9FQ*Xw)+pBcDSY@BC/=]+30dI\{+[Hżu&Dk|?c fNpTgR$ $ٳqgRFZad-w XO\Et))/ &EAc1"[;lB-6ښc\]0$\; 4wܱϱֱx`厅h;chVc@sJ1 ʻ1vckZ89&Λֈăy֜ -p].'\ 4[^.)ZqQ]b.b,ׁЈO-fT>SB.wV*Jx5lAHwx~Za !_B#" >6hu `+0&<;wwx|Qe%m4/[&x0XJzMao_#EYbN{Z![jEI&۾ !D:?% 1pD_S:Ӵ3]BR Q?@kEA+lb|#l+p٭|9mq۷~ݢ%,/wƆVdȊ~R{f;pxEd=aw{mh"mcCX,=Xhbf}vwS!䈶gT'1hM*Al^,99dh6(=|Ǖa A0$ڨ> stream GPL Ghostscript 10.03.1 2024-09-12T11:15:48+02:00 2024-09-12T11:15:48+02:00 LaTeX with hyperref endstream endobj 84 0 obj << /Type /ObjStm /Length 3244 /Filter /FlateDecode /N 80 /First 721 >> stream x[ms7~K HvzKҦ499mvA׶67jWJd|yA,Dg < $ BB t!1XH  I)ň8Zp c[OHx`fhX,|8 -xrVw1"сV0уX@#G}@ ,HH $)B"=@!0+GH!8m $!ڄ RBd!zπ 汜d:D yHZY yH("J*urT+P1Y@+dѡ>ʚ_ JWR^gezeU%@AL^ )z/i;[*#gjRYt~ )?ϱx@Q<ӿt P<Ko (^ ˬU ūd<-IBqT.~&dA(tz2waBgS~k*^t x9)ỳZNJim`kY+g֊~֊KOQ$Ѷ(ѥotZ -T43jE@%k fB={ om;}B]_E}X݁5a lWސdWm[>lw!AǏ-7X9J3Fʅi;F6{+f{=Jv"c.7nqrcR=kj;ֹj][\_OZ1ZpAL$$w@=$xi=^L:Aj' x [A7VFEF-aԸ\mxl Jɲ;r}D52xX `+ Jg9mWu5g 1ۉ}Ҋ*jMM=uwԿV4rƷktKOwbҷirn3j ԡ^Rc\鯡S+Qo\Q~}>+[3+Db‡5I^ȵ((p#.NEt<h'Oy!zWkױ[ǚ#~8.<7?~p@w0Bt:P:OA6ه9:*j9ʔJz.OV*O 1Kx?g?Zm:I#s\~[ɖr`o-[ib V8^P/pU_y1(Fh6MӢ,ΊbV\WE1/uwG=M pTz(~1U/'W~ܦ ϗx?=`x9^,,5] KG(o߳x}W'[a5 5JBՔMIJ~0l# ^0Fr IMI$[`6?-52 k.`Uh6)JbOAjOGڄ 17& +Wx1{g@'M]0> yJX$yk R)В.!9C &.)!V D- `rܶ",\IIto%gćmaw'21i^LdtÆnB+p@aL&XjKᔳƓ  \wcgI'Ʉ [9B4e4+B؄ !Bd414gL  =28Fb-a lDMGI_^ N0آ3IZS0K5{#lR7A_ݍh|%3'ixz:{Q dQ|Mg7 ND$;[Oj8sx^{0;vGFG3zAElNzT&ፈ߶B4 2IPS')4UAoHh zw"5QL]. Ih: $!aʍ̏G/}r8*{z2Uч=}Yi>GXEg':6{3촬p- ^WnzέN(lb|~9\iA{tBUδ &dcA0L>@|2N!%ؐr-7[o|8f>f8_GrQ\+){ˋrOpQ-Wro_P{+Zk$x 16zQ#bF ")ChdIm#;H5Tw3z)ʘc6^յ cKwomEhm0){tbbm0>%z%~!to"<^޻dWNC&؀T2FdRFA{TlȨny6z.Aw&ieb0٦WY޷S nl:j:%&p-m.d7@17 _pϿ-~Al~:c \£G/60hV1AMz4}T7W>Cp[4=sՒ4fw{Fظ.'61n [OD 1zg<'k4,_$VFҷ1Lj9'g4TkEhdrU5ߔR7VaIqO$6М;ϟ4&Ai/g5zggg2_?$Uh'h*C%U3z3ן3~3tendstream endobj 165 0 obj << /Type /ObjStm /Length 4204 /Filter /FlateDecode /N 81 /First 781 >> stream x\[s8~_я5e;N*ǎ'ƹd ˴͍Dy$*_ARHQn($4ݍZց4zR(Ut0xJ HIPJx@@y:Z;cAEw`  GN{@/I %4x4Pa 9* Me<qԞ( (%T +`E@ ,  6~?QkR@R:zBJ()e(eT9@ЂUI"*+Hy PjJ`AS 5JݩM [jg HF C*64Shi*(zK4!|op*Io`Jw_=_ ?3d4p2%Ox'`vïUʯo ̧7ISog|'Yo- (ʋ4tL%%ߒ;f$Ofy:I\^b*Sf~ ^l#H|4 B M @/Jw Xl_u>N+Xz(8N8M(oXSs 5EG֦Ϊ|QKh ź:crTQ⽲\]tTw$d B"MR9Q6[POR++Y{6?&3ZmP~XW>| bnBK~FO,lD4FKZUD_<%:6Ѳ 9O'/:*SI1vYDKnڃ¥0VVTau MoU谼(ZEDO/g|fJ(\dd/&Ӛ6P2/漌&f4Hن"4J?E)dP"ɵӞ - $DJ>->&*hbh_ c4'$ylC?gZΕ "A31 ΁vu\5yZhZ9jB?OE :MtRP*xK1!2)2|W^ȵp][^_ퟝt4oYz콊Sh0-i9 $'}+LX" ¶!2d6QM#7F(4Gh4fq^ Zwg~zst4&jk*4aMXxт5f0&gY:\& +gzf%FjS謽Pn+Zu.[k99 ՚oSLφi˄`X(1U%&$/t:R}D&<vf<v %,zz>=.l8&Tk٥Z!Mc_$xsA BB.?&dt2zs]ÿpcI{hMTi?x4"#6VS,Jk[6K½[x792Fa_[4[lQ߱*bw] mƷt6.`FMB22HjtZDN".$)$]s$[ Ѷ-!/v?8Pme5ؾNd,E b.l6pe{n|㻲h֭܊ݐpFɘqg|<{9Q%4t: N3എ5;="Cx6O&Nb32 2[02Y1&q3k8V~;vcL E!7ŭ8NN'N9L`up1>[E\%ů[ЀVЏchz"薂+qV*cc<|1P`rQ b{U1eF`2cc{šru|9KΈmhDg[E5pkɦOփ{/}As.nj%%Nt-b됋Eb~Ztɦ"'H<81G/,tˠұ&ĺ ^"pMxSE7@-Q[PrC9DC9DC9SbhMq]?x,vq<@G:R> stream x}[G&O D9-~F϶[Vo? LUdg&U*E7v~9'"2,MK2 KFpy#_sx!Fo^YowZo}!p͛_VFI7o^PoJl2r͛ËwBۨ4{?Lm\X+x?o~]Ysa7_5S)QYcns!,y K_|Jhz.S[K#3f4RDxt}/h%1^A#c4+kWk-xʰy3jw!4{9߽yy7y=<צ{Z+y J .Dl[oWJp!;PvjucBuhiE{:NuU-:}*ھ>w7վ:d1C4)Jfsfn AIh>Qos%|qi}GY+8k}T49-BkRodMu߮t^%Z_vW_϶hctp3<%͗^p%ÍkmaY_<]K(iyn6 (̈́ej. OC>'Jn<3?V*u VkeFvf'8.~鱁\H=O*<|FcQ6ɪa|:VowT5G< p+63`6nj .<i򒤁slLaEy ,аovfѱw+eYM{P쁶$*VM{85:oaԬ4> Ɵ*=^Y N u%B"b YZ~#pebYL`:V̕BccІ;5[X WN}$yw5ǡM;~Y?΋ZKMWs`%{?GآV(.dT=NZ)cPlKk䆫m=ƨijdưw^kV5Cg N >z.cG`̜b0pؾ]I`Z~%`("VػzkiН7и'o߬` v(BVCzQKOP]k*^l Ԏ.{:RHno3\̋-\8xWBd+:öxXMӁ=mS@k`>hv{ޯ`DFZ^<ڎ7vE z\(Q{Rqy; u ϚfإG yoCGU&އ-ʶH \mqag"|NՆ(ҍr20:?TNQ[`aTբinʱ}5Xп$=9Cp( u:$@'-78 l뮺-8/0rMqw׬R+aYq2 D@ٹ!KW [_,Z7-{X1H;-7gbHRAs!/~HMgtW]9+sPo~+`>MH*#K"rM!pc% zxUpLÓ=k@y#:9[zpǫWKsu)﹍F$=7f?CW (p= soaU=M+ܯ.>r#\T>aj>;#ef{$L^t:+3X{f)*$+8iUǾI1DΈ󵬽EkA+- :ھ)QRΣFo!^otP,7Fi5%Xh::HЙx$ڜؑfq^ ,=T5{~HoKb$]G$ec}s8I- Gg aQ$u mRx ͮN#Lq`ꋃ8Up+ rW`]ӵiB xsKa'[8ٛU)itUs㔮/X2+mc(t5#:EG&Y޷$ ]uO=F&57`F(i.$ ݶƝ4gɚExL:ylcUii]i͐5-XD:ŴIVchMFgNs+WDϾAӐ uq3a!q~ٺv=D%'*i#]U)6@Vܠ':N MCMOqK"{Oڝ@_o2d q!s'8v[ۇژb}C+8k{%Ef' VaV#'!JwXk3kKzI)o߅qڤ[p5g \+cоA6c2 3!alNMi5P'zaLA^ 4݂DkrA6/ɸ+Fp@[s=nx֨=ƽkxA1;!5w^Y,noo')&,OiU}}gs2 *:JJ}"G[Z]%V\*9癄*P뺟x>RϷ] Y\܁'BdĔ]XXf*xƷq|&s.c@K]SZ]-+p̽oHY%n 6ùg^:p/\TrDD"0ߨw}Z瞬"AEEžNq!f j;Q3vsP@T ޷}@) 'V8,Y~h zR27o~Iœca5!>kWNũ˸D@Tx `B sD8]SS/Y/ZKz"cv[..hmVEhօ"쑽Z`+cs y"C21'goߔUp؛eASѡG"#*i\k 1a$R(+  .8gplq+ \RK1brCvV !,pp鹹AMstpWPs.{oIyŕH|~^g?n!|[/=A3kd׾x9kPN i!˺)B̊jz@m)p2IE:SgZI \3*jT+PrIW QppȥYg*WU ]h@ 2xJy"Neʀ`Jcw %,01󙰅 Rhn <00;\2r>~^`L{aBן6AuIBL,*YvQ J4=a =cTH 2"N7sq%mƑckS9X&>]0~xϵ)xW`is긼P>ą$#-ڌmg{Rn^U-5c8>[;g󤌣XӳQQW0B]1Bn|4lح$+zz,k Nŏ:6g¥ ]\/`G]mǠ/G'G P2w}cX86rvMVOYkX{>n繖)H!Mto(uc|_R& 8yGlg^fZireJC7!}@R~-nŶyB`3ڤm}' ٔ+U)xMO^r"ơ] 6 ,شˊު ^ܯZ aA~"5(TԒ…M?UZ T\n/ՂL*JA1t' +"{h/ît;CF-^tP3el>|8Cd7]??ja47% :^Oi!C$)GձَkӾƈ3*#VJ]mE;*#m#/)& V&-i80e<_tmm' 9`o6\Qa{\kHG|@YKG춾kc[?՛s}m~ kyABSrtž4m/}ҰF8 nx:7Ӯ%l=7|mcs_5i/*ݹp>XC4Ut{j-7!8*0@>BX]`g]NuE(}\J#\4kM]w]{/Վ~w$"#\,MNVH3xCVdw!g[H%Kn1CXG PN ) 1=~ůq4aG<$I/O~/ <7FM45ĆZKЈ1%>vh7O&f=!oIHOSy}=obS`C9AOP/ѡ0{"V*H{LՙhdIN؏rfB`J#|,FfQhCRaȫ#>n U,w*ً)"! Br; )ɎE$H9gq0l2(^/x.m ATdgy;!4U 8W nS T88ASU'4[#h1쐆UƧ#2k`)`/*2DRXPubÁ,ETEAwBcf*<:cf%r[۶r$l%~@!qBji $yFȣfyv눩؄.))NnOXqWeyIc ;Ѵ䍞 $﹋niA\.~ KZ4 cܔ 2Rk^sϟ9d$8N vگ{531( F8; L7?((lQ*I6t\0APtjYb. ƣUq}ЯJTtWzԍͮm dhϣ?VaCuKZVZ\KhRx4 YA .rm5 :#$o8$Տ" @ ƠZ^1$8N<駷O;PLJi^ r؏7#Ζ,AnRA"S5=KAm,:pVi*~% B?NR!{ ME&{hǣXs@EWⰒ@y(Y(!J.=p d$f[5C\xۼ{`PТB-éT% ŏT2`N#F )̔[*!z؁Ơ>>_=fQo:*ƪ3ƞA`PWr!Cg#vUA*%(Ƽx}JT}c3HvE{ω_[ `rX .:{Jq`Rd`I`%< ,u:פ1 O٫\)Z9\FyJ<)21-}s<9i)#&r?rd)@4ni>)W_M܃@)?={+5qZ26##t?*9 8q)ѢUޅ?j 3/D4S^Nٴ/$[Uz4"3j\\ٱF: !4ֺ i;r\9uQF)\MeavSWS_q2zg *33Hvt,yxc$ o[ bң5\)[TBPB43dYRcڕ\Y,폏\9%jendstream endobj 248 0 obj << /Filter /FlateDecode /Length 6645 >> stream x}@KaZR3݌Q}ƨkEi [Y-7Uv3)qdM侮rϖ]:,J3&Q--8vȹ \mIUlC+>nS\xj!9O0΀a?t+\9r箜H/i'ϟޞ< ovu YNv?) ˮn`wQȲnM@섔:f0**8Hkג59qCZ e]KWZ'KEH0PJ #/jXqZt0s N̔T/O8OsXq𜼘'5mNLX[~ N6u˖eд7g4g3EЎ1V;.eL<{C-7-f(|/نa$)eWN!{@p܉ -') xb-j!l51Nm5Ԫ1lJ#ut5q#EaUUIÍa-RQi&Rb0~vWRzCP&ħ8g y1 EӺ*7_z53 n|Hq9vN ZRd+̖c6 ff`H?/~L~"nn}~"=N9K%r !|mϰiC8UBDJ1aevb/>ة{O!nYՉ!1oPxrG䏢Pr,9 ˓rމ} Jbxk,#$G,#Q,YRG˝<N(8UQ9E#iH֧Bɩ=,#n+G=A8Ap9Z6fs׊|G1NKg -UFtHRX$$ zOvMKXv!跑D`4X*tB=Əz]7eA)W L,JR `}>)4_pˡ!oz2|۽ 8O_̏a1`ZmK>'/Ȯnr%"u#PH_'$$)$7P^f$F." YOC1&s:_D.e'z/HUwiwM|!PMY̓! -dS0R8q&bʀ&K n ddxӅ~B'{P P&)6-({ժd*,CۂDR&7yǷ-^ſ2A BQe,BaqKYh ;zKv܋KBuS6IpK9yҀ~Ui P0+Jdz_$fQBHpP'w9qj9Ͷ~ۯbŖ9T{^>}/\p&G%:U(zהX/ M У~93T[F3[Voɮ 7eoc߲w7v -MBٟn1<u[f<5p/l"ew.DCp|д ! ]Bʄ,ºhR10J!;'?{zG{[ Ǽ hŸ^Сuf<9IP`Ce(%L$?YrՄ"  LuSllw/m'8" +d;#JE="$ndkA. #:%%80]Qu-4Z:vikؠ1d &6lPOp*pc[_Tu.xGE F&jUL)؀/$v_(4Wn\&%gT97P*( V"-6M(Vפʮ,6z^䵬CG:I(Y{hr[n عN,^)V%pK9GMl<5i9F i$Jh Pԩd8"yI=e4w.TJCY"敐&`!Md~GKBz;Ei0+(~StEVœ|Ӕ7jT @/'HlM1=eDv赥0#TV?`Kp&bܩpO&溬(2 d \Pi( !)W8v`H(A L{Iγ w#<6%H05ruqf'IrYXKe@rXEL`CânV=-&o5+{"ٿhkm4pW{4y zI^C. `] d+ڗa5(!U*2,R!C;8VƈYD7LgMiG9/RM~iqNlꦾp\9oNHwThw2^PbxA܎bP *;0 uÑқxh? u9_!˗b<*קSk 9sLp518p*֏W;y`?ˆ]XpV>2Z}bv0ᏑvM }ӧU!u$@ߏ<ةq0=:uvv>|N `GhFYnh&,!%G8~/Q᮰$spa!A>Ve<^]hfg;<*y|*ܶ2$(rY g MWB eDISP?>Jb}:k3r\BVln3F`ha] is&[ =̠q:Mҏd3k>Thj%ۨ'<Q 0=4)Fd(4?3T$ ]xZP7+>~"fMWכlj8q8ҷڨ .볊2%Hߧ 4'1[Hlėɛhw!;d6#l=f\e}.Ⱥ~'"_$mĨn-fw AUb!رz(挵Ckrg* $CHU\ lӃ 꾍fY>a5jwmuCR #v4.:@=hR9VP C[ دyJG\K-yq3[޷ K64թ"XT`éW}㏆>K+⦡ L꾎[jz+𔤆^~lV^^b_8gY``oi;&2z]Tב0S6h5o9o݉Ԫ "H S`B_rU=^yާ@*@ ы c 4\ ;h(FY;91OUT>nYxp_u,H꾢jxȨhcQ8%?-#' -Qrf"zGWG@Α:bhmu`BZҗSH7]Va<UIqY֋xipKsR~;h~qcXy> stream x}YsHf<:GޗJNG,bvKSHXBhY/F"eeL \O; y(?b/X?`G_ѓ7JqayS&B#mT M4Go~%grQeQV73.9eLp\_Vr6Q YeWE2H]^lUq_d6~諿,G RuSMzxgsXYW W ) |V;OrՔ1/Bfw/fx/ Y mY6i:̓uYo"vI깋hfsNiw3J439~rFn Z#vfWh63]h10QdU%,{{8K(ctͦi{|a7v8`xҗ@f0#2NPhc:,erY.SKGժ1dەm~;,|,\XWƳ||xz7b*mRyѕKhsְ?]VϜ|W]ڑHۜq.j`E q LH[ DO5WqnZ"4p5WPu}2\s¦ \_6ӤhS̑wźZUE( ^r68B~Ԕ a/}Ӭx8Z'8ՖtEh 㓖4ib>L.h=NK1CU9 O7Q`k 0 xc3t7㰦?bY.lߔ2P_ ͽUM߷:J@vMqat] /xQhǐԺ.-RK۪_;5^}̳q"֑2|Y>EX/FwD \S9l-9H׌*K|Md[r"+M9R^*Q^>RRG-lL0"%JD_ J˺6ŧ,MΓwH] Di6nmw 鋋nh{V}pESGQϙ8z+UtKfz󰝤Cq{#]g%.\o[NF¨"Q_Ve7&鶋Euﶰh'Q{Eny]NQdySjIGVy[7#^/JmQ$[QTkJIBkrY˲ICm95,.xͥxPD崿,AJe,ܒ*ӛ,Porԏ9U'4E ]ك e\휎a#] d\7!.!7QgȨʺ8__D|9% @2ukGZyj]TB~{{  EU}UA2'H0r*"(%RF5Z8+*-|o؜sRtY2ftYfz]±(a]T߶]~QI=꘿UJ~؄#s A^πC^~wz摡yr| O^ęc"&qnCC  .mu5 {va}g|R-C-Z}|MX0On~%"Z8Ȗo%je u*tpKk8ժhQYFM < E`FPF=b,o~yW<'wf 嚇#,.= ˨jBտ;N kS͸Xۂx%8#}22S[8RGG#<9<pޛ#F2ʩNef`9!A #|"*4BƩĒï~\O8#m`H1GoFRh7{(S͝3Jnajtؑ[yKcں#) `qBhrU73 ׫ryF{GTp3ePS:A'Osq3ik7DQ'EԠt3.ɏe 0upa[R~`7h"ɣ94Gz^UYb(jf+ѮxYk=Kʢ]UQ(:mG2{2RjnVS-RaⳊ\'tiEQl ֠Do8N8LZC Exϳt?p|%. (E[l. N;(XR93@qQ)p7TmΓsڰD %xj{%8.@)OUŧ*) q2S !RJO1}GUOz|E̹V9{YrjtaZHin ߶e(?նUG2iM2vP =Mժ  X!2rdO!&OgJL~PDdBP$ -l lU:Gʼ'FF8(g.yGa]6jByM`v?:ь(~p )n Ͽ4O{G'ǯ|6㳚Hp\qEh^iE !tu{|&٤6>󆜴Ϳ'={ʤh7E뇶,bn@ ck ^=4=\\wqGaO30N6r&IػGCin 5BЏG-C]0E+yqzԎqb6 q-ߠC~Vr/?ݘ1?G F$er;kUߌԧ6A>YvCyIx nh=xYUe$yYIA\}.,Q-<5)e*jsY#pzڠ=;{*! ;,+e.q'AޒM)t]"W$o]=EB?t8 ۲.E]g0h%iʺ!Mנ*S s]Ah`ikHmʜLuFwƓ &‡y܆Z-Ǔ b ȭ6'Lj`< }VdA4Jqּg Ah$*b LK$#O"@XtU8ػJ^ o!o4XA0DV| G'g %G㩵Qyͮ&IlOg (?fw'e|ƭ%".ɏezh^ x㧜[7glnznr'jHC0# CGj5z0kZ`Y:Gێ0HD60DO=جW(0:cZ=:9=Ae9 <Kth%J`mpTr(&>1QI*zIndpOǰ@#ſý`Lhl`3H^yϑ@weJ68'kG$Or|~:2#2XlV2Sl0ʓ~T۝g$έ@^Edz7O~JJ̿IC88 J(e2Wq&WѩGCv R g]ցpIʝGFRJp{5 Dl=|CQS{K|/*Qߒ0рc1ESGSᄛ 0f⹎5Q41Odg*S%x*z2OÁ*پ+?8b.զlN-"`6}mrf p3Co_4X €p୕},bdHH4q!(ú` ` n qd2+#>-ϹX#z:M2#.g|-\:$KI$b pҶYn#`i#ڔe;aTr4Ԓ8?LEH0=T9C;sd0PV?V Rp7cSM*iؙɆ$/ׄJ)ʭ,xWJxMr/k|Og];4gۯIy͹Mn? A>pwql"CdPrd..8@^^fyM-!;5.!rAO!n$]_ikP:O-qoggs5:*̊92)''N~ {:țy!<07p  T+C滊&dlY>20 ;YSy'4u5ʌEm.P=M+ts-H Q$|ladDRPmv(kPtP6¤Z"Jn@*Rr꼘n!LM'vpS~(m9g0ѲXoqKRY%vp FIt%h9?r@wѰwz'(7"e#AjE45BI8ȎpU3T=iQ1#FOq1a>Ǯpaܗ4 )r<ik6#D,fax&@nIP $m!q"1h.D|e N̠sM4z?ѯ u͗e2d)B6n U"YebQɧ$/.__SpA`dk!}=RS>D; 9M(vuZ O~., oR?zBMq=ғf_{%ۮ ʫѳQ4Fxq爐lMt{Q)ǛtPSj;U8LU!`ߍ|jw?ȢB3(CTe#/_`U/ 3 Y3#8$49)4aUd?V3cRyH!,q*Fx-8& $:'ioΌҘ082;99lNݲEE ~ ,etd j̎ l%4q?u|߻C~2A& 01qwmy47K1t[#y4=YG^rzS2 5֛K$/bbg;R_pM*`7Ѹ 0X3*.V^\AfH 3pߍ;ZsBGQe;-ztfxoa++1`NWzfb)kGV#s#:?E Lb;*wbX13ň3IzNC'1Ex1e]QVƵCYb^@<3 !PRܩ/9AyS/a^~u ӪU{+6=-Bf١X*m*ſnb!Y2D<43E^lhRFɬ1?q(2W:@5GI$iȁ " [sm {D 9iTu=NC_ d)~.!0|Va_W?W?=xt[%-djWJPpyY]H^ 5[BG CcuբmvB,m@.$!țj=) E= 5޶CSSr~̠ЅILC894濆@c ݓv34*vnqBP I73:4J aO=e^ DZaɋ9^ 6 5XCڦ^cl$&LUŬQ6IKyRCV˄.";a7"Vj"% FQu //A%\. BFOKG@;BJ.,MtxA0[ߧ>SK%a [*GDԎߜ ؁ҡ`"GQ㜜zWAvbŎ8Z,%ȴخP-8ө6+ |La$Ap D4,b T2q'3\,Ig*Kjji XN%ex x5'bbb-B.CQCu~]k(f̮ 8d$;@FT]Y!B88#K ~M6 ]m)KUWh"x@8JD ˉ~?S]2]ل|i0 !l/JV2*zH\(y2|aScC#b78 Qa3H$)u:mAC]71A]1lpfͨg' ٤yKŨK2ɹuw5A[p5&oEUxX洈ab7yUECI;ڏ待1vTj>pfIY 0?[u#f\ٓj LzdJ'O󐚏p3&;fYF=h51T܂?_ STU霳u6Ф?}4@Z~3-hK[jyAqWnR`We,aC~pBT QQB5ƔJ":^+m, }8vј5\C3h&Z,jE:O6G/=@kñԸ΅R~9*Q4\]"F:&?j?#3oBEC`oKL?k6V(QsPԅLpV})˖]ƒI9y DhfbDb`ffj\endstream endobj 250 0 obj << /Filter /FlateDecode /Length 8991 >> stream x}kH >,KK~lit̢l/`,Ub[5Uw~CD>Y*ۢ.IdFfd#23J،¿rogvWϾ~)M{Fs?5S)f+b>{]v#ΊB,ؼ'N(/n n)raXQvWnGE[cUQ]e^طC/VUW֛j5۫}Nf$Y׻CWn6eW7;?8e?֫PƊő~)l+ W|FgVϊWgE4r]ֻ4vQp_=3szFZZ9k?q{"9DQ;\/sxE[59^2·/ >%LmJ` 1B iK3Cqz};y%ij=-B)] 9b!>늮:t>WF'TѭClx`+U7F \"渏,eӶղ|3!yfwWU1~)FNC>pV,CbDYu(٧9B)fӼwғߟ)|ĸR+gq'_}ҘAHZ1R1bL8C4K$l{FVT86?g3z$PZԪ,ۙ60*Z7m[>Fu+`7E?RfS(t}&(7_>{%عZ$Z= ze<^ Yyɂӄ#wD.)C>Q*i@+J%Q̚=%Jn_?* k7XD"/PdAkj*?Vm]`QB+Zi Kߗ˷}<nCqŦ)W*|v&.) y4DxdfRTwEЃDq0GL *|"ߪ|!']5_rZUM>Sܢf~ R^ݡPo -8Ib`c,gGV-QPJ17Ƃ G-%&l޻u : VK pWaַy+u`Ϗ3X"] ŷ]ַǮ:WH*k* `"{q@*gK2DҷMYU@n0nt6-, >٭l&7Xgϔ3\|ُi IJA_o9 't Қ]} XJJtwT6gWq[V,e[.{4fʂ+l_e\:lv,;?Y.RV#|TGIA$;O^ @sZDz>_pb(:#| 1'pLY-W~2ϸ(NcFH,~ v?c({" vni35I9D%X OjH /7>m24`3CEex/a۴UDcşewVB3-f6&˩mn`Glf[H)%{]݁\ $s[X(ؕB)c᳕Tmz!/J3yM~DVLYզ'uN?'N6P "L,˝'_[$e ]Q,B qŦ޽E+"xOYᯁ)X͔.iCl 1WV:FyѭqCTb6T ?Q(zSnfAjL߭AQ(2AP͡:o+pEu'Sodlq 'θ(B ̉޻ԇHcSMЭG~fK_ƹg#Ƌ]nal !S},O .&NTz*a/F6O*V/E@='0Rnxk6"fR?c^āvMٽ몶:t|2o! m TcpjVj@ J=gq?bl@ AMFB:Uw e|<F~]uj4ꐦ|FFqs뉕ޓq$zE,<㓲( `(`*^'G6Ƌpԙs7+vQC}QȠ} ٥ʌ€ɭaB 0b WV7}Έ83‹R bd5 Ιm`ša!h=6 ǹ|!á TS!-RmLrCbY6"«} ;#\qNxUWz ~ѻ6B@SْiNy 1۬V*J? -W-^Is0ջN{ezAʷ)Ez[u.&T d!]-FE]t@O.OV۲yÃ,!~ fa"E 5D*s&iOv )n'RO 30p)ßWF3Ƃsp_dDIT`P; K|-Q3$Gݥ JXN :KP QĤ%k} 52~d4+4_ n8$l v~Ev!ܮ$:hkw"9q~"n0$˲<`v8Ӕ*$9D9~1Cx1^`lv8T+GSD!I_eK)685O2f# 'x'od(GU." %To6k ]BQHnUp1g?|_ 1Fpy'i4-Tl0\q8`&81r28˞LP` ֈ$P6F3 㞂DZw <S2a gλ螸<N|5 eo0u_CBO1A0V QY:%ᇁn$Zc\> iI6| B'8?Ru{Qy𙌰1>xY_U۠/)ǼuBܘb[>| 9Xw?\ 0kw1/cʐlv\Eᓬ(#5o~CYO95ҷն9t7+,Üa 欖%ZD2B aexƗ|U3b1JB˃}Pf~>%w`MUYj~w|m| C3ymV^zڢ5"byЫ,TmS/ 1p<-Uz:C֐@; ղaS{t_1Y hӶ 1u3R""Q, SWO <†{p x6[iDL.n?^3Χ1~1q4U}S)VWy*UCWsRZ"ҰOrDNv z6"BWrjW}եWu$i}@,lJk#jz~uB%6TPrW PT`ME|JҰQ fؖr0aHQ m9s wM-wXT\L 7!3˿P,<`}n<^c8^L8ya 4޿*d'/f|aXS5gk2Z4~0HK34C(39/+aK;ҏ>p ',ͧ(1C(q ܗm:Jh ``}B}\V{sZ8p2m[վ:7>,4;wHJ z4 $"WpF|?=</,7_ӈOrH4U xRXAsˈ`:u@?WxRϞI%`lQoc#FO¦TQF[c"ƟP{h6j]4JO?o8'L Z Q#U3'TcqN` , dkœc ƅ6,J?FD$S=4P>zMµX-} <1Ƨ 'NcJS㺝2`_t#Cһrjՠtx##p7u_>c"̰":E?qAt9`tC%~O@ޠB]`>T0bUs\-Ҟ|!T &1l)wDT8(gҞؚ4T~Cdr0u$C=l҃ "Ғ43Վp88kyJ@ y@ʧ1{Btt J_i3/0cvE(v L7 ~Hjғ. fVW{b~Ms/SAHS)EeNUM2,wSM(tA5g\&*Dɳ G4ӝ2b}WpL;5\q1BiG@tr('am:jO t^?zORqO~@=1G C [|ܭvXRD%KѢMKj MKJ4K%Aa.v6'SIOa1h_T1 `9Pq41U|AGXO3&C pm]UXλꣳ %tH{ ǚX ?qن;PCbZH#!|$ L̿^sX Bzq[.& ÒGUrRQxv٦B"|D0hW|.>. Ô#Ghe}B'_1q8PD.y"!*ap#8ܙ*4ЀF|ܩa$he w $ 9qm(a&U\J8 'jyןlED?>zgP#%YAQ,閐 QRR?efCX6xn}l|H͟G`y?UΤZ{-pʵt%+Wp <7ۉqF !Ǥxb'wX&x(y%~`]q%QB @\!$15ф'ƸO;e8G c㛫8̑$V*.ly& b8w4DD?M_BfO<HsD*؎iTNO 'Y{S11KE /.Ch?{51C's{6޲eΖMJC&myE"a%V!ͽ&6.|䈞Cr ~Ð 2 !ϐM>1Ո$1da ̆*C戞!`7烹p1qG:,͇Tn}Lx9ȃ_B1;!`1iDʤ! ºH#|l8TNGIl>97To/O;a*3h`S;/A݄.^H#M;;!LA&E''{S~XQo`.SAIeXl҉flkxjAXΗM-1dr,Od*Gtz`8e  q,cxSGg|AUNkĨTh^0$e.ƛt2@bL<('" I)(0rcbegB1]֤edy/O0P|xT6Qa&3N+ " Lhc1K-H1&Bq9Cq)?[܃}5Z-[s/0GXjDCx]/0ou!J(XDUWupߥu%U7qe]AF^GeuWu)tհt]a ] 7qX Gⓡ8zpCqԦPz-ɅWP[+ɮ(j2Hɮـ^&.0JleWlr$ ( 2Ȯ( N!Ew"PPs >rz;=ZKɆXCD!pA.4Y pEF=̳Fu]PHף(8AEWOoLj"M/]%d=B,[\Erfݐ6>偗^{DS붸B%/=z֞{pqu: 61Z.5eۡMcns~INqh?`UD6W 6Vz7gw% ze92&b'`@9n { !Z.أ.};?!rvqpp_.HP}`@A/~eg Bq_?+ؓӗLhM"_V]#9x4[aC ASF,v UpH{,c=\F}ku ::Ԧ:Gٟ{woGSEe3 (X)jOv9.[ƣBY mZxoG@T @zurج46<76 kg 8,N;lR9 .ܩgv B_; wNmouw mߡt+C^&AdG):t$(6MOC%2HU/uILj^v"iO1$wO8mP#CĽ;L4]y# sXDo*ago `DZ{-^z[UFn,pƎ>gڟA#'T>T _9%vh'uZDĺx-=:ص_~N+WI| ӐFp7qb#Omo0dj91V X>%$NϷCuY'[Zp$2p&Q|!B[ضLL"TO>fē$/F }7xU/4{I"o,$Ix[A]ST0je'`۬;m~ֹki^U/"7轅_;abk!k&O)*t N 478 ChCtjJ8%)Q^9C"Rh"N,HKt\~ dNe C~85Κѳ)Ӝk1S#: 7o{:ļs𾭽łh |0'5:R)g[bMy8ne$t4|U~TCt]=ȀΜ #hթaW|su>1v -QY1%& ᆽ#m"/A4G Ne/(S^6<Ҽ~SKotPc׊!@jN. s ƅ -xx{x\3]<!e/R]yX\>.#+BjhտWYKƤfDk2ʜи0ImYﺲ"i”q\Gasd P7~Vɥ" r7_zΡ > stream x}Wy\WB52Ÿ$Hܒ(5*.7""K 6;, (eGvi(ƨ*!F-yN\'̘ynoޯL^{ֹ|;wKFYd2a g{cB|s3ITjKűWq/.̿aQXծ@ݟCBy)qs{s_MQ FʓDmP(/j9ZIޣVSs5ZʝZG\Xj2&P#5DMRVc(eAeP=ղ1c.Ya!Zγltb;3;lr+oe>kceShK~5?`x'vۿ&a])KX',&H0~to_-#@rtЙ.M]iɭcNlF`'Ze<\%)` (b(1D! afIlݓH# qKNܯ={ZڹP %L/ #:^sJ,i9vD ľPX}$U{ ? Y~k>Z9_Wr"7DtI'ʺnlQ]#2:9j#Eҵdd#p,۷r`j*C7 X,8I?+~Lo de"8TLO'蹜:( U| љ{2s~ qY$n/&P:ݿJ,Y$ D% vo*sEyP q^p\=o B ʣaX/+0B5y)\1*d $̽CWAeފp")l2"4p#盭3oxMlؐQܽI_wlǢeI*hl_Wc]lt-hAV'E˥iҜ6G4ru^9M_OTeX(mA 60+}/6wJVqR]}up1V՗@/)W@ 0qr'?l"x6ui_3rkHM'n8F ϰ A)751Fdù8i`Rt`#-G6 |:dcwQL6PFR-2ܢ"`FWe5@wt}&0-A;2z*즘2 0q <[]׭j9-yV@=L,>PThEVD\R#<-MN4.?5}}|?m>f!-'F[piMVl |bM|6=}6 G&iuRa `|l^bmnhhXp? ŅJu:CA~VOyelHqZ]v e3;;*%O_WSe\>'#(o3JZQ.*\. }gs^3G:rt]!#L.Gz4Y\ LgMϨ߇ :г.EH:с}U*GFL T[t⠚HJa%%I {5W5=#,RW_5_va@'+t ܸq9Ȟ*X_LPUe_[DmipT;7EPǮJ}sںEZõOR ?7ZK<$:SHuʣ7+09 NwB~aNgH<[ΰ+\;ꏟ2Ċ#+A]KS(ϺRISe`OSMaŢMYϰ;a%Ն2'_޾sO?jGRԇ{U5)̽Lbԡ #]dAbyMV5P&4Ԡ1 # ,Lp 뾆R$.RB{)u5$~[ؿ 0gNsA`D- ;M%lt8{ 6ƌ:)% 1el޹՗ eWeW[af+m)΄շT;Iс.Y(%CBGo4$*20rw(@:$@T. ?$"݋~6ڎ .jNZWȥa 螝6haie=G&k80暑,;~,Lfq-Z7,##=;A4 D2L bLb7j.=HYҤ4i =Z@9jݑ\0uFH~ߐ I M-/L|2>A)b(b %OCbID8%q5XI^_Ckqׯ=Lw_aAmS6E92!Z{ M cCS2$n¯ǐڠ$nWf(0a[m4W̆= |uJ)o'q2ҖaJ9Kc3Rt;B@'/X\>Y1B%% [RIebሆsx>xȠ[N!V;q5妒Ci| ܹ`džu[yHfdB!1~D /~a''ԗvA%ԹB hCBk8ւ McgR55>`;TIvaQYYi!a/kvj׆MN) +l~*s׆EFkw;?ٌv?~WdxG.G 2>V #;%1- 9aG}ڭQ^f¤$!4cT 8Gw.:AR$z( L^aaS҃xRBdsyށBPݱbmh((2戦RñёI}c!y[A'`w0 nRnޞ·-̌=aۢ*ƪ3+UbK>%hrcӻh/V.Z\zq%NgEnܡC5NE,K&~p?qNx\s+ǚ\=;Οx͋2rLc!z,XEwΝMqgVv^l3#+4Ӊŵr%"8g2n -c.644>6̳m?q2n}\{Ǖw/|C[ 9k1d *%-JH8@f=pNhj= ҴJI$d2VY=$uN+ZT틏l([kafy8:%gB"\5N|VW$KYDk3flK^WP70{endstream endobj 252 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2955 >> stream xuViTV1f#FT\j0b"" *.0* EY#E4qM1q&cy &yթsKS&C(͜#nYmEћŒGo$Ȱ<=#]'fqps%۶X|Wаu7EM6nEES-zZEyQjjeOZL-RP˨)G#ʕM(2,(5FBє Ndڏ:d͐'dI+v&; >a{vޔ7 0-5 : a=(StaDª`',lz{\XTG!:7Gd1'ȿyuG>sX%.(GS·t#TP"H`!$P *6l)[6s iԾ Jm'  3aF IT)G޺Xˠ ^+[]Kre &2*8mdZ=m8lM&\`IwȆseU.%Kx<{Gx&>%&o׊?; :@n 0{ Z)VhʹVDFMa_`tjMlum6@ҨY]Jms!=9qn$]P )?O 7.!%j(KN)tf{@%;k4,JJk@K/ӰGQ|[:+sp <SƑOJqZ9RѱCUeW$n/p%-͋{pj֞͡a9 d?zc>^Jm/ F0Fhk0Or?qkt;#{A[EIX7b}יz ~gCQyj*Ӓ+I ^N7yo=0g"!웽>2&n {1a\u >^bhkuH qJ<P[~ n<\e[ 7 ƴӍ0OO8- F =sKYQO9bJFg) u1A::*M&a;7&o|@t]jV- %C'pROQKhse,t#G#< v^g$V.%(RFC)WeAK~MZǵEF;DW*Hď$6|tȷ (#c2#R0H!2 6(xkjKI,in<,[Y2s)91?v &W_[;`yxpZh/QUnžݍpˍHNI 7nOOL1.D0|+nRt`q.&[ɐ`ԛKSK(*næ<씁 Ia=F(:K8XXfVfb=Ju&+$RI,"z.>V{OJNj.k'#O6w}0RXP9BTLUoLpn#߰{3ހ59qxţiakWY@}£dBҥ 0sK q=GP]b Ev`~-_<|^RYw^ ?$ .EBe0_$숂l%[0 [&(2]^%93=_jz+La;d imm"DT< ׁX0$8I]v;fj7KCHR M1ƤL=,÷!2B 1$cH`qci04TLsb"p?0`a2G_&ia~م}xP/> stream x]YoHrQ0RvGzO=4V/T%q&YҴd>=xe_[0 ݅2'jK\ ujE[.~/Vwo/^vq p\-Ҝ:ОSuw\-/5IHY,ejBxc?v&=lqwjٛX8Q7A8|a%Zx E-o|7 uieJ8 h^P&$^ |.ǜq̚&ۢ_^iU?Sc\?cQ\[깘MR)L\[@256'|9ς1*m+O| (ysOe>/BRBOJItz^v^N풞Tj7* -(nbޒh%?L粟)IǼ=1،ߞ`>8NIs<4vB$tٜN S7>U﫻E L^]F \0*}0K>i (*|Ns Ug3o?]$a%FA[F{j UNR,)Ÿm7= m;N]Uߥ䩢^7'~{S]YmWM-y./]e[㔉<4+GWqʸ%E3E"fy%|r[=r!}7}[KYWf8X+e\UN7\kRJ*OĔ{RTuLwe"teN[Rtx@汎&MPXw"aLȦ|(AyVFC~L ~LJƁ̹ }J:,~sR7M ʴdjZ$W@Ϛ'%|LNҼ/u2R`ڔC敐8JI+Q8] V&+< m𯖂 х".x omP?g8HcbNp4!8?]W>Ԕ1NnSBwS*6vx+k@;Is)Owm2wRx O wU݂ Jq4 /reї%10HJx7$XĪ2-UBCuw^ߔJDDjdw2sّ?6ɮy *&]_M7 AMhע~액a`ߕ-4\qAW2o]Mdc߬cܐuy[!BI_2ei o6M6'X)*9%|ey,və~&CقFy O|hfUҡ!U.T܁)eܵeNFޓj+V v٠$fQxVBQ`UQn634M_TuU݀]p&jAhPA GetGC0O+)&'TCRlm\?'|yB'lCcF0/ ;Qk%'p!4W*S#s+Ab%jyũhh`{jੌkR>[]4>]\[- /dvMAi0%!gGCVh3#G^1N&Ŧkivm܃C'1%h3S-J&С,\Qѩ\/HOĨ,dbQ!8X6 &)ooK#]nHA-۲^R@)Ky2 l뢯I.߹Oo?po(7 [& RMYφX\ pfdNʱ]+HD{nu4G^4MwJ7T(z6됦r.77͑1Qyܲ24b%qeT;3r޷J7! uLQ-Ԥ| J1J q" &Q )OS)^MJQjYDzFZQ &f.<VN׫ؕ?f_:/^@*]_/_]Yd]DpK)G(ժ*k0xҥx0l6y$ט^[>EM_ሑZIq-ZHUM 8rW=JD? Uv]*q<}p+:rh|;^nn}(:Cc7m76<j1P&{#CĻ]SwewƤCHEnUrKCq։4}9eR y{䛪Kq| SY-ka FgI<;ݗWJUyO{ƹp,ț#M4X,7TK.ϣ}Pgվi_Fd훈aP=32(`,ɛ{u& y|T>s>8_ys~IeїۛwTjT,|E%Qr*-T ;HeWŦ)NwrYއV-3-0rYsjdf7fvy (JPb%'s;H;3dFf;=p|ySv)|);z%RJs4)]8=zHy-i}e}}uOeYc79%K&LOӿy{ݻv9昴ɉfs|Ӣ c389c0%oo]wsOC`jBx"&V+& Uy$=uto!2 aȚEv"lGQQkΙ^ߙ})%\'yjXU]lfB4P eg5b:u#'9G§L.طر;UuD&3ka}hüwkcy@<,`56Ho1F^(S$ٴ=1g͝Ot:eΫƂϢn2]Y'jt3.M@f[z5w>O,C]3B_oi*'lM(?gϢً̜ADFr[9}r !ϕ L~ n!`klH0na)kLg_4y}``aȝԒ*ejeUuGBz'iɵsl6rHCm #A#;b(6]@+$w%~(7eǸj.n ޟ^O  JɅn`zs?aCL,X=CپOQ{)_ | .LJ7(1>g&xV: kjbqũũ™FIL$dy%D^ˍ=/6,@lW/k}r9E|@[I8x W$3G̀ΰ,JX3m,U܎%I ?ųcB>)?1i{h+ȏD~\Quu ( 7@@C%M#HU?4? p2a8/˽NݯǰY-_(mfn,r~%$d8|yGW q64p!O?ÕrICE~KNQS}T>S|oП4=ɱb': 2އ* 0Z4A+9P;8 YRطŪ!ʮ$B wbSG`G G5RfT4Ff,$L#`Ɨ NDx* &"Baz{/Ծ'mCC<0ZDO *cx .1!7 ?ţNQ6;yoG{ o1h%%01yɤNgirZ\Mn&3jBjϾ?,`~ v-vBhxB0|&|!~ `j)@%?pg F}i5)?q)H?`%b>P"@&s .\Uj}B)ͺLp/$"v#V}hR)Ѓg/yF"^07)n WqA i%U.̺ϷRJ؛Eا*#̅gI4y6* yAvE XaxG{>Pm@cU1+뇪mj.&Q$%ꢏNh'M+ADtחۛrCQ]0ଈb vGp*q8F0C|5LpߛzCՎYx! ɏq nIx а@9 .>& b+T2"<{5v5>vc0]*k𼻡8fH)G@i$+Bb0T48bދu m }חUTI>Y64qoIC c[}Y'F`qȰ}M"}tckvFx馬˯)-/2' *]'fy0hSWAj#STAg_#xW? ?LudhFm/t6Ý%7?G2=j~yEԸݾ oGX0BC0gFw]^]f@?v3£ݦ)OnpbdQ3uU`ۯG15 ~xtQo` o.vJ;A cncw0(Y0ڄX5!8,pcP;vIw[W]V7v\絞[to8gBU"\Q8<i'"LQ'~,sv@T%lBpGn㦺iH63#5` }Qt×3v|rBr,O|@,W~2C`iҭNrG C "PE"~~?Д{ؚ$RiAq)%ddᔳa: rCG~ nlҨ%r#RM}֎ݶ8洧aB(tĆsQQIZǦ1,5bHW4ʡ5@GIj0wIiHA| Cɛ,pvud)VcȎI0;|,`݄Ͽ8 p*$K1}ޒ'c.u&F4찹tcgCl@qOD@ 09\m 7YBe _ vGѧ+M]@o1RR m8 SpŒۜIL~]A+47eFm(1xcr-(yo9cDjDhRm64-༔>Ƕ6Q?FSo^} Х2W eL)+6aC45a۪ M^A 8.>†p8-Bsߕ)[oj?iP@įI)O'uryaJV(Ǹ/Fo71!ͮlhRˣkR/Ańtd$*O{&l6n CqSR;) +[MHLi>N@)0c8o`"Hf=/4 L:O67K`qxeŋ*Ofw|+!ɺ苮L2}ۆq{]?.9.}6}m a4u.98u SAz[9$fPqK Hhbp:IR26Luva ֗iő6etkU/ӧ%]_3xa(1-V|+@al$tos!fڻ|-Rce׸灨a֏K \H9B0SUJ1wFCeqa#U|n5::P-+R 90}RCqSEeà5[\6/:0qKA}D7G}D ӜgYgդ\bա&^HOpBewti;&@5Ņ#&'ؔf@yλ*C~(I4Cî',RrS]*f8~](; Z iCWd̨kK\(-)ڡr&C,>Hw9ٻP1VNTô"[ 8+0Rד7LdͤoOY)A<@mԅTsђjhhya'E_FOiHi/w}7E\\&V<碎QTٔP3a?8 endstream endobj 254 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2342 >> stream x{PW{n\$-L11H&FX5Z(2 "Ȍf4% *A"BTƄLmJ6 Ī-5zVL}w9|2ߏd+WK΋;yD:9ArVNc> }-{sk ҶmOWe͌^DQOP'5,M*ZGmg$j#⩿R˨jDEPa~򧊨eNU~ɣW ( G16(.i<YѣRV6Ɓ*JV- h-dCQ QݿVP渠C;ByOFfص]61#hf4 ikl_^xB>D%P20 Fq-zb_r;e򙴪D.gT5%|/0v:'ǘ}'&jQ,j4D* BLgnpm4z~@Kוxnf"/Kϝ`aVf &Ζc'ݚ4 1Zѱ7cipl/MPb(N\Da/`%‹@ E[k$0'u5[ܟV .`PPr C,E1̶ _Fe-8ld=@JKN@A&S XÝZ(SPE++T?TXaNTޟeJ{dO*+4< *c%굵 gfpznċLw 9 w>OjuU`T-UՎY vrK)Nm'?5"8&m׆tOpJ1\5B#tih7ŭ7l3\d>5-#4HvhᑥoU”hZa/Lw>;9~w1o6g)[ C^O!TGL|\_ yr]ܩ牋} !h= 27y1Sk*l]aZMb.5rLhjЭ*qpS܈"홆? > stream xLMSans10-BoldObliqueJ  lR3vu$;g$'͚Ym^g|fgsWfPqUu]}Iu^i '  To Ȗ lendstream endobj 256 0 obj << /Filter /FlateDecode /Length 177 >> stream x]O1!y?8 4gc1`Y. ob6ݝ0]Η 9 u>،k2 58@FNem¢NwBʩEM/8j(K>yZendstream endobj 257 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 580 >> stream x9)MathDesign-CH-Regular-Italic-MathItalic-nBt    betasigmaepsilon1 "Onvz\n b܋mZ|>wZ{rrargltw\?vrqt N>CcqaO_M'R1')pz2wyy>#'vdKp! $o$dR0zxws@817Z꟎ zSE? nOKaLXntqsturjwƵ_*Ë@?&7N4zcmR|[ZRJ^ָд / 6Xendstream endobj 258 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 419 >> stream xcd`ab`ddM,pI-Lu JM/I,EW&8Ktwi2釞Kg@rAIII A LL &2|?}?-=B߶9.< 'endstream endobj 259 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 241 >> stream xcd`ab`ddM,pI-LuuI,IL@ 2ݿhbaaJ# (0WO:d)I4wYcX}@wdԼf> stream xcd`ab`ddTM,pI-LuuI y$d&Iww4i1黵SG@l鹉 l L,|~t__G4b>s_g{ [o,oؾw~D7W,z{O6>9.< рBendstream endobj 261 0 obj << /BitsPerComponent 8 /ColorSpace /DeviceGray /DecodeParms << /Columns 651 /Predictor 15 >> /Filter /FlateDecode /Height 608 /Subtype /Image /Width 651 /Length 1544 >> stream x1 Zk $DHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHTHT> stream AdobedC    %,'..+'+*17F;14B4*+=S>BHJNON/;V\UL[FMNKC $$K2+2KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK`" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?,jjD#mFD,J_ O9NEAU#~,}}k 9}YFoDbdbXuV\ǧZ-duPЃϸ:^3 qN?:t榉Eitd ^7@{?QIVڕ_2++Oy^?h` R7p;?AH>iuGU^{=j "H~3@~To~Umo"Icdk"Fp}?PKVӬcĖ!c7OVݜXqDfWc nIR:y ]OʍOʴƂNmZ_gHFH)Ut7 smpU :J@Vn ?*7?*umOʍOʡFwQ&n ?*7?*umOʍOʡFwQ&n ?*7?*umOʍOʡFwQ&n ?*7?*umOʍOʡFwQ&n ?*7?*umOʍOʡFwQ&n ?*7?*umOʍOʡFwQ&n ?*7?*umOʍOʡFwQ&n ?*7?*umOʍOʡFwQ&n }?*n88 P\g(G"m$qGc]_+/gG+/gS:jj̪5E'#y~Fbp~cf[ܘXV+eQoeQošZ.i_.I*g9w--]4]r̬zᛟ3OmUQWq - -`8=կOOp;WK - -a֭ޝ jn G(g>!3'BqO5fkx3K{bW$$E]M1#hd2KY$o1*xP} WC@itvr0y돻]z|:=Xo(6_#qA+rSV]e{kT&L njW.mmZWuf,g00G5-ƎSnAeِr;g#a@>:dF}ww}iejmIwwێUJ#FWI24cci sZ3wor#ImAIH%>\i+kWq[ Q<2Usp!/$0G{jX 9zTn%bi#ΡFrA}+BMf4, ?ǥ h.o_IxRF+bibdW7BԊFP{q̚M- _-ڧs\/`u'yZ 1ht՚:Et[]@'c7s )-4eM|'rEpjv)q=Vgi$m;9KMJ θn$g#[G-l[́]T0Cc9-7J#YLhNr68_x_]nqspֲ̛vly r ֣:夗v\pA9z5]*[hn.n5Th+[IgݢW8Œɡ4Ga}/ݒ2*P݂ 9hצu!aWe'y=Tt}Z%O5PUd 3^"K1yT>Qq;U;\;^hBl];=u QEݬF(0ZQK,3@!#֡HoˑzA~G@㎀jFCq{|af,i&dz35.Cv < j{&;"\\Csy~tL26AzUMCIL\<ˀ$u9SWG^}ZI@9*{q5ե.-VR42,-̿-,Ǚs?؉J,ۤV1@t~dӛk+Fp3Yv,Rm//B] ;Ճ}EyiMWİsNqVm5ByZ3EfwpOihA%[ dP3)Dkdv=BQ^[(o1UIk0l $ǡ!B|BL>1[V]e{kT&L nkrn4utO$ .̃8Ͻ RK'1xL;zze|a-EV 銻{w-Ë҅be 981V"yо" 0r+2#<֋SVoF{O5crU8eϱZrZ*o+-q 3ۂ +rK;k+F*ᘉI:rkS.R.^dN@$Gnb,qO=V4[LRnWPId`e:FfJAք>Vfqە7mb'%m,gY닻WJyх`qzՍJ577Uת9cH'kSoZ 2y`Jݕ[rOΒ>v #6|ygsFe}hQ%Y] >;eLEM&SPh!1G8Sie<řke0dpH\r*zu0]p兢IUJРgm<ܴm:&Ք,tzTIKP|`QI֦PJ堹|U|rOsRR'Y vT#Ц)^+we HYq3䌞XTͣibV`3ῂ}2 T1O_jtwkt,FIhLImaїzvl5I0@d,n8ǥSZn6F+k d8=1W,uNdYB9ϭvŽ\4ɷ,q84!֧k و&HqfPԳȑI&#s20۟YO ѽWf$)#5~moumzUx4kh%HcxngBpN:п_w4@]ƥ6\Zi/_1uh&u0{K#atx69 КK [. w'W^rN @KZIe-.$G mB+ZP[K}>o5c<QipPM(H'M͡V?C\&Cb}2Y*[M~iiDVRQȳn!@;VՄzYy96 z^h:[Z[y&f T$BhwyV ~ieon~lԸ7Y+4Z<N9Q K{8HLO.Nz/Fx,7{\Upwt5bZWa[vVtgc]܁h̋|ʭ?IPYǬc(>RE>va@%=h`(,y-"{VfKw5uq gEUInEպ‰&!e}U((((((((((((((((((((((((((((ϻգEoqu2(gX$}:ՉI.8'󬵖M+Uymn%D!B r:}9n!71B\N Kar0 S 5ݲ}"Ϛ\mץcxcyaXt6+7|T}OҟoSe bc!'/2j '@AӧΗ@fk kvisp**GrcҬ.hlkE HFNX\og<*]7I~U-d0DHB2ymy_m |g.6Җ+y)!+5`N\n>?nZ[Wr2 ݱTCK`{n.`̹8c7HGj%RQ|UjGX]o%ռ*ꉼaֲM4p\G_7dF88":swڙ K>0S4 9M۱G\J[$jv: ?!M[M,On .J䬌1KfOFp 0GS떼k-8I<ʂ :[v[m)<D>L rV=niL+I;|{=;7êX.'`Yc8mA9\Ze(/i RPpś-U=f9u\DP)7gF.uW3- 7phe 'wQjMhobo=Jٿ4}$Φ;Kin&$Gbp?x w`M`u.MDvF=ƓyVP `lZ]ҳv"! Wk.O#YY>5 xPᑲqi?bӱی onz#*+{m s=G,w}z uǗ6=D' |:ml7QEs^',D]gBji\KCḯGB'!I)> FH'ASja_K5]pZ\ ϲ1߸3Ƶu?.G^޻==֢zj6e i6xq5j iۖL [I灝_zk[XZ[rX"VCgy=SWѳ[KU'͍c?뗸m|M;_nhi#gۈU|UZ~Sc=),⽴Tw }(=WNR8=jQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEBV%FdˁzJAGzo5i#e[abY-@ r:bE5P>2v>Q}V\N"w3`¹-t ϼhe'=O2qO|qג8|7$^]MA(zJ%YcYGD6]̻x"h.[b̈0$yQ-ƕ6 α d*0q✕$5m4L7S(3_kNa:Kql.˂Fg]- ^+;eh#0V+T{hḝ$S۰H|WC֤%oqhW;;}x]՝ Υmks$*~銒z c?[=i-dp˜Zft ܐebǻ Ӱۉ'^f!x♎K<{,sF QʟsRWg}!KiB; @b0R^[I"9F Eef5Э̸31OVwhUY5Vա_KkmD@ux [m>DOjΪ~ZIu;۫"c+xQUCp [pr;{km,O4YƋ1<8Jn6ru6<,Q'f< V5΢ c9 ( HeYOSm.ཋ͵%%w)@EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEcA|ǦOE6ee%hIzJ]^m3Jn/),{zԚ#4 6,md|-lh[ZiаFNX+7V&ccmZD"qmֱux<1s`ȏa2|îX͓_G25V NG7ۢ4f4s!;XpK6}F*ƙwnKTr۱ҋz(=KUԌ ڻ%d' zC7(=y-g5y#y o^s`֖fVfA#nm\:W2݋l SǵL}f vd:{PIz.m+6CđVW=! ey@ӜUF+v Y36T`ZעG_Hԋ\Y ^kzS4Qr::\ )`Y^[YXD+9y*SMNU{cFesv(utV}-=2k.Genx}{{n e$V$ҍڢ6 GeOʡ.m֩j{<.B3v;zQml+s^YCȬka$~)L!f2+) rK}okS$% gZ:\}ltW=yhbUM9gIxnөWWK y ،.rHJ,6(889X?\۶VK% ȥ߀Ah{&[#E0'ԓ֗Mԯ+ny6YJA9i[Cn*nբ>H- (~| _1y(F&FBx%Uy֤Q1ro- eTf=} Z+^jc9Hr$04z,;s O,06A9%aޙc[v"*T݂ 9%6ίI`B-; ;V|1Lb򅼬!;PSjbmGύ#2[ +>.yy{W+wɧty5;T_թuy}v1}LHZp_sa,~Z2ȎP)#sNqUu{)%QnIx lg9t [ ]V i_7|wd.î9 `~5OZԤx㷞V#rfyw5)/љh"֮R(E-m>Xe[^+7ՙX0:&;e421)9=*fƲ[bFN CZpf i%״uoʹ rO?^),݋o(hbm>W:Z+ h-Y)$g71~ޡunH!A:_Kqm"@IHؐ#֥5[ms24  tEwnuGMrʤn%MK7K2D|lrT J+ ,_G "A,H䞽j]+Y) N䶖?( QoT;ƻ}6@Q@Q@Q@Q@Q@+Է:'8PQN < J EgǤ[*mm2Nzuoݴ *aƥ- ã#YMwu4rmF] ާM[3:W$SW(p(XiaaXvReQg&'"=v1;WX OjI87܉\ 90sТ!±GAc)FX$Ou V( t7>tahJU'?Ga}˩cUڱJG̚EUQ2#1OR=jQEQEQEQEQEQY5$H JrUYs?ASjZxs 铒?ƎFu+FZu<펧?So\peL+4 U҇kc>t6q8M h{dH/?784=jhYzwwQA[Ld@#@:(tkWū[ l" B7O|bnux{hmn A $jѢo5[qiu)Z ds(H;ARXF]J#I" }J㸶+;@pN`vt{.$>>*%X`Y帘Dl@h70ʗYG;:ĸnOiVuth-^Ѷ*Cw4m^%)dKu}A ghEQ,o% Ѳpkis0e!7FpHEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPY-le?Ztv܍g6:[IY$S+cCV]YeqaW (`Ǡ&)˧L 8=3a\>+t\ [vOpǎk4gFYQ[^[]{[PpLnʀ1l%3'n6wiVrY; 5Ȼ]B ϥib h,utv@ ^,,\$m'8J})ʓoqiss ;҉lɸr=*mJ?h>Қ*͸`qxǽK{Vv?Zji;cg'u4r v#}@Y$Iu(6_sЁ̰G!.v8b,U*o}E{]eVezϧڎcE3 =1ں-R=:s>EU;zdNy-݈DH;~c˧j^M4b,Ͳ+8bĜz[1hH1[$AߟjЗR9͔p g;Ԛե4x='N\ 0"kKYRtq+~RǵC4wܗP53‘**O\=ƛ54pU9M?jfqy^b9;:ἒm:.J΁@fm-bM(>-*A 7Hj=uUdaRp,@UXI~ GrFI62zҮ}(Eu\}H$~*C,bz0?n?oAo8K6|sYݍlgꨡ1NG[d鹴Csab.vcO>E$^V{v!T'RcOF3#\=*жf}ƙ V~fv&cw%6,o(mt*h)HJy޴./V KR6x]5n*i[?VMOb)o.}hU$^zIe%x 1PY\jp5rl22 jz{9 ;A i/niiFbMqM- QE!Q@Q\K0~q U6_o<_jtڅ04*D$1njGv0fq9 NÌsQk[]o̪w1`(JVenLNPH*;msO"v!! D=;PY,\\:TsߧcǵG{ʱ\LDn؈@!A4vsڼI#^Tދ.䯯PLIJǻk TG@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV6ra89vTD{Ѵ[QX[N -ZO1v'](km&A 8 MsZiu}Z=.[g͘dJU0~nvP! 7fAH!{]1H *~fw[*{L_s.0zg ~uQHg0 7WH&E 稭 ku-OJk&-/Ȝ@ oj#8+Oo2.w81?ձD_ ^EIzg]=$Yg\R :r{whf:UC2Cvw1icMCw1Av8I$Ɵ쌈"f8sjvyw7ɌUS5eY]C#V).9zm:H{Iw?!F?ZECo=Ϳ9^qձE02J%:DWyylf6zrBoj*N[  ާ##08secoG#1q'Z緸uKS({@q5  #H ]"V+ +ſ͏ cӑ*mqV"Hbb}} *9F8# :jzw#[VKx,i#CzzЊL5B.<2u <{AE 9b%lmG1Vk\ #h OhxGUij~p?L:O.=sy',nOEPEPEG$n6ӌ*?:/8'wnJ4YKqץ95FyQVB `\T-un+4*N~4]BmndV ~,U࿴Y*H5+LP^[(*4jB'c2\S.o-m67pdsOEVlv}+JzjhexXdI#at`A@((((((((mf[{w33+fý[KY'K+=Tד-l6r;dWh ZYi rqkrp9ׯjmR5,LvbxM @=WT!GPXdPZY6@[yQkl^MxZJ1~~^^ԋ^I{42~6F:.:WKiz+{xnV aYyQ-ow[ۥ̯$l@i_6]q%ndux*EU 1msOɻM[E`IJ)RœϥtY:-20X~=j=BH /,aXs_Y+BT),I r3Y6ǥ"2:F* mqGEc\v}>{f%*N#bALbq2An),ćvv⺨l`TXmcb00H5G4$ΐw}B n΢I 92q=^-LӉ%!ykz [ POIogkj [뎴ehvte[T/06*(n'#ҝs6{+(RF ,BdIo\A'k|cK>iO_ûΈ~L0Mk66yⅡC!$#(FcQ#&m*cS"P6b@{iw<ZA1—ܞkme9R**1\\[Aus sGC-QXc/`(8P9hz3GdI7nrGV yBqDQAp69`:U,Ȭ dv;aQ׃Ch҄@Em$V_Xw2IǽMl۝Bvf;ʢ6Hٰq[$!єޕNe")|.HOlgwIY2Gx/qC7gNr{f%-}l4kox_25nY鍮]<\]˰.퓟~V^ [^@B9uGVSU[y vo]o\[[,ӈ3vܐqUS][ l`G%K tRѴrȌ0UA)ֶRBrV4 3cXKQ^CconQI679Ǩ~uWG cGyH"?.4;Q@Uk+M5WVPs)B"'5egUfp ?-Aɨ_ڟqn~NV̖vΓo̟vF@Y~U{X%~aHlw_/&=ZFYʨ;szQNVԭkEm]53ʏi<v$zgӓ@tZ\yVl\$qEc@*OMӴ<@>2kx*p14}Kyo3c9!OS3< 4NFݜ{v+W;ۋR7@2K%gOY7 ;,-{+h.)GH .O]i- y3mv&Cdm5Lc-*w)ga4Hх\Es+ ^In}\F.Q8EsobHaMFŤ]d|cBQkztW콬 v %.ơcʶ=N:rkvEMo GU*(=@~z|WKqY˨6ǩ OVvCjzMg\4k^YUl[v{Kw}o]yYSXԙ2$:c=ݛ%b@8?Eqgedd=3af= k/]JuwfQ zETaT` OE[;*}ޮJK]prܷ=wY&sNb4@Zv}{J]2C ^[2Bb9cv$A8<ŪG#N Qn6I C5t AKu3uǿH6^`y* \q7Σ"+=I+J NW3Z_; *RVB?"45[A+ wd@25֑O1kw*L7;@g5r( w=O@ Hw:}2M*dPv}m* ygrvR؂ u2k㪛1p"Vh6bI }8V%Զ~U_/~˭&%]#+j1$1$Q$>ԣ]Kjl|%H߀r^Ǚ^11'csHf0(5.&\9;@s'=OM=핥)|,INcMN{c\H+G0olѳ]CB cYdJ36IN+"֥}ign٘,CWgW}>)L2* }8}39 َI,rO閚yvIXjZj-ZI![+`j`qt՝:M E_b\u=-gkp'ۨNHzϞ˾ڈv@ʞyK*.&6Y i3sf;]=yR KP;+/'wQYQҡ,3E ;@Ta!9 k8ͳqN2= uͼWP<)Oq@>(W-=c{;O<[JT|l"PJcZͣXڴnЫo]OK[T|s+O&q<͠Bp*Řg:T|1ZK3^M",T!9 Z:U#m+,3'!Ҭ(%rY#m$;sbiZzB) 2!HJ=3]^Bc&Sl; ЃGD0oF ҇Ѭd'g߿W)nvERQEQEQEQEQEQEQEQEQEQEQEQEQEV~>Ih+6hUYKTR>Y9%ٔ)G֧(5[_[nٸ1?C [֍YWsP _gXIp#X?SUQki(NGlsUXom]H0FqUqw7qH NF8+.-Kr.f 2NOЂ9HA{RaSWtvr~my o^&5ckHc.[WtȮ3$5HR;:JeƓpoe¸s<`ĮRhrI&'۷?vW􋦼2͵@hH4sh}282?^1?O+$3IH,=(QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPTuH|ߎ*R!5J'yr_NJl"Ki&K|69=gX͵HqЎK8̑[ǑZ8b HVФQ(RUIhOjȳRb_[&V^z`Veum/Q?ڝΑ00Ku2mleqz5~G D$6>'AQ iro#8  S꿮gt ŖHa0/ܨ9">F\=vm%ssAW!'vDS+E$$l4CD>z-\NN1֗Bvg6у*I298֪=)t?./ Yyq"g;T !c]L;$+DeioNݾֵ*e$7gn1@V=RUYmI6̑h? Z8ld>`=zO%fk$R6P>yE1Od5ߺH >)/ DS$(O5oOwڮb '55Gt 4!O˜2:oO$Q egەbil̵2O?28$.9hiGyHDnݴ``=U@w`l&xh#ŸKs5{knRHPy#up F#{5[A^\j[g/mOn:T;_BXnsu}w [ch?75YPYZ2Cwdr1T{6[hl0I5]H6qgX3HjK 9-/rne@ ?f^ v}]r8h=܏= έYE{k Z9A#-ͽ [D`R@TqlX-"E[G)3POK*p2ǠCvI3Z\Dɟ8]# Ѣ y;#³#ѯ/- 6bEb^>]C- r駷c^)n+#]]̪9Ǘ6H=}N]( [ɚY,Le8=(O[<#0;YlvN: nc ]<5ȣaߌ8ǭeh6Wn%0%RG!`sZvwW`adIX`)uyCk,.'fxca>Jn'V.ճIa$n:imw`mRsp yw!3\iKv0Y֥fe}FC3p3zK}e8f} 7=:blfhWS%7LpV#'<ذUNx A\W%Ԁ\g1FObRd|g:Vjip^y{b#,>d=ǡ5b\ vz9"ށ$˻BZ<[D2Ff]>za쨭E& (((((((((((((((((((((((((((((((((((zj2*nTאW3Yn'#rZ䣲2wR?Md \g֩c[lͻgy:zn'7QNkQT@ H#Xgբ ] m$cP$Iao#,R@u'{ -s|E ٘JZF'?tK{N#tz&ͤc#RY{(ZYP#8s=+;"+x-b)ǒtR8@vq2[sTֶCA$[\MGT>2~z7M>Y>Gp#=wt>>y4.mg}$ruucHFqRfY6BFZPppQ65-F=B,*Id3)#2xT?!t~sA{7S2kǚmmQ+?\Pjʴkf.BcnUI;ˊܗ+;οP&5y`9=iF2%vG9?0tԏiQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECR+DWꆥW}7EPUt뇺y("ic}FQVLPh&6V+3*ۢy:<[l _Þ\ VьlA@Vyv3Mml$3+g-czf^i6t pυ,O4Q\M&o{/5?k<\agڵ49_횅=ͽ# +?;_ר%M&vFfy;$P˟B3U^MbK%dqO{PU[-F[vr^&BT<5l_OY3'f\sKȉ YYYpONW{wtٹWI~2oG~!DNs]dvC"I9"5'>Ԗmơgk"sw20Y%U'&5=j $l`nn?N)@ a'΍fVm 8kzבYy9Hќr_ (M:eWg u0 ${ (Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5/ҿL~j_jQECD9?G=_h;5(%C4+5)!dyg}hVjeƨoT~"JeRgs}m|$iY`$@ Pͥ)֩]趷Sڇ(ۆ:tTtpYOuFRFo@I~19]N[YZ9y#7TcOJ4o`lq'催~\t4juƇ,x (v 3ϥhs=ܢ+)@ E>אY}wsaui"NRWE*Ѱ0.!FPzA="<\0# Eέ%tXɑHP $懻,,EzϭFRR$Py e \dW1Y̯{+A0Gș>K\#) 6{+[DR?`LMJOim̚rQcV2ŁqZ -M"q$RG~]Eֱcl0'tƢm*d%BO>OV[kavTVoAEVMVoْi>ѵI-RҰaOn n"_3 N_ >ssDZi 8D 1ܐ+=f ;Q33LӢS3گ[]Aߛn4hEpZN4FU`* aol,''>쌀QX4'(f*7>v'Erڍu-0e5B0HG۸ZIsv]>iA$ˌHтjY G9Fer}CP{iu<@H䑜b}j,ZTG+1P~r9H}NʌJe+ђ=3Q=ۋw"1NSx,R2$pǷX^$XWӄM{baUR(}߂m[đF:"(P?IR,qgp?\:63{pV9w0^z9Htc;22'^Ê+QE!Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@5/ҿL~5)H^fGA?֤йE U ^pʞIy[m<҇wkր,QY^&iFgF5!\TRI5'7NPٷ#ʮǸhT] (%9\g jYg1+Dڹ V7f`3lz8?d[oʩu^6ojmUeP{/R"rZUb?\/')vciVw4Lbr4goT=uf(c V&qkq-Ei f{zEhutm..JPdH~4tu/j$wDkq>] z6=sŋRNI5%YЂF z۶j out_%ZIO<6AE]*h!zb)8l$/m!yTe'jqjP-m-aX-dI.IN{jҬ)"h~Y% ;U(kp"ʁ i 5D? }i#RLyo.S"-r$޹s(M3Gi7KzSmk+x8*Zga<~~uK-`Dž<>"gIrkV h@ hb3"M&rqךջ,']$d,=3(兵Qu#p <0ik 1\2fh'q?SQ@J{gh2xbsbci F_19gg,qKjQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECR+DW3Ym$pV"32vPI?-P*ŷ;Z̻q63P{iLWʞrESmnnn-*="v23ק^JYNX[k0qh\O24i/J1.I;t.$ LxJxM:\?a'jc(r2vcگQRQy/ ۜI;ӯn)׉B鎙"h zI2@ U9ev3 @hEq0ml#LҶZ\^]N2Q(Yn0]*W( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ((j_jPԿJ2(Z߳~>lg9m.乂e16(.=x XfA4WJWGT9M5&nCsI'Ni EjKI>`W)"gC6p.Gl[R;mrs7x4Edxg9ؤRȃcq,s:0S܄ھqsg Z+:VX/ v73* B9$zVn,#iw eY2IU(b:H ]~âE̒$TpxӞ*Mg_L6ff2l2[LadY_%_ٛs3")YzڪjSF(R+^Q n@$?W $Fr(4Y\Y=Dax.ysew~B>Z8+Ek[pgc` 0\u6u+eU(Ty}-t %Ԗ9YF“1v8f>w8nu c쨅U$xuدu[{9KHLl0A drzRlo8J`K(&3C6ޭˢ޴3$`c#9Ϛc{ wU~Vu~kYN4^G9'?>l+)X#<'5{;k5ζ )!X`23bS\Xfv 늇T֢m"(.7``:uHQ9m,g|D*X.sS[M( 6bYW92y q楛T)呑e8E1.7~5, #l9Av3CDKKXe#! *M7L̻YM[5Õ28Wl/Y1Ew+/ (XEQofwQpR@U((((((((((((((((((((((((((((`}2+XCCRa? t 5/ҿL~(a? t w-a~7yQݎ֬Q@!Kx RFpipO?@jeA&/&Ĝ:BIq\C6|o](XK*d<UNya2K3\0SJiCM+HA#IN ]x'5E 05k+lom+r0 v隹i$&_9i2{ǭi@Ws-v\D)fpO,}*ւ#nXC%G#ӭt4Q~s>sXG,B%3<tQM+QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{8oV5?zʐz?zt]_(c[lͻgy:zn'X*HXʌ:¨iK0K6cمvF@[5OKKgy[s c ++d-Ea q)ƫi-Jqa+\y3unQO\$Vtoq$NOIl`u,Ѣ-QP\go%1}MET`fX| xfEPEQ[rw؃N @QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEY,:j7P"@y knh'}\>?n E+tkS2F.!2lػ㧵vP3j0m319cv|Ja"\~Ui죞陃n;i ;Lܐay\{Tuy۞ǷZ/lo:[\_KknX|䓓qӚعGsS 9 "lV(=2q^0~HeowMpwHrcpUGy.l'J6G uuSZ"XY}ÊX M GC< m[m/Fm۝6$` qiow-͸$aQ=hArQc^)֨R(QJƁAejؾk}-ԳKgN̹?Oy8!cFT`*9,''>쌀QNlrwv};i$ :s&I<˧8[H$q0X~8K$H#g(̠>ޔ17Y\]kn-c2s֙M-:2xm\[ݠK"Y0jދku=h=p 1cA}LWM6(_$jg &xϵjhr5 U{{wO.G}2Ww|Zi0m O/X jݽ6шEB }? KER(((((((((((((((((((((((~o=M\=cVcV{Q[EupJ0`yQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW]pɉz/M,Bnda┈2z6`GCT/|%XdxQF3ϱ* ¨ԯnRB&Y UU`FNHXIDa52V~uG|Hd'˖=G !t˴bs=itaƵDRډd=iw{i{5>`H#e=39ţFlus,21\c皺lm]2l`{bZa--sK֮/"xCE*,ҧ@ qU.QR+X9XʳIpRAg}tNX2'z;i(6p-1{r4ԛė͸E61K7OqR]wkeaK8=NjΔދ`F@948.O:8t\i☗S\M-K<43H^OC4*DsY72?3"7b~,v@Ns.`R>-!bad>Ii1-.%i縞EdoyR3&}ϥ1U\\-g N~̩a=A]}dɠ[=ȷ_5Ï-9=ocZqss[yG$lV?6dqֺ sgҹ`y8#΀15GQ-|YZHn፸ik\Bx@; pGY[i0v){i\1# (>kC Ӟfyq4K/27H$XsӚ c40D2t@8k[I޻A)iv)Y$S; l$ X%<|VgZ)Kuss*!D328F (Š((((((((((((((((((((((((((z+LOC}uΖ,Vi"pGu;Y"=Kr8ԭһ#mI>TڅXJb'ޭw?JM+\n+]Z*y9RQqa4M{_*uf9.eFF sҩV$X4k'ʙ1ҚzWî;ӯ~lV}ǯG,2yz?2̡^2sF> stream x}]#u>Cϋ}$``eO20% [z6V=Ɗ]]EHV?~qdzFՋYq#F܏?,h뻋?\Ɛ"G#ۭ\ۋ?\\-~6م o.Fэ9E6f/^] Zn?nnyۓna-v ŕ-f~bfywڣ(*B%E2iI*f>|bxyۋ^|"B*sl\|wawahW6:391݅.NۋoΔHJ*1RdRzڢ"R'kRM)ۼε|583+LǨc'mwcAru$Fˑx\%3Efc"2-L X*RJ98+EdVcgJG7+EdVrOJMFgukh Ȍ5rzdvRJcrÎ8GE}d&m]10c ~ajb"tė$kQvg8~kZ"pZ٠RN^;[w&>\)}WIRo{3o!>]NEb}CGoL#ŒՅ xl)4&Y@22 ȂN[ aD|$Ow 9j RGO$ #$H"R:)vD* H15X_rGjFC#lƱ)D  ƊZn:17St$D<l(DqNF9H$RJ I2%>)ZO0D͋kIj:ReU$:"#QFvb!uĒI<5w5舥*sQu,X1Vʱ|1Nk΅(#ސ>E}Hz'9TыbuZ80ыb=k& =ыb#ۊIhE/l=L( D/3IDlGD/sxKSE/ D"I(.scHDt zQ񉎈;4"^kNū$+e"8^\}^`,zQݳ!Q{XD/JDt?E>Q݉Т$m^GVA0EL$T2ԋ$'KQkjk R%t$)9E5CЈS/`"E5]MCJE/+E/EZ0 Ez¦qz$zQק2XhOh[Yz=Ȇ虒EQǹD"ESD/jP}OZsAT375$ꮕEUkfIz g#zQl5[ы =#RVf'zQH 0,H LӋd$;"IQk>BD, iC^E2}s4D %SU{BNM/ɺ#)"~lbM"Y'uYj4H3WK!Ġ5W'HU^$U/p g1 ْ:ؑ$nizg j;;@;##u8L$.S spd:oHIJhz\ zhr2M/7jhU+'GC\Ʀ}$#HP$ t͗FD?+[AZ)%^fW$ R-Y)""zSJ1,:A~^Ήi |Ⱥ'D,HqV"Tݵmrf^ S Tba=%"QSE:;8)Z$E/` RtGA""nF$ g`S/2h5Uۯu@D"9Ǫx /2%gS/2% *^dJ}V"N~/2gċL*^d϶ċL8C"SH#^dJ3E&H š/2:`"Sғ"Bz^DjG EΈ9CD/&O9Y:{(^d!/I$SE,^dJk=E1 DD/8;#^dzċL)f-#^dA-"ۼϙE3E6cXSE6R#xf-C}4ċu$Yଣ^x)i,YO(:;V}6^hY"[h5E"S6u",Y.^d&h:El>%^dKDȔѧċl"#xӚŋlEr.ċlRu"ZFv=/2rFCش/2% ;gE5ΉfXEND;'^dpN2sԋП/:"Srzai8'^dJjg:'^dj9'^dxf[Etx Q >%^dBO "ICK9"SC:'^dm(x 5J*^d }?tE&9E.^dBc(^d hŋL^\ŋL>/p^Ύ/2ŋ,Xˋ3u޽xըmFe[|VWDeR "z}jE"uĚEb"뜧L zzEBexzVSEZ ocH/:ȶ/DhЋPHo:B/R Ջf"mՋ4#"MPԋӋ49O/T=+=H2;hOu9Ћ4$ "MH~ "Mҳ Ћ4I["M?sH@/]^ j1zE,#zaZ;^$,>E/ҨHޱ "M?'qAKDr-"c-u"cͩ#HHW#/^dQ|/2:"9DZGXգwAUȋbq"cY/E9>EE%x-)D"c)#QXz Qo[Vo/rٺx~|&%fE"[lRKNx7`ŋlr00\E">Ϛ,DE";@)DsVx"զ4S>Ys.]R"aE \dEGHd("5K"N\d"5"4Yu"IsUWx\dչHa.K)$EV]Is2OԌKZ4yD4y|Jsǚ{.>Er|z.Rs]3\{.i[=;RHs@s@()s=[sb.[g.2kf%"0G?AjG\\ϙȣ\6tLE";O1y\٩^f"^sjd"PR" \/:sY.ѫf"sis}eJڳL)H))sYc.gѫ],lqz"HA"s?3s2s9)"\f.%e.点βppppH HlJ$wm1$09'0y)0,x≔SΥq)O";K"b9M#vyXP7oi󣷵 q37?+6ty|\#d@jRdZIń ̸6_3k_G+I1Xe(+e0Hui)EfaRNobRjү? N#U` 6zjz ؄,~a?{5?.\髉}/RHi4R5kXb0şm"gZ)KεcJ3A+ǚkTl{61s4lDSϴम\15v~u?9k̚>H}z9Olz8uzLx88"qR~"'ǨgvzPzND)M!TnfA+F#s<GٟDI5Ia{"lKɮj Mm1Oh_(h5e>UTROuk[U)AgH8MPCD%eƃ3#z,c]GXn$k iq,*JJo?#I"\ԏSwS_(Sn{dPHev5g4iY%sQTҤ}.jW>+;fOQIThTh͵tj.%-!\ak{ U0,"5;EC}$WFFa^ ù#H U}e@rJj*#H D$QIT)=WOJ=,FIj0:}Qj=$N%rT}0t/Ey>QJI}JIHRRVR Q|5q % Awj)޾ՒTjKlhYI D(i5e5{Ұ՚=%:Εh-HWAlrz\Dk 0o$V$y[& sYgtL 2{'S𬯙!;6lO/BIKԧuV勆|-b๯v}'&V%c C*I>Cr&Ma8 +EDҪ9 RVƙN5D<DGoZrK`<%UrN@ZH+|*|D('B#$No=RRݱB1J&JB)H2zٴh6Tm=1惶dre!S"$>c J `]#R%qi#)}N62RMҪ5[d1:UD$I>I ahXHMz1+ RMKK$3A3RMCtDs BI *t\FI#MH . )%$"9>'IS::"hJd3%,`:Bn5IhuMƂ-"K^%-"KUG2 D:e(i1Ph=BkykH֕ =tOҌ9$%ի+7ij뉒樣(zsteJZ{LI FkT${0]"#aXO)DtacH w$wDCLa!Jq d6@a6ڏHjYo']9腻#YOF}!I%J TRIArf^$]+}IRV &]Ϡ ɹ'k1f0 F+]`9Qژu]Y:H2[Ϥy]Ϡ4$~IOhTU1uJ ^i+%6鸂%&=(qT!#=s qԧz,)GQnGIfu޺' ;@C,ilݫ: ø)5 IvU$FkzI!f[ƠOE8 #3+3~B A^n\Bh2%} IMzu%Dg %UKcJjV%j ?v$ʀQ#^ 2z )kKJF&^FN b;xmˉ +#Mnaog/6 $_ n9DBj2DײzInAH J 1ER.Ub"-ʌY$z&WrTμT"Dz4>׈bojQcD*DM=/pVUն DDRo Nh5_b+"V."͊K#>gH[hy:": eA$uz4$^ ȧGնi{SCtmW xQOri<}/J~jWeAq4q‫WS#r HjD'PYsI "M'6CDcȆZ=@Wy*;dy2wd[3yhf$dGhGurUX#v%q!0% "E;qMiQ\Vw,II#%5?TZ: l BVzfX"SHF(!MRzw4RNCz*9D8@ȤEU%į\nqg2ة%v/"WYepDuf:DD/Ɉثg45{J\; Ze 31w/ P*W@ʶ"J\D% x=kXO"RuPZe 4ZqH)J7I^xYqq^(iWW"Pjk؟JIzd*UfB FkG(iԹ%S(1뱔4uK@DgD6#ۖ% #:zCW|ve48נ= jȿH5h_)i?! S2pQs#5'q9(jJB%,L%xu+MRbFP',_jČX{*"GDHܑ""ۅy,U$u023F×-dyF;rwf$^u(ACH}$h,EzyGD >M])R i<"ce:)2J죑MG(WEĝ5;:2"raU˦؟r|EV{XiZ:"}kEyJJ֨:__V锅H7pغ;2"Y(u'r$C)r|R ܙ*4%U_q9JJ$%U()9u ЛEF)!qdo/ )#ynl/_0Tb=T >X;ޭ:%NѺay޼ab]o.qU.a;VoO}.wFrs%2.SYrs_h eč&hLH!,.&6fꏇn/'N S s)̤DOK//ܘ)u'xC>t~[֫6I tXK׷ ʷ-yx|/=,@򵌰T~_Ʀrjc8֚d1-Wk5&Qz%1kjsXzÿEaYn7+2)5 `~t `^mwګچ8m{d clV;ayXovy|R3prH~%ƐA >j~n`C"y Uc-ZOnxaKwo+}ip{Xl,:,w崑lww۩צ4`\Kv#Z߮ZdDU*nSsy`?EyX6sMQMg7wvxkCѩ kևulwu蕩/^ wpYKnn/Zˤe$B~/onw;4Ͱ[jCRٌ"z¶ƶ[no0x.c36%em{ƣ˃:Q5Oou,.|%oۮv ״DOõ+;s4XIbbU۾ULt,k;]} ~~Kg"b:3"1'@?82gEHn="fE|!Dul _ #awVչhW;{3]4kx9#ڮ04{쩮oGΞ| ԍ^<[Ouܘw6O;<C#>4{~ٟvw4f]quⱐm.y4YOېa!+^Bg8ݮF{fnSՆߜQI۩9W÷GUgM:೔T:Qe|xj`L˝0*ϴǚB g|r, d,.O`@+5jͥ>͈-|:x OBޒIO0)h G nx0V hAaZ'+L՘Kܘzv:_'k'zaRRK1E{5'y5%,&=Go*YVXSA ӓQ3qAqZR$bqGޤ뼥ʻIvϬ;~ WÛH"̻<Add Lϫs: %MM8-Yy#ےDB` &YF+}h$/:i|[{;_&@ xhuE>C ;ȏĺ߶{<]$؇E#w~kwƾyh.js}Dpn6qNXjB(Z,Bѿg;V-n7w;-Xn-%a}T_K%,$aد?<_z|a? >Y0G:յ} 6/P|ߨ$Gu{i3 _ ׸0|0G:XOyOwK\A› p:,׷Sge;x`Zm6}3fuu$={IF9 כmbq@`u}>x[ą~v ||i?X zZ.-O?h$Y1ՆJʄ+/}.KE1}4 -~%p˫cGz!|coh1)A9z_HZpOĂjZ'Vf}W_z䇕]%,[<#ou+㫯0ַo]1J%㒡ek̻ 뽦?ݘ[onL.{L4¹IRb0zۗ a> vW~ Opi4ƽoaܷ0c@YMR& a\}wx}'$Vf-ڑ0byJ=zHt!6T40|("K&Ā:ҍTj2_>̫j|{Q/7>>~x,(kwv)Wpo:0 ~=ӷWˈoi.sp#ۖs7$y~~xOǏڤ鎿nFiynl{Za{ľt쫛6~u}bM IC~77fAKOǏ<^odv\t2WDx,do=Y̹F|F WMp{9ӻE ރXfΨ>u$]5RZ:+`{OM ֛Ǐ~m8?ps;ay$3c$%Z!Ff_fU>.Y#wRo 5eIuw?k3?*>;V߱gY|~wl9ޱooy˲9I#BsLϡg;$x6Osvi#7bfb ? ǫlU3(6meN0y7z{<5i>;K>r۫V+^w ι3;Y> stream xWyP큙ap}fPG!TP)ETp_MQ{I *Bd (.%"&F1QQ1ӓoUfyU?~S5UwwwwT*UĤy˖NN0Vy-R~k=sTtӽhu:89_j)~)o-X4(uYq+ǧ͛:?nR|”ĩ =}aL< ~sa^#縞D7MpnT/7Mfp&n&7q[;77@.̍9On7 &pø.8'N˥pΜkϹp8s:r\W q*N͍rWeVnlfWe}US3gԿi24՚@>/fC+qkSԦa*m;7;F8.q\_NihhK8G8Nn| (Z.a*y3JuW>$ihO9$iΟD_ VA' *4Z,{m cG+rd--KKcmյKG}m7gmA)&Cе 79wGw]q˫))/./b]/U]N-WU>+o6$xg%ȋ'A BB/3P ~FU #hDHE8 ~QlH-{ 3z/N_eZR^ކ-K\xlꗃ4:P_ʠ5pD0^bYfx0ĠÙ"Cފi;bE J6mڨ. srlщu)טeOO=:ĉ"RO?'00 u mBj aoqE{vɋ̠aP/yr󜋁f"U0YKRt9CCiT7+쑎& @G`IrtV;3Vtt)3ˤǎݽs˦|=z k7l<' z%HK}JUJ}}t$kT%Tu0b{g3a"uH/7:#gv*`+'oIׯڵ~"u'd*K*KbzBO6}tN^kOE AUP$L&Q-08/sɲOf"9 y<˙U w̝/i?)z7 WK3~+zJ(!# hoa?n^*޼vK&vp`ƱHOr90>":hbRgz<#QW 8yR~E13[̪+ $LMf^"T.P?TV @f0L;Kd-%'͜ILo l޹1Uϭhf"ۂnLZ[kW+5íVCFe5TY1ZAocյVm"1=Ғv"Ɯ#7rB,=ĆCYZkHd,0cjf'cis.*~DZ򄗲?X*>GY0nh!fZrђ$YK^7}W|4eaK@} {SPYrI oTf_!3d[jkwj+wאpEa0k~윌{ rajہٿK,.Qx(eWԕ4ԽMG0ށk.|z@ʢLj|yzgݞCޑJvZ/oCnFK)Oh[8$vϷl|ī(,Avjְ柟]oV`q0Yd]SNC rM~CGpM%`>`XSk*h7qibQKfG֘7|Z|nˬ4p8Q,y{E%z(磃9y[6_ KNcGD øca]7ctHNu &T ^\ yt5 4M˒)0 _'Ki/[;`5l/%o!1(ah$< 5:_ȿx'0#a߱ =᳣˒.Dx=|VX𦧿\ #fhh.\9r cY>',A{pšI"BkB@p6JšY5-i,e'zOJ6;=*ȾcV'-8Dk֖ lƽڱ%̔YbCm"+߁N=bl%oIRt0Zp ਪE/4ĚVWiq'-ԓ4秡_SؤΡSR}{4ae"&A|4Xw>{I}z-)lNu]9Y\ɞ 32goԓZ(T=0X: #RxWI~.!:a Ee0ܓ^da eil| Ґ'o d6GQZl8JQ@/gɚ%&kY=`-Nr߮oEleyNK0Fivt)t҉Ëd=r{-_|zLtbO$"B ដ{֐\csR4rpޕG[*֫SG70br8n.w_zb7U#Lp&-J8U8AѮC" ZG pO$*(T E̯*J/ -@Dnf7Gy46iU8hIFqoGM7-mt{xzX R\sC'w$XDҨ{>J>ڑ)D'ư8l7cvod|*d)Ւu52/(2U+ء9V3z ߗ5Etw@!dZfge?UQ,Ad'qQGQ^۷+`3p]:vl9Ě#L1$2"48F=u㳩7чwߋo۫~715al.\슭c⹒I ﶎCTV=(ci8O9@ 9È_ D!3OK*H:‡24D\ R|}O M}0gÉyt]yОjv\;ԑ: AꠢDˋᑉӽP~/7 k.?Q,.Wϟ6=264$ W ./6Q:7(2"((5Ǜ JংFgMޣsp2۬="7yԑ5C__!J|&)jiu33xAO|ž+wԌ2rK$Eray88GW9')endstream endobj 265 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5780 >> stream xwXg]fVq@1Xc%c1H*MD h.iRD" Ղ( *v#؂!QcL}Y4?7ywg;|32ƨ#~a߼ecm}zKF%2zojAB_F,{g.[ey- rgʹgZӡA9Xm='>w`~C3fYK÷j7zQy|ɞC5m ۳E *2JV r%"8j8|6 /0F~ ^cMT&6̜esD09Z@4Ȫ^rr?OIv(CB"c}:m$-,z |X .SJqܼ<kTMt=5m++uoSX+ RO. lG7y[p-gi,ThW>a_` I:t@֕"f'!eZN 9H١ؕG~0Izۖ0cC5}xc#u4Zgs rGR%+vj#:8'<;hB?zt?^z:%kC|P&K. o=wQXkLZɏ.T+-\ %X+)ِ̺Ӧ 9rBX%0K []X:!K eʴiYDQµBةP*KKpΌ?&oļP#qnc|[B0Bŕp2 qj@B%7?!8dBc?f@?4} :48\<^5kyTXOFqc1O%ͫ=V/mfOR*>LMQ0=,pni2yaa* FR%gOp eK۞5 _Ѝ0G#7zcN,؀O`lETiAPiɜŁ0O}G52偑 | " @.wxp!J𷃑Zn͑'H8m@s7R@$+dwKM RBk.I$Ka)#ge,!;j Sٳ|F'et;:Bѯiw:5!-C ]j׭uioo_̶p0>!;OFDZqLw>GqBh) VkMPx$aas܇*buT9jKRtwᔃ iQ^x/=pO%܋UPr{]&;yu0 .W+JHj)RVr]y^0KpdwEgw&Q?zu\WV\eT* QQG:F`SlƤ~DfacZDG&ǖQswT3i#0MWhא`aQFA;^:Ѱw=ެ'Uj(A,4"Pɾ||n!5V$fT+H&% `KV½.Wt/_HFQa O[=/{c!A8p/7[$cK\Kɐ YY||\< [!(dfDg1?Sd_1jG{gd7WojCv$<J :**vX}3f!UsT%ZnԴכ<Pk{npE; mi p-P!&^uPtTȩ1!&0ږsBCXA!PuJiK`sNȡzUȋZ2ed+ T"nH^x1)twcAX]yJ-p atUhXO$TDwMހ`| w8VV sF^`RCHv!b̶\VIBdV߄h'If7[IG0FV"ɲE[7@'78^ m\\ އgm*ftDHrv$+.0lǨ:yFV+MNS\67LTtU&6xsٟ6ed//mp*@|LDYi,Xc&jZ"APv)0aZ ,a`PUBUKڛ~=WFҙp,UY۶ވ+ASw m}kNhWB?34]a:dpe~+nV֔ ZAw-z"ʕ_<n a(f' =,5κ-X}qH|hb/G&9{mH nİged AB[.zm8W\|(ZxKD4u" 9 \`)Ry ӦBl6%&avQZ]^Yc</wοbvT|Uzp4%/<`lʎjrZ(KStNV%{gb9uO?Tx 2_߆x3򎗫/칍_d4$z.EB |S+hQ!-$Qi,ӷpAaR*yBPKZ`J M68NAҰ).m m>iB0:`1d@C.I cv p.Fim!w+d;@wFŸ&,+w9׏G|Xmy]Y|' zUA,Ds\B DYoE(Z]o_GL`]XK3&+dr)!#:T:K#0j$.%/YWji&%+lѿ-o^Ze77‰겔lZΫTlαb̷9Nv;x0\MB_OCfjX_^`2J[A]]ѕ0[N'NPKJVPWt1U]T7~vh7:c 5-EOA18Fezp i7=p. !,Y lf[\^E<#y^*яcEջK/`SPBXJ'u s_5/WV+ȝwlnqslƿn/=_qoxȗ!+:a E 9G)\ZzHV+8(+4-9UՉ K1vrãp2+.BOWΞdpORfqxǖ'{Fja l$) ٠L>Ȗ/mrb!N4v1|EC ˔%'T&DXrW?܎r a\4v}cOTN<`Ok+_OAn]j桉X8q)@}TJ\܌g=.-~U=Q8Ga+lxe1.Ao4NrTJCH:d?2+ aRimQU )8)zM,<ވ-^:gX`'G{.yuGy΅1oHљu\F G/=@HZI 80/9)9wu5m[ P+znqȯ8PQ_!ɳzeu۪viy`*,ۄܡO_U4gF vye3nνA{ѾLp[%Oذze΂~w]<̜xl;?RXuURlH?/dUPXNMq rvg>AMhFsdsiiRQ7%CNP;_\lO6"U`+-Mݨ-=` G-Emd0w-'v2~/'&u"]0t?ɿ0/?Y(1cn~A^A##J G O:$B}.\<0n~l8m ,OLq_8x|qKGktxr6[~~~EŇD8z_^['E&hLíkFcHư s-ǾȖAxf9 B{|qV5[}MAvecvKl4"R݌!$ e%qU={^S_#endstream endobj 266 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5077 >> stream xX TS־r/DYA Xp@d RέJPiU†8TP4 mTZطO|}o={{NdYF&Xp@E+Mk}Waһ,*܌o0Т'czz%y/<'7e Tң?X*&(3vz\pE3B.4,1\={x_X]gݣ;n/ 0L0`33 a1`f3 c20f63ff D2>33e\Ə34ƍ `ܙQL 3 b0ә9fz0$F,c,cX1[yH50.-Ӈc2JFd3]nLfVFƘ1LYw '.]u9gMkff8MVsy/>[ENH 6t5nݾ{Hݩyyy}y|P bX4;ise7YZYWzW yr -$X&=e\ jyۮ~ka_j%\̓94rrZF44&AcU];>QPMs$Ɯ(5VnQLQO MyF)?4 ]uCuVuzO(h5*r@ax{@szS|ZTлy$ᓥ+SWPOD9-KMPzZ>00ͽ M_h19`u]Wu`iȠXR( sK8x8i P/ :ڪ]ԳaHIEw2LH 6enT\y Sɫ!LoXxu:8h'q  @WW-;MٗU)3L-b*֥&EL(.dE%|FATo}H n/O?Bhu,*9t25%qԙ7oqe1@;LOgp@@ 鐆f vhNICqm,݀I!W:T"r$rڃB 8!=Vh>eC_Tt= BD!Fghhfƪvb7M=~D 9~?nEڅKx  T>Z!z^N?&X*# "'W =*mƏYHmdq{)۴os3"BڨGTI:Hm/ͫw:ivp U W';kt!J^)B1e5[?&u*ƪ^v(ZEhQoP;cxkμ]HUE=쨟Fi֊4g, B}ݧEX"R%%%U Ω}pZrjW?72(y4sqQOΉ@cg`zF [ 37-LYlqf<}cUŎ M;,AQWVJz3M%kpxqu򃍎#ƒ1{ο.],Gʊ`o=K+ol&bঠ+EiR[f ;ǵD|X,BR imnW}tĹOtݲCWn(w]q'{qIdن̔ʼn ?$b@\^c|^O«ӳ0;tlc7XF}J;dFsZ/ pXi C B8G`6{-ǵM5+pbPK3˒j&z)- II_AGwAY2%v5СT{Lzid7͑pPGΕ_㡥cgd%OHU;?=Hr9z`o d5t)>J{zgK?˺+[5 ڇ.BOBltW3K!gf%-0`ԮnCL JjFFid<5s pҫA-|BY1uEzoʠ܊̤Ruҫ擟Um Q3U6>fFKlic3_ 2 k$xՅz\JDf8'y}%91|ԹI8xٹOl,nv޸@DmQ[Ȗ[Ttg=ݧgaqhΘ`\[zCUw8EUK c أ9:?98:8W]hOi-9z@Y%dX-EMVUӹMB*ng=ǵS7AI-KGi}DDۑ(Q|F %_%wɅcwY -ieU88;ی}ޜ'wDK9Yt⾻,D `FR6 m2lۈYؐUrzt91ߜ|a4>ZdCE\Ræi8M]Z]׳_Ei_QN!bl:k~ꇑJ8^UMSSV= 61#U[/m;'xtKV08=HVA: vJ29PKH8**vR)DC_0FQh4֘S+ j1 j=Y{0'݇ޮš/ST0m/+I-MI\>o 2H(Z'm{ǔ5,44ŧK *mzwH.~XcW+ĤC[Yu=krVavfG-S#dob^">/)Ie!@Xz ֳ7tƪqNߩ&1g1b>;K%4)u_R#knzs0'E=\t,3\ngn^0 g8>8 ?8З0'4\-jFyK+_Ìz|ߐug]!ɚ$U&}1N>u MjK~d2Xz.;kOjJOM?D{6ٹkb{|VjrjFbJCQ;Y~pS!}T|zQґ Ȗ,?TUS=(Z!N_hGs=l/Yȇ O&E2B2ޞBo  mCi!]c`A-uUqrHm = 4Yj#l/!xd8Yjeg[ ci Na7h=(9*_4|i*7~e9g'>&"8ja%Y^:\4u}&+ӳ%ᢰmfbPcp/;ú (haf#e8 I|vvRQ`AȭD T{ώSmk/_[l~"Z(lkpqA?7lz5~SIT'nC1K|B3 XFc=k`l?+B xlCCg3w`*%(~vh9w>k -b & Fa?c> stream xeUiPTW} ψ@7c77p1"8* 0QV# | cSvYE FE܂GJ)LGNMSsU{9;P"r#ⷮpMܢ5n:3S0[ywSe>+վh1q)j!ZDRN* \)7ʝ򤼨-jʛZCmQfԄQbjUIjMLrMjM_wp e̲8;JG$Hhå:tM\7J4_񼅐V\7z R2M7]Asc+m.5'ff;"z]ɞ^]VMҒ(5Z R3ڛNRŭJdqgĉ̳ \^:dͿQ>ĎwrZC&_ +t>!8zj$"Y$GW?Q,r2d"#yj{8p-ZOv)T-vn'\60z{x&ϕA Ge4r~Ҧ* B˕lMK!5q ȡ=2[\` DZR-J0+EGG>E$knꎦ:W-٣[VȨʯ,j` (rawۮI`K&vd&?fT/k<5+UJ| )\j*&L,YL{2Gz 2 3 S/AGcqYQW 2uzEq]U^9_j n: =,xf냂A|]UIrKޘK-L4نA/^kH!eD;\hō zi>jT{BWv9CIJmi* z1V~,? әq)49JM6[ouh^TF@ՁmTu䦔s9&|pM#rfqCa4а&;;V*/,НЖhebm v #|\Ë|LIlӁ ='?[9U00ѕH ;7?q㯼_IPbϪz^\b \ݵwXP G9KL`ǟxIzy:):,]5ջ#F_1EZ5P=}6 #a)K?ܩQ4VQ'.V%$)o/7A'N8ˆ~{4G36 /tK%=dΰI=KLn髿55{nWqS!Q۔*,b !Tͪ󚮴y#E?%99Hz+ԅHV\yTMFSL@ѻxC?1tud͉!lLl|;?ak&63a}͍['Љeފ3E&FkZTVAf>%7y$t9,fJ[2+V@ J 34Mr9jn76z\C׽-1_f.3܁y!_0@C~}zMfaH4ج``%xxaE}@t2r`$sV2>-~ehhO(\b=JYGj`?_H&puqNk5gx֦% [q㸶\[ KMQd@ uRX%`y܃;.5`E}W*$t=G:H񯘎{i!$28]ˌS0inlvM&utVQNa҅}w@}J/0 CF MQڦ1"hI~;Cް+i7˭Oa"L$p@J|^B9L$Bo&Do0M#Q7> stream xWwTT׺?x L" #1j D&$GoT,FW{l^:A`D:"(`%jDAUxobۓ57o[Y߯|?5Ox zy|mɮ07}a >Z0=a,ߦʿ8n =44,|WH(h OKCVm|l}d >YidLQ=:ʊZJYSR62ʖ)cʑZN9Q_SVj/ZImVQSj'2vSSf9eAYRk)J@ERU:G.V~}9b3 K4F΀Kn/x d|&/8V[~{xa̅- _} -P7Q6jfh~]*{լenr !i!)r4 ܘExe,#hp꠫/ gM GVȗa~B0WZtp CuyK+H ψBbBI#!GoT,&IzV5z_FIϴ_AjX[qhLD^쥴8X@H6iֶfw%;<#1ԬY^b)1si5bGnx]ɥլg&«Ojfp*)ځ,;G9]kcʑ~ə;h7w^"]p4"+ޗ{V} R5?Ѽ/]BkMmې7y#~'D Ѯ ablu`xԁڒODG,b4y֯?B'ؤ؟a&.L{ɻ@u~$n>֌.^Sc!C#$@;x3+ )+ @m+wmahG ?=, G,h?T+~.)U>R6o>l蕶wwV(xki^8U,:&h)oO1]D2_Gi<8) z& `vL$BǪg{l!TR^lv`T:*xxUEñrs-s:Aȧ8.}+tC„mi SK`[SZvw ӢjȵV,lV4*S!/FR\+<['GbYDqݺ{Þ>jΝln,*H)a9T|G~?;kORXLYUK CGDMgѱc3aE7YTC QF1{p|Kq֤<-,#ň:FƔJ2SP*J\"Ot)JДxEVVWKo$B^ں8Ey#pE[YN p$gF~VJ_3#0{[)xؒGi]jőz(4=<1`=#tkITAA|H L)`ۄTsÅ|gE@4tJ$NB Yc % tf}V`U]Us`*lEC[IEe7: u7 `nkkI(nv[/æ$O'vXb 5II^4pYx F[=30xnX2Q9Ut)Oמ4AGw(TUzx*(=E3 :C9J88us7x"-ZMG! FfCtRQW2v޻,i%K#%RWq-lh=H> =w{J*PRgn.7p t pN)lx w֡q={nwug+I7$o.hw_@kO4t>gE%AJN83#4~ʟ"c?:I -)8 '#Dzmge.ć6HU_Z8bI`}zх+>6,kB([*{Ź?^DZQZi<լU^\,Pt-=(ߪjO-%'KZgW:}M!ZdlSfhᑖATnoux_CWB LpKKrj/4"Aѧg6, 4_)$;Sqyt쒶CVU$oL: Ny>щk oCH|D`Z%4Íy4߻;Ibk7+c~~n:f˳ʳK%+x=<ᅆ'jɫTٻi5+_fYn3cV+^'&Qد&B5pV}{X3^yq'tq/w9>S<5M8T NLEfV\:k]-_7q{JJJ:CB˳R'] NГ͞ ÏH8U./3$/$<X4'T26t]<};XX'!&7ʳŨ*$3e#NS^T+}ȦVm܃G:]g%N-V,>KCcƉ|>txXmJ GP@ǁG}cr{C%ZL?cpd5Єcŧ?@L&n"/- 8s{\} q>ڷMqK=}ED}aji&_~6nhEbuyk|?#h/Fn8UX=,QaQs!!RUSͅ!|6^/P2 !5B[/[Ŀ3E#ޜP)YYHDUGS+l lGW/y^zٷ7q&;:\X%I,)vd|9x$ρ3'kNBr.=ijJoG=j@|;t+PwQc=ו]\W!uRh("+0ׄd 嫜KUÒK<8@Ǒp׍/ojLDĘ>˨TiEkŗFb(.}%=41-Ei5\΍ z/s*4bKzQ:64t WU\#+lMɈ34E3aKOgWGwKAGYe5jBk|Cb{K}h4& ji(T?$.OHDrs]`KoaݨO MAcNe 4^)^0 ‚W[*];~LcZ(o0lSgI>z OF(HZ&?taQ(A,,p:,Rt~Qܚ<\2?ӈj>},-d^W9Lɬ'"֨yCh7V}z=@>0G2Чajb^Hˏ#!͐نCx}cb{r';#ҵÉ?p.! h_7*!)J % 5`DA`U5H+5dq79.wю2=vnA[<ȼ<": L2X]|>Q$<3>/M.Jv!~h3"zbdoMމlsCJ-F@O>q  %9Sokwendstream endobj 269 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 157 >> stream xcd`ab`ddTM,pI-Lu JM/I,,IL 154).Yk7s7KǤjB`Fm&FF_|?sO;#8DCb=v*ئg gI^VϺOq>'s3endstream endobj 270 0 obj << /Filter /FlateDecode /Length 565 >> stream x]ԿGO7O *6 /ܝGPootw@خ_>}~{?|[vߞۏ:v?q?ߖoX?˷gNoX\_:uRdPˠCed<ˠ3^dP.2(׌ ʚqA2NqAuxȠ$zXdPsZePk&2vlT j6glT%U5U5M5)I-gnE-gnU-gn]-l!W|odmʠ ZdG=OW7> stream xXgt׶!{4ta /@.!BP զ\%˽[r68 :C 77^B/;ZoI-sS[Kfs}(!L&Z8z/$p K!_fo[ V*=B}=f*CgSzif-m ^"T S ߽&1}z{ޜm59oϝk NyESp('j>5rPuBj=:7cjDm- j+IP˩S+YJj6ZM͡eԇ\j HͣR#"j5ZBYQc(WʚbXjQ([ʎSW(z)J ޣP2ʂJ,alvQYzXޠ 'E'9?' vx##&(i32|QKGՌ*1u`?KqWG۸5]`lm]aa OW}W#^= ??KSԲ&[.%qGdTԒɰ ::|L@]m*[Lz |@C7gf`tEcIoXDgц=&qA@5c]Ez妌b:&| %;#|.i6×\J}s_WWI3OB1dxo=YReR1^+XY֘hl=T qey#B_t)zPC#CXRb2gW4!k5A %/t*0HDT)88yyv͆sňk9OzUfЬsn r7܌h֝B5\<Ӵl!~/eX)%jƏĒXΘJՓihO4doot_^[@Q%ʥL|_jZpt"VnL:x |T7 $pXhD>$+CQeW0D Ie]lJ\^AO\*ڰp| ){ 8O$#_Kf_q2|!VBvH= Rhg*HQVnot#r YEV*ڢ=1$!zs}Պ6kHψo}?6'%V)T]="OZX:-Uܿ9_Qcϝo3#b(TP pޞ+RP P`ס5OIhŊpPvw#(ސhH;Zݮ;h{N+Dt7t6S~-՛!Ě|8k'eP-2/[_>q"'v0P[;M Ray_I1M;x,܃'ָff=[D;\ͽHhvH~6,)Jbʸc_oU ]q Divⳋ!gy6%S[]$8SKR<׿V+:@ #m~3801ePE}I^;К.RrWBAJg6ꂝh Pʔ4ޣr+DC>`hQ7)yTCױ~s[95TZ'(,E45x*`pA}sNMц}*m@ Qt >MR0(jƈEn]1eDӓy_rhJጭWģ ?H^n$)45oQ"hnF7o;rgɮ 74,LReuR\J^3 fz2OFe VEP vPEq~o<eR\ʑ&qma :1LbKeQ=c]SC z dP&ɪ&,.ϣd~Җ0Z:+1WU{*:wMu.y*цu kpn^%5ue' qߵYNl] _|iM8ͳK|꺡}1 YJsS3l{vH༻`׳hf30n4Q- ljGuufprђL&lK7,HM(!@; }Yq^fTWV@M[^ ~1VKчJp~T)JM%UyG3zi^vD4w<@͍)Mr is}RLԬ>|EٓTz!78'J 0|~E] jӳc Tn!yB " rkyJ5  '.?$jrUDGre\uN* k90טּ|T8$tmVӘPLcUU)J%Q=GKͦRϯ=zR^ {xIhs-hoHHLLVƺNg2vtMh輀Yg:hzU=}~Xdž9K .wh좯p-@:FEP1^3zf :걫tP܀ 4(O=銉 4X pk2rԩ#;7s[7h;t* Kֹ~ip hvɀZ+*6 74 '{E󐫩cjSNlwId埖K 2QM8(w[ǰU6GeWG2v;WeA&l?/m/m~F B%&etR5פ T*kMMM@x ^yņ q!mOzؗfo/G'.tfH60\!%sP9~)+$t%,6,M\K-uYPaW<՝sZA>cR{ސ瓏=ц*)vs {A;w* QJdFefh!a *$O`3qJ'ij?<78K)"?[6A1/?&SeHȥ>CO)ApM4N&Y⏦6^ eru-TKо1R^vMhQ.UTؚfrfƍkN?~ [i2ެg=1<>6'|׷S2_Udܠ݁eI )Z.eI7_3 IG&լvtzMR{r vom#z͔:+*h~2۽}mB}iφ2R yLPZ[v7|T5DL5 [1px|l׷*qIBG W_z/^1Y:@g U7R:=!'< t!tzzgO"(=ӣ@ǃGG't( ( CYT9<׳1#/OST#5iɠbK#*۞(1A/3^NA7 dڠÀ3,0m"m^E`Z+ǯ:<<[:[ n$ob8PJ\mxiD& g7N.ʥ Z;m|'d-G~i!G8p2NõkɆF13Մ5Pȓ|[Q˙68 q=tM&Sd℈U[u{`+3mb$e5f ,8sW{.SЏs( D*ߒhhD&jbynAnitè {֠МHHO?foI>dZG{]>6ىd…[[B)>j(oNKʏm8?msoprHqMLJJh;#xk jx2> C1 ״lY LD07e 8> ȘpzfG~җ 6L*/f6|"mCh4j[MLzܤ>GEWRqs18㝰wؤ$  H͉,+RW@(z'@YY^%uP)QEqUa{Otd@?KeX=#D7@@rFlQV dt4V sZ?)z(ڰJdN`{*N{X~}99|c%]|}tV8wTvD%hy"cUq ,CK}Y&ueG.cqôSrN*' Z9s{~i`g7?1H (Ҹd53DW vUPTcp=zs]r3eKs6yܤE_9!EP.@OyOh褴$7*Tn4*. }==tCun&oeK;:˫\i{qUA^I>Tի!xr%'%GltLEUi0?q놬C(1\;)P@.yӢ y"^q %S9bt9&eiL:Z.$ $ljsjZb2ۅĖdfx n@~qAYB&ݍ<nVkuDk^N uoo|7-XJ_N4VIYrrp1'[ L`*1 I,ۇ`qj⭻]S@hrk={ ?UiDpÓi/&4,e@h_Mjof/g¨BB|$KK뇉aYVfffk3Gendstream endobj 272 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6935 >> stream xZgx׶!4 5`Gd$C{-VfYVu/qtP8!!| /&)gro{?>͜9{Zgb\f0[Y+e\{p9^0. x bP(ЕDB6Ҝ.ύ[/Z)+H\-ݿFv`mRW6n؜5cY}b|Ղ'>hO?쒿L{|'AL $b 1xBl$ifb 1Jl#^$KYb1I,' %b%1xX@F?;ila=34qu[Cx  ]ڥ't9dF@/A? BsgZHMTA0 TFOdZ<m8MBJy#C \,ķץ嘔R#!Ne0;\Wci=buꭤckKiũ*d(@a4wI;j=*5&DfD| m-)jI:DqL=u Ո)zûgO_f/׸MYB6UKydJF KC!2%OǙ5PfJ2GCZMa!HJ>78}VG3vJMvN*8Tta-DBTD 43d|<x3H4U%׉G05z: TF=ƾjlʭIrZԘհ (<Sx89pى7yG_fSoSqDomHZEB(!am>ބ((\LYe+yD<Y7@KilCz]`6Ej?BE ۋNzc  /he6i@^@<4, 񺇶;Pt;4Ky ʪz)eh2R˹ѕ\ MPVhxjz4TZU;~~WL<9ebQ0w.k dʌ4iJA9T rV_]Hn-n Yz>*z S!Ώail62m֚W<h9^BDŃM_ZFV4l q&ލG5NjZƘrP6G]'Zw^:pj{+Ϥh} @)Ď,6*U|.cP譯p_G?:(4h_1-f<_5)QBz ŠUaC ˶4T.04UW%ݏ;&lRnv]=c$wlˊDV,ӵw@yK2mqmJ&ݺk̂7FϾHb.tѱ=mp@dzbˤ #JŔQ.~9?1# 5Mj4XO*Jy^yQ-=FI& klPiuipg-t0ʹU 1jy:|[tpXݸ㌾ކK]T_P׹ѦF PZ8b*G&Q˵f:p(L13܆k]O\]]xBq{^&Fw]t=hR)t)@eԶy;FD8n_W M c֫Wvwlڟ$ϥsZ]@_97^S}l֊ CKU[* PiVy-5`UyBَmۮ7tЭ4ȃDDa.k@Βde^:}=Sb8%~ E.Ÿ2@*ADFxhbSio5`Iȥ>W&^IMJk7v8O!Ӏۯ=þǎO\.x1K`[ʖ; UԥĦ}3vQ=La\cG(Pcirʝs5TkF/9_P}Og^ԁ+hg(~,Xe *zDKB<(" qIfF*UusuwX8̆-\)~Zބ߉j')yt,^15:tV W}}kh+!7XE% p5yYܡG1! :?+ŀJo |Vz:_ģ0ҝ;ȿVb/~"?ZPmLٶt~^g󏥵.ZSKՅb|| r%:ajsɲ\y#N2KH{hek,6LFP1چ^:![y3r _w4Voy桑$T_ 2~%?lݵLĵ\CxtKn'{RRj3%aWjԵ1B33ȡdk=2/\uN)?ObR:vZ|to߿;bX{H+dR9=`q73w_EKcnj_91W)Ogg:Is8vE$PQޮ=!u:k7ȍʂ1;ZS_z$ w=]dS OGU"9P"R=ϸNXS,w ר뺦xFhh>d>%eT0Pzz:;Liִ2d OZA /,Xg)F:)H $:SZw8LScu\9B;9~}pEs_N_8rdu^xU7c03) 'ٚ1ֶV5…%PbY(A.wvّr {[~H}] &Rq8chAkVˍyc֜M;}ݽ58hh{o΃C#}ԐOg/Y ;3-[чJ" fÏ4_ ;Zy8JmKʰfA$?3wt`,93MCK8.g=-K PwV^ gpbp߮iٴ1Ppr,Li/@Fp?^ElL'E/]%$ZTIG==ٮ|R][Ob 􊄃tߞ 4#[ޱV2 rE5E{CFvGm8J`M~j6Os"wm%Y ^(mUTw\.{As! EtI{Sƣ{&/*j$թ=ttGWY#W!f?vo*?K#}ϵZ =\e4kew@ț\ odb;iߣhB N&huxü^6ϕvkkԭ-"uV\'Ttjb&H'vǭgI#^c-}^GU2@civB:EK%iWԟ@CΠ!@c/9x6SPRc@]ڿtޒ}~ِ'=;rA3,A.o28@omLtԥ nt:lsُY3v*˔ 6WA׾ek@$l~YL2I22eUO>S.T k<ݽkAOuh;'N^+Jc+G]Y5Zٝ0 NE&ZJJU]6KkC)،Z$ nzU [|3 -󽪀Ԩ/2h^b*.Zݝ:> T@ MMJZ4f8A-Op +m2JaL%\%J62t qr%-+󃟪+Rҽ;Ġ1R:DC4 ܳ:MǬؘ%!.F֠sdnlh9ceq8ƀBw~A# Ϝ;{2]{kubU$~zso.0UtmSZtHH˼g=d׭On@DOb(qfRJ{uEtSM@xidD6w=wХ(tNwg5rg4o\me>zWŏ`ѨpWKe8m:! c\0ME4wG"ɣ8|PA" K&z;O.Vn Om]wʙ&R<Ԕ(+psH?_$*uxZɏ,4gsQC+ѨmCcBv8%&+95-9&H[9|G$hwdt=J^/1 OVk9t)Nh:v'hѽ<4%_I@l㊍E0DC>]iGK24$<2ppN_Ic+)wڇ #GM endstream endobj 273 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3017 >> stream x}V{TW B-eڵvժ-nk*ᣭZ[A W &ZJkw=U,[nn{s۳{&`ٳg?7}oD&B^޹SR~ݚԊ$4NL`CU's!p-U349YBjuܚy+6|w1l7{{ ۋcavlva}fl!v?b%CØ@l[應0 {_[t/o\J._oK$cɿ'=7x7w!^8 b&vF6L895Ptk: Mƴ%IKq"u yуNͦp-N8π1rQx]~*%:"fy zE3:#ӠoQ Xh׫ԆWs.%^xtt4|l:\X Ƭ4|- | 41d'V` 1\ O~ZK: .b6=ҮiV\e&%gg9*+ rF~#@0򁔫pɃ^KȥDz)NFU9CvtNz Ez+"VB%g8N.bVִ[sGjoE/,{F(%jcqь:BK[[?ɨ]cV F# i瘋崴)A~lȌx !"Ud6]*W"h5ؚ@1z\qSz+@fZ̿éUj4\@Ā ́%N#A/.-1do:<|+WOcnCᅙؙؙp)˧eCcOfSl5v4lv%{Pr2`&c5ͬs$ {CONc8hi(\w8bKjk{A=Vm-GAj4Eq\uMFe ,m0ś] SdoJg]0#ziI>O8'JtM1]VM1fO߆0$% ne,ƢO$58E^/S\SLk4g~}x B ߢp 0 >4e;P)10SIܵ^>-_OR矪otp=}xķ7z%+Kb lUǛqd?8SI1SA)frp L/N>N.>j1Ų8Z_xАޠe9@ Z#A~e^0=y%n]>;z]P-uv\r : rG+枂@|靺avڙj6n{":KN344~rPF?P Ѳ4cZit0.{--]߃03C@F cDzE{4>:ry՝ՖHoiks-^L|}ҏA?Iт{)\8=CɛnNxիP'9nMi*:3AT ([O\%:NDC,0hH"ӕ&gyzd |VB7:FjI.+鄬m?˛˻?:\3%QȚ77sYS+bQ#Fa0 lF(LbLdY;P8nGFa; a>̍:~.HcҞ pV:?6"hS{{?#`Kl)Fp)g1ZvO l@A{X g?F:Ҍ^U[>;vOCS.}&8PJ#ϑf=k%9mk{mSQzD8JP=/TD+ : N*bnh8t%ȊGr3en:Ýݴ3gD:ݓG,`H^43岂B{oZ 22* '3"T7M,21 GFٷŅ > stream xE=KPF5inZBnV:8"-աCBq+T[ zgNv)=/pg㜯uN{gs׃:Z.x +Hǐyx]\X~_a&c"+ff4\cT&4))RgfҨi>Y,iXdwQ{}df`/ed "ǂˆ, $RX r,&<1=%MHD@B Jd!0αIJlR;N_endstream endobj 275 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 345 >> stream xM?K@@L68;8E6_#" (ѡBlU 98ڢ`?HqС_Pߑ{oxcc> stream x]1 EwN GU2 tЪj{&bA$z hCo<QvKyF6 q֛if /:>_)P꫞ݡJITY,QL:LH$J:wuPDr*|lU6Kѩ@c ʬkRa+)K,y_endstream endobj 277 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 540 >> stream x-IhQkqqB03qkQdB64.A$ 2NHЃAS b\K(u@pKiU !jjAr!HTLJ a7( DžރP,%c,5b3`Z@k cm}OCr(SXT!&PAD%4s:Zф0gh >͋a*eIFeI.#$)sVzrt=.`@.? ;q/w®VqA ̏-V_&ɁD&` (E"x$RJ(s#rHEU"ERDIғΐPp=3<54g4ǃ:X",5fh7POr43FZU_TM?cZT{'n9!uuR̷{wSnm%BSendstream endobj 278 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 168 >> stream xcd`ab`ddM,pI-Lu JM/I, 154wisk7s7KǤBw_`&m}fFF _A|?sO;qOUW*߫~_w@ٯr!?'χ }NC;endstream endobj 279 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3957 >> stream xWgXTW>x6Ljce;ML"V`  EEFAHJ^@,G=>3Ę-w ٳjǮ`W?TiW'Q0uBD:<\ W Xhz5!k s w_sFO]6^ޛ6n̞c|ld>g /Ɩlb`63_2[;f&c2[,f80fƑYe̙yf>c1f-5b1cf 3p"FbLqP<rax3ևgO CD׵m}pG[h ? f1z2=cLDGE߉n39d3EĎ< zHཛྷq8Ex&&PM]^ʉ$b`[ StWvsŔ /GEVwS%e*2 SЮS@;{"$ҏqTD=d;4Yw~^Q-NX'~ㅆA>Brlsh*|#bzv!3sOLm M8šH#+D.s4Y={@H>%u|,⨰zx纴^ дWwbM#nyoeK em+'Ry_xԐPN?|+R@GLrR`Ҫ©^ .t^: qhؗ~PvEw+x '()z+2ma8柢۸xN</߻z7z?Lsq r {ozj[uy΍o綜"hm, ~pH88 !˚'x -TQj8Z\OXrŦfR=w+bw|U- nZ$kL̅"Q^;+IH/-EGT|kն%8-6g|م˚5kؗԏ~gP#f<Ϫ^n$aʃʉ&ln`QsHٯbۃ֛q~VD0(qǀWͮב2m葀oRs~n`dq7I'"X"2fBwIwy'P? Ld_8N};tGw6(Ri2#t081"_ԃ94woW1ewyOKVIHH/~\'!<¿ent (ydM9uE~eMpʆ:> @cxי@38JMŒO|}tІN: f.֣% Z=j'׿D8j\HtHot`;5:R5eqRr4/`b,HBs)GD"$tG`ॐ을5FV12fd׹ԣi^/H\q{7RZ)Tr~`H/Nͤa1aV{J IJS:-vSOnɞ@O*IW'eȲQCG" Z; \KBJëEx2HOAI$;tzV~zVCdQz;#ZBpw.(6U I$Y3Ri6Ϩl5IԢYYY'OVfWw6P7ŭLPXx?{p:(= RU(Re9~l}OW䗜˓>wlmKP|s/QXQ7 ǗZ=fL8byAFS%3+ fdreJ9< 4reFgGI]V,k9< riD\LM\*jenk5rfGcݼzمMe*]qЊZSSJ9ѥh31d6w& E`RrG.V= T"z#x8o<zWd+$A~ݲma>xؙ;m N9E^;jš^=s.4:gnvYKã悇%Wd/O&R=욄$(~"D7AE֑[˲7 Bm%J7BT7M"f?+dUP[ty=#6rSUBd(󵱛6'E`[NmY]y ?( gvnglY^Ճ>:k'&jmRU8OYjh*jxV҈Gx6ހ.5 Kk·As@KW#X<߯V٘,p kȫ:4n«⟚o>{Ve+%  Qv{zc^nHC dnOSD2ش=rEjlwjg)8шgǩՄ!!NwyA]NMnuڇ~Bp*УJo+X`uGغ߅.b#x0 $'I4$>+$G `z;K\ :MݻU(=On Y^X#K=a!ɲmv6)d>ݷot\>|EgF,\{o6"+o^qOC` J`_<]O99֛5#Xd1ZJӰEOmƅn_+l!? $td7ȴ"I8QUA!jZtRﭱe+~wkrPk+ |նx[ȡA|x?n)r8z0D&~ _R%rENdχ8\_gg1NNpw ~J䟒i#?5<\BwFhw  p)џFN>1 >հNW!W*;̈́l 9VnMn~fZðG r[ e+_f*Re_#Q vKzÙ}EQCNty{=j(.>[XQҐsCeɽ.S/ )<ާu([@T~ʇbD 1fnlRѓԟ՞a4FIjn,H ֶgJʑaIegw'$8BNm;~h%7x-}-4n=8:R/Tgg?Y9ik?ϊmPs8FyvH;F󖭢oاNJO*t -{*t`3 k; -a 8]9O_QAK(2~ο"ԃ)u > /Filter /FlateDecode /Height 343 /Subtype /Image /Width 825 /Length 95909 >> stream xTY+ZRS %TE;[ABn@B @BEBP3"}ݹ3 @ @ ] @ @ ȯ t5@ _j@ . @~]A @W@ u@ ] @ @ ȯ t5@ _j@ . @~]A @W@ u@ ? =4 A%DDqmsA#O _ vKU?{J'.Z}.?p=Zv@bdYk Mjض"/}y!1vr CT{ځnM1$~vO(68C9%.#xvC͖Wr\5 ѡtͤſ#B½~K!>v!=;[e/֟h] k._ qΗ]v׼}p..|t@W@ EjTA[8a<,?oᬳ.AwY ]O r5R0>j1$Y8FN[SEcH^}n51G!(sWwwdd%Qy 2JKƁm@W@ Ejo,UPLbt?V*Q -2h{Kww9{K]Y.fo.w5>{<}% :a)QaP- ] @~aJEgpAU rd՗J@T o%D85oTQZVu땹5J:3C'Rh <&q=O(TʒsĥZV^xC0`ҾE1{pZ#{X>P,SrRo..#U PSTw+~cY =ۍ#D]LWwf;~(K+J9\m%uQ |.[ZQclQa)T:v% [?0U{S1wI9e@V\ī;yV9~CFrd>gHv0̓,yz Z阏ij*{} }'RTCQ0$d8Oe^xdȫޗwe3$\)Y/;JXگV\Vs]`J-y~5^Az gg[>OVS ]Lj\?M] @~/Z棜ӫ/ \-z\kӷJ3stѻAZ=dsmT:UT$\{81eD̮'%WoBE?ǻ<ߊ5;IWވji)&>Aeve׶D2Int oEgot"J%'KNaW]_-3Rh^& j3+.&*;YQ誟]ǿ 7{U~)eG?/&' $dnNtn9;$Cv9e?~ؒg41ɵGj*l;=; wPswӷ4V]֋aD‚k'ꏜZ tn Bq՟q @W@ 7Waj;WV@:}YR>FUy%N5n@MN{^t|}'EцMMJ9ؚt5)'%/'&ŰhJדdg܍*]kFџ2wvW&F) . I> 誣 U* 1NȀ{|BlK'o\-枸8*|kW1@A'7V|1M.APtJ c+(4^_یGq>|1>>s5IYaxJ*Mu,Ak0WGYO/yATVE_UV\c<6ܩ\Pu` ʺf*SA.5Jbc.u9A`7("W#N+BAɁ(E=b>$8@`%|!Nl7ϋdQsj(7DqzY3C'\W^|._]cS趴͢Jȉ<62JAɎo~K7کĨЇrM57 Ick4'bP5bu;y ӷkw1z"㯿\OcH08ܨ~ACt[+gz PY{^'x<כl f<|c;|c8Q A)Z;OqUm^RT]8Ɵ xV,QW5]qtL.j*HNU3V(j94x<~v$j|-f zɐw.}d=v3bbiv"W?>yqѭuLAzNf SLFz#r[0! \2`Dqd :-8jƃlmsg緯~,jήBՌg] 0jE)fjF*ٕe>po]k,8 ˍGG7>RΗP9`گM}u@VxIe!Wݽޣ7GuPx%U nPjzf`8#0{ h:IO?A ȏ"r5E-y8!Anc`JMʨ-i(&t=5(4ʲstD||uuAUAA`:/a:bg]Ş)}'p5!\&SHTdXԵWvjaj :W:l1jp 0m $%VM?\-Jp|?e>>w).H:ZmIN̾^  |ks,iW欋 .9}+d zȧj%Y ONDP 'Ply/&( pV-U>ܿ0,'p d<\("W[syWFovOK ?/J+7l6W/9?ɝNwcz3=Y Los5HDMj!<Oֲsj!\  =l:ZE!=F^`EkJK|?bSO#_PO5W; ƐXQL̾eBᷟCU5U^E)\#61 Ap]$e-?G R(sShQƞpsYgJƞux  vq6'JwKyޱ&<6t5r1u<Tcٱ!! (0/Zd_uU@W@ @c\{3$7v 8t<4I>tq>#& 7~O)5} \o;t5蕊X{%QVtL҆:lds uW/Y˳TU姝q~\ѱoxl7`uaƩ5#]-[iRk?E5 II|ػg(8| rd&&ciQ%1%ϩ4:n Bf|Tcfc5C)܇pY@)Tc/!"s?u[k@W@ w]6d>2b0@vm1$rY#A߇Ơ_H*/ 43Jc׋p0U%#yev"(R_ָ_l7ubbuF[p,8-1  \cjOV݈\m)E5 ]rrMf` h394n^CSGVfOFj䄠VS|n xhhUn&B7V]A/Wx/73Hڽc#-o+5dָuGIs8bGKX"훣a6\MeXOv}{IZ1*CL'V/m2oGruA ȏi3$*]7nlBjs`w'~Ma"&/:QWVe /M/c@r*Ʈvo<6{ ]-+^Nm0H?>"%?m{Wj|3*J_iO340M+dȪvv+q:0uǪR"w;_iIՕ?7 .Nΐ1W]M&&%&%HΗϢrYZ֌560S ADTS|dqAT kK٨ޑfJɫX!%ػEto t5Q~hIE@'F{[;<6oJM{<oG?j>XYٙSG,˜!^S+/r$>/6*hȉ@ۻS)E<oީ}Wsv\v#?_\GƤ1`UgW4.Ocs.IwE)NT 6%8Z:jYqjQ)[v"vT ASr6הXE 8> ڈjCElJylK7!{qQ*rZKmh5ukϼUfA ȏcx^R!"* Iת}vzF Yil A4L>{{~jQJdȞ4U &F}Yn"&%1pq1UaT3N+$ _[ZuAmnB~aZIk]3;Sx'NėT ҳoKT!1?i)+N<.Ae*}̫nk8Ͼƿ([ m !EY[\FsxρSK.d)lH9l2~rq3@&C ^?/ձӽgcf#˲_*j똍R6O@W@ u@ ] @ @ ȯ t5@ _jEue{\x6S)Կ3QO>$)@N&()>feLG@ /t5ȿWvw.g/ԯKY,=yY暂Q>='FcjpXi1)h7lܑӏ@ _j"WhrS<IWb4z~^~YMz# pY<מ~GY;K֕ԇ=Eg]t~OqJAQ8`ŝSm֗5]Ϡ8lHyI*Pի47qZ9J?3ߍyHY 6ʐ#"&.Q1;q?}#K gn{:kX޾evLwW시uOpOTkG(N﫤mb?ݑ/] /t5[?RD/`ibo:R(?E.>zɈw幹5bkۀ 㝈*_MVenJ " 2`㇟]hbؙg*r5pgN8ҖW[0`اt7w3`8fg2~8:_AJ)sEu 0n'TVFOIOݢGҢ3Ovs O.އL\ %?julFou 6S4Qᏻev}HA ?u5\fpΔU&,CE)Hexp<%7 )aV; T${Y1C4,7yO[ #FS*J=5/|yr] DHWC'aIή;ж'E9;LGve!|1_H65TB{2}Կa5<<IJ AoJJlh2UmN24xvzt> ?G_-rJt5>{v:QDudygW{cꭷCOU 7t :Za8 {S?xpH۟Ãj ^3Lvczo]A)F=sE@5V3,z_Qt c˾%8oU{~vj2{^UanZǚ mc7f:::++.B.m\ӋZ>#{i[EW+TYh0p"7 ǟ)zcȂ B{WzrdPAuak)~uƯ-wڃ\o8x/] "^fɌ=n4KWMyzֻcO)~F^ݬ'jǯl=:^Rͬ-+iCW@~1ɞ4Jw"QIA&qBR3? Mf<`^'D\x41JEC2,z-oR<OBVU$^m1s/p5R]\ZL,%v&# !Iլ7 ee>A8ݕĞV.\ zkV_I=Q5Tn\M.ak,`ye_ Rr_[ui HOk W yຍ߿MɻfcLVrg@iVyظ6I)Hٹ$n) w`íezJN%} %vseٕ,$դa|,N) wVi{W+x]|pi{40vY6**_˷Vc:u=8LW]E(o<}McP7ZM3=R7pNJsu,4 XeӃ5׫z4jDﱭuLTps }c/DS[Z ?aL^S֗6&*>4b5R7-CmkO?s{m+f;6VҕWaﶠTm=lO|՚kK'y^;bGQ3L!@cP%Td\c{QvGVRэurw8oyvʦh AЃ u,F]siS|{4Vtҙ#Qՠ`)5 kW(|p26vA3۶AvԹTz7WMdƭ;f:ʩ,{\m2rپŤg-;9W.oːQ^L=V[ڃCΉGB2D<̓e=-ɱy[)Ҭ3k[Xnfp|-\--271r=h;oQwyC{rΎ45WC)TR1dXt 젓K$ ⬋MuAMmjw^޾6Pʲ!^%Qike>_[vk3s欿T"Mu,jGW#+sr*8)O][ܭ{'ѻbw~<͂G4жf&F=t 00ll7/HW=XH`+-z Y:&i/G,8joZ]Ih5dBNjsbv ]/രW_ءO цtp۩-<RI[^jVypx TʑgSz6T4Z E+sFmB Zi~ɑ;RnYq 'S} wCBm~fۻZ͝we'8~D5Tחψ=.gj=j%Y/nH80_S\FaעWYMu9Olڭ9Wqi"][9^Ύ9/Kv =^$pbOCBz p'+O7L8O^ʼ+[]"[hbmg]4 A ?[@AmV|d[*9qIZQ]eBs5\L&vlN0⬱p1nq`]\L88bBWcx (m0c6pZIWK.|;v|:px[Emy=`MYO(}* BPp@·sU{8  T5};Z *r__2X]wc2rپGl粸z"XCs`eJAkL.}/.ǝBcy]qӶ%mNE5x+t%oNbHAW@~jsO F|:|Q6)4wWn.?jey^2#D6K[-o((EjCLGQWst!&պ]KVutIgWm3P>IwZ9N8/-7 y5\gdx*](4[/I[lf]"rI{W4 "|yuYI9H{i2Ej$yn3߯md1TC @W_WtxfWSW4 2S^V A wڻZGOO Jی(rt9#ۡmoYSi {nBI(Q+@?!WKx.'(?H1j\2nFCg( ɅO3Aj0T{=n~Q\UiE &*;9ȐU&7Wإg^e ~B["s&q_!%zϒi~w5M> .M&obIW#O=Vt`Kuv{X}f=>iVdEϑ2]A ?u5A\GW*A8]L-vh}eoA{W{eB2~[v|^9nTQ5v4bº$dڻZU^MGGq+sUNoR2#؁\/!W.H?>ё \C?ծNh)q|/v,eoZẔ}u-mK^T+X|7~SSXOu>vNڳmʎR& "?zxcsdap𴻻 /%sQ3F:W*9=Q嬁䇇XO0L_im+)l~?;WD{g~V>b]DAv>:01*DeA{tՉu(Yi( yWi7:\v&#n}(w㮶5j]MuSAdĤR6 &l׽?j!=e2 I[ub]pbYDfk K׷MLx}X[\zlubk3`d%`.q1Dx>^~f~w+{Žݱ`Ǘy14t65FYsiQ8R-|r~"r3k/g>zo=1k,ֱ  Yzb`X'>^pjS-a}e.-Y'K2ʷ {eܥݕg\M Rm;Xu蘍O\mCyXg(pY-iqťo8EF,Ms~pθӞO*! jF=ON[Mq8۷|\O+ubu奄wt읥,PFDC![Y"Ğjfb AνkOxf9ׁ W+#+ta0b鮸S):_iD+}|Apa10-F@W@~jMսƑF~/~WFWR|ZR"HsN:ǾowiPb;9HFtN 3t}yz(A3O_ \t=l~v+XG9A6=X)Snu ׳MP.QW5$yk#kcBjyO;UѵzkZ/OZG6a5HvLf,;zϖsۻZ΅^\$c:6]1I9%ͲD _?;&&i:,/I0-~Qĩu5 Iֆ*)nZ{a|ko1."w읣l4Vnrpt挗<c*-*rS`|5gQ\_~ym@r|?s[F.RR_~ ~vm>7ļ*dP^Ss)(D`gQ9/U\__Ly)T vNzYΎJ˵7\"Ju%$ L 0;q4fE $g8g MSo*𹡎msjܻtKF\jV:fZf3]GAƟ{p'DD򭬊\A3j0;#GS9|%?pxOFYz6y ٤ֺ1,x9ixrY黊ɾQȀ{eFQi{#Q|ۨݱt,4l7 ld;Vtܘݱi :d!snMA/أ/J2'zp;GybJ~wYMֺÖؤH+ˮ-`S'mol܉v Cʼ#/U r"^K~K\5SqmvjQa{ 7iqz+Mh n<(,WДu4Ff/IʚOX>FQUI׷\A)*h4ܖ$gcE'6Lpq]T^?;s/HɫvJlS{,;apa߿DdL'9ϯ\aƝ,M#/9JJNeܺc*iZm|#eItXɿb.Z8ZQp_ONT4r#MG.fD n*9rn, brmch(k/0<'&&koj@ . @~]A @W@ u@ ]{IΩom2)qv䯠C^`,-A ]{q>_'@Jznp 4|t+`_6^:W9SrfFfS xObB:1}5l8@銡2Hүn(3ß; HWj:j1<=srn2g?F[Qck.^{V,gEfA\\bMA)^Kugǭ?\[u-5*C6fX5T4v_,v=~?N7Gɰjg]g\C|\M7Gz/פDFQj jBNj 6QНWF'm֞)\Cumq|G[ uO𻕿H#u5"70Q585?LV\AܙG {٭Z^6%hj5uA#~="˚|z#70dz}Ng65g?N{Wc6Vj2j4wYe]m,*S[r0,o vsdwO"Wj3i35ִ6r%AjlM_)%N6Ar Ze= /͠QQ>6q&/QXR6ёol1BZ漲^Z MLMHAb8Q&a -\r5k 5T>{F:VQeK.]eZ-s:^%̪mr6:97<$T9w6jmUݿǛ.Wk`mG]`^^WkOsM4P9ƌe| j?j]śs'- y/ !]`$Ⱥ}&yz9Ɠ,Xl}.wZem+iA2X':GĢMk'G>/iEÉV~_p1nQkuqu~Z/՞_\,hh2"/3WQRN} c J:sZAuQ΄D.]z޹U;[LpX[XŇ*u#U ID<=;S𺸶^I[uh.-κvwTCo yW|'`|5e>Wg´ӵK~( FiE/୔:$u->[02kd4zM.[+̲.*j"S-՗V8L ndۄ0mKz&z09|6KK>NC[idWށ06T>͜VQt+݆5C#+t亵r Ӕ\KԶn}C=YM,8r.GAQ:r2s\De;j>ΉGQ AC7-|s>GD&~S0#2tѐob((AO^PWʠTzdꍬށj[n+|5Ozl5g̅N$ꙍE?<xo8M~{ty[u3tqk]w=>w/EDYZ!Nԥ5߻O'y41j svLPL(; 2zx2|8-8Ë̕: w *v929t tv:}eN&*S\Z4yNe]iDAE-1BXϲ{+L+yAF,T"j BRhuLYȊ3-8׶}U<6@cPt$7*~(x[cc{'_/ֶ}eT3V|I{O 8 Y_@^m&zD{z ;?Ðd5風Ι VUplĞYʽ.NPXJL0j/e55 S{-0{ݚ~fI+>[JE18&V@ePTV.f~3tQua!|] c`3=pemCU UYT6?́pitJ%Dx 8Tmoʼ7GKK&bߛ{{OsH BCadR"JdRiؕQWhhJٜ}q>>>g}r_u]su'C h\3aIJm-K!Q* n ɴF~F[$4BDz끀4𐃝/ʰ#_*xꌰ'$XyN\zXs6[1jd(y`0Bf1h Om*D¡9ŴPmRXI Q@A!d5<0<Ec5n* paZXA!,,?e5;R(ԫ[ͣzsTj 1XmW͖v4Ig8 zTL*zj-H~ĚMђVX`T+飊'{ 1yqQW&Xǵ D#PB2XMU!Hp%BˈdCfՊ XZe[V 0xO/`Pj3ŃRHC+ݳ— e_R)90[Oo3کwVhnp`|l<hZe鱽8"^Y~JCA*"+;L!à0a $ÝL!Ǖ܈*1 ō/Ɗbrˍ+I -WœF>}9}oW?H%6KPȔ¸'/Lz hĚw!wV|_W5I@!.7 CN -RvKEO^7#_4&5+L|bTH765YFhͯΑYie6<\CIkεH1] =c=ZT jqu ;ZQQ9e$P9&;Da> \BgMaphϛPxsߙ ILC{hDZvSI_΋⼆zC#j[UͷDـEX I>Z'4U[^vωֲ .$*2qR\*D`6QkVkF8c0?63KtH >=, >#P9_u aG:'/ݸ{|75fg..M{w'A Џ-%i1|"o*eBr?i/_uTbO:m TRa1@dh.ܢn:d1ͪex斷P21t'RZ尖%(Ji~t.cJ \:.sB&|Jr;,$bFO[Md`&9IfQ&BKc EWonp~8nt r?jT*gdԱ>>9˨$-W_9Vc)CեG5ŽCXyއ]r!鏱dxS1 A @Aݼ 5ҿ9SVjBo?!r`cwx!J}򬤩{<m4_G_MM!Z Gċ{nr lH6U_[49sO BOyXf`5v2v4kCrA fIG~V%V; b]MrLlBhvnmeqkc DY%1;nY}&B_yB`W345qϭЍ|kN_['*gOS(<81[sP5w ^fxT;4YQj3mJ.r%\-vmZ# C´⇺GLB^ gEkSߔ>s΋AͮDT*V͋7 A/C5'bFRad#}Zc]¡uCE&͸W;?)auTWП{MՈ8b9)@Y5I!jתCGڊ{y>9/\;7X]aCٍտ߷8ՠPy6n(r : vzf%ٽ -[0ܬɌxr181wjr]|?ЕT޻wJ;BvuvA37j4;0k>;?Vՠ?!fC@VeGPK]$*U{6Ee<("z~ʦ.MWe oʤ 3 BQA 8 >k7MǗ?QuѬַ2v %X@ٻ} {B1x,.<2u/n2J4QigjuYyE}@`Դ_c~BD]倜\]q6+ _ baW-V{5@9: =S ֲS4p?P"w9,RM[@&IxgVjJ8:-ic9BZ/CI^2dI:)PE$z'Fea'W*#}fqg&rX4 ܕssʺt[ZpSg(ZԦth|J.F&D|[탼c ^ڿ6mD{g+6 ,ZiupTy$mϳە{Uqd54%M~QLēA H3B_g <wr8n\M(* o;*L`{?;,z*|o6`G!PO76{$yv#B/ 3R( %(>ILj]o-n]Lx,d3>&l=Xjq`(d"S5غݶJGC$f$Ban{d[m^ b#}Y<1mc  c zN>Xm1twKrQM{}447T]rXm=Iq[oKf#Y| 6(Tf<&sP~e2}|ھn]9Кaymhr ?uS<4Ϝf|mY['(:n u2\Ze}f]+o[@m(XD\VHYl3VY*>d=?cI 3yD%V}('qZf eQxVlxB s[Bstkw\Y?w pyd#Wj: "ZfGY2/=59t$);ݤ3{QԐce]:B^XgZm}M^_:wU獮>D iX+/"7TjN, %89B-]Vˏz4ƿVu%@V2!INR~n?ܶK s]y^t*+R5iQ?fR6i_Ѭaм ow]Fϳqz=i8Muʇ˩9L7MZŭIV['dZ;T=A083%IJl1`? Ba f wFjGgǑ'My0~iI)uګ4Oр!Z?Z5ڧan п5jՏЙrDrHr-n5J/6ӑݟwT~ (OҟVVq>aAZ@fV#O VfCYs71%)Ԣpz0)t6,#M~*I;c2[r>R(Gq$r1S;W +|cAPWs!jie%6 fZuTA̶4V /G;}kp ul Ec5=ejw?]4ڕKw@%!pƽdWG:M>(+}<lԖVx(pV;WRﱚb-Ke4 ?o~tT魡a\sskCi3uK71uγp`oiSTeb>,ճkJlP n~u{d'ooX1:w?r@̬61s_WMϘ(Qpomz+D,\)|p0IalI1uv'Ed/QmQiCp_h :r U?Џ%\,=ֆm',RMPwޟ_D^d|Fđ gkv* pXM彜p#یQF7xE$%[:-M+2*mn:n{7ܿxcWw߰i7owƛ,<( rO}NcǗ,j)]oO^icT+*rWd4Va G/H=Y5S?]ΆwmݽgAʱX[i?>Gw 6nS[fj S]+% b@pzxA:׈HjW+3gfbJoyTͭu\@ V ՘mjC5A) RY([;L+߽LKM zOQp>>Kt;tvݫ&32'vIaXO7w[t&tPs^ yI7yo :kkwScMf=_r=3*dƜ$t5d5';ݗѐ2~S7%֢Kİc8`IrOC\,`0|1X»:."2zzg,Y횥З)3_/vTypWk$N-Phl! "8j:(? РZÄ%7;W8?jh8r*?ґPDN>ٳZ@^\|M>6n)9$ 燜K'?`A?>_#T -V+xYjrRQb5=KcG;_V-vsbVc;-\Ad 53zM^Kٔ]& ]wMuZ~]eF˃]wiyl,o+ޯP^z8vlXuYHVjm;u,\F+V\rw4?x1OSKh_ PZv*_? e>ظ ; r2u*u'oyq#PKjPG-D.ٶ4V{Sy7;’eIp4@>\d5R=>=/^w`=\m4-/]8*6>EXRj)٢"3UT/] d"ǜ=oo:nV9\~ǏDjViMc5 *c=oj$6 c*V! LKUX2e$f8K,x]Xۉ'QhV67 D}0(dEO~I $2EJ:Qe"\Ɯh/NJ0<k?-g;J:QB Q̴NG?0Sl+_t Ҩos̱ڻG`0MWe)μ7IH84TY <٣ 0keD)$V<ٓH&n?wnӻd>81@uZ鐹嬾qݕlrZpđNo5R1/slzaYy޹Mn@֎?Zl}}m7**/amC_r̯d4F=jRxIzYx-jffjt<74nАt zV ( WIl/OC#ktviK/W,^Ц0ng|䏜!]xZq ^ewઘ%VOu"(Ve1PDE#T6χ#aix-75t8 ?N@2ٿ%(VUX ֪kz^Qf@z%QJsٹa6e"(ذ@[,a)'agDHJpF-"K0 bEC:ė[90۵*57{*G_k~Ӥv]ŧ?]4rѾ1g E8Y8PK JhvM b8жYf|j>(;y*= i<ǬdwQ5r;,%]>n?`A&Y~ms+בF(ќ黋_Bn{faϭGb:>2=:Uސ —)v$6aɍ[McNo:؅̕3|u{;*R㸂_Ws.5\lf-PqsӜ"iQp˪ה7 T?`R*-3Eg'ͱ:qRFGj|oKϱڜwj՘$`VUQ2j4jkcQ Cg(,;@c9VӜ6ͱ0xpi uXmXMs?#}> , i{/Ӳ0ҋiNs ,QUcs=mnw(Vb~-[(OdNXmNsӜ49iNsӜ49cRTSB;W Ӝj9I*vi|z&bFDٝfCͦya'"MT*@P?v{_{E R*bwMEveǎ`[=2[d|.Tuj=T[kبx"=Ota)o$N[F "OK8`C\p'6=#l2ҿ&H)o\`MRc+ӺwkX+1Ş6 us$kChF֎OsLq_S0"\[q qN)jqWo:5?Ld+ptm|z^rfݏJ9WqNWaW)*L'P(pn$YQ~3WcBUs- D H n_`w(v<춀k[mo"`Zh|֋7p^~j# ip.X-γʗ_\o$贮;gDe  +BsXƻ?f5 m%{f?jT Z>?fɎRVR'*S}G;3M>tc_.񖊒1,G à6brL"tmmw}i<œ  gEO_oJF'< i P(B"SmiH >'x"ytAX) )8l ̇''p$8 ʆA~%Q;*Mx" sf >j[dF'_TD"S0wFD2HfL(OI8+/ cERqx2 1H aD MyVwE"$ IckOH cqV$  GP  :qaP]Mq$Bd!IjyFy±DXVƎNvƢT*u0bÏcG9lhia쨘zv^V$d5w3C c#SQAQ`;mSm"V Q 0481<N=l(V,?81̊pN.;~j=vg7 nl@bPSw4p(,B!vBčCP* '?ӿEHDDc'#K_~@h<]5γºN 2#dUt'7pM[uW0w?ryņ$qJ_X$ɒn(f':n;_ĊȔ#=0q(DdS=UZW9"/'2V[Hze7 ,2T4ZW-;(Tp  i "H$%;Pw6^zR]b,$YN B&Sl^lGљ-LxY@=kyxVJr1X-,)# eNhܘڼ3垻+,V>aƩϭ[qCZFc$8$Zij5ry`45+s[ b(L/Qnq(@TQ73sX#7X#/]ofj}~8 »ǁ.I_U$  rAR۔q|18+;'ӎIbEu/[$%ڧM~Hx+M CP(Am~%>yV7,VaG&g3'=lM/ P)'.l[J_Lɛ* aPJ]" Z X"dF\IB ȤX}g`5tiD!٨XoBwEV$H&ڪKOOvd'h:G hWU҆{ʷl35A  !f׍V6GaW4g, -j0 !H d5&h_).ifqj)vGp(Kt~h!|zQ |wy RqWjҟuFBTk>k Gpܐ/LB!T FZsT5jkD˴cK6.Wԧd>Cg޲8?[2p- 2BhZGߎkJm[$n{+JCaWF 2w>@aD,%+8gǻJP>[ FZ{>|J{},|/P0~j]h3Y$ LįP6ұ>Ҽ:9O3%i6<3hM^GP${}VOY3+iOf 8hwmmý(#Ytr '~iV`gyQ2Jr[c,.28aJCxRpw_qF;t-%ȁ?\}3;Qԯ8}GQ;FE+Di8Y6* >u\~rRmr_qW}"+e 0')Ә61Cu"z]_'&/;mWh5%?aGmfGaIfڒ{U^iFy0al69X7< tȪrV\!l˨a@h]:ro]&հxRxjSݛkO2#>aIx. ׍ .a=j'Z>V;F]gݟpMZFpc˼o:M{hCu;oTg5糣YGM"JQ_t-K]6O,BËUw B'/6Lnsp5J~^a.%峽|l;;w-rr"9¡sOn䟫v{*I yX{ вW=ݬsֹ#[ ]5NbY>M38Sr@e= \?Al}F`V"-=#}TcZV7tVB < /TaNOݪчoO;ST*AKk켊:z:˚:_)G\0߷F{7ŢmHd )ݩ:y4F]jK]Ns?",]tO"l701iըpߨP[&Rh6l  =hPV8=9UswxSޖp֑ RJƇ\+?@jUa #L;}8ӽmV{vP(L)\hDgNf.AkFD<)f8>ǴQSHg bjhՂgR_>~Q(Trd<>qs~b,V^܍Fb^*[HDr98wMgxS<\ˮWEݕ}c^69rE( GVs 5[)ܬtbw7,Ҷ٢nZuq0b2Ev㪬|4LnWw\%&F3w|~m]%HߧaW}x~fF}}X  ]y > sww t?xuaeD"`t쓤|Uv`c-̬ccaڕ\JukKPﴘ9h}{Xr}Ui!IˏF&tыdz''RԆۦ˴~]=Ol.ޛHŭ\R|YXx h,yRj/])g htUY4W45à"\u  /}<_)w8 ECvUA;Ϟ~d% wYh|_l9QÎj4dVR> 5.VMWpI|V{eNgi0f'lu6.۷rZo;ph v9KMoK۳5^^- ^zI;RMnlXW  jO^Rg t ܣaD[._~^KSm>Vpa8~d5*(gd*N{r޵;JM/-__E&P^E&pR3)GEWe7f0Z _]9q' _iDCqyٷ2eRof'm~ ϜFƮԆdgyO"(N'5m=,[{29e[FC#AMFzGB\xhZK)Fq^]-9gKG달o[$kJ>B\?e.kOnė&h_B!waMifj[_0zf}.uo|J1Sk3z3C^ږ~ Fqj1l<9WhMק?&@]VcǙL΁vU1d4$kH+&:P/(w[kz(T"]ˋmy#l(ϐV F4Ǘft%A/jN+sO_Jxҕ߷zZO.Wz‘jZ&cGNpPJiigNŝ)jpՈ?a5)?ZG;]Z,>s~y"0* 2~xJaf-ư5l zwU\u-59,Q89PfVU8gq{Zv7`qĤ/H8Eo' 뜲d÷|.$_TX ?>k(5oK*"iF̬d0 q$t~=n˫C_urʥ`~d{A'0=$pMnEVMR[wj2#~d4/m _(I0ZbeBZϻ~Uiʃ#s6{ꬦ'\ۘfI*|s55C?ew- $ʤ @"_ټtw74V* `gAnjZkB BM,fjvV*MŁz$֎a .O υ5ech{ڲ[h!C~EWDr'~yGIOɍP_j {7"'[Y\/J}4KoZkYg TB򙾰*=I?02kim$t-:]F*+Ot@ P'Ufb5a q>W_+xY:IaV K朾 3\u|r!󽁬6(ѿl1.!GӲN @Bv9UtgMGSSvT*url wOYH$%3@"4=pϊYœm_hq. /{; };6Ӟc YwA& PK }1U&ץ{4="~ O (&iV~;z b])9J1SMO͟],7cGqhX+1,f`1z'ݨ,NgЬLi Ӻ¡AMr!VpV'N>3VS3GkV'fuS7{ؑY-H#=Q5| 龌荒Í~dXA ;5-/1J6HqWdy X<3'pf_ƱDM<;6. PԽ\sbj{FM hoXGq1 Q˹mf|$UL%(6g0Tdd)?* уàct N\-Y>;7.2R[:{Vc`5MmI.JD{= `P.ς$%>bX1FrxIcⲨM{ORw)Vs/I7`Hn?a̬&6c[iծUeXz7tVMǁgtV!Vcjk0zko:ODs뙭3?[M+VY阂&sj˼U63JT yYR-RrS7=bis59%u2mfdռ:{ u 1,Q-_D\ ,Kͧ>+rxfV[⥴jdxIɛjGV~j g:zfGF_|Zr]mF@WзIELTjue3fTs[K.tUxdus"zp=N Ӊg5IvRFAu:P[oaƉ%o׈$e~eeʉ΍J|jw{䧬6N;k3o_N[>]Rd~ǣitf'qV QcXҿj2qm^PtVi0x{lX'$b煵VU5:29`ʲ?dW(Gn.Pem"2B,?b |7S^ ~ÿV\|{Ԑ@UwP V̿v:ug;Ez/jam&v0*B_%Y/V=t<+,?A <do(HqװJ6Q@5 ]/ZVǺ?_-7H狧f2^/*'u",d0GVˉ8r$Q}WVґ9V/ ռL6RF' kBw]GPCav<߽ʟĜQc/ A3C$ z]eV#NTXRVY- koh=3wp ]KQkҍ fjدzWʉᘁ\^`ǵ ׬PFZ4zN[&\Q v+j-g$u|l0GvDcnΞVhlƇz+?K[.(n>QKVo\˰;p®nƻ}=!׉^:D?u[^z>`i@UtF l)xb`;(o J  ݅Xt4vwaRtwwo|eu]y|wf'\s}n*:]h Ws9n<}3FRKYw#)+uo1c%VLsjCA5l}f h.[}תO(M/lnvI{y>VVPv}Ctk69dȶ>:jz$<EO:=iqcqN(F͗xZQW}|A >cCNxE=u4Ύ>rݘ$-tzZ1m& 7XfuTẄ|^ '?>V{y&/hrq sy@jy ޫYt6]'6jծp0Q)$ZfN#1!B|ePbSn^,g';اĘ[hPVf8YМ"r5㞫&,k0"5(g[L[bMQN lѳd3jdmk_r~"MQ͔1\mo|MKt~jzjVYqq}wCBfKe7|ݢaE _`@k0SLyݔY5zJ{zJzW^C9t Ow5 q_bDwZ7 9[>ΰ}'#"aGlqjnၗHi,RԿ𰬵3;]MV*# qޏ\CXUDbмq/}{7j3*+k r+O?0gKX^\F͗BhNv>"Jiڒ&RҭeUf\1bZôEhvn񻚭;3'ܔ[h,=*^6Ph-2E+F r9)4_./Hzx^T1b_[mXiLl8H+ھ "#/''3=rZ?@WsMufP?)?jDj6!ˏ~zXEŔZհs{ *쾘I7`:~ %eeO4W3=/[i֚X2V]d[,Z˪ѢJ9;DB{mMWvKt(/ɗ{vp1kWTFc顬,sOkծiSHy1]-rvo[\y\w4l8@U5Α5{u5w\_Ajmi{r _$UQBvOu߫)rÈ ׉^qhcXKhbMmzLϝbJKoF"B76Ft xxMA3 k:wxƦ_Y;&";zQ>V8FnV?槾{Ehf ؆ZzmNC{@;HAC_fE~Bii2oR6vLs._VAm U_fx,ki@`ʹǑ8={Qsy&j:' bޫmN.:xlN)G}E!#w̞Zaj >sa·Q׽_%.\ȼN@ʝ T6v9[LsbWmnXD5Y|bޢ#s\7zZMiAIRu30<'ޑg( JHa냐uH B Zbv{,v"hsw]u\څf>|+@eX_{q`ke;"4)c VmaEi)or'CLid}hE1S),U}]i*kAѮ'$=yE WE_771P_].`'܂wI C@*,WUs IﰻھiH%4WPi @[PfO`B&`J.[*Ӵ%abMMRexcy}w]ٌc'5/ӂ*{u6(cAT\r׷ossxeuVAmN@!(EF䧗>ݣIpkH~kvK]mB\MĻo\wj-alsaѐ /1YU%r2z>u$ M[l:riFMŸ 7adJ {nDeq 1B?^ݓ6xVj>+{sŕ~n=ۅ,_`Wt&FZ,r7@ޥ"7c J$2p'qL*=IA>͆EJL嘣"$9cp>e{%;=i={}ɶU^p:meߨm\?Dk* >Or*:׫ Oy~Hx|dZ?׵u n]>?" tis:z^ULe$/#Y"7ai5 iCNAxXa&tx(ۤ{k%ٙq E[-vx =e#E#1>ݭFm,",3K7IƒzDdn4:Vô%x\ۊD"js룯&'/8?w. y!n>-,)$p-h{3yɉyc?=\܆:7M Gm,*FkR3QaW[@޺* onꎷ=C(sN|(^射%pm2Fk(M` ue^䌆a[S{iK/V(N~5ݪ rmM9ڶ=?Aғd |̄F!)`˜ +â$D#Khh"4evW:E$D22҉9*R3T7r`a ޻Ta!  4 fbKɅ՝$Fx,}T4U($E|"R" P=K _.\G`˓z+ 1L$4@*?xRFpG$b섶r& qL",:]Sb:o5y[&檛"H6Xv`u0%;S-}ǧQh D ۆQb`p?cSef7$47})!~#(jD@z.  # @>;:{<LK?i5wnu٬f%'[m,9vz2,&mR4>.O$ǎj jR"QH3d};CQ~ {W{e }3H#imׂ 9l $ms+1hԓew##wN\,ohinrwn_(Gy'VwB&|fjOo`MAAm4Wpe&C#_{<κok(v5eB}IӕkIyMϯ!t?"(3,ȵT,}MgmK_[Fo,ՁL5\(CkH)R#W(kʮ/AP]Ti0(#+=۪dIi~q]LZCwa` ?'3Zko{y[MQs, 5yieJ²H €@ GQ?PՄD;[:9rA>φSl~,Iq[%N;ZGQ$Hvvǡ*n9ĝYSq-ǠGV҃*ό8xf|]6AQ?rsnLӖ8tb6W|]3lظYEB t}Y8m"y}*jHN2ccGV\j $hɏ?:`5[}sңΉG3 %󗌨]W$  hOWOoɅ;KgRh0ǖ#K^O ȶ WT=xBg4m!3MUj͉Es&ei!f:~9ev_ȄdAJN}#*+mf(1R^oZהKqm,_=1bbfJR޼r]cvIg\m]K)Ϫ~ #on#x,eWl ՅmCڅ-;NhAS|jDZm/_@9viGW+orb}1cfqumr]>o~O\- Ggֹ?̊_A8lBʻ|)A%bj4W{Py;(۷gd }c_WzQ~˱?^#d;kڛCסQI3a5 ׸l0cso3Fo]]Ixx)>@u6{3,5Hq .7X,{rq~ER(*,]G v&jo^6 \_yF\~K{j^C1 3lޫ*I$Aa.l<}rwQ(yb dH>CX-R|A,)[C0ī*ᄇyyh*^pTmC+Ӯ,\, ;6ۨc&i/[V/WZ[UGk^__;?"ezz~^Ԡ:'(^uN9=iZQ$|F;&a_IOSaR*$CBg.$x^U`zb|xEkxBaAl,ig R+"SW䠻qa6;4)%Dū\ a xlo*ϼwB;" Xϩn|p) җ -0;:KRJt~Б\S`Wt&ռҔK:d y5ƿjV~Zju-mo i-fKX!)5%y잹>tteIyMGmdєrׂ (X@ v/`0asW;%J}`Pϥ\l8CBSb@<) r1m %嵩jjAbV_CLhj.w>W6>O[Nz]kyW ǔ%[ /:㻜a?liM 1hBZ:*Uwv>hF76PAM߻Zmg©YX&+^M wgZ+;8FWY wj>KC8y2,?.}' j]I!k7 9]<W{_Mia\\riEc_6E + C;DcwےL>T9mg3qo1-wWZj)sj M .p(̥cakw\ܨ8"~vW3plZb3tj.ZİQ]-?Q_ߵ>=|j6tOKk596"Xr S=t^s-fJB?yh[vYPCa5}Rf~Y~=(ʌnB} Z+s˴ec]~Op=/.b#ZX^Zh"4p`_Ɗ~ [@s5ήk PZs$Usvx)A7*),9v~YaW;xө΍ΎȈl:pGXvIg\BYvtF}AD|>GCV!|ː4WnetUNϝ 3sTWt& G{;8"bZqm~r5;~ &5ѯ&dIs Ԅ$iu8]Et\kGAo5l5}=G"v:) {uNsh\QHFvֳ}eO/"!WX·[=_ xfagx\M"5Q'{.ПaK %dKS,/);YyЖDu@3/oM "(i-NN[՟c~L_ !2ۯD̊1o W;3_g&j>K/F'w5{55.3ת3vTW}ڕ[Zu_):S<L6Qz 5\x $%rWdq20.]ɽEΞ.p2 9|ܧLD [wu =:OwqJU[eM^+5Ëwv\mίo&J[o/>aֲ=ıP$ٕ,\äBEYzn#.,æ'iq͗xD @{r#oY#,ڤ3qy!XyM~r#GX1[y h럚:hv@kEԏ\afEc4{ԗFWd>wD6gep"+#k}u1bty9jm8=*L NF֔MIb\jgg@Ƒ,PFܖj+, *qfOgJf>mo@tAne63%ŦKB$>r|[֤;;#ޛ!Xb:YG9k>klWsQs͸ >?¿^-zq@.'\N֖8toR{uc }K"sUgY`[؝COkB=iBSh~Mnʫ%TWEwS&.3z80ڒEOijW NݎQb)j-a-ǁż"r9MSt[qwlF֫k=JTi6 iC^o`\(o S9p5ACjqű]-쭓6! EMrMeWCx/G195g ~CIC+=9W/sT J qvr|Y86R4ݷWDvIg\ 2->.f¦5zsu١9W]Ay?Ɏʨ 2aPuĦ  Ol7ʳ!r>YS>5qf0H^9h}E@{^䕎"plˆ 0ȀF63N{_0hε.xsf: w.ۻ@+?XFQWyai5ܖ`1>rpu* MqQ^d|=˹PB(Z-犞ӱW&Bl)Yb2U Zje֚k9nF m+j.٩bT5}gTC3"?~9J˜i*<|j/_rj~LO7imя镮 L:K̞֟_J# ~]1IwvJJK܏\s618Qo zĆ𔧟6R*odf'N pu:Hnd]g_Xp[?3,j2h^xx\-"C$l{H]dc;^sg#Ǟ[#@37N>W<>8WyZVH@O3-4&6&c;t zW{㵩,yP+L~l3WPFslWm?얪KlW Dߧ}H~#ӻ5L@_.(ir#ٞΪ(oPo߳|=f^oG䳫HYʰM:jE5]q4aβvlh!bj5AMil/wR}Y+OMQjKɹ풂M{X9 t&SAFy|`&L<`$1WMHEF]ޱ5-}2"}DpJ\NvfL[^KsIUs]mOыW.U/z|q5}~GYl86&L{~U(d%5yrS껚zŽѕA~;;eVľ6d ۯ&>:@{8a,'wgsbYÎ 6ˑxٸ+ 7ViIWyz} HYuqPj5#42+D'| mmS>uQ.f>jEPٿ]nTjeց9[R=eXYFhjevmg#vCj\ ܚ?@ V[tw؇cNi)̊P)n`ebyoGzZU\LevoO5\pkg\먮FyO8Q5L$w7?|̑{w⢮$d êLylWtvEU9EI, #+BmkO)hjQ)]~zQK\N VYwcd?em8 /'è< 5EߧɆfnsolH-lR3[1D gTBs9)Yl (FI)h֐gzz6]OyPR^4+gHk[w?vj&5}*lQj*DsVi[iCR=ClhO?D0u$Ն{O]܊)6{\Iĩg,rUՔV/RC n,h*`de]Qa4Q!vW0 8_^BIw(ͨ+n*Y0Gv/'pu nlbPǎȇ.`ihJ}ΫW 0ԇϋ.TR-+U0ĖOޑ*?W%H5ceAYQVW.B7We2uڕ5S8$ziUJ<@ JYf)N,P,$?Ug W}~cij匕**3kUPJA,-Wn5"*F\]Ts*pTʦiKTeU1RT2_^ۙU438WB42;$O`E eJrs yw/<=T\ekF̐@;s9@&uT*3B\e.kªhv>~qj 7X&|_wsUp>1^aL ,R"XNw5mЊQٸ/qST#m/N lVVSsGHj"~91l܂ӫsc!GWt!`&k<" B|hȌfw5MFOP]zh#1 4W{?>>̥1-<7(a00UT2 `W@ ^~Ψ KHZvygw rgɰ r l|LV@JvwiId_;)/op" G֨P:uź, ܅>v00H.J( - c`WaP[Ym,n.'4= CHmgchއ-A`˭+LcCރrZ1Lb?Fӯ-n$G A E:>kR_]qrTāYf䁻',009q9 2"Xfr(jX.+X϶T>Maf FWD%h)@/1R(iEgg'Qv]mTKĠa^ƓZ_zjVYfTgOX1B|8^w ;cƊc9aQӹ?w5![m0v׫s[|,G ׫3]h.k\tǂzk#ܷi,M`jߩf7OjEdI .CGG^RRү`d2]ܹ3j6~&,?jCU6\&,v{`WknQw7Ƣ1 mڢ ;SR b+C,34O)))&deeǹU;)H$ QUo{b >?No{Eq[]MMNo cL&c0#G Q(dlP`~M45-}|ѳ5MOAuNA*$|c ,X)zo**mo@PYEOIGo/u-l,)ZWV9У*""o(+5D&9v64bࠕeD5ΔPE u/"Ҫsz$DNg(:ZSykuKo;86>W> +l*cñNZ@[RmU 111t}T_D“vcw/ TJsaS솢f4%)>s;Wk,n視EHRWٍ-h,JZKBk:xdwC6 ܝZNЯkRēo cz>^-n嗘={vrr$Vvnp+F .!m5zSKKנ̜vC v[4xCH.oD0OMi E2tƨ}h q?^u}dDS%q'ř AZxqk[hYs x!"MA2 Z抋qwu~j];D%bX4 Lғqo]MF]@3Ħ pŗRWo¡~aYL,2H~w[ϙ$ ~wa=~$B_legruOO@_ŋ9N8,Cvm54$h췒+ڟڌԿ u9L) gJ.nWe~WAu~* e44`Zs䧮Џz=i-:Z2ơsssԨo XWVVχ]DCjH$LP9L㱂+ X)ju[Ē7G%U0)6jH"y /B˖BD2Bc61@0a*\jhg?ldKzhLWB\S (b8@D"/&o?Gv7%=J])p, 9WZ<稊B1t4یA}A $yE*P?؉ה϶zɭnRI ;3[?~`mIdNu>k~V$== @r91G[YLs2k!ZY7rM2lyT@~; AwwTӳ?fNLl5d׏\D ;śq sCb?=w^RMrM9|r:6{Z+}c@TTTHIڟvƆDE%4=̤n H&S d0bUOl꥟C@24껧!߹-fĻqko񸚰,O~w&!@YK46oC%%o7H QH3!wx!FڛOƣJO-ρN@`s*k b= ICݤlqj/ԪzD2  PwiәF?: @kR4ǘolW{}&Uxtfff<?G]FjPAYm]%1MKXG_repp0PPP(,,utPnmmm|||׀]mjh %3Es/+ s!4ZciBW hf&6> bV&-R2m)8\iwx8Dbxڎ!vQ짮Fq{ju qL<woWE 8?>7CqH$Z-Z߾U 9$F"uKwhtxw]=\ kMvC1fJLzz>..}58ڼzj5y/諒=4g vܳ9( ?{aܷDV/=|V^KB78ThYN"gRF?Pv',){f2@mwJ9񅍧i $((L~sλwTgn1sB!=8h Qd|Gh0ʟg//8h;?Z HaYjhg=maA+b_MzbF TF{*g#׹qH$̴v"͂Z[C`%M4F"A.F= dD.u(:}m1]C4@UdmevدJ'!q`jWch6g2͔TSWQS jKunZajM=*Kp7kK>x @p}Id$fzGSBa[z%bp5I9D2Ǝ pM`6,/vCHw~o} 9.=6{؄}@!'lͧw5nxȷo^iAf;kT^^ҚuĉiӦLKW^~wDb ?B0Gl]-ڌ9;ZfM<.oFI$SjaWW^È5Pj]&|Zl6ܾ݀} vpp jAZjrN!I"- Sɏ>A̿ 5[[+.q!Ғȹ{oc^x u$%hU[7jn>qY&$9WJB 8ؿTݱJUm-=)HW/TbV0l2nl'K3SmNU,TV.oJaڹW}YW`jXv<[{k~ZȻ%r>]-. 3MZGNh¤j57e]>QmAwOKO j=Z|$E)!)ĭ%hn=Wt$ our`ׇ5 xLH$h$j'Ϭ'hcu{Ѧ}-Xl 0%%&IKAaK֭322D;H55T&{j`&UYܰx<[>I0R2]xmAO}C.8+ИmA.wzr%WǍ"#<lt>Sb*_wr%JsQԈ^)2z5UmjsLX3De V}**ˎ^?]vՄ~ߋ2SE j&y ֖ŭja||<1U+ltD:Phf{Zi:ª UWy%7r~k.|Wio޺ug Ño׭[q P 3LO7+*cqFXoD8ȸ*:K{ eHRgz\ճPzyB?6IV5ֻNݰ֞SWq>kIƤ}3 XSHj+$wTUW}Yi{Mm?þV=vSZQyEK;[sOBj#QuS!H};XjV+Tfh5"!^S`}Omihw4ie`p[ ii 7Z+ϐ?YUjÇO<)~~˗=.d>bk~WW&: ͯKɩ%K@XL@ȔQwVkjZ 1)LQ>WY.(_mĺ*G%afNi! :m7LGyjJFZ-8wqY~WU@rvEeP7ڬw=ˀeod)U,.+n] .ٲ4t[.w|FG$\VNirj5\ǎWcxv~1)/ 0`@uݪZm0լ.Yu@@ -x ª\m{/`eyyeoVDz`&* IK+VUۙL'|rZAHJJ*B|VkR^} y32hdtV*2yEGną|27h ɁnS$i(Io]Me9%9ml Wjv*l(Wr{FWɸ>~H-pK*D@* ΢W7E]ϬL I'ANT$o.XfUSy䲼/WO_^wk7xݰv_ 5ǝgG)jr*<l jfWo|,ۤ>`6ӈUkoBqV 38yiS"}<u0c(veU\{so kfqS(jp˿֮\89oDPzvII_L0 qƧ@Y,t=O>j^j~ OՖ-[V}M$,Eހ:IIּqW8Ȅg/ ҫb5om3{~%c?9uwC$ɾSX;&L=44L̡A}\[)9O/|}"Il+ B ցǧ}=粽k7KJ3$=$I F-6ȡ[oU=Z.7n7m䏘!)+g@ ʩjXsU]cZk]IvEhUFarrvÇW@ C4H5 g~ <DVT~n%HrPv?>}$e.$Ik\5Kοg8/3wrqeǭ|u2wĭŸ|Ll*)ƩՊI]z&r%3%VY7mX1Oٚ &(&CGG'%&ʚH5z_['u4w$I̱G%-?DfSJpkooDTW]@M 2>U;ûQAWJI+UQ.^uC0`TSי9_9'ɏ ^j_Ou BvN*lʳ4Wg g˯7\97%!5O$ی2l d$eR+?eE?Ϙ ~UVH+F%1ҲА *w22qVZ|&a1lΪ[y~5Vi.y62uF5d5(?ZD npkJBo"{Z`VB NHH2eW,ϔQTaz I,1u5kT;ul1jP=i A+[6Gv\;E: 1Ӫ~UDĥ~u8V]l+zH-/Z8l=/s;^y'}HCy^r!Ʋk᚝p;j(!Fî#du=Y"<[LzhzG'sNt'lJrFіC^v5e)|&H״CSp<`LH[Oަ?2 fu4uGSP^:9y[ϑBJj.f3qďcjʭP˲X,jwԒ8%$4;T)6 ZfK/Đjб{z@jiΌcЦֻK+fN,9Um viʠGXM_ 9m_n(@77qQ'ӭ[/_6K ZW$ŧp ~R¼I,~*[n ۪ZitԭEܰoo2rKe%d(6%E2pG^Id|Nr^ZJAamZ9u?ȴ)|W~*~yXk,@_ܷO22ֺ'&&C;sSڏI˸\zqMz\J^jێm:j1Vձޮ9\9uԔ)S3TSS6C~zrƚ;aH!Z!cK(ZX\*N,OC!Ǚ3g&Oa~bbbŋoͅ jeQ.3XgzNjk6;-ÖLo悶mۦWQ@4>~* ԡC=9wܤI0 ;yԩSQ;VC -V:"DbۉSRS*-e"+%dH8dH.(4FF`xݸq.\PO@4"ɺ,7`N:th֬Y2?Dz;XA =@V}VʚF6g/^gϞhY6@^_MdddsRRRl("P @aʙ7cC꼻i 7茚슺%g{tņ%k@D'U|fOEoסuHۑf͚͛7y)-- Q311cF XFxB jfQwe=;[Dܓݵ;Se&Ts{"v;XX ǔWnݺ>}>  Kqq^```^B<71$I^r%;;{޼j!j]~C1: gIou74#ګ{snW7߯g@!i9߲Ọ# ud%,@AZ @ 傴@ Di5@  j@ -@ Z.H!@\VC h @ rAZ @ 傴@ Di5@  j?Ms,fXAZ `l pt:i@ ~ iY !@i5@VC AZ @ -~VC Di5r@Z i5@VC AZ @ -~VC Di5r@Z i5@VC iVQQ!//۴6m4욎e˖޽A$ǣh7/DK'77WMMCԦM,XMٵkצM޼ysAOh˗/;MJJѩԚ{{G s\Tô9yd>}:t$̙sQآW99&8<<H5H5=-,t;w sLpH\x:?ZJCC#++ 6^reѲ%%%t铡!a5O}hƙ̓P7e>fmmaؼyG zz5C6mڴ!Cwj t p8VQՀ`%%xMMM#kjjWw#F\z=z1ϟw޽ρ5V;wÇs<8o޼Oٳgbvx~~~Fqbjj LA}ѓI<==]KKKFIdpЈ`26l0͛NNNtٱcʕ+1 [|;pw=Z5O>g̘qe1%bիVdkZMJJ \CBB1'']v`Eð|eejAPq\--m~4^vmȑ|] N3̒`W7KܹtPTT,**ܺu5V;r:IKKž>ׯiiiڵ2dȑ#555>} 6Ug3Xt)4hkk=x^GFF$''Mbƚ@%&&N0۷@ fgg_`\___MM-00*:Z۽ZRR"//^KKKjժTjϟ###Ac!!!|1c\t|}}աaf0 82T'ⓙ lTmب7zj;w._0[[[*</ARR6j *bwEEE-u֗/_^rðSMFڵ+:::;;gϞ˖-ƍݻΙ3СCthAVX!ܼysǎGkii?Ֆ-[&$ɑ#G/Q7ը+`LEhi5DP](lٲ]v8r51((N_1 {䉭-j=x#~#-VE#iC޺uKϮ]-[Pkees  \!%/őXzI޽ Ϙ8>M[ +++";N6ĉ:Q GܿРA[={,^XwH,]ԩSPeXã)Kw@O0y4V?p^^`} h}DPAZ <@fmm 499b#"dgg3L> }qppNDu۷|Jتѯז ) tqq']v̙3&Mѳ)7m<؀4ѣGj ʕ+|#4znbb{`K{%P6"h &:4J!Cܾ}ð^z"A eرcj\\ccc͛7El/4lgxZm x͗=H!~JJJΞ=kll,hsM<:7 5xp>} ;! zϿ s/O0RbSx sǻwxVCܹs8%&& 5PZo޼6 yyy`0VXajjv!XI[[u^ۧd2 cccd(1l2n8s%)4 KNNгgU;995޲񪭭Rܰ5=zőVš>a(7668p  Ҫ=zĈCA-qHNN97n8K0˗/7xmۂ_(۷o</M#X? NKYYXvrr F֭+fbxxuΝŜ  c3gN|||hh(0nvm-55LF N<9}tѳMHHZ:AƑ8]m `i?Xe \r}޽;dPv[|HPTT{%33Std:PU^zةٳg>|Xk c1c̮$~iiiٳg'N8ydCɓ'E-,,\z`~*z_:ujLL _{ǎO>]ݡ322:v(fVq2 6ðŋj65& vtt$AjYY_v}F"%%eѢE+//۴iS>}@SN=}tܹ3xƘ H$RllĐ۷{zz~fY 5",/^8p4рjB)++cXt:]ZZ߿l.`0dddD'`0~ 666EEEѣ@T40,((A̽rssajrj?qMII@T _*o1:Z<4Vp8c:>X,P"V6-]z -!Z2ÇqtttG}}/_4MߝjgΜ6mH*޼y#NHHKzl6[|񡫫yfR#=}u z\\`Az!6 H!Z>|Xl@$%%9NrQk6m,KZTTTϞ=˩Ι3߿ƒ :yj8͍AݴڸqもZV rtt&IIII ۷`]]]:p1[Acq5D_Xf͂ 455{"8j>}244NP{xx8pG Ecbb?p@iihi۶ׯ_kccݻm۶MMMe0UZZe5n޼yU a7ooo`-:::III:t*^QQd2?~hhh6 ͫ uիW]vn޼ɗ7mvð˗ܹ~w߿rNrpIIImhh(Xd27otrrK۷]Ǎwjq޺u ҭ[7X$I99}-\$y&ʇ9`Ά>|-<8b.\7nRaBBOGi5@ hFڴiLNNo߾ ccbgg7nYYYǓ$b^~mmm*))㸁ׯSRRwn``ay||m۶8 :uVZ8ngg#!%%%,''gϞ3ghoo&Y0FjkkX,T5du!L3aYb`v >|8=g %%faara.SCBBBCC?|k׮aP\\<<؊p믿_6hӧOQ,`Μ9jVڶm`2jaaaИ~oߞf9HP{T5 >HCXI6 a޿_8p-[n]f͒%Kv%؟_ 2I[[ q5j5A/eĈJJJ*))eggM'O>s ?66¢DtYrhjo߾=qľ}wޙ-x葽ӧO{Ej666ݻwonnrԩ,tz\\RVttt@gϬ $!!yUV8޺u{3̧bbb:u'vɓ'SF퓒عs'F۰aúu`gKKKeddZ gF=hР|`7UZuYYYrA[nƍ222K qjW:.kffF]#0ǿ}֪U+.!!viϟ[YY{˗/S|iB81__3fPF=fffW^h| :Z---]vwޝ:ujRR.Ivvvo޼E;w8Y|ѣV^ &L~ w„ Ν^}|ZmΝ0ʼnkbb"T óg$4QUUZΝ; TUU >ݻ-Z$8&i5@նl{i8v옻V<0 8qի۶m+///ڴi2|*** USx}tjA7hРÇh'OuRPPف-Zdaaq!, ???]JJJ` whݺºu.] Ek5>c&\$TFvrrZf5j)SihhxzzΙ3gէNZӧx;pN΂@ Zjf4 j 8qu-**RTT[T֫W/6M]VTTG)**jŋ0b5A99908TCS nZbPhs5^q'B8N55lذZLMM=;;[IIIt rV!x3f>}Ο?СC`ؘd~tn<߿yy eÆ 7nd Ç_fhh())iggGy50xuZ lSQQ[6m`" }amڴ۷olk8oڴiڵ߽{xqܹI&;ŋ"66A///:JJJ@.\9!!4y}Y\\\.] s킕撓aƵ'NL2Nkqr򅅅څ3,,L(jhQ4X(H%>&ȹ^l&V t 9$YmURRR|" Ijna$I6x#btC=\ЙWwqICyRtuu?~ܧO%B9UP+q,jh94pϟ $$$|˗/ d1V<---:뉓LL>=22d5772dGEE7.!!Sc i5/j5Pa-͘hVXcvɒ%wsСC۵kɓgpp0*!!quggd2߽{sG`Űϻ{HHȀ֭ҔZ$HNv1EWT|ߙGp ˉr.)! Mb #I<]F42^qΠKVDV@ ? ))ݻ?}Aʕ+wߑLN@%]]]ǍbBZN`Lª&8 ];T}XJU 4I d]zSP[h |Ƈ+cD9'nٲY$Qi2秉3!!!11\ @ j (dDҥK/^gϞdee-,,"""5p~/F'WH(2*MfE&3W%=WQ[c&\$I3:ߙ/^ڜu׽!R6F.GfAb4'"ݣ0Te?[^컛8AԖ1:~Nx0 ._QΕ6\g/e-](v ["ԕHӍ$'خun_6<\pخ[ xbĈ/Y+ }={ghN:/::ܼy3&&f&&&@ܜ:ujڴi{8pÇRRRuuu80`iiW:V&w 깫͛7+**_:vڥ}FFFL&͛7&:}n݊={Ç/44wĉ ]}u͛7i5Pt:TS==oΟ?ԩSPl?L0/6!?˙)M\o:.' g?ITpzn/:1g(*7[!|Kjp]a놠VO:U,R|#>tMV00*8W!KF#-3?/#.-b9@HwO2 Ի]^GxqrJ[V<&!!"lmmd6l!#I핃f!H,`z 2%Ѥ}AfS VI?*imN "wbb>0^: 'ܱco߾QG񣑑QNNڞ={V\ Jcֹs쌌 BCCA˗/u떗bjjxޱcP~L&]NN!ALMMM 8^ ^nnn!!!pqpШ(Z-44mر/_oq߼y5kjPyK.ڵ߿`WW׋/lP|k?޾}۩S'a͚5GOٳpBx6m8uVOϪ\xxPVZZ*''amm 9r䈻۷4㦏-`疼ځQ_еʇ)Tķ3<:[xiY5ʹ^uɇo+qr uwF:L?8"U^;, ^ j/ngآHLBUG ݿc!*;>ﺍ[Te#X\ eY6io'2V1k<=#xg?֔ GJAG=HϞ=~ }\@I(2m0Upʓ*rq+eQ=1u՚F'컛&Ij|eW̒ԐLH!!Zȼܸq]=zdgg9f̘!(++{ȑI&VXX۶m 8uVh`nL&sŊ6T])z쩡Vc-xUEEFҊ ZdddEEսٳnnn$I*))>`!TM>=,,,11N@KKΝ;@޺uYVn̙k׮ʏW^uڕ:HEEP5dȐ7oj,..###9WZUf'j4Iz4i轠m`qm>mu5U?B2?˿zvsx-JmI*60==YGYn- #(|x uz1?ؑ&ilnmM(BsQQ:tot:XoI&IUwؘaځPlTE#D[{qrKzj]j&j NȘ9wLsh :fz 5Fv16|H!fZM6k׮[Rݻwq<77WMM .pÆ&lMM>8prmllLsF mmmLfPPEhX r$eddg===jZ祥`/I铡aJJJ)Thjj3 Lto߾jI_V>}ɓ'gx1|W tρ\Nbbbj#FRa``d2?sfE*&&sͬpz>r8J4) Y6U+ѼRV۩~lZMƤUsvђwAtMVdOKt\se*CU,)69>)qՒt#ͮmH.a=swgނ_BXÌa0IZG|s;՛tY)NnIe=gI?EEipMsK0\e" hy;xa.m8GB)8%wk5 PVk۶-L3VV8sqq1b U8P㍌p_~=X۷}L&0 Y}A? pvvZ-//OMMMV+k5ȍ0a„wA7ntȸKj/\P/p֬YfruuݱcGBBBuZ>&&\. ++;b1}tgj4)jv&z : VhZMɱ B #)Z|!*8d#iw1·$| _ )[>\Z9cxl  $AFp2ȏx l>UWV䃽H.;'4~y|7dd@NvvBwʈ.{Do AAGG? =^ \U~]-q0qS||Vpx`(j ZjN< &0XKpW UY{+ &Π\:q0FMiqZkŊ<,ܼysذajvrƍaÆ$yҥyuڵXDk7['VڀZFIII]rZ骃բ{b@eFFhlo;v P6y䨨x8###}}}5P1 oٲĢvL6^NNgܹl=66VV۶mێ;@  I|ASƁBҎ>I\X@b0QYu\z'->|퍥,O_j|΂/ϔۙ~FbMJB2FRQ0SkvvjWWlnKZ)FV*N^'}(W\!!9XFU8Z H1e;C5NvZGQ.oT| D' RZL {iv5O<{ LNGV>~nZi! YV/z2TdS%ߋN<9}tHMvԩZi5ptWۀg(Zx B AS(RP-Nq)Ng}g3˰Z sNO3wn'}]^xgiix\]]hcǎ%j\MRREQ___Z9|ǫeffّYx1x∈333 UxbȐ!uuu ÑܱcG@@XHA씑ݟB\xq aT>r-'Xڧø8www 0lذON>իd?NzOպU,xEM!V6~w^b9A7Re\Vw9hMa{-kU4+oZ*j$)4E>G3UC_?aګOrjbդLԜ Fhj%EpkY2.2k-Cˋ%"ȏUҘR.+w9%%%--MYYyر8wvvM0ɓdM+//Siii:cƌ8r-׮]{E>rpk<1d$oړŮhA(} fk$%WJ'm1ř_S~(#xX҄!wFE[f{qxPA T@t\ WcPjrܺvON>B.)ъ~`oC8O֩;W? nKcjז9vDXm'lch- *i5|M^cRe$7Yn`p'oè5'ʕ+>,ڍ`$''677+))1O;v zm%tҬYHWvemmMκ====AeOȿvڔ)J`ܮwlq͚5G! 2b"[ƍ{n a[d `'922799#>>^ɗ@\+++}7&MmnndС 锜\NN gϞ֭?-#] ّuHϜ93g,̱ jvcZ<ɵ=@ixr[R_8RipB GLNU.'U~FRp H +dԧ:@pzJH8R:3׊fH_߫M<\h\]^,ڣ@S^Gp7L? ,xy9sf~{0^A׾;pv˵:`h +3ơ(FQGW˘kGR) 5: jӝMw xѦ8FW#FAZ緾,-⧧Ti:T`8yRej1VD؅#nc{Gf]OE~L*++ w-p$$X ՛R--~ R/++[JJJ6)GFGGgMEEؚ 1A]]?}-pz]>l}2P4:O"nu?"uq>&i,f(ckeK[cM]NI[j8^G#saF0&/IWT pDHe"&/u DEW 8|[r jQKEFCC MU#Ki-| =EחP*%m2ћ-|D*++ɟ{׈-5u&x2DQTg6ǕYPe%\In^OWKwU jjN%[9ǝ,S/W#w$!(j1Mmс9ϡTw)TxJjF!㵾 Ÿj\է;)i#1Xy|r RW@j6HpxbqV1lJC4@Βs-?Jy7Չ?  6>S}Ý Tb,~W3O$u̼:%_¬`٢3?1o#^6hWN a4g $~RW.&iXh[iE 5}#ub&6v/\-oŦg' _՗ʔtN̯KMjĥQ~|(Yt50(tziSu!t5Dj 7?Ffx9>:twzZʤhn0$g]tL؞{&2L> c.W9$Q[#Gل}V@G=S6V,-pm;'0W)X}!Z q<ÇG?ɵ^lj5:UU$f"(2 &/@bhȻF06Vazŕd>PPqWbPp5хɂ._rm1%)g:1% zḰi }KIW+U{!Y!(|6h@W@yj7[_"72I+[S3̢exuW;t*J:ZA } Oro;8@RPFEouy~ʮ%=)(AShX+HrD+ 536fE{슕u=$]{boGzef&̈́&k{4Tt'/%/VXLs} }W+u$Q}tiN82HpcDrXws͏yJ́ b8< &i.k~&n5(sҰ{J|yP JLsw'ZHBSs5_ LxD>̘88=~"{_[\g{g6$n.Q#J˛Sw q.@&XlE0`fOql~G%b1[n@qxםܺv/DBq@k+ 1r9+xG̯D%;}ʱrE)tߥM8"`rMט\Gljh..&++JTxDZNB *n NA @WG@_> ɭks#RBK.GnL2U'݁V|b#(*mr*kg!2h] Ȱ0%3BC ȿ"t5dFD'@t5DjH\\'T@ j8 2x] @ j8 Hϫ_n j8 802JP*clȜXmڋ|W/OEi/yg#oE^sD}RJLܭeSvׁx qag*m8Xm9ߞk~yYtOicN`O8u9G]{j8RRRCC?Iu(]QZuE8u (t2?﹢-Bt *n)<<7ߞ51\O'y+/6L-_:ݞcjyK!b1?<ķj}y1[[)c*}Rtr]_M_I_j)c9V@ 1֡26=U&j+UڲQW2ܢ2H> 81֡e;U7] @>=t Vc4[*bg"k0J%q:K85m^{FXl ( Q),5uXjʪ81>D;˚yM2T)JӕUPiKͼe\U`ע1N6Mt2SFӺᷲؕ-P4P!I(v5Vq#QA6U0ȏrN̢zBoWc5q:% Tj;ocq;RFH"8OWH6נKʒ2TyN][&ejQ0,&(**kf;du8խT9I0 ` 5NU",Ȑ"0%*n6tH(Kh u0)/X:G̔2Rml:N6tJh+^viSR*+Bj8U- 5yIGbxgf5E.mN&#A+[ R~TU@A 'F|Ӄ 2=s7'n1Mk[^vq#W3D4\t`{Y~+jQF(&ER=5oEݥG8>83S) 6h{b"*p [woCEVׄ,t5౛WA [6ű=8.F ->@BC.e!f^Oqg;emkB  *>51BÍ4ߪ]b*j@p"@`NVj0`Lk ^vO(hފbPFկQ4y)~+Se-U_&hc"ep﹛n7 \wqkGd1NWm}OX2V1Pcb1-oE jit&,9˭mwE4`UoEFSen|K|Od,99˵X0]k}78h/Kw?T7kE|j%$ *jyav筸,+y+/Mr [8].(,8[Zٸӫ9~+3! c8w51LΉph )Su+_jntYOT6@W@ OPY;K-m%_sѷ Ntٚcnyn0h w ]#+t֥>ho4dSo3xYSOkMyީ 7 ^eh_xp8Yōi^S{>8ӃURƪNʸCF]h~w~u %O;WߎR).)JU~VȧYŜ%g\)H˛833*#[>aVahgk=T)GZ 80ؗ*mZ7ˣ_NuIG;*b724殼葴!/z oe{- y5?ΕQ4-]w;n+?,J3(Rt9}#-U'9.vbcLުa ӜcCu[.4.p.q_[*m^.%4~w,p[$=sΩjp?,<[S}2tC m? T4}/FAKwޯ52Y[ EoД=Jr-zE9dGjw6BizQγJq A9UҌZ_p11Vz+?oL jc0T^ gQ:3;vVN_u{Mq%wWOwQꏫ%^fZn `j/u|+wQ)N;'~{3zpT-7|v`\A~/4t!v.6v$zH $o2R`x__y^`C30,cbyk%_SA2:.mr\ב\9WV= n'קM͏rq\/z (j%`[Lq_Bi/u6iv3;MجM(E֧-#1*Yk(@9g=IB_uɻp;kZ)C0iYkmlwuqbmI9X nA 'Fu(JJk[eMwOLt?+wy׃Ok4H)k-]U2x0gW#Xt?bB{] = rW^lSΩnwA,>oerbQ-r0yuT} ؙq `URMInqjukEoC͹>&}(9433Kjg*6u.`58Wk-Θ~§,\Ya~ջZwYޅn[z6t_"}JºrjGHlJrq-\~~ࢳ~8J-^լm ފۮ5`g͏r]qcb6HZQ-r3 )IGnhddt5bmAnoY⧷bhqZ;Gnqk9{제>X[e>gY0h@ bjIC~d53VIDO ß3@4\Irǥ4LsMwVӓ]( J$,pVIcOw~(3^AGRݟ _k*v- 9D"AVp;puꔑ?n}ʌi`>J,3߼ oVEa( *UFcBW uz -!w^S[..E}+ey- ^{&^tH՗}]m>00vUw%4GPzR>]M ]%rīX횳 7n~9iQX턫p7kw#݅qE I!t%(@ό`rF{Bis}ʋ59yOr.f{FFJl1 ]EΜ}JPZy'e> j{mAikG//Jw<*QT)sg 7R%M݅ƻ]jJU~n^ghkN#-ng䯸S=#m C]-ەYmb"tWv0)ICqk5fMvsJWv5p50淘)꿊rs<&;P/u6]^&W˜s=TmGEWyN9L WZ,;[ `ꯥ䭼:!j?=)hbS%aWKϷ$ܖE'1V[urxifji3u,toi Ļ[wqíe` `v}wP8'LՀN͹KsjAt5jk[6WϬ-Xg NE<Ҫy> Yc6F+X#s{V|GWw!idyKl#}Jm+][P%v.n~yёI u9= 8!6gQ&KuEeY,צYzߏКN Sm4UǢLm.P3բMn Yx-t55g ޮe4Fj]Y5)_!ޞ`,;Wk~躊gx/a2muHq:K@O2skt}+v_!;@4hQq>m잼[Ӟ2'mdcad~h`c_fqh |bFI}e؍ *Kq/s[$MTo~|Gj[F={nMU'"Kw= K&eW(QW4آ4Ĕ'駫mלfIhq6&+L(p["`1Xm6l[ȹ؞] "fíery1VRƪO;^L(x̩n%"ߵp3Op;H$Fj.eH˾]4xxͯfmR)^!|2,enb6x] @>1tˉ7-Tk[IzJlk񚺼S4vYSolזyUgc oYct7(i^Y=`Rb5h/ah*}(mё\:R+&UTm]w>AP&/\8n8IcUm>xf4hn}gn:$S\ZTd<^miO,˜tCKq 71Is{F_@EQ+~za[ cBZfտ|S$颮V}:4CS^}S͹8^]Gz`row{5H++]L5uOz/V=pUV{bv첦je,CbY >&Ux9;n Ti浽,Ԙa:2 +hvk0yhk/$ޒ4Vs֫3nAZ{ryƴ(گ_|b9Xkٞ1D:4*Hyv'j+G(4؍W >铎R)ǿ"uԤOA⑶kJS8(uY裷; ;=3%0ǚOqxfNA?9 )KQ*tdqvqa?̼/|Lk'EޞPJ^`ӣUJ36h0/gSeOtp$ҏe=(se{"(JA<ɯ _%jg'eL?NYZ:YP?h9;] */"=vW6ЙU1!(b-]AU8;!kl~S[. CC@Ty^[e |L< $a0OJ7Y4~;f텅`Pzn4f47{>%ϝБ5RF*ӎ :NVS|ǧ4 tUҘ<'͠r.Cv8l[x뮸'oI"Y{A_ϝOtq!_-%&f导cYĴz&w͂M'ip) BA ش%ZkQeeֹXNkaXnẽj@>6/46~nk}j.xeEu!+[ 't5@ 袌JkUeKMʫK3X j~@W@ 20 NDUj}Afp`~ߵzz@W@ @W@ @W@ @W@ X RjS^e\:3dmuVq*HR)vteXkQ;Fo40' ޅo7ҶWH$}QxSHeCt>mwnN/JVˋMOCҐ}f{Sɘk&}W}s_̨v(> ..Fd2,QX> }4jǗ4`y|j19Y{wg:+޲χsHnp-c>9$`\@Wm).KGq G(.^jm<:p5' (4*ByOeHW& (h&'^8PWm{ D'Tp!" z4^{.$a8.PZfE/9}jxMPqTUw`cBoS~: FE~b|J^7]j:Duy_] " Ap$RvOAPTjfD)},"o3yxOZ _9|IYRo *|*z>(`\6.'%n:Wb460\r/ _h47=@ GzR)WvyUUdpEaڶ8px∂Vftwk͓4Pv\OLU}%ʠg4].l-4k T.x24b7eK<=gV0SJ捷 *'H)W.vS]\`tuPcWZyWRZ͏rQc}+wF ͂QPfhʻEGPz*"jišwj/$.8Rp߷|gnm;"R&jΏV=ӧoO(jx[ RQR)GU|jqhV8C*{<2} U[:kvfV'F,=*mJ- |K&͕?P: ,{_tڵk|M{{; {]n@|DNМ*oNsHuY4vys.I*cm$_jm$RJ)tj{bUNSќx%CU!_59+OwnšjSf82:ÜF&+6騄ÍeF֗'^9[)tV:MI7vƗ' *[q˳jr6fn_) 1oO,˜}J ^혬2ZB[1efa9'd4n/v~]IV'RiŮhNpe3:Us6"cs~!){ʒf?N;PídujĖݳ9=Wۤ+6m4#-[~+2 YKϙl5׳Llqm3(XmtqV ]>CϜ͂Z זR̙'͞DGͮ먲7j~.FfvSݚ[m1:1[LڑK|zZ}":pQAzז"( ^}G_b\y%alV1E?ʟsyFL]ђKwP^:ɣ Zn²'Jw? g9;8ӝ6mVr`(e=>n^SWƌowqbs)/ 2:W&{^sWo]E%8lCsTԞ/xbE_+6óQQQ2i-ɜ}ҧ8 F[ƂJwޯBBbܥc=us=]ydCA/7o\g!W>TSt˷|'WT\O9']y^=W+w+x3wbD[X+JPee[W-g;+wQR`軗.g[((y=HhZi¢ O͍*wݩOgo{ryc^!HZ~9-k${McWLOsjRƪ #׌ڳea(Rt0bXm!.$/&؃Y~cX] Q!80AɗɣHhۜFj͏r]\{qt_/\8'[႕(@À1:}[믶Fl@>Y < qCCÒ 6 2R5 (fztԦM:jepcktq;u5A''1LAR*}_p/W8gK%<Ӄ53SR11q]DOY_H$[s [5L{Q9KϵEyfp5Ï4lwaҫ8;ہk~ 9$maFI._/xLحgj1-u]9_Mt#j&;& w74=(V[tɣ]wN','1V[xT]>ߊ[}9)oE=T>&>p?Tښ ^}]pcX7Dlqk=ibW';Ӫ=3^6|#ePJ!tz]]@|TY1&O(x[:Bj8=ĩjx"ҋF!\mqj0=qCC>,w26%/:W_Y';V$Xk9\Vz߲`s[Bi_z-L10ӜLO@TrjJ;3;ko8Oq(U`\x$1pӼN{`8z+W:Yq).qpCmO; "9a6q%U-JKWF wշ2JdRT zׁ<{Hp[+vE_z\Eo"[[ӼEg0pSFjj~&Na:Ku2_ՑZ#88ZJ`3zn!Fc] Rܳ(1yd$tBkk@|2TW@axZ4]e2?ish1bƭmswz&]aˡTJYRF*oqqm/ JWlqҖux]6R?Eo㔱e4~W1::K4ty~kyya5] ^ S"OQ}H(nW=_z;/<*%Bmj~D-|>9oyU夢-7WFxf$A-2w>EaƩkOpm{~)x&%!juWS ]PZӣ*~~Vu@\/է9n.@u >yOZ Z06A[jAf Y`E"pΒs/ Z?QeUeiq`\Uܘ4G]H0"v${pahNbb Phqh[\ XӃUr0/08lB_D]xikja?YTKH GEﯻt?480_\-uaN]n;&:]L~ \=#=H _Nel{9W#CR1 CI !6 b(oaV[RRⱭ&/)cc}B*lh~[ p"J=ʈH+jhؒ|M4x4?nn:,쏫!(<Q{jy#A۫{<-,?{9'=(cUE_{sBIKMogos7Ygnmq- -]'&evvq5Tf ݢ)JKI6v >&6ʩM_y.gړ=3Ҍ7wC+uK+}@K91M˸zj_ɛ_Em/x56eCZ{/s_J)VoW{)Yݵ +Z )tY{~rۓJN,S_\-s2c-Tpz\ R 6}*lh}lwAd.4BcsíٖGTܮ[jlWW /^9s@w vun dG#NGJE#氎jnUӏKESp wkGFUCD&[ 82 nLrC"[u7͕BSv^O%T[ܐ}֘1=ԙZisnpά(4"GԉG-̡?%Ei4rbbѦ`@-8}q"믥n6JArkSF53'6qr*=m?x>^}˫fkG~GWu 0.&ؿP[LŻTE4T̨JG<Z ` ҁ2U>5BT2\^ʅ[D[>p\_yq;̡_jor~򽌕pmA.y}0H.^BA%t\3n&߁A>@yY_DiT\Ҥ?eJK|ߨc*O(f=4f)FAV]~+{kP#? hzaDp{u%ܶGQ pN#i]mPYY A AXZwS ZZ}îjMϻ`]-W j##R~{@ IG9u"#^ .\0{lKf̘1=@ d)zd4Jm$BW GY|`@ ͏sKvҍ<]B@SQQ/ ?~PP@w @ Ƞ Ȳeˎ92݁@ 26'@ 1 > stream x][sFv~MG0~qc'l2VF-lI I~E7Rt7РHi,R5Cӧ/u%lF_ۋ/:-7_~|fZ.o.l4R W=\/?hОx|G+bB["-u~zꙎՄQ5y{ ]1!>0_p]pK ehrvս?9ˊ]쫦Wf=9CzFg"`I¸`ǢK;xh~=A{ $܄!ҌPΊ ?sB(zn@UMjʋnKOEߕ}flԐ۶^ضCY\ͧU}kkT\%..c,+ơ qV4)C(+Z-*}Eח[B8'21݃o㛼Xg_F)6}Y~E  X6uߖ](.{84G}@FlfhlMl}[JLNx颫n7˲׏gwHmFN Zm&P9FC)W`2ҝ_N*scQ.,tj {uV},a$blM ĝjqV87=.p)fWOe5*aYFi <6q\&}Xnxoxgew-nWl_ ;<7YV^>A-p rTٙ֔p ߵuUߦ7&(6΋wZ4v߻4^p( n_0MTaIM{|K%&rq X6+?R;W\{2S1mp #MD*_/?uT#|K!&,kߡv"tdԢ<\ޡw}늺ICq} -a7E G膟`%z{ .ٹ) R@QpXplv :1Ќ-\&HΗ Gv}͉.۝+YO`:L4lﺸV$'_Y~ߑjp,.Ɨݮ9ٗhepNZ9|XU77}`^˵k Kܻ`²۔lrP3F {;me/ϵ$S"ڕSŦ7+MlFw^f M,@~ b:0(O.AEu[|x[ \:}=ǶJCc928&$])LMl|QVhlj#0ÒqT#s-yON9ghxRb?&&sC,ߛPS캺򯏟_ӏDiS\0 i72u*9ڟqcQ+gLꪊ"87<#1fмCM-˘[Lj5) -@HyqA{_C2eJ 4}u_R4)8ю]U Dd\si f%AxN]4!^mE ]< Tզ(K3;4+@m>?V&41]p,ȴ#F)WsZ?m[ ؄I6ղmeüO]fMp:ʶ)z5VOsGpіP` `7?eӀ [,B= #dRg˪Q-qa?Go1d0aC<"2^e݄@1^ub"Ko.JD=ZR dX}+o%X:KsDuJuK'e2]ﯜ)ؿsً4^wv_g0L7E6{F[7t@3)'2.4i0=% *Rŝ_oovCVQgA0wiZ`J̩?|QJ"\]j\~PZLn43.&hcVÔ~71D hKň3E5duS`6=\Ps!}nV&XL2N d]]eY[p0RN;FD lw (sXZ&wSM #M̙I7XqJS% ȵ 7W2n\ubD3|_;q(frғ7)(-뙷p>|xvz.0P·x@m Qb_, 5!Ԙ nٜd9c4ڴwZhrMB̼V,U >N 6ޯĮS.9islQJڛ7f󪺭36iev¤.H*jL!"E1tn e4^`!>ےprҬ*w_weC-@pCuI5쏖,Tahy)a<f_Bb\U>+/H!YN_LVDo[?DLٔ9F4UCՔcH.Sp*[D8`Cu0U~黮l+Q6 ;icS>Tޖ7^~L @5/pL4޷sB:d~69#Oj1Bl*뀴@YuOeizTO)>ccQ $sK u t (_fF^!%nbCY0Kma!QTh %P=0,:"sWj3e], X@qr`KV-,Qi4KBcDGːأ.$1>WsD8xls}HRjgQ, C]5(}X~7mWfDBqΤ9p!\J"غܪ`U2߻T: oƺY9OM}*X>|# &,E& &a\8Bxn*{:Zc}aE*>:/\; ],ǟj3Ml4.LQwIA37D4:hr{0i]&0Dnf[`#i `qF9|o"6 f}u[Ct.0z. ZOj;}\ õ8߷eM}~PvBxƾzY'Nk̔{(\:c0s"EI_?`yPw;DD,"~[-6eY`F͙L0eiU~(8X @Dm)1:K8asU,R(5H0nMv$sOtܧna J (:h{G,27grEN7GYNQ+5zޭ~Tm<(tVKfLVhnͦL&D׾/I4ϏT] 3"U;eeS#vplmtmq먗Xc4'J!t\؄C>"shpzm8[ "Ӏ/8p|"J>X"p"cu!ۦohV Q|,@䬊@~amx H$%%!1r&~|d_V()}pM-5#c=^tOG;^h";WF[MwS"|m-Ś`XSvdžM/'ZBC#ʹH>ph,t.^/Ig 1`zلJB9bf :LGEa^VyPH&'DF 8V N JpA0_N?T_2WpM3m":ze8?6m_LD>Cű]^-;薾( ;R+x%X==/2AĻeۦUF[숢ļ7//UOCS(gBmWmv Pqخo` %O0#Og=56>nRǩwu8Uo.Z#  ~L9ѐZUSy3\Aò.eǯ%҅&BC|bqo:=-a}JT0getBەj*єePI4* ͓\/5`x?J[8avL\ŽTwO0W1O*LhτʔpHU wnz(MF!0){]wUgxMYܕj.P %DϏ~/JIXvSF859m] BiI:NP94#N™{ӝ9a%ڜٙ˩ۙiř0{.g.ssڧLit;'B*[k,Wkp~~PlÍPocv#ix'WhUdtD#F_MlRDiT"Q 5MC{-873n3TEU0dsz۶ڤ3[ݶǜ{=n}JƦ}fI?>(iWܪ3!+,T=ӽ:n$Ën3D5#j,C۶6O/uڈ.Ƴf7J3W|蛘z>P|oP*Dar\]}p}YvË"&<~pĘ4 q]x4pn"Urmfzj+ ҭ`"e7Q@Ğ{c՗m|k7? u1  LBe>)f2}Kzi7AO3T~8䝜_ J'+ ׽%MZ ݤW݉b顎vp3\^xeʄU{}pm^>|yq4'L `o{g 'D.L$菭/f&(scմxobQtHX Nj9H_WW ݔ}[rNl:3'#9Ą9h`',EŸHOpbt;?PNWPߵMFyL&%Qvo Q!)$r3i9Txr6*HhNAk_߆^D+3 7D[s#UMhry>)# c'UQsIOU}ӎp9%dNNdV^QZq(!tNUW=^Nꝏ孯dDXAFc_=L譺(ɩva)^$$l-vo -&e_8A)¦~ߝ`ܛ, EdOrܭp <'bPpZRJiP>V~|Qœ>Mz=EHN;0C?%F9Q\dvͤh'ıC'9*)>se$ ̣2Ɔ26YCuW/&$"/ohM|w R_ M{\U1yCAPn ps go/ru k[r?OXz!endstream endobj 282 0 obj << /Filter /FlateDecode /Length 8234 >> stream x}[sFFˆݞn\r8 0E4J3}HDjC" ۹w~Qf ϴ3h>RjbLF$5gnv71`( ČKň3aq$q%ZQ%#!T6^_p qSħ?]fFP:;2ۋ_/,[nf߼Nؙ%Nk9{wsGʹ FK;3\#g6Wٿ+Bݮw*ڮɷ3kv?߽>$? doFŸIqB|=(/!ZقQ⨛[]d.|VMM0GV-v"!b Ef˺jWV8Dz]ت˻o,ʪ|,6uWw˷&1 fF[bSq-UhR͇ aF(ThLIaxY=_pg7Y|! )_e2wuMGz(}/eSn;2_Hap~cÀLd7Å#ڪY[t-̯}!a鮆g0vǴ.c"kmSvz5.[5}$ SZ"M/wD wD~]/죘sB,)ws 0%P3-5L?_?]T2Y qUz6[]~L E$5tLKr-\v&i99QbWD:h|lf :Hl$zbLYl$Dn6'LDku2bDn!4\B2?lF X"I[6E^ R=!nƳSG889¨NنFr[9' "UF9m{U*on_S{nj0eu{#/ynVRV_s(K2K܀T?ć;U*S<8kҼL<Lcvg^spS{a҉X8K,fP?$$)4]UW{& &rX#245E}ͷۦ6eYJ!0j[RG\mEeLGg z ;qDYU;Px;0-3 wfN3D*/R갬V2ӤpQmcYÜkt:ޯHsEɫҲ>mK SAU^}QT}0rNr}O~_U.fy;/Ҝ0u,\CL;>Ԥ"ea͛9c d49m!#YьOi 1Ib83Uro[kY-׻Uqd 7bD0a_Z/jٕuxr7y(Z|BܰDwNŻ7su}+?lH sc.M#cfDp`5W/sˉrMs5' ~sKl$}dL%L Fϵ8%\O;Q#L HgRzWqf^,;VmfRu%w֊%Q*܌w/ĉA>@֝X %i3E0FǑso41rZ:p(eK4E^~ n>;A Nʶ+ 2gyl)!D7rW{R;(@;cYF`qj<;ׇ(͈4?/A${W1{;pUmfZ}G4FZl:NI@<29Ы:uq>AQF$)U{f ]%7)Pk*lyӤ9 =60ꋶd{~` 5m夐X /m_JUyvp>.7NeF`xW|¹۰S@,;2WmGY_WC¹d |ܭeY4Ǩ2<KgP\C zslay;mLW 3 Qm -_hzu5g[/)^ohWP DG&F٣IKg٣ ٣Iޣ i:{thh~:/;j mJuvh4R]0qث(9?xvK ||%IVҒ`+>/9WdɃCs-.F< bOX4-j6xkv:RǀL&t.HcStdMq?N 8Q,jUB/]^6p&3e&] lk<ܐy KH+ o͢G! +od4@z84D`)"ې1G%~g0^^[z?+d f&L1Zփ5tH /">r8r`)b=n@+.IC Gw(eYSU٪7XuLQ7E^e? 0uL<.`u~ppaEaz y C߽w'K39cB%\)=E!xg rՒBlKm2,i]1_,,`*]]@O+=m+;&xvm':pnbP)dBP%FΓc Mh!V ⤛m.t(|qdHb, KZ`nfp/ 9SqәVL- =HT+,㬰٧\\*Qc,Pᣆ*/8#omn3UhwUUVK(mѿ@ʼn 2+"ϟ^&sQr'FNRBw{ibl–">_awp=|}e)z6uc刀z0D]_vbP,L؇Fdo7Ρm럖KENd !vazGQhG80%p+xjfQc5eYڙe} f [O _!TM57\/Zf?]<{kb&SF-S(›^Mg[^RYO82ܑC9eдL/z;iH.3pΆFDC[L׶+վs$<[^q{? @b춎vp4>bkikQ[%eqW8E%Ϥꇠ7_z}Y)%aNM1{)1Cq`ŷ/z{ ].?L'a)BOqާy xXb @wwOh ʏԮp̛|mxV4M ^}[DH5m veQ ;?|$9%Fq?vs삗+qro'5N .{M!bf[B-dxlUyTXb\UwSY(GlDM,A~Y/kvn.( !d-',FSWxi]ߖ˨lD54~6`$Zw٘)|`*fr5H xdwZMg() Q)l33\ɤ:)(s,F;ja,6v5DD*I>l wj=}+Xq,lyb}e8FZbi- % ϒ2Nqph:=l_ymuJ- 4'ܩ1],_.֛S\0DA>d#-xaծᆸУ$ 5Ȃmv[,*ǰKARDwn5ǩo4]x;)+s&B&8r? &eQs+P>ݶX--ͺDXzb7uWn|xW2{w|iMu/?zQR47D zB{11_+D}`*;1S1 _( kԉv;\75.NMH Ğ&{lE=`"x`^[>]˅:N`oddm8ޗfMóu[~fq'v qD_/3SA>U]:Bm|8F@/Euv$m;CΔ*[[ h(A=N HHڥO񔕋S'=< wP$TUBIjDJ cu(~%IuRtW@z)rFϡ̒Kc. -%I']ѲE>w$8#ƌH?QziB3+D,>up\L !ㅇ]o_}M3AL F Jp%D ^(ș%AϏsOc'&<2k} ^11)5Z>j#26epB,S5~zQAuվ?Ty҂T"f!{U>]16.eXp&U'TR%sT6^K"["5l3M OQ^%d}ݻ(m"GY\C[FyP=s wYS1-JD.m:<8:5ܖ0$D'?t6X(lpNn7RSߪhո1*VGTKE@פPFYᥢCsi@K`@artD 8Fēn_OY"o%Ba,N|!11V~>n&Ի*-N3qzz9ENpe/SŠZLJ|f-S\B>dqyW-,jm_pl* {^@ s9N:d]^7ypTA1>k-1m8>ПAJv:z}d[R񴉫~y|<4*%Z֑I3F QQ>Ny+Hp>3&(NU`QNzՙXXЕ/^=x F PSCj 0еϲbob5½abcXBm)2F32Hp e@G.@ΞTjR',a8E=1"WMpZ˟x07ĉ an%c[3h u0`=O# `Y_~OuD~'p @wٛ|!x#&ΣgVE;|hK|ٗX+&xaT+w8Yw f.h+N lU62`"g1{hlr7%Cܿ^PE%pM=gweGoeQ-}IiU$j9Xhه/7OTu|C8Og\|p\˗lvW#֣9x.r{SU̶u'WIa~,?X_kIK1gC1*GEV4w1֖'uPFƓ <MڲgLAYΥy.x+,b pXXTy#ymasVE[V=7ܕ| {Û0!aQL0͂T8CO wI4O#7NOGad)(\#xtuJH*%˛ZUBQ`bYf鿃 v /dQ4-'Rp:l*~lR8OLL9LJ jr8-/}Gp@+6i>du} JFXӾO)'>Wv1 p :i 2~/"F&@a[FAy:`H™>sr,40:yC>\&VfT֭ H|`MC"Bn<*`r*8aCL?F*|`O9rrR˳3-Fp̷"*)(*8cx$ӧ;Ɲ}WS@p0a6g#wEUn5!f%3"3_ / 2 5$9g ^ enSy !,Qﺶ5ъ2'|]|F&iźDM>󊢁nU0C)x̗VEvpep/K%ZhhtǍq$[! \~p̅C03>ԏ1ٟ 1@$u] /8hF7ݷ,a\54aCBF#6γAFT9^_FJxQHt:4aXOC 'N9sOsF ]"pǍE:|>/p> F=8U14*9s`eU|_+b[c?v&:*;q.ay;IL`=`}oXo6cDgCNdU]-c"*^YSŰ?rh&{cy?eb"9C}ē7&G ]Un!eb˙Y+a"LjU}V.]W_|o1pĆq y?1_> stream xCharterBT-BoldItalicG$t  pAYZIb":;*CP}OG<9S[kP<s:|NZQ%'Kދһ 3[ʅgS{{HZGdޕ̔~Z˅{M6ɑЋz 3iFiGƈY{XDe{}Hǎһw3[̇}&||IZJ͏ =n|ˋӦ˰Q>\Vt\NS_?ehαçc?)9>qrv~}C > /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 285 /ID [] >> stream xcb&F~0 $8J[?_&}#7×Ϡm##X*PV> ki{n"3AJ DʇHF&Fd"E d "7F ] A%;ش:) vOUVm fse`6؝*@lrP6-t# endstream endobj startxref 285006 %%EOF Rcpp/vignettes/pdf/Rcpp-jss-2011.pdf0000644000176200001440000044537014711515066016537 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4925 /Filter /FlateDecode /N 89 /First 761 >> stream x\[s7~?6nܱ*[ĎزsqR[[#r$1Hff;ןjë(S$on` h `UY@6@1j4>h9'RHq XȂJ9( 6 Y5Q (oAi R  < j$h9 @+ )"R""hD6Z|Th" )4RF!0czF) 0c4i#`E0H`Hs+[2 -Xd 2VExZ ,)JS% 6Y YC) ǽcgsrjpȣmDBt' Et|>@t |M>gj߳\)":庺JվCM]1O/S2I# ˒ogx?Y4 z?mmg4:)G\#f ~A7?O|׈NcS$ :Su#=v<y4~Wtx9Cx~>mvЌf Ԃz_|;r#$1*VK ÀGߩq,kwj=%`z9巣a;yS%5%%-ϱKrj2b."T*צT~su(UAɴczU_U)ZaIR8Š*B*,B}IWOeɣz8O?h  WUSOvz o:4ƽ /S]U3;'@?0<|P*LW ȧt8i4y4iGFMW 7wIQe@nyX,, 1]類LOaw}H-JxI_ҝ:.> :!X%KY/rcr<|+> ZS6h@|Ǫ\="oy.tܥ_G< y(ky,ȷgY9CYSy.G79r"r&gu3l|FO/ArgqXquֲxSq`C?k \]uQL^tx4x49׀ Fm;䛮ȺeX*sic }NvM]4{nA=~g<<:xl]QCoC ]5so +mb+WXH !.Q(uid0IO4j;Z4C;?ҘyfMϴ#yP:su'83z0.C#Ȓ"˹"gedϟ.U|1Wb;7Xl+J5 _Ba hSx۟͆Vݺ(r$6(5bژԮW7`, d텥mxFs4nvV>ճ&Na]t¤^GyTkoIoyJHBPs'\?3byx`-_:T[qjNzWZ+:؎#\~f;Yj8xfZҊvCl ۘW^gSlQi[,*Ɔ+,@[`W r yo_uxt4LolP.J``٠{_ʁKx=7cwKjq׬JoW[ݸŬnj2Uz.Nȓ)K: ŧu+p:WBƬK3ͦ]ns׍XaݴiS_7RqV7pyb'ͰnJ'A|n9Sbw+l r<߀|!PJA?8#";X\h{Oq mʄrMK˅n g-ae-A[] {?=E}mo\tLtܻ̽̽̽˥\+\˥˥\ϥlᤄSctn!|Zw5+~9cҶJ| cC߽>fz?Zh_RN_ c'x:Fq1zL [g )^ @ۍd7=p{dHS%pػ+TPSъ4` 0Ev"hdDd"0(Jh?/m8yuOG὿ rHYq۴G(TsU L0l1ق7Fp e誕nJj+ZX/,/[8 ܗl*j N6޷( k4X"jySJ88wz hJbF9K% ]wB(6PPV*E o9>+qGa-͉ӨDOܕ A$p+qF6Ή3! 27$Q7 8~1ϐ[_wݬ߿'i͚L/fԍ&gd6 HJA`H Q/tQ]yg}'j-CL39WgfSO"CN( *Zm7٨;0=j.*O!7qh$aн t2]$G[˦E\2$"ާ.AQENhp(/46|&N.OOTKy2]ɦnˮ7lt磶 =Fj?1(&V-\)Q kn{99+.&("\*sqWF<6g\V6d4pW h_M2B '>γFM CE8EFsNӁ&ո伻y6+no> stream GPL Ghostscript 10.03.1 R, C++, foreign function interface, .Call 2024-09-12T11:16:14+02:00 2024-09-12T11:16:14+02:00 LaTeX with hyperref Rcpp: Seamless R and C++ IntegrationDirk Eddelbuettel, Romain François endstream endobj 92 0 obj << /Type /ObjStm /Length 3531 /Filter /FlateDecode /N 89 /First 814 >> stream x[r}WcR)LSʒlEHm.=bi`T^A\,{=۷9=݌DNA@!:!B`1BpP)@1F@EҀ,2. /v@k@(_ @ @8@$ШmTD)Ƃ< :Бxà E&ɏ z$) Oi(@2`1:@`%@r`-? J~[]! rZfl W;ߤ_KμfM* XR)rI)o[*x*~V>b}<=n]C- { GaP)yF+rsH=jg򁷏GGѽ٦AT=0 y߁~ Z EpS8X\gJy$2Jt8[cj,;NoN;4?z˜a-0W!m1m, ADOTwV|b7eTs~DY֨iu+`M e,uVvDhCu4[i ;͹h TVuP<`V9i4 3Azz)B `0.c@O`{BAF5vV\&ם =xP85P<1xZ#ɸwMGʝPj&*szQ X_Zm9+SZ9xʔqlJDv 6d ݶQ ه`^G \M_4)2Q`T N_ImtBn\[ՕX0c a\((fn3gQ 2ĸ~KCopl?8UmS݁6Tjv1Վ v1EGYղ1b=*cT}j@3?ADާᴙ|\'y]k[1`cBY?}c3k0 ^tCЧvu V9RvjLD{HV O^A`w%y~ PB Q Aoo_6璏g ]遳H"zӂD"FPʀ^Ni,H%<ϋ 9+Wq'lA 0 Zk˛ cy K yy[m6y+}~qZ~t҂+W VpV}60TZ~{㠼f6 kf;=޽ho<[3b;i:i=L.ݬ"xS Ts)fN$1C(9`ofގKD- Ȕo~|qyvatp$'õGZ ^~8\RSL乜RS&9z7Vűܛޔ-6[7CN !*L'Cxa=BsW='A(D#t~0h+Jf-9P byz˩`/ͼXmJb-*]UH9SW{}Vp8>JZ.6m~MUUUxڋ3"V@endstream endobj 182 0 obj << /Type /ObjStm /Length 2930 /Filter /FlateDecode /N 89 /First 823 >> stream x͛YoGS.Ww]}]J9 ȴ̍L $8:8!P3 g~]US"T8P1Jd%P@ F I &P`" LD$Uu pT+p#H, 5Gq*b )6f)%~(R!X@EPAE-1V$`1'cT?9,9/bLR$bfĹ3C2&`HRHUd, r6$C\ߝ+K~w!()!J@Q([*5zK%Ae#`P[*UBMnUP[U ju eHEvFlT7PLҘ^@=Dbd`0"?HT~3 *~eK@T71W{JNp 81b$CU<8H29)e\S" *xs@JJ߾£x2-"(ZlZM6wҶo <|\k, O>!UC %,տj0簸C8&8dN* / Y{Pi/}7HmsL ξN/߾LrOa8;8oၧ tp2dҍx.fq`t:~z9037t‹l64h>/Mw]lb3H.ӜQ-RZNJTs+k+84TygX]~J07p_6"6 ^©OKi((r`(/%cq1Tt~JEr%bDW 7]wbb۽QJYpհrgpL1z`Sb$ bIRhrlbu%[)X]PP ren;Y'n!%rSn A hɘ 拱2Xhe\FX]^eq'o&˳YpJb{' Uep|Ɗ?moԒXܥK >w2UYzEP/VO,WQb 棺b܎@uEg9x}ꛃ/8|˃RK2R ,l煒ەPn0|xa>90]+0`ծ{I59'Y.T^P8qt~z?wJpU'%+pRMNk:M׏.TuR$$rKc{d068gT67+C.⋡ɇ;|me/B6_Sŷ|닉Rw !Vh> %51?_F2hvoܶ"Z Qx,3/÷0cxp'> 0 q|އ(7NÇ0p\;?/~p6&o4lat<9|[=|  {Fͭk_.'5΋}7U~o ;՞?vrU‚K9赈9 ~b0vK˾M%O=e9N c)`bo &5c^)gLQvw%.ͅ's+%lּsC//r>;$Tgd;\Tꝵ..xU;IHZ UE}z8 Sk8;>R"V`dis RSX9vlӦNMIo"kk9V> D&|pL`r'Ʃ}mZb׭HȭkML5{Esu'GK65T]]}5IDа侧U0党ד* zL;Z FrUTWDbF#ݚm+LEP\1\##Sr +,XU0W&o{+ؖu[mʤKr̄g̵`mqU>_eepW8PTW gbݷlhYA[w),ͳuWJgZ GB:Ynd \WrM @tzBcF/ç(XH+ٮO$"&π:8|pUp^ip;Iת $y4Q`IZ꺊/m.ݻ̕0"&%>^ l yfxO%eg)E?e_l{_V񡫯lV|?!2BMTQ'U׳dѱewV|0['hczI 8f6vRT)W/}NZl=g!Wp}&H1endstream endobj 272 0 obj << /Filter /FlateDecode /Length 5472 >> stream x\[ܶr~T͛1~qUN)qNΑTTY2^ўY\oH҃f8h(?0>_߯8>=χ}ys%R:*L.F`{uxy<>62휖=g{W:ā^\L;61=nGZs\xM.,C_zwTk&*֑yop[8+Hg|k+QƥLs%YOۻk-`^#ZC5Z0ߺc#̐nnnOnΨg,e\C%ʋm8/v5yҵFJAtጼr z/$-WrGi殸cTY{(y9ҟzȏG(cZGgGnk^lPlK0jX~z(,%٦Ǯ˫p7^I;`TJ |=]-z#LZz `ZpP-qi2Pi*#_ [.渴d+53'ΩsaϳeX|aZ&^geƑ;NWٷl2=txL82 n j}68Le)q7lTh4uN( $5lSAJ7TIfs8Imι1f;jM׆C?ԃ$eQXϭ9l%ސ׋B RZ͞L" lvy7K ÅQL0>96 9Kš1l6<9SI8B4,jhv!I i=f+S`#NTCs#c.xl4UdTCW0FɷAij|,w5< 0{N;J8RrYS l[ᶻFxXj^;Mma~o:`^ro:&c(*]2r{Y3 Bo._mO͝; :i)n/e2sE46F9~$`lIoHNMVSP>Z[4Zih74)"vhQsj>shh9||p >%W#,ic$'d12HJnSyBڏUF0,Bcnd|iEL}E$8C+I4QҏN#}Qc&J ?mO$ҹ.6P:|z, ~\ D=]Q|* ݪֺH%>6 GSVNKDjswl6kh٬Mj }s@ftD͗sVZ)j4ܜ&&YIEmZ a PZ%_'$a%"IZ: H62R-s9%Z3#lIYnv^0|ha3sI$cކE˖JB JSU h47*OE].M|DXł*t&:g/N}(u B/CP܃d\v͞ T$JGcx4a?#uXC!vA`vzg3zOvޖIx|X_PB?'af+BR%?]=- M}%4jY};/*2 Λ" &TS}:˶:>pH}=hYF,^-u`{Ja1fWsk^[5̒LY7gk@tmf3pVb ]Ҙ7 s AeٺOL%|=禑s?eޥCwic8bQ ($"9ݮζg>5QDJ.Fdb3deF,똋n@rPVu- 2f4w3Db{>+FN`&#]D` 9&K,zS:Ѱ;^;l GD_}x~/; DϦ Ɏq 9׻|.N6B5DŽS*<>+ mU+|J43nE+z>SOBս>_@)VJQc#0Y`Nu8Ly5Dy.æ@\\P<9%ElQ-'*2¾?.@$rLtgs8- 9!RssGxV8+}@uouנ0)̌DۃMh $LBjW%e~ZsGBFVP(4B3T-kiݼ37&4L9jqCnf׮eksEF*ڽVN]GZE0y uݏP=X@&tyAN7UuO8 ku(%v2{BC)MB\*]銓CUl?wձKzTW n`9ᅑPu2A@48Dz:V[췝љU~&- F1|GVm܁d5$%C<^@/7@-*=^fEk82F!e}yK`WR!PluN*BC_V+7!QRxG;DjYĬ|&%%~6?.+?t"Y[B"h+7.a0DJ\W;n JZ4 Qx*# Pʭ(eil:!caJUQl?`t*c }[p`ǔ*ser?0tչ.lĥ./nޟpٲ˿kN)C`QB4Y2f+@Ulg<[pq;Uytq#CFsITev6as˃Ø7*Q~Fyf @^q,}#OpN@36 3B.<îGd~zyھ dO3h p%Ic>mV.1f威kS3frE6xSnQr;w73Pلө`u+W=ڼ.^x`)y? Mږ^\v6]ZقF0UJ %niNMA/Wf˿P٧˾Sc ` Wf4T0`^Řõ)^:/> ZLz8 іzB^݆B &m[Qav6j}ѱ >% oje5vE?|y )_" /<r1L"}LˮY+6&?6t9I :UJ65S=6 tK`FΡg~[eQalK]DvtuRxF2a]N"+ e0&͋@-S\_ [m|4CSb$n>+joi;/J$^)v 5GWal0j R`x56Em"(9^Oh<ڥr 8M kC.K9֤j iIS69:/@>겋ws?cHUgO(X6\>T(i_Hǿw&`H  hum%}->o %DEn'w߾mAL۷_Em+gva^endstream endobj 273 0 obj << /Filter /FlateDecode /Length 6252 >> stream x]ےGr}}qK~ZK]͎!:lP p(̪1@w]2Of,\]ۋ_/$~\Vĕ<(WWo.+r[ϣS_.<7z\ >k/E̟m4!__Q,WzcBh7h0:Y Vʳf){:ֹUUj57feX }m1֕J*[k_yn }/n*pgG2]slwi=ҝ(snіRW-T=7)Cdwr: +]컎.`~hؙ5D*hh#ǥ$,>mûDSSz8NG70+Ns#~q'#iۿiVvlؒރmseGH>O6&oS)?'4Xn< 9ƈcܚkc1cl?!%Ѳa PnLO"0Z+&/|1İ<)YCӷj {rT c׾ZqvڲO<ХHhoxڅ*ʓ,C7om(,}덑WlKJLHq'ÇM{{i{qk!cvy({6Uy8)k4;mC E-cp4(bMiCzFY ~? S߮$[] /NβG""8[$΋*H7va,{4ұyH63XNy#uJѵIahXX-eI $&|Ai^2Ԩ]]tИ]uEax^ Q bg0cRR}N8pd[+ @9j{ӳ6$Jc3*cM\{Yo7덖WvA[8ׄe:U?]6e?7&`%Esу`* b~mC'ѹP__^빆#ۿ \Ĭu\qvQtaN>,:C{Km <#azGgKeiDbE#r0}4sj9/A3)P[`WRRpR.C6_rbn8$!RktEOzւrD!d}WKꇋ.8isU)&+?:ÑVu1.`8F a_}Lj_) zTev+tV@°?wJbm]aqPDݢӂI14p f4TyscSw9O̚[.-w8B c]w#tvݍQ\gNǕu{gq߀|[NM-Zy}R[ _ ue%W.lj xxzIhwUra40hSsK1D$2a!]Wq b'v|xܲ}(I>|6.ߔJH!̗bE` 8sW*.{|'ЈvDž RZń~8H*Hؓqݮ2%I# -[ TC4;FVPN:cH$ykt57Lo& P%I42ص(e4Bj[,¼Q.='>y\Wk#͎D \6.`- hT&/w{2؎_!,嗜2ܤ*^G@[|W?x,.XàMcL.)<yb㽑p!Q4 ,u* .1~ nbdcKAl,E7UY) 0Lw}-[|k8_ܔHR 9?ŢDޛ!uW٧J`M`|ݍ@عO >O !eVlV^B/q?"]Ӈ?HtKB~aDj *LӉqa|g0-5;k U`҃ 0uPp&IEʼn HcX#a rx*N/冉Ş +8dUywٶSp!fgi؏8SrCNy6wʼΡ-U,h шM Q&G> Bmlvb7ttǦdq6+ x4Z bK]Rcڜ @H u ̊IDԶ'b_1q v74~iE3KN+Wq09dMRoTc)J͒hSVK4T8%M= $ݝr$D #GjQL Pag!L\S)ITĢ9EL97;7yE4ϱ`jAL\xI77` Ud@8EA,$5uL\aߧ %'itg)E1İhzd`%P$gLNeKz_GQ"-}8i7աC0I& ];nmud\ rԴNp" @PW,*`JEHpy߿wSܫlQ{"*Q/d6t2tՉ=\v5p>OY-n_FEe>GBwyL*o,Tix{iU5΍ݲFJb͋3ZMUcgo" 7KtgzX^= UwpDr)t$g(D0_=7"glƶ31>6[`W&}QvB_[\17V 2@fzcȴ=ynb CCK l_x ʚs~AZہ*ӻ.vU]LcyCNM4ΰ2 _(ӻ"hGG&EKL)F (_|_u駠F GhL%*ueK&doaYJ>GC j MdWWy Vh_G/t].⫔$Z{'+3y)k&4_A1u" $NJ_| 2aRO/hNNNa Q iWLEs37Ya{HM0 Wz0d$q\Yӛp${R ^~h#AGCBa^8I$+?֗=/o!ćcӣorpF|5 -y;de3YirD-RJOe@h_V<{n'w}RmR@ڢrW;hNuƖGBz j3nJ)ST9I?-P5r9"UN+THi7a;w 3r':DtX?+W9b~I2 %Cv4kU!L;_NT5뫔jD0+$S֬$:aՄIwR{pq(4 W/H~ZtaY<\6'Y+e-EKخy?mo3'DOmz՟apf!F<{`1B͖C?PZJ5P؆)*QDNF3x]ƾ[w Α,@C Bn+/,3P$ãᲿ t۹Yш(YJŵkO54H9/ܬx0x&N{1ysC|'ɀ Munix;h&hlJ;HaO]Y>QC3ޢÕhjg+G2'EwEӍLsKr9|b9e ~r"ӟoo2<$]H][ F< ;l۷{EmNs̏ Kɱendstream endobj 274 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3613 >> stream x}WiTWڮ"N'KĘ7QPEq7Ң",۴"lB#q QАI$34IL&o1Ӡٜ3֩[(K J&9,^5#0|nöƘWZl`cy|kcs۞(3q~ĆQ1qK/Kޖ"geȪw 2\;ʇHVSkZjZ@SnFʃR'5zZB͢RjM-l([j%,8,"bP)oHW|E NzI`ٙlUk/###ȷF)m^h.ۇج@΢=Q Ő~EVm>AY$dT6BXZPUچrF"qVUFW`6F-KDLr*S+H]6Ҏgiq3c?&r +"ݷ4GVE"3V!.@+FyrK͠Ar$龸Y? 'n8i}*q )VhdO!4(>3 \U,z+Njc2} b4* mpkD&!]0z4'è q-4֌DF<(ڡ=:Ġc<tuS.>'_e]xLnji2Qt o%= Rt=aABxbO([p׻^[/Sa(s r66T/'l Ӊ=I 88&|1:"Y'x$CMvhȽ&X]XmM:)YhV!CZȆDv`oimhSTށ[n$+ξXI翚[rPt,#p{t|%ΧwՓy>I gߔX_Te2]4kIJgMk^+&Tp11lGsp^}U >0ðF!H59BʾȽϊHti)5/Y f}R#ďS:C"2& * Bؽkn)WrFĵd=$B58r̋L/LV^g-I{p.|g3otMSMBW\nmT@HN'W'OTc; zOZ9(+k^Q%KqLdaP=蝬f>hv3ru0A$ʤBi3B<*D 34I5PYNepH/f?3Jߚ`vF2l+ʉop}L&S3ʎS3Կ,6Mp\PsDԦjEh)m)75׶C#Suќ#˚q( G{??_'y8|Գn~),05s=1(ON.H'Zx}yy8;ԗvn얖vM֚O $tÑ痢 eo'v i -lТeE hm#T́ d0 O=q$,mƋCC3ٝC׻FEp#ٿ"ɩ:!o:/ B/ܗ8Qtf+&{aIJ7 -JpQE9 k5n ?,}+y ܨ9ժv8 v4rA J>2co)inۧat |d buʝ]=EFFl"fm3ׯ}פAfr~N91&Ԑs>&SgtհOkzyۃ  3+C!aCyE`DEJo`!.6\mEg0,~d}+n K8(rjA\nR_bm=PVUd]"Zyut$w ^4+\:Ht8!**yDF-E,}6١2e)8g7&z 68.GU5kf5ѣ6_i'thv'QKAq&(4bV^0dP  ?Ui\:(f[ `s%]ξ_e߰6 E?IZ'`b@r"]EwS75i0 |ZV$c Cb"g_r)eDZA\p!}y 5°_<|G I5;lX/U[%jyvucW -Di)2 "] eIzدRRFg@xC#ԗ XLY46ΐu 9;BZl ٲ%CPjJ$bWB2B\iclإ/ܥ/**9`cCQq9endstream endobj 275 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5510 >> stream xXy\֞Q3ZqiZ{Eq[ENr]@MDE .-jݗ{[^{[Զ~lrw?~Lss9GFY[Q2CG1-$pk@jo9n5ZHyR."ʕDyQ%Rj(rS+iJj:5zAͤFR;5EͦPcX j>&z .SvTOj*՛XQ#T_ȺS(eM%R-we[s߬+f*)(+7ѭL(c-֦]ctJv=赬={7ϰ)k.fOm}\86&"U 4ٽ/Q (5:if\0Х&GC3Ur B`0>'P UpuHoF&tPaqW(kPTr S9C®M"V0=QkQH|@/<ŏףLJRhYA <4t]w@?ԝJ'K^XR)uR_m1mRpo2;8G#p{ybˍ8vw>,ˎ+# *|1 #0RGg`%`'Z=Hn( c.l8›'^4$}0&@>0`0.m^'gWL5I"WP2u4ڡ`צ Dt5IRg߂2D[G%sȿ\?Edlx.+5} %qbFSv",sPS~$*| DY k~a='>A쬑&(q / n7޼f(`Ԍnpjp=`,bh. ft3k͎eXy+#M4`;),rJ0]`[H8Ƭ E/GΚ6rddK8Nd_^r%{#o~Pcı8fp vwhC4c^Yis{auvjG*cd <;=켓ڈJ8SDgM|iIK*q TN+ =MT >; 1WP88Ys/siyp!'ʘZ"6 /UV EzUw_k9@.-A@vp'Q9Gg$ۙidIJjnB #9GY;@U(g嫺 22dd}lՀShd_rT_ƕ&~@Ѵًؤ󮍮:P]Z_\=7T@ 0Wn h2f#y MoTfC@c7nĸ|LT]|g@L Τ$ 9_ZGA!F.)MMDN;tP_!B\ѝ,&dp ujؕ`够[0^p`^%߄K0ϢNķ?Q> _=%E{*[kaqU`l:Oa/ UA%oc:(;#&qQ-*n%]Z1E$}&P&.%$ĥ-pE u i\#85^6c&A9*tH`3c 舎YtBzz\,1W>qЙKLHjD1R Xʴv"ѬJfZz[ɺj`ȀAcMT9Qb:,,)Ϭ٪wW#K'òzr8 ѦuK )儼^#'[u Bmjd4t":͠mLt)eSEJ3w PH&ZJj./ޠ ,4 v;XJCj|dom#G6BJ>=.2wN*`<*$^sB6{^do{;aZ#Q͑Dpi]Ie"<bkXi^unn.:;70NėqP E'tF_8p0D;~G$ k6~f?&|q蕆k7*]DSТ0آ˻M2T6!q;D0k6X07i坖I Rÿ"E;4N0Ƒ< % NoMGkq{mA{[qZk=G$UDzk|"#xِ֞ᗼ330'l )Tð) .lo?}Eay0`4YPن¼'B /\bczjz1QdVN?˖?7,YNT)BC&p,vC*tvdKۓO+#B`$_NzҔ|P&Wg|BӪd7wҕC؝>e[6 яa7/S^ǒ֚[0^".?GdEoʥs.*IՐP457?XMKЗt9Y찲D^^Xn&'"u vOit[,bw\u`4o1D8x}1dDv`rvWV~^Erji6YQ Y.JEb_$AaV,+tn7dFAF )D2L.=.X1/̓O#q,kiqd"5HBsrZl]$l-t~EzRZJN'dBЬd˯BU? v/]_{w;%+ ҡ/M|ǎKF(sb5T(I*/ 8.o;)Rқ&-"6dz-EU+5>hK}H;SG@W\ס zWqĺGszV@ լy0 /Xt(=uPٶIQtsQs&ںw,]*nhqd,Cz&SS4Fɫ|`B\8la^3k?Dd! MX^ q&], Z'h mǠ#gt#`1Ha}l/ =ne?~4"͖93k\VD}!G|lg8{DF]@}tc ͆ >>ÇM5ܲ%te+8VQ.nuptlRot챜lv29);\Ӓ Ux$k@[a/ % @݆G-j 'm쎠Єpݑa1Ep .f*xr# j|l5Q/Fp*RHKwjSeN)QMGv3eDи̨ڍ6xՍ,%#pd؄I D/4jqNTD6o2194p'xR`5L>it@HdB" Z]Owa\gZBhE,FRȪo>=_0_ 1/9^ppuo>z2yAAik|-~[tuH}.%!ٞ {Jւ3"d\%95p9\óSG>]=qx* /*;1sT9nlݤt~gXbyܾPCDId]}up@!>#D늗!IGM?b%*G^+q vW%hxJT*(ʩ .)9u ʙ]鐚bּVޓlL7 @Gvoѐ5|#tHzn_:QM lUjS_<4_o~Gb:6-c !YG>:"#*>8tgPuabB Zϴ ɤI`6BLُQstkāNg;Lprt8r"Ѧ6R^~ܦ∯2]ư<].'0+ d~ E%as\L'aG{FȮ,؝.|hQnRL(Hd''wReoX}g#gLv[Z(VFyrOPCAw9,'N_"Byf,9|Y-7qb!^M_C (XXgs ʥ+J̟ 4YzDಎc.].ZDuqav6kmb^iLb~BfOQĞ~>W" VYmj_*qKE QC7ݷAUeFEWvgۛmP֝^bۭ:Ða0nRAiendstream endobj 276 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 8228 >> stream xyw|WȲ5CB-!` ^\0^0"[ґޫ`z%NB  lBIHs.olC oߧ?g{{s\ emEI$z;>d{s+14@{)>p^:H%>˧r'3g i06m 7.ڴcRe~aNGt9jNc?a}wA7zQ Toj5C->R~b?@9RPK2jJ VPӨ!Jj:5ZE}B fPéj5M>FSs1\j,5G}FS{eKRՉtKuT*RݨbMThEI(k*z!ȪPGo:-٧t8c˸Yfoہm-h}w;\8N;tB;g)K]tydCѠLMmI'ux}g{rRcnOE^={i{=>=l黤oa?ߖ~7g JXq/ 4:w$^6l]jDVI\~T/wg_LHkmxzEd0UAv 1$5^ ~]m ;!1]Neh7ll_Y 2Q 6lV=[.Tte .^ՑE a*vFHO}9-~k0Ƅfa lWN^鸈#oiQKJI=a2I;~qbGEADuUjRzѻ`.^MddQgJH$%dި n@^ (/ŹW$!2{M?Pz(5 *yza6(tSRj& I⌉D*!:xu骈+SXoZUw}*#iKkۤ dU"nTJhwc.K.cPo*Y9H9Jc;돫.U;&H'j]j KqZ?:Ke+haYRvߑ !_HDB: dirpuk'XW?`/j%{?P žRR'Xn̛IC{yKB^P&*Q"H13bK>ݵSa}a_B:7dk(dզ+P p DͨU#E͹3I}eue<7%' ~ۥC0RQj8һ"3|l94 'THbNL8nÆ'c(D\q,'BFR"d)͂ؽywَBzɑXOr^cG,+uoڄ6Gt:Q 0'(WBd[n?. P` v>R~HFq')! RdqD6 ej& UPiLMm,T-GȚM$^ zSnNbNpپ"S; Ian8L~w [#p.PD6}eߢגN9å#,Hp5-w0T(!K( iQe.>%az $]H{OYEfޒgop`Tj`~ր4|[uЕ\EfL6 9{鋁Az_l_I;y䅾ͼ2A r&ZW &WޠCk~JVV5̊ʳ0/_<+%%#3qd.zUv.L`!-WSڤ9W)? 8z)]-Knf؛'N;:@D&f\F:K=B=e2jqrl{K[HHO8޲dS׽AGM7R1 G͑7MiqoNpB!R*$ }<h53 bu$MAB IZ(xH~j6* >)ƄlȆ { _J̀֎hlBxh=gϮܚ3ka^ڨjZM[x)Lp?Ͱ}fm/-UӃ7ESpe~/W/_ i`ޝޛ"H\^R m\jG CPp tHҋ2`[-q<[ >-@.#*Y6$(cQB!Z"5xч!KvwEr)NDĘ3V+~!5Ij2L"Jm[Ea>ȼǼvU=%6O,h9\MCԺ׬] 3V.\ZVPTPƠVu(C֏Tmk?)`cX:PȱS]9V|.[5 iJ'ٷү1 O;BH^8 ҎVԻZOwXL(yS "bbI=9+RF#V8ĦGA{=r½ܪp;mne {V+dwiv#IWtPl߹PI)_;uz(E=uiQ]!"&*A3obϱ0LQBnnzayPXm2?%r[h`R#o( fsWW#@[ 2mZv53fPg~4ޱgj$^[[34=sV|  >kC<a7b0A.4!3䉴%n.E6֖{sfP$t`&-i;r~*y;@>\I'^gV kS, gx}f.!+͉$HR@?A(8IXwP  431ayAQk_}T ӅɥD.9/6ʇ5oC0 3b@K8Fof=8ݮ;~A^rj!/-+-ڏIa"I>C,tuQ(2VRF&ķ鬂x bZ%F ii?XG]mLF}6PmQ?VQɱSZR&S^Zf ԈA,BgLh#|y, YG`H[Bfˎp\,e2R^tLB'yN_ d.QaQͦ)(pЩ73l*Nւ{iNSjg;+Cmfne ʤN-9S5M !/6Ko%ث\ E\VAaLS=NN04NJh>H-T mp9&qjoͰ8cBN61\xzfBf6ASǤa!H"PZJ9Yv~~h&צp h2[m6i6z}tg*tU5jyDZo֠K˴읱I !cyIa*iϛ ?(k!i QłQOy=C`埋 4T%k!9(Ul+RRi&C7Ew\=ɷ=ɡwHҳ>Dxռ]@{vKM3R:/7vb_< 48 lrQB>I"Rrv)(,w' jr cޤO;I YpuSkɆ0&e!YRZ*[2x\,|WpjOFľ9/wa}D% ,( "9R( HTJ:2 BC !GR aEEPa%V9Pzj نjq}ޞ=,[NJNu) dMO::&si|!(*ܺ5o%uCID?j3 uIOrQͅ@ 6KqA~1pp?|ܜLgVk4z=$2ɉY7o"Tmn%Oz )(RR/89Nd#۰&Ͱ۳ﴻ&D3"ŽU.xg!L0:>f>AYllbD Cxږ|9R8$ XIBVbYB`^Hc@rN!/JN Ra~<36]>5! ̜ {959RC%_DX,/ݼ=42F:1$U~u*KyԄɤ{ 67*̒;vG*8U9J5?Ms0e猄I!LI{WCqxoMf|L-y,<3pӎbka2g 5P }-u=p.c7o(g2Ep2M6z): v-{Dx(puϼߞ?س/G*%xǯ7!d/pgJElð)*kwix8Ϗל='-GZt΁@D@ˮ }b۟[$8!Pqx=0TntiJ ;j"@uF /\3ؕC%xxq;AVE/٦M6^X8Ztc\GBf=y9P+i +h'e!fS! cQp5rl7V9Eltp2Śn)xۆB64ve,`X+֤.3%51"pI5R̼QI `\+`#t\ LE6a)S&>[ed#rc[si Z#OrpqY.=}N('#%3SEG͜yl.ךzm.]txmّ֠? Wr%4`#%uMfn+*b۞^{v3Fğ!3= V$\> ?QA~s`9R"ܻ^*BxBNetىL̃Xd Y)7 tk2rATWk}NNOښsoy솋"3o4W{pM [ qYS!%ɝe,ŇQ{X,PVV1gW5B=p': 7[eFX6/0=xwnh_5#xKf{g}^weӸ&aʲ csvTv>S6w[/X!v|`>;&r4ˑKVu\9t>VΓ&Q,hM+s#c:rhS5|8^kBx l;3 C PYIst}/ 8-_65v|&pLcZ*¤9qdWZb33do;yW N<,c[`LB|[1sTY fq y韛׮j@8rT S zEx}ffd28ԨII7 EyӏqMrB-,tv6N?.>vġ'o 2受xt̚^7fo:._ɁV]#r0qs>vpԝ8;`I4ibF$n9&R2{'Yާ$RUqZuh 5mc1ILhAWz2 d:HZ$%d<3B)|'ř6 4C=K;/X疘,Nf0aߪ fJ-2t= %mh5m(hdЏo}~, , +͒f}o^q-A7Z% r.Zf9?`}u Y "h3%U 8`0-}2S2v\[%ۘ FRFӹ)Ljendstream endobj 277 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1702 >> stream xU{PSgƿΉQɜlqQ.2D CQ(d"-.]c*"ZjME1Dеj0 ;|C!Q5ch.S/[vH֥9`1]h"t's;!sK?-(=#S;}vp+ڌpE(sn=OZY/Ti! sſd2""nDz @q9X.́9ں3/} ew ]T8-\rR*ٻ k݈d6lrKy?L{˓%%"=^}@'^W\wE38pCa}Y}饊 ;l.6Xii!>e#=6enӮv8^Ji׉%^= P}e?z  ijgn]P-5@=HPpwADLrd"p*{Xr`EC_RљLkqZdq V-X".5@I wȒ?ʝڛ*(fdAD:lTMn;yG!\.v7C!X.hH ߽!FX_;|6>P= `ZehaZ=3"7'NY^Iwf+POi eX'(,?M}Y]MoT=rgV0cOQoJ >:;-,C3z}JC?نכשX,tx$GӢkf~ gᴤ; $vkus|eKƷ'n nWY{&"'&w l4+25v[^QT}~! KdX~åTKϻ(G>V5q'F?Jgoա*'nJ%s37A(ajlW7z q\+\8.Ums-5lQ'v~oREcc}J!-'KB_yjQɶ]õUzTbr3YW6^N\/{8;db׺Sr 8l~+k׿Lh6C-(  ghZ3Ͱyo'@BX,VXȀT!M(#7WG,˻VyjNDxn*3w,VW RIgY(4z@ NM(*'12Ա,l0&ԑ:ƈ*+iup5ƕHF"4S'əIE#\'a&aUk:g}.N ?ϖk"endstream endobj 278 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1483 >> stream x=yPww!]-F슶Y{A ^mP<:T9B r EE4A*K֣ bkZ[;o:t}|ygwRP4M~omsf.M8q UJ?ř ~ps|?5%{%̙ŗ(j2CR먥2j9@ q>M)t6З}b|n{T1ET+ jw $ zzF4%J\!)P_`$g[18qz5DbaԈ]8Nec#b`J}~twIף )@U|JVh.k):]@%W:EreE c 2QT=þm.}KUPЗ(+#Op07q][ߨ| $#hM-F-Ƣb0$ 5Mf&shغk6jnlKh k !4f 6 X}GR78 0\T/SV0F~N±诹ȮLJKY׎؂ k 2dI33里[w *-'pG݌c0-4GL`V١p.N%[܆擮s' x^ mw"#v8o[a_1)t2I$qjSgnLpΫrӏ#zp ` c#aCfB^X)Y&`K?ِ5R|npN}EbSř /?a)lU@EbHYZj/b\ 8FSbSa#pD BjXcVqf^t|7KK8 O Ur#{z afȆB,675NЂ%@5s 6̊ ;!i oV6h34la ür$|\{5:ƪ{7lY YF:~kPd|Cȸ]ݙj=_]*4y<=XxQEGMP #Ky iIޤ>2 iC4,%fV갍Dc߉[4N=ߥWah"d-)b$ªaϨ<,ʵڠ,Xo `}CjEf,g`:\SRz)X m)D貾x)iij `ZU -D\CT *2Snu+ kV&HDYNif1S)1wjjJKʿz Ƙa4fL'edH.뤲/:Nm8 ps*s77VV1Xd*bSƜr8RyE'Rendstream endobj 279 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 8086 >> stream xzyxSu X 4""( 씽lҽ6l'y=m6m7ZZ(ȎDqDEљwt߉]i 3~w]o\8C7lIJ؟9kEh,K`  o~tq!4̃gWv-O^2U3dڿN>;bCƨM1cm=M=~GBȬGg?g~O$ cO`Tl3$mŦc۰vl&{ fa;W.l96ۍVb`asUسjlŞacl![@, ==cc L=Mpl$v3 {mc9pr+G`1-|H|zTɣ]cƏ>?[<q&6<_7a򄮉AN1ңǶ=vCn+''1YS6N'ҧ.VMdzb樧&þَ2{8|p}KJP*=zZ 1hUj9{W´:^ S Q<}x{ؼEp'Jp|TRj er̀g]*[Yz g<_,#quaYQt#p`𘉒K#^ Q.DZ1=S5@ bJK#(8 ŠCW>a;ZAJ<وfÎ}mjr||vX!~yyCyb9d6p{!VBەqj* H9MA#Јxt'Y"lQUf}S/>#y@[-`!/w| xs!hѰK( /O.>>)촩6|D|4M'V!,c08q݀GF{/V!nd˙umٷC)A績8ei W@$-dP bIOQl[4:w Np+@AA$RPP[FQ ZhtZ%~ܜ@9FApK Ob[ak-Ec`H{j-;l 7x{yx9\Qd C*뗅]\ l8+d3XSB8PF%Ed['ДO0o?Yϥh@~v:iCËf^w|$xwXL\"!;zVXDPe d R5ZjzhC(@,TD6i֜c @4@3Iv,/K [͊k6@mdlk< 8"ܟ̎N\GL+b r4mF[Q aS"`-+{d54[ާ@&gև,}\fV`!cL6:v& YmJY.;N[нJGKUu Y/uz\*Q7@6@3U?" _^婺^/Yr<6(ח$9ĎD~Ui^9{[%,8xϹ/>8YU&SR2XD/L5!Z!X b5 !2aENJz>(\STb$JJ ( [jғPjsI_׍I㕂`u} FTy1G&c̼e$XCڌ2Ї J%rJ\jUx l8Nj0B=GsGt~vzCbR{l&0\9dwkŤN n3ᯎ`_e+ĩ_;Tg$(N?&6KLyt_>ƽeCp{%xEY'-H'!*A-9UmkؑB^ Q]C ؎ _|TL5Cd'n<.zvXI̓ChG|֜GP: pNp6^ eMЂN1O'OH &| o# 4SwxiEXD&)߼RK<1NB;Ar '!,}!!}t PYd"k > +vE^ a*#e9fE"3WKDr\OxvV+`WCı:: Y/j, k36@V[vev(qp "#/t# `y=kwvCɝws|Uj?=wA;3\ 5!*Zx T|u-3ҕJTWClIĄ}u5i =PjDؼ: I)%dʔe?w2uuDNZ-i?=(W 㐓yE7|%dm:X[~eAp2pUAiJ'S$h@r52 [nY:Av@';!)߮b(#Ba/po t>Pos6k%,$Ze6JeQo+୞ʪLjꍈ󷾹rCLj; R3'A˿6!B8%'<#D: gyd84DURGlaE$}&HE;VoT .QHdU' ꎺۓOi8Qn]_zUޣBUFO:E_:殲#swKf/ʮ m]!Aҩ\!Fr}<#b 2ND Bќrw[o[6ŸUkVeRNB7rL5 \;1Op,zs ل"(0J/_4]jnzp{C}caApOG'R KHx5=hq9g\'&OcѣJf(( I F/;fYzkHGܛ?/D_2?JR+IJ99oO=tx߫z\ O둰uw|.{*O/q} Q}ȳٛg2'ulpdk,T'P/YMc> 2rQW.b*B&;1T.jq2#} Ww?Br4ҁqSDO0}y16\or~ܟ̮C(dXqt̹]!`2qLPt CM=Ļ4ڵwZdޡ? `ŻMaƮ|? 4 D'^,ʷf|D]jM|oq~6U[G^2XpcXkYMK34=~ ox:]fh/OI^2;}3S q*"v., pu@' h\X'!NM͊ lE7[K WeKxhy6(443JEMٿ r|zUHJO? & $W!+wfԾ]`q>T="~t4e@|߃y)~2YkrLVEL0v;yAϪ+G;;̅]̤8A)CԖ_xA;%;^ђ}Rq6>pC#z7~ھPIRA;n}TzZ?a}AWuzUcV+ujH_+) ͥ^@VE&PAo+>;Xz߶12j e8_f]A#ܼsj1;di2\<ڛ{ހS +EҮ kM'CS:@ 4щ fܥjex{18&q8 ߪHz"r&O ]P'b,AS{ǯ\d"aw8ZjW)* @1r 'Jj% w,;#wYlFQ`5փ!(Џ?Cys_V(1yfCuUACA y5-x32zN;S󳧰7T4yJD&,!!KY~VzDzxaFQfm}܂dx}sk8hOePjU)^=Fdkqz?kjV-Kѫ^str Ehzy5,cY;q2PK{Dt,Fg;% .>oմ0XyQ:J6k-Va#Us!.zY!bO!NƿɌ2Ц"($tnc-D4fdfzu< @d;fqJ̉ =*i+nbh&4a4 4 o䕃Vܰ1/6O1,(Gp<oPGRr\$5zi 3f%d Rl"uא1%41ز>-q/th>u4 oez{yaYYة^6UXP >֪a#-k؜1%Tgh_|&l D*P{R[< n'i-<&WJW~Q ('pw}< s\oe1uV2@!`\]u G\4 &n0]`5nӘ:E CkԠUjJ$*P?j W9pkiueQTx.BL/Es}sn pNZ'*HڕFut$Ѥx}MA:HzPN`%K2L_Ap 2@!ӨuB5 y56nPي&d>hb2Q{;jS!_* ,2 0eb8OGe]'AV Idm`H*T+|OjǮ-j @TA*y%7K\pz}y1 ; RY|Y$;9Ȟ,5wJ@ HK~55}݅'kg[*.xf?rPrQzAR%HM+J&3u{#d2?L8E%h,z/Nc( d᢫hhx,6:JujȿA `:(D6&e#7߆ټ\f6PpQ9G\$

WF>ƴ5I@kI 2<1zF\s ڄ;zO>p&"4y +T5ht҄&2*ۛ8э^u9]h8 ϥ˞ștn{4t|_[{d ;zڔĖ^+!ejl8aRb][߶^.VtXNd*lPL'ufIq.U{S[.H^Sp54;3Dˌx7ü|hP }>ZmlL/odM:=0!%,JPK/_8BOaZXU+] T޾l&?qϬyS_ʌrOaVrerՀf؉xv ;#Fj)SmL *=l*KRcvt'O!&Ѕ=_*V{uhRM/{E{*'Jq_<gk$bxa|zQVM;'D 2#}eawEq Q+l(A4J`H^.`U|0?S^K=Ō@*VXh0[ZΎXNy`km8l/Uss!(qMɮkɨ&'&&%fkjkj r¿.z<Ƭ詫hUOߟ-"2U1 {ZX_ .ܹr*1ҽrO}OHVQW%DԀ5OKWGIWKC:M )u: $Ue9i"fNȂ,Snaʁ3;O[/> stream xywtWʲWK/e t-!tll:4n*7#{7Ƅ"JB@0R=;IOg{<33W2ԄdCl켽ߞ1ms_ˑ$X* ˡ㆚!8zn0Yu[`6x]5Nks^u&S6oTzgwyoqLXhқK&1Z=j,GSDj5LS-VjzFmSө -ʊAަVQ3)kjeCCfSʎzZCP j 5B)rR5%%SʌIA)(>T_j4ՏZ@5d)NIb7LLkL'ff4Oѯ)ʘyL[>Wr}[ w[tAno4;WQGj%w*l(W4Z%/q\ /.;"-6%€ J#jxA(hȀ2!61266 j(+ABůf8kJ(~^ q+Gagۤ3AM{Jʪ|!w0'rp Y P_|3Yt~5)8 {kyگ0̫ϛf'v:#n -E;2,RL=a?MFc1Y9]_„t/xzT@LXJ+xzTCPAc@,IY͖gl¯4[fXho&"f?sί͌Fbtߊ&0x(s =V p $V7BC}shͮ?c^w8t!4r;7|m߿<͚~UAdWD3zp8d+bJLO"CT4A_9oM[t޾}[63RyNɎxMKAkH?x%1o ̌ٿd|ۯ_5/_H IJP'Cb[ҭĆFS2!u3WoT'E%ZJ)Lo?ʳ^؞F`P VæYY5vWwJDbQ.%ߙ%Ov^ wzFF8 g VHdS$Kڈ%a:CGCXĝtkW@ x+Rh ͇]^X#D{:W4f}zP[ߡLh֤)#Q蕩8MD_Y3PWq|C aEbbLJ(>'70'\q]{x_ šgGD.r]1C˕*Cf [ G닑) uXK8_ W架2W镺2>`"'׆$4t"T4/^;9B0d{o\-F́n3vny0Y Yږ\bb-08񋳂!mpOdGDR pD88ALfbp"N7 U$$GT5"]x}{!ǑĚJ,ߕB h,wt2}gri3sP'mf\Psݮ'sݨ|c$rOI*sVN`äQռ> KwַE/F+;#"?v,gwkˠx}x cb(6tyBIjzHOB ա&T\(*q&q<ZC"Çf=$}n:QA^亖BX@4S뷉d;!Ҥ\DAhDhfIt|uc7r\ 2 !fULϛApˣUzO)gtږ'5:7rR S˯c txOg~NPт 8= JKCqod̳,6ECV[̓,`>\ +Ƞm0a#nr# .(?tdDm94d/C` qvv{}u O.M5lq;nG8idvί sgʡFX:aOf4N ѨؗL"l}4[8 2ocإ3L'AtQ<6 tZ͇_A=P e. HnS{NZ:zFRؓ 4wI;tոzV͂O8 LJ4e1%1FYoq #5 ,| eMΉaI e 쒪b_=q0$gϡ}O2'Uf=aEkKPzAlhT* ڹ9l-*pD.%J`*ˊd-9n]N\TE '/hh7a 1YAn@URXC / ӡ tS3i!)S +)dɿ5Π>wh2s-_{wonm&bGF VUwMl`Ujߞ=4v$&Ue}nAJR rكNG'[7ka ,95hAzd7e"$-dOCgUrÑ:wtk6kDW9<XK]Ar/;vh[^y,`yȍ>3aE8ewrN]k}YS)w',5L,pN%kw}>_~b?DnLu=8o^< #7VÃ:L0ԺDQ.KKKOIb"׳'^Vw[MGcV|^|_n^w5H *j;%%W԰9r{.K儺1m9 VFEjOiJqRv|$iUD`& go6<܁K]./}PcVNbMx\7d.oDTk(Lx7!SSGs[Jtdž ˓+ڷgz t{L@=4z3g8؀g{gm!`nV~xD 3n1Ͷ??nGwi~]_/-XS钹dL3#7Ȁ^ir(;dT{{x{֖vwnۈgDD8|<"oу +:5|{ط`G:[+( M\g4ys0DdUPqЌ-B--ޞZS<8(ؽ!JCsSߘԅw I8ێ+D M2u$+#@L$ᰎi4A'/HK֦@2d0E!^+DHmͼgsuۖL*ϳ2)[NBYBfS'8\:9,0ŕI9PU2Қμ!;ތoq\Aɱ#'y3=ܗګtW-WZyDCQ}qφc @w{sFUi2g.ѮY+$FjK5Ϧse _ū\66+NmQmL/x '31d螸b/p& .o/@Ц9e)0.<\pV[iM\-ܮ3?پ=D Keyͺp⪥:I񊡝l8tla0D AžNPRcM[Wr 梢:> [p.]+-NN|O:ܥ3?)nB5Ո6ז}Vs0O<&Hwpzۧ><{oIuKO~1 ?s(q6-;v짏"8+syv\6Qwϯخ1L[\p<ԆBk2w A޻-:"V>^~ςMr8'%t&\PtE/44 ,LMKK"2W^/|mڼa<|sBeg->P*/ w℻8G%ԸHt1N0;k GEZ_vXz@WRDoPGt0`t(qLp~HYCJ]n2_~CkN8aFCΓL5ӿ#«D[z"kܯh?.Q`MYenˣM|A{o( &RK'.`H!}oyL`jT]s.B&?W PUQ_]:nCa8g :\ɠ5|}]ʇov MP@AK.rPAuNF^&XVj4jcw9N C͚9g.%n kBO#[>+B$syV&zmCti^YIGK^[:^A^tNTРkrXG_Q J7DHoRQ.Yo &58 rZ#(o s2RɌ+"d~n_\pc%0iuXoz߮g./i7V \"+ & 1#,*:˜tUUF%f{:zyd۷mM.zCTHDE.Nj2R8_jOE3f61#{8. Jd0 JH,qԳ/ 1a=yS'[ʥAQDVַheO>RהyP¤B> ~?Z!YfAi>> stream xZIw7>4s[Y ÉneY]eXsHKdṲd1/@P -4tPE?& MqIo<<:+?zQ'OK=\έ+KMѯdeqg³r/?:; mәR2&E&c ゚֫F"%UZ osFU}jOTpMΏjkF5S(3ܒuW uΕ̄U >IM1AIUFԻdڑΤqA.S4yKc&3Tdko˩1-b?,3i^sܮ.k5 .L$,_[Cs穵 בa|ʸ!CGsP^HMw]hi8Isj5(wQ u7 G'rFFNdTU ϗ}}$i ()a)r2jE8AفH)[#>Xr.W!l٫>x]jשu*;SSMPi$NP$)X20~א%9y Іro]fo` 'y1Ψ\ UsU4sN!S4,wifC(V~Ruq ~ K# P Gz豔j.ƀGш;.,a\*i } smA.XQnNA:tÜsjL>GI^j+ieLDpN^4nam^6J@s~j=i0P uqײ@UzNP.Fנ.p<7A:q͵0M $ t5E ~1M>.aiOun33MIoɛz (+|w5͹$U gT0CWWEK<G?bT# 66iNyWr3 wӏ? k[.vקٗ?(j92Y)M.)GVPfc3QetPӘNQӦ3I ˮVUŹs\*X ;5sX37q~ 8YIJ`:sa4G˽J+ؠ9}t&`a[l(WE.'<1yW!,S.3=Z0>?õ496f[WW&Wg$KƳqf;Šc8飑 ºEeIHņeA*]H{HNΡ'U?CH)(a* Z<܉b{mH>˨J5oa d^|6/%ZAǻ@#srnkU^HhO3PsLjEUa:+g&cxCb[LLsc@K7[5Q$7}9HSd1Z} ٜ0;>Hhi5BioQQN[t8HCM! ;QkoJ= :prjţly+jPc <kF(oJK Rf@ 2-^hF:U~?ip(%!V\S2  w*̑_(iȊ;,z H16#hl/"/ XŦ1C}bx<fҹN"r > stream x[KsF o;y`َˎ8RIpH golu@(R~H^Vm 3='Dlq &:㓃é_x&'H0\8;qdq=߲\)ŅQ&0&h=+",z6?MJGb!H6EwɃvKB`MLw}]?ONuH'Aꉘ0pۃ\kpo-2 =\c5=E#r.S\OP렝 lVgT 5QHFw6O&WmeUGF)2YPDpD5T92"Օhz~7oej5)aUF.qn'GZ̓=ɵtvz>LZWֲwQJ=>MKr,m1:g&5k"=Χ97DZMuU1ye=gͅ Jzd2+f.>J*GǴX, ,kUf y[fώ\:AeyŪeWR]4heJW}6/bKAYW7mwXelQ1y:6 +p#fC } =-'Gq\)cowgrfbVAN ǀ\:9RײIHl"?=>R;b'B'Qא㝶:ruȁ P-i﹗3`NK}+c4n4< UZN ZH/BdNT<'GZSCUIm ,*\CP ]/V\Ǽd/CIYBugz8ɥt[ayMxr4v_h@Yƭ}ҵ+*שkGź ^ߝYIы z@֪ϴ1 o5#AQW2ڬ%='G5Ql2 gO-Wm]aL~{;3MS_ hm{}كt,u]8&FIq1^ڰ{YGȚh `YyHfC*X"GxNpIC aAkAq-m[6uuD4" E7wHXe':MFC~n="!=pD͕HnWc@?'FKc1G$ lc  5jWkb٢kZҨcSC:o[%mY5r=h')3k)5wVnuT H.q5^6TC]PF{ub50ƎzÎXY W6.f*ŞN7Ay9n`Z{$X>:(es-{'ޒzEwdIyϖԟpgCtoq[!ZR1o/0a¬c!n]}|u~im q/C@ph=a $x]d3*y״\ءw%yNBSd 6oTP;6U҄B\v:ّP܀$uG.k)yZ*Ս>#n|ZE6/LL4{Z"{ٻ̐ (lC̞(}Lx\TDV/2 [PIXH">㣾I! b21 ITLF ܜ-16cJ#3z`Mv { je^'FLjU,R28v_jzq_1Y(s$I5ufk}*سWdQW{h4ǁ5J!9lQ)an+1ZJ#wkkU 5vb sQjgi: vWOr%qv\8㴥ӫb^ۮ-fvyؕ˦\M:8Sv[T8!6s0'j!dD*Ϫr%c.c|Wﳂ^pz; OV˳!9Zba_ÍY}5<^.Q[ʑùZ{hwjQmԩr1UCa%\`0{vܩoJs flhF~2Cpc{ao쭜< i򄣒5Oj ^#2&Bfٕ\v~r2i uթ#I4$χDŽ`r$KM(endstream endobj 283 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 602 >> stream xmHq1uF+,,ABFP"e`aeaKY&m'μZ.іtTvVE$AP! ;9X(EQU҆Eƃ'5v4KYe:(9fI' 9LJ% a>j5'r%6%#3iq+i䫬:[Bufvo0=vJmbendstream endobj 284 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3723 >> stream xWiXך(7T*-U<z1ŕ l4@o+ `%h 27.Ję5c9sq\̏yuSopq"bFoN;=pxocS{0F49;7خqy+:&v5 u% 倿8j֏b#LKL!S?A$v+*b5XK󈏈z/b q$DBK<pu"wy$!vVRsGt <1:7/ c^6x'Tir2;ۍv{Vf`8֠-{M\|+-. +?h%dnL)]l/J1"Ym|AZ/)tfhR R/t2;?& hȊx<`W,H%Xt&h >4Y{wE oQdˀJpHơM )9zc஄XSB&T?Θj@=!—U 2:.Prȋs]^jGv*Wdœ;(4*c?@_(WaaBV1 ;$ ɴw=M0Opu8c.}MƝ)N|ҝrAw!!݈N4^6z|tŦQ}KYvis7!MmE0\7+L F-`+I#^%WJhc7PWʖ7([p&uj(}Bb\$6>s\<|O"#'<ӳJ|9̡7m=Yk!y(>f45ėE@x|E}2lww :S7&&0|{I;¹%>tD,2r(Jq4Ejyfq htZ#k<e`I(FX3Xe8ݱفZ^NBQ),5.]]l!Mhj`qN6ҘgGSi]ar [*ӱO!'dnSȀ0'MMэvÇ,@NUZ U`-3V mm}A۾(Evj(vQdvE 'Rwlo8|絉h٬ igw"K^9>.pŰZvL3x+Ox(g$7H+RI7ƊC Hi̴^_RC)h ut+jC˂~`Gsk폍vwݐ=h_Ft,PԊپ0OUUȫȃp^Ed($WA%QtW5M< Ix\~i'8F_}fCa~]zxU?"\cqbCh?x$`IX; VwF )T>A% Ǔs/6 .7NնC=H+4B:5QV&=Y)(&υL 5JZL !mqO`$<>orY_JAg~^OA=oh6 ]e]Үu#=?Vdjn޶+JI+ q5C}vtC;\(EԑgO#pXJPū B5*ˑߥrr#O|7Fy8A8i"}f$CbW0E jÂٰhM2$) &%WD(ŹUSC!-[R`+rD#4+(:ڽ6xCȵb!X5bեnw~kjjk4@.5T%Hթi5W_Nmb31!@b>=1SFmn;j\qJ͢L; {H*2Oh8G rO>L r%$5 W".>]q nsy"隰ExPؙ< 誡 rV%w]$H9,?&:0m^+W^KWmaEqUhXns՞ilgz Ea+ :r"ch99n?v*mhR F. $}jt*VςsO)Uk(u@8lХkbTcdIxvcnB`Nz$x׊~kSX&WC:uϒpU>OιklRz)d(cY?$ONgsȯϘ o=> Cbağ鰊6 T3hG_3ZsSx~ _> stream x9LMSans10-Oblique8V  4CR+$3 {O~jwjxghhiJXmiƅ՛ֱ֛ƿͮ̋|ypnlnkk32cBJ>EX0w.w.0FJc㋮vuҜ1#(J2 |D>P $$P|D Mvͳwkfx}wwx}O}xwwO}xuPW  To Œ 6endstream endobj 286 0 obj << /Filter /FlateDecode /Length 4813 >> stream x[KsH{ؽ8¶P#`=3x6{(MlFw#oldVHz*`//gl>㯋r9V~Y/Kٞnge/KMZOzY23 ,-g>~^9?7ߝ]\; m1_R2&ɛD*^m7+` ֒*dL9Ɖajxw|LTpMxaf2- ۪0;WV)U (Θ s]8N9=֫TR7%ӎ4в8{^~Is[j!'2L 5&}w^Jh6rSg_?y㺙#C~tmmf&>{u{c8i.+K~)y9KJn8 tp\RXܼ:ϟ^J ''2T0%jQ3iIP&_63R&)nuAo>F//d;2nIخ^:;gC9_iGAWȎ%UPp/*Ji8e\jb*8|piX[GA&QL/z%8S&!~ G9N\ 1<ͥ N5gb|azFN3΄*`+;A~CsKKníqC0?SqdnOVƭǶڿ'c{ ILwq;50)5^[!6UM=IK=N,J2炐DQ)a"hd ($<zH4"31W,"B0c[C6ͺ^oʂ)gvKvmJϘ\RCʎI׷S Oͮ;/­I )QpwE,G#J/F{eeV>nqm4fԘSZMp[9pҥsGhyr&U7~p*^A?4O]Xw U+A s'6r0^Z]u4UxJ r]ux 3S0aU|f8VȡRFT \RT᤹Bf>;iB:f@b ! :) VQ@9|Q@UqnRz$cR TvO`~?-@c+rU=:䲭]4phO%V׃Jl䏩lfL"P8|4Rjr˨>d%}uܤݧ `U_BCiCirPukWm[]ڂpM얅Vs@V}S@Omҕt!-=SDo )\dk*oq)BDzoи`D-0N.W6q93E2 ;V^&$yS;gdK[1mͭn6U&}w{$$Zz7|ăoNl }!hԼÍ!ě`Sv/ ~x9&N#TCkrPH`aJ$I~m%b׼>4lH$ӧ++ τ ""hMB[STi_N=%CsAeʖ[ Z=mP{N ,4u y1K^͇ղMWKX]5s`pR`C0 mv}L`;h}uN#v}DZ-H@V]z*w)V^=d|UG$ϷVe\>D絕۫D01k0=hetym:=נ YP`!]nRN=hU}7ub,Kob=̖B!Sv!4HnB[u KZ?^xQ~~mhMx|,>;BRyh9.&?~6Jr}]*MUX"hpg+ɪ^qAӠ PclYP%CQ_OV}$j;"nWȉaHKUNQP qlٙĖ_IhQ_013 A!Z„Zwi$TɏZ -Eq+;?(A02ҟ2S)uhj?ނ~q硃dN8s$'Xyϣopn,̈́RuB௟Gr0Rېs+֑M5Fʇ %iNZ0G~)e[heHV=gCԴY#FH z*#;u ,!= %J"8?X:eu,I#tO%1ڇ 2V.VKDaԊU?t m;g~o].tHNBVpjoțjЀg'!s@P | zro h ~<xH> stream xZm%Tc1|Mk)q(ƒwb8tg$?K~3 /36}tο[;~ 2kV[꥞/u~RRy`is2--g>{Xǝqds9MDylzʒ '.!Kśf_R>dzlX4:]TRc|)5uƄå95.!DŽRXOuxtQ<.Y]_,^XE%ReRʹxanͺɓoUqc(S|mrN=y2ep oY^NjsPɔ mo6/Z(#oR@ltR-F 4Y\ZKiU̗\R@ []54y 6lif)6n4+ap5Y J 7u$b y  Us#IsV9fέqH  %mvbJ:IdJ`BLAz=Lsx':$)msq’v0*oI9=p(u f ~e0뜛^V|M0LYX6SZ_uʮj :K$ĺ7Us9۪;X*Ac9-Rr_.')7bjwL(c`pGJZNL9>] Q!whI򾺚TLR%T=!黌vQ<Ʊ /7lY|3?g1OB(fSI3O#ύ I{u?2:팀Ȟf?̰xi9 T,aiHke΅3s?UFJS9"؋8XZ+:BSwa *s71I^'?QiH +#V=+װ_Z"Un*&\̵T9[ =´"yAǙxBT AM(#d?F\HhxY\ [i{1fVPrjw9!lg0o,{gj<4Y 6p 9dA, [E /C>vC}j9ZIcr=bୈh=tݴ},"}5PX0!2Jk>hKݮ/جw@J >)=򆄃|jxy2CI|>Sy>nS)@}FGJjF{.]Xzj8ICZDlfwIY]?0H=q[HB ,'հEM{a7~q#6tT v\&Pa'a$+ʣeviCPV|Phr>\ 5dҼ :93u;/Jdtݒڵ!=QMCwF%WI65zRK=, ]!)e,=zC~tXߤm.lF)5f ,bR0q4zpr&hمa :Kȇa$Rnf2%Բ/0ꭾ1g;{3Q,\ޖ - @yRY7WqTw#Ӿo)PUח|'EepХCGF  QRxr@lS cA}uHxʧJz{< z yߏWpUugcqO> Ѝ:[拉 +LAy s("%ȒO9J9KD/0`@dK SB<-&47w.fi'd ״\xwj]0CԂݡ q26 STl3~M(Tɬ@'cz[IB)J_ĸq㕥pZm3xk?a"oՎ9XaS]fY$Uǽu7`ItƏ0"y@2EUG{ Ï?ad2q%tWo]pXF!a&u=T~pBgi`~N:SrW{^)LU0?\\ݩendstream endobj 288 0 obj << /Filter /FlateDecode /Length 3118 >> stream xZmܶ! L7-IF-+ ywTH(/՞(+Ùgf iA_{ؐaÆEo{(plO -5\kǦWYq1!}YLsfeeP&r6jI2t [WaZO:k|z#lzPNLm0FT`.17[Kle% nY9>wc}n~s[Z SOlu!PnxJ$kg$sbk&nߺY0T+8DE/„J}n9|Zc)ao c4Fi!T [Cvk7۰Yi&$C -VP/'gL]ؐh$ޔl_IURe98qPja)4ʣv.\$qȞ%3Foєc),+n_n*n|/F=HS2k<Ĕ|yxwǤJE kJX^,.mPF bK+qY ne%N- #Qh8&_>  ^~X9 t> 7ñuPQkֿMWx"2GǸ]/] p ,8=nT/\p(+ R!X0,4Mef|{EoJ$P9RuTVLa+@]s"2G~K`[#m g,VGstwJq#z̈(&Cn@PƢLi@1!2W> iypD !Dcм ^Bw,mj;iPX,LJ9Am3]YVB el\>\ *#(6V1βqR`.TP:]&K6}ex $]e /OѼifsR^t鷘{I:3Sm?4;tW,E_py#" ǰ3Xq5s)+}|فES:n$d `91Sü^l%lƿ+#`0|vf1A(H47h2sn C3(ܬ] %Xx]3%5EEb vmER{F2)/Pf5}=.>JN}orwHQ,il,5:4ofigFo(oEwy$؅SqmKqSbP !=W 2[hl5rD+U8T*93 4!?r4}[71W&`jөD ͣOzK9pmhpIjB:oFc{n\ָ9T0,, !}YIoAUQHOaK19?++*5yt=^x cXp:whW]۩֓PfeWްe|<6{3Z݋ӅISHb}8wjMDOܕ5QwƺD ě[V]!'P-@YOF)X@R7^a=S BF\mV_G7KhG9<AMdSN"JϏpW1W!(1%ĭ5dewu387d^pL1ҤOZeOɰ0 K h#IH qׂV[T >v"ƱC4\hrb>@aH._tJB12k!KkȓgViUeB N_ǣ :1 ^Cxt(H:Ȇ:nB^$8 7e!w~34 Z2)bֿ-+$*|8SzͯvBl9).mOp].O8XKz ÞÇ!'܏u-#\'{ VJk @r4B#s &3*Iz(n&[P` (* a֙ g:2|H n>rG+ 1Z+Q8f'J9ۓ Χ{š ?zշgic*Hdǒ19GVH~ϼn ;\BuLp+9fD/ $0s|؛ ж (8:| n%ujy`ms ?H@IYd}Ǵɮ:iBek9kyk|F=}NUg.؍S4 *h]DE)؛?b }6Ww˺ͬA+1A5xr5`8hH& q8$D-Ry\1D Ev']ޏ}%Gzy|+~q#j?75Y";B -ZMیMIwL7x!ş6ImV8l[=i7]9-$Z˶ uq RJZdž;\Թ5D@{{wiMe*֔ZޅRC7oB`EBf%pRy:DI,ڷms(ZCP1-m L"qJ=|/Cendstream endobj 289 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4962 >> stream xXy|SUھh.7f@eAъd-[iMҦi7kn閶)KKYD+PGQ2)fys<7iڵi${Ҳ7帄ld)!a!zhCW(;0O?@23+{O5_rRds;̍x|jS,}z33}l;AD b#L,'sm \b;XE&D4"xXGD$N M"&B"'1Xib(G dQ!φ-t_]\F{`ESыGwyn̵Ϗ(m;҄p& hA`)MLFX>i椬ItDlQ`0%"Ճm ŢlU mRPKA껱> JRvE{x9)%&ur >Ǐى֡Z >rSJ/|)˙CFu>W$zP3_P7Lao(/=H@**FF>ݷݟpNE+S3}džp.ّ j@h2]1/z:ۻsKY ]`VeB.h uZLyҴ=uRqt*~q?&SXCK~_Rec#  na{~ E?L82~{Ϳjm)(9u,مvѴ Z9^NR,^!^[%ʯ2tLS'a@OHu3rc:W`ung'CmCi"~{RFzKFvJ= PCH 3QA1Bzhr ("Y`#\?_uJ@t/|+@uSGv3`BB|45*ڪی^`ThRxrpl6;ADv'p")}!\ V{$r&U^|\ S9 Y@Q&TF^O,^ u ?}7:VAf.~w< >L5 H(W<i+Rj)S3K v'@)l F. 'A/3f3zG$:?ET [> D`Zbȿ^[^lT:pD֫!@uhnA*ۄ P|ǟ!='W>U"~QMlnRz/*zҞf^b@*Y?Rې1}z7!%Ck;$L}a7<FpCZbY+-@ˆY^~3q7/~#%̇PVh2R:o.(Nϻ#! 6< msm1-ʙ2>r:Zd%FC0o:s)(x(yijB>n {H_hP'ԟX+Ztid] [T"$z )T陋pyT>Vd;G=FYJGH-"~IhďpCX'h+^nah+Fbw vE l&15Ekr $4=Z'6#-K$ 'h%QH{-[ d4ncIi(vY+(:ڕ5R1<אspq,C n;JĄ4džp9't4PhRˋxKJ} a84œW6h!N>IE$cΐݍ?bO^j*ĵdKoÛpZZPO6yOaјO"A-a٥h ff}!s]vANKJDi:I~qxI?R[Eh`ur4+,zϢgϦO v3þt 1B{mayKE__J)OFiw'+Riq]U&jDUtvkN8H? AkU +5zYJ0Yş+h5477+-RoqP- z](„wJO-ܡLX]{̀Ufqw5W*P4:ʅ`/PjӆbT;Uw> V VdW6\m_BRE2P{u05}+,ڶq<̼BCgL!\#@66NrR@<>E~D 9(z&^hoέOt6k wy@ZD?+?hS6.%Q',HJєfZ)fZ&Y 3?zPXٻ~W &Ұ!u(W4L‡Yפa}ãRчC5( pG|.&{sʳݔt) ?r^W㪠B-Q:W ^-Cc->z =cE|H5ҚdHUz6E_o!W2b-0T5%[*>>>#nj/i<<`'xF?Asa&]V}qF`T)+@2!Sh.&3"MFZ7p[cPCd88aH摟p&Qh ,ڤ(Ue&}AZwC-y 0r43x\eM Ot8zw+>Ca UtMj@SZn(*T@vrzEȍ؁1"ިK4}> MCG!:Z3-iגtt "M$Dp|]aioJI>DmXƤY3x^MIhjB[W살=@Oҧ%M{stF֨Ji=|V- /?j%ŸE1EKl"{C^4`4+4>P,2jqLjvAx -r+_Iį# ~&ˡ/~xٕP D}bw MVB78 fkLSO8eh@C1TJqqToȐU]P.[.@Rge6``EnZ:(jQhnu[JuX%c?g{jW$'l7֡O{5/P(7.Èc^^ΛWћ" T b^Eb E"HNjdɮ^ۑYƜa*+me3Φ ّw[YO+2e\?GF5S)endstream endobj 290 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 778 >> stream xMkHSawslyZs")DEV&&e5kuv1ݬfWsfښ,MFvvR{bϷ? iHRؚaMK-,(*?dFs@yk4@?2CPd2( e](QjBtMV7"Ŋ2LA"$3[Cz2}yNfah:nq?z'7u(ZR*h=10ܖYiie_ig8u)L#4IJ&Eʱ[FYyly]X&Mz#I}1PL"nYt-Vc?āyl`N/J\M&aźlW^p%hj*.@0l@++SJ;Ͻ칅%Kҍ*s>%+Х`qcPm&vhD5UM=JfNqw\GR5O*%B͉t[YYIR9Gߡ| Ft;!eSw>p] > stream xcd`ab`dd M34 JM/I,JtwXew&ӂ' 0cC ##5|93<{-?V~u׭[gܒ+]yi-ùgRoo s5endstream endobj 292 0 obj << /Filter /FlateDecode /Length 4792 >> stream x\[s䶕~Sbtf2N)g#+lGL[&&>up!-\~I| .=!_Nu]ɛSa`K,]?CЅ[.g'ه7dsX9:\ViQ-kJlxV/'oN I0ԑe%psBco7] YJXr,2:[+6j|#(fe^#4Z .DQlm7;?;󳩘2F)OƍY%2-ͲZb c9nezYq0m;'5Tl1;h-.:ĊAϿ| [em$1er:uih6V(sOF[md;&`vɀQPLsA~!jLlqρᆆYvw*LJ1=!.22W0( \KվU "vQQ̏Od ^VJL(E]su ##Ԡr1*~{Aj4$gabYͣF#48YAѦsi#GEq\SszA%Ec V80Uqʱ Dj#D.nV1 3s%-0Pmn&;T86u :#0qOCߔ)x&2bEt>5uXp[#4UzQn BPʎ k l`cܚHSIDI͕ծ,Wˊ)gvzPM`D z8gN;^:@8j8D؈~0VJV\fDUXrmg?VӅ%Q wf]  餙XΆ- łIkfߜ Rb+Z󱊦k7S-̖S WD@X3T`~X ?l0K;3fp%es΀&K7s1X٣&z8naxծ/Spzd(97WA <4]TYMQ/ip"(Pnj3G}EQdn}~ހ^ x3;R/ab*FqϐYaByXJzw?wWCQeV9Sn-ޭ-+\:-w& ,9lDYfӏfL1lHdft}|='r5( ev$K 2ͱRjJ( euǩ^x EBoć_'EhJ L(2-=(:ņU e;/1ǟR.΀94hc>C<+Z-?Cn:۹ELyX[,̆GyݡR癕eޘBuԫBvksͨk/gWG'%W`ل#北7Y:=rhDN79 v"3D Qբ03R\ p^ (C PYX=}u)I L M#}Q4\%Qf:-/@Nj3?KvӃS5{h$H9 ‚f1Xh.m8]H}f'|5ȘARS۫'jn'FC!#He;U " J`Nپ4tmo- c2і?ѠZ3cSc2)S Lt\3oF:G0?߮ח=)Q/ T_,.a4%|2ZEfۏ{Y9j'C5!X=~jspO^-~ޒE#`h|O\/]./M[qɎ7$_>[DM2W.)䌘b >]q|dr"kLdûqW=ͻqߥ'|,u&XXPӟQnSUlLUux^R+U"ܗN\HBldΟ` DO&7snYQ"h|4Hˠ$gblvݻL]%[R;ߵ=G^]aI097;;)P1lzBد3[m\\7۵> :mjpIrX,("cEuCC|jr#+!sn ]jٽ=b--fL{P _=Jp7$ʞZ 3!sOn&a!A?^ qN߸` _a2m={ }}dʷCJYцV,3 tW;J9:wqsa T0):B*gVt7R1tsv:]%Mpd0'[>Sn$,dͦ;ȪGຟ+g־/VJmpB2̭2^+ʜ(l[AlKݻ]n6]7/FdAa!F.nOt/?sjZ0/রT86%B}ypVv4Ti/ }5Mݿߵa6z810my׮սoi*UO] ˚V[@X>'aa[uWuاqr@w0+ /<EB*^ŭQp#!bu PwUډ~/(E~6w f?;M۟^Q,RvsS\=$SvQj-N$D2"fv+&qjPM|X{whm Ž/"ŝu;R>w bJ ]C K#BzNHl4^唂5 M  % T;@F%?%5=n^2wHmkHos$ ]:jxvendstream endobj 293 0 obj << /Filter /FlateDecode /Length 163 >> stream x]1 EwN@%ʒ.ZUm/@b!Co_Alr# (laKH0Y4|Lb'hnϋnC, %3NsO:;k)?-M-%\I+ILgb%V|0S5endstream endobj 294 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 204 >> stream xcd`ab`ddI+14 JM/I,HtwòC{@r%řy9z%ņ L,.Xc]?4~]X3˫ٻ1mSNv`z'M0-ùq0"Kendstream endobj 295 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2097 >> stream xU{PSW!( .`WVݎW[ jE H _DE gXJŕegVXcuպul;:}LN[g3{{}JFI$QQf۶6g8|@ b͓r𔂧|oM~SGji32uY$nݖJ(* b j]*zQbmj ZAhʛ( % HJܪ2$/ϦkLs8븳2{M `#Ӂ?Gs!>QчTDFF\{EĦBAہpl|KyT Jv@M^b*&lOӿV"Sϗg`G^av>;Rtc!LeF^A$C)3;Xyy7Y\u2><^P~ JVݹD'#&Z,r맹 vBفscĂ?6TeΞ7W̌:}F;[0:lv y"E-}I#47Z]|) /߯<$8{܄JM̴$fT̴l޿ 6޽})z3WiwNUPםJvկ\`"cfMw,kym{:&M<#:7:0f>M-ߞN_ǠÏ}(ơRy, &U)gOԧ}- Oi{< GJ :J40=wF(gE6=DxcJ0HM[|ڨUj ^[r_voڠQN 'yøk <=wôM YK3cR՟suuAs#1uJ|pi #4U|5k(L)10tqtEݙbKy #U`alZq~Uᢃ{ SB~7 t j}0TYo:q(MN6tqU-XlҁJhbFBK$(/⊍fΒ۟ujKo0KERwTH $`6nzc`#ˈpu%qtfgHZ_ؼ"1b}7k470udq/3ǹzRǗ_Aug[߁BXs0C74ȬQă8 'oz 1HI7Ν\6T3.9?QC+#1_0S'8:س63)x':&夏x)7!<J^V]Fi4::$HvMT\(cRv@9>ru|4N=Ǐ0t4⿦\F9&W9;Qdw)evú-E~8N C2l͏Nv7ɏHH=6`=`> stream xY[o~S=4x9;.иF68  Z[]ITH/Fΐ(}05<z}P̆pH lΧc "DU3p;͈Z`PAM5+K@eds }6}<8NJu]ZI7.KtLRlu*WUpy,f$苻6Nnv8/pP&z,j"8 D"X+|N b)Sy i~PiDhkbsӄr|zHΨPr50iVq-&& NJ)5T;蓄$I$Ăhu*!pN)8),2z7) Ԋ8b"A IW|w\]? ZbRp.I!LCE˓4(` M *~QftTc 'j bUBT[` r+mjj; QZvZ%+#@ƸOu686)ea&FYXL8xBA gB| P~}2;OĄqF$P(i i_zy4|>fUh\._1jue*(L_b=?ϫo7o$"ufF|jޗţTwUYLIP"4\k7N]sJ"u18i!tv@;}A.,FwZ WN!fg)ЩKLZ )%5Wf X$2N})GOqGS4Ѷ]+[;pu ]l4$4u42v2fJ) e׋!FR:Y~%Bq)`r*mOi!RsbϹbpaC6DtB\۸7ק㟏Mck"-K4_?5*ܬ77-Zc^.o~7uqS>畾BKgrjʟ,=ۜ}1Pϧ@АA j#wb(8՟־cq}'|JΡ*(#%aojsp-"PUwqy4& < O@U23xF lV(C.T'qnN$3P L}٭نf(P3fb4źe501^ /yu%Da9H¶AgFȞDVYܞj`|a|[S 'd6ֽDJEPD:u+PevqDsD10@z! v w".7Va$w oNNu@ݝ^eQsY]swԃ@,X`r&Q52KZcv)}ne _GߺI:XAm쭰ta opDmԎ"} mfL ̆aޘdzJx:ͳ h{5.])DzM2O&߅r噯@źK/iJƈ,v#dwrrWa Q F`b"@ W]Q#J+O%>(Ag|v"5MCu+5|^.m)2F\}*qLQQl:n^-/. J'q))@G޴ۺ͢$ q^Lɫv*9/8SOn$Y&NIw֪YcVNb{lǔ^́@) vRnaG[g5asQhrqvvϘ$ =hbu90aob+endstream endobj 297 0 obj << /Filter /FlateDecode /Length 3835 >> stream xZmo~? •^[HHQ"4,L-/fvI.yR`;;y5|_bO+]/VOϕ_sF=|}*lkV[^_VūsRSl}qzNί7[FvG6,-g>>k{qsR2BS@fI]Bcwm"a֒*dL'gsF19fz^".8GO,jkF_7Qf%}mM8++:Vh8SRSgLCnZ(#>פGM}? 'z%ʋ9x|Z! ^-s\࠮/!OS^Ny\W폦S^|lVXWWq_$&V='JW2F.Lq֤8jCfz KyvIꝉI$m(l0e$#^w&_Ws?O0ғYŭT2z/OiI1ԃ('{ĠIg@{켭6[uwHGEn'}錍 SOoBη 7hA{w?39ͱT;Ntx$ø"߿L>.$o*nT$ui3Iׁ{J/7Q3}o%)V2\}#oސI ϯ껠D!ISnj4$n-R1aIs CqW肐-rBuP _}}6[i8hLWB⹦J¤ *X}^)%eJd| WKg6׳FHx}P'wwM MPw_us|8_r:Ur3i <{î 쾺$,\W@:1Ԅosb'ny_ѮywI"ݰrIAj0}uKn=; d,;IR@ځ ç#4_'Od$ecg zH֍K#r%rNʉ*#$WqX7!rAvCtaO=7r0OWY%,o je ARJq.wq7'bVf!ކ=VAy@B9F%*R 3U\PiTq2[W]G)~!DiYf)AC2 ) ,J4YJ]T<$R:2ЖTC>S-S}!ݷZsʤљ4ʠx/\`4FFRE"Ԙj1mgvU GsgmBE(EX8Yn8p%ϮjT2Ja7/hHӥZ!1*\JKX@/DŴѦңփ0b "4&NEܒ Ri-HפLk- .Rgkl1SB8k 5bd9,H i9jR4#95QNNP***+oǸ ;ՠ|P#w|T!+ ksLor.7mJ ?oi7c)b)LNcXX(7hJ9aBvqG\ryrYe^tJ5W~( J%u`ê(;TTm) _,\^ <ܐ~21܃@Qvz=pmpC4cl(fE5,窂.^'\ ;fVƦ ,L17i13j=įNcςP킖B!~D^sɐ ud_b*o=ݶ¯-em[) B["ޭ1EPnRX|p9C.n]HU[gp" AI񙓋 *$)'>\| rDt|-ֺ 2G;%~Q$eڐߥyQL2xvyJȏ.۶bV1Aoc=o.1TNIF 3,ĀH V"BSM>Q0]7 ѯ"N # -,"CNx*'Q0Sf!; c XvW+܍r+L=xצR nnT@Ob=,q,!EL|J@:& mj+ }yv 6̍,O>U 4q΍~Bnp1mN\פY0Y S4?M?-'CTbK :&v7ѾqZ4&Q*y߬\7OH|>J֪L.XOqS5?o5G_4)>U6DCD/\H'v=qc O֋P6Z(y=E{^,~ n1*= f _4\-!x.7.Æ&á;A)I)CxJ؟a'c&zHzhm LJXdp]d .cn*pF.:\KU03SW# jnyI@8pzXZvrxuo˼I8(ʬB6xa$yF8yC4a:UEĞ!K , v&x}ׄ_b8{IA-gHx(4"r܆*+XLrm¨$X(-o%wKYQMj* -uV!JMm0" A qZ}GuPoϖ8cT^QinXT}2bq ; ue%B^z;moj:ϋ@Que [SKD!5l,- @ń0Z3O5ܖiȞaK7) $dYla<doҙ83 i9@c8Oq@GwL CWr7u5}LN@hkǿWߝ.J[kꛗTI &'z*vpFrͬ[o%uy7dnxg8CxpDŽ gan.|0?8@-N.C-e Own~>_7r-efp821%pgb#ف%y%zN=endstream endobj 298 0 obj << /Filter /FlateDecode /Length 723 >> stream xTN0#*/x~ R4.2  82Q%q2]Ze_>Ͻ>&:yHx oӀyXlȷdB%a% &@$?GҌ10< aְLlsfeLc)1ڦAp?"c t.pڷK_ŊP%2 2Ĥ#!As2ő`zgj[-~($ ' H1\553D90,^ X,aHpU ඘d~ \fT!c0}&1nef\ΣAu2?_<5Ŷ)"hE NՌ{5^keg7QTW)l2Hqlj&KD##TqvVeyZVk[P뮇Ib;HB0t{X:c4*|ŢUeY}U6mx[BD6P`c8xFxڷD1ζ_' KԯՋ#F+c|= ;oK1<#Qe@f&1>3QA¯ǂjO+H2l16ۑؤxX0u0[ =uYocW"oda'TMk;kuU@7zendstream endobj 299 0 obj << /Filter /FlateDecode /Length 4240 >> stream x[[ݸ~axb2N8`1&܃X}q[9}ztd*IIL$^dꫯ07 /'lss Ƿ~/Oy9{{2k6V[ޜO^t߷2-Lk#W[Z|z8Ⱦ|Xk5 eaF9=ʒn{ҷp?tg?B%3 a"gpN4JM#5u`+N% ePsa2 .lV翣LńRPnL|8BsHZMW->fL F{ʌF0ꬕawM9iEiG}`۬aKӦl!ks= oP:E޾0]6tK+*)02h3iݧp K3~d@. /uz˨)EnH^ r,f+7tLUp:_07}qopHINR>OڕWQwϞūP^Ԩ&J6 T+\dVI8WdB{\H#Cw-Sƴ7nN] OϷ22n (&2ybn3+yYع$*WVxqP|%fYECaSl+Om=$ K];$~]ZpC-+] Xcw~@F/^d<&e7pCm[Q| @u >`Ύ\ymCc8.~(o '>TL׆pr|Е #U5Z[]R.͠HqQ^zrXe:֬ 4Gb.gGjHE?i8^ ?ov$,2K[LTkRl}#-@^#e6m`KZXsyǟ̀ <黛wh%*52k89:̔2%G=FG|ǹq'1¥M 웖ҸJcR F|nr O#=.5UWsT euWZ`a(&ag|nGc<-o 3PA *C)8 xCZ/! 6V@qi=nV*cTf#`m1fAWpA>n#Ӊ 9OT#j'ZcsnMKx*= lx@|͖܍Qg)-/TyN&`7sAYxnyv=WJ\AyJ, 1vUaPdbouB'ołqfeoc7iIKz0%h6YCPXmc^ 6q57Jl:W6 g-1%@PLiaZ8x2sbsɍ}I4ƨSSFai ֦vɑ5YD7h'31T7֤K%NAmʉR{!I}*O`9qwYoK4⸆J+C u~}3Es6tfed_}q}qE'-\yœO6Dj.4zUh*(vw e4'm,4ٛ\C#7V w&dyt&@ET:Ey> ݌VS1JN!ǢET + th1HQ8a\÷ܒaHTd+H2[#R\LS:nj0 ԯm\VQZfɓ&92$:|+]:VC`pҒV߄Eˬ!2VWqUFMc2RGTs8b#V`7 <\/p 1gGQ?aP-S EY hC*cg녢G jN\g^3I jc݋|ldC P&]TfH5hw~9kƒMb9Rx @==K$yLrMOE\Hè)tv~%KU" j)B,RxnL1"TBO,k_+U:q\+*4 led>*[hO!Y5uݥYN6rX/+* HxFbg.-1]g6ԂmlrjlR% zd7߿Z 9ܠ\jIP&7!??@R4bn`?!Hn/hׁljݮHZ: Ũil+TVAj׉ UWy4ꪲc7:Ħ I7.Ҭ Ҷ3/:qUִ\yQ`.\ˌX᧪~(Y. 2v%6t<'۟nST$r7XCζ2˼MP@V\8p} 1ע΅2tEt,%Z #ΜG 導94Ýt~?\TFxrf4oʬ=IIUZ*XF[&$NUb{w{pumPX˻;?7?AwIhl5˿~?=]n?vMhYxD?__ \KpNjsXݦA"o$S7A[zq}NηϧXhfj/lRgŇlfO3> stream x\K6nQx?'1 zv7šZ=UM^72HVuA]$||e1w 7lw wݟnox377s|g^7_~^9ۿ|ܱ|6 IFHA{FBXҜO|aQE>Ti%ʉ9qfn5?.8\8RmK2-vav3'sQc 5uƄ1{kr)AAxɴ]kMflO ~2%P |~9)~78SR$. %RAHʬaW{ ?rf Β?%YX^lXNzMO+ter!ݽ{G(ORNIҖNRuƯ%y_;$%;iVNV^)f &_]pc\+J{n߾h&A锫||Ο:tzIkL%Vő245pmuԩ lL]BSFTgʒEJ.B>dIB% O0‚b! 4aLMjr. 24aZf6y/>,)r|šѱj]N:p'8[n+?L/q7vNr¸0;}a%Sq@Ip = /%+3mn%xc*I>n.5'$u>/?kEos_$C\D6A|t2lp>iNͷup C?\9Y8_&DhʀuI^xhy RˌH\<[4qXC tׯ$L?ox^CX!9;Q;8%g@qK2yx >MP]8 M\:]퉛w١,oZ'ܯ"O07QL|?HT{>L)5ƭM~ 'g ӯUY*B1 zܽ;?}5}T:60gC4p^-&\F!D`I v 7rӈ t+ٝ# 2El# ё*-㦹7̫857L?pʤK3>Ndf"& ccppBSLρ5H$EyJ9)ؾ3`%HwpM~^Gt/c$ӘKcDDV8ps%R')ΩԿIr0]fgX a5r韐Z}"WCr YQdR/ .ۛބO-Hɨ;e '?iOFrva9'VDT^H SPHIAydxbљhy-+=T&MP2a,}|ۻ:A깢Q鉳JA/eV*82x$iNC71Mks3EKtT+-ίG¥3o WЌ Ķjb-HdQH'VbxxAC[oӖl8!g!\twTzU mdÈ?{UA̢RǑ};N 2)}I볊n!mJwP5_.9fVLg.}Xe$x~QuKc^TǻTgCv"Dt|D¼-au&~suR[j= WQSY6,)C܂al6 |i{e"X)7TH{:oi& @.n&e E.͒hz*lU$lh'S3kTWQ ɀX5ysR 'XtPնb ׊Zg K5Ugj(?KOyt)9!TE&3TWex[xU+2wHMnthsf +54Ϩ XeR")xgB1W.B%'F>98bjj2ߌ˛8hm]0w2WcşIx I.>hMzAl|t>;+OS+*UY,c,`KhC9]nqGB/4,.yJɗwj,GXp O+N}DPr' Jʌ؆RcW_ڬ%_Pg.\P.kidZe $U;Or-YdZpzL]<~[)y:I}L_dl%!/䇽'&-y+$GEh!ǜ&r,'/ɩ}2eJ3.2ÕB2ϡjc%㣛Ix_M-J`qTLatEX УvJLR:cBR[_RLS]"I)7BfhÝάF,'A)Zc1# Vcsno퇩vYP6P-; qJL?tdSB*Ñqb?žزyr,4YiRx׮ԏ2!:JhM\`~#J^W xI)vrp BJD2fF2b;>( b)ԩ:'zH5:8SAII<[nأlW=uN)it%v}zp*b׍z^` [.hW{]{ WHB9]H2^{|FLqT5H.$j*g<ήmaBNn1|xi wʩ%?~pL=?,:OK:f9HҺɋaOK{BBkic@lDž! ucV'⑛gϞ|V68oNCYM5̥a;*c>O+zqgoȨ2x4} J'5~'=8V40.bD^kr@˜ͮZ+RL]lvKBd]E `s2]_бrt5؊pn\Sm[_e"Þ Knqwy,#sX/Ե읁s%m=F}$vv =Ei Ҍcn5ɖ ~Xftn C7& (O=5)3 m3|]ƛXcڛ@Ј+u+#*tgp";\޲j v\jj^mి_ySdjǹ܊pUUQ18uex/tO l(Gs-w a/V͔͋m1K[krx >bY(Xf`ۨOy<̹_]JrD*P޼11!c>6>>짿rӠKq$ AcŲ{ZݻS{׼ os7.ufұX۫\dI͛IzOӤ>㧻6m 1(B}_כ\Vendstream endobj 301 0 obj << /Filter /FlateDecode /Length 4031 >> stream x[IsƕCݔҹ/FnOhB$qDSj6*b L$-Dr}ޫnl/yAݷ頋?][bͅB7JLhrsux 6[9&ĠW DJ+AwkJlkP $oޭ:I/2t>3lFi Z4rJ|6(' [&6dsuwds Jt`k0V aϻ{p-7-rJ)%jgb37 3(D-GCzvj DŽJTVak Y뷒4Jci(L凼FMe Z_#,'Ҡñr0X}H6S4&D+ޑPp#0Q  ~lAO*(CAf%&D\rB1Jڿ =&Sl]bJ1~LyXӁ@.V@9҈|5"2 !rfK92o<&n^ʋn9#2}x# 6CD~l LɔӆHl |t95.jUjV4^`!L,xawB>sQ?"&w ]vEw.KCg.܋XS$FJpEqAʼO]#LR+y+C"1*8E ruϡHrº3sKË1>je4x mPlTcjdB}š,rdX9E/_zx apbx)|<'3}rcwX'ǹ;8ItS`wMLBJB!aYJO} @bolD l=éXjUJVB,s9r<㌅舛`MyfzCwR/@Vvi iTi=nVyBya]Spf(V ḻ ?nPn-<+j,$1 ۻnnϬ(klu:ea}QI1e4ncJznEJm;SJvgHi1t2=V0_S9]! }x![mU!ډtU7V-l#sYQUl*T2SsǮXXq9wBQB8_\ 2Oi"BJr&3}zu.;l- w %N`9 |q#ĥ;+ +~< sd 1Ɣ]^xYJm gFxN4õ9c=\._Eccae suSLJj_~CОn$52>a{0yR 4| !D9`?V,t~*㚨0#q:%=#$^7*2|nG/.@")%8QBx:YvR=mVć)( rhdvH$^VlPiDZO+M({rcO%^0s{nPwUo1+qjV-3+ۨ\!u"5 Pɏ+Wzڛ/~իQ{3/xQ )5|շ?a]7׍_Vu!,]22>UA\;@,_Ԃ%AN_3eXf,?9|/X@{9@YX@% nђ!-P=JwBc؟ _:opCy{.4FR&XI: qK20&+[8J}Xns'=}GΥ",)t,8[o8X;7NE>W3z0rIX0 ].ګzќ.Jl+(z|jXmA~Rpfp\> UaF'Ma``s~M&Q#]CY/O6ǡ\}G) *TSB 9%dO^4$s:4p- rTU9rf˞)ntc7ڮ4,3oW9ʿFD.kOa֝T? eOIb`mcwCqH,}9Bɘǖ3;HO[72(pʽ筨3T߄d}:d¾<4EtRA>qO4{P='[^ J>ǔemv\JXsKlٔK Zg&]6̞߹\ǰptʧ~i֙ʰ'/93Lt2>3[@^ (}c|~G:i3*B{YT(2:hj-یk,9k*VZ nT3QOs/jWI3~ryL'-tfɵH+8.V&[ń]o/ \#-SSUcU/̥;m\TK@&V +]Djاsehv]Q Zѫ ^\m3L=d>'yF Lϫ5ɔV*"> stream xZn6g ![j1$nl)njOqѕ{+q؋CRR8"5GQ0 ͌W?fܿ-Mũtg1NjY ufFt9}l,0**X1} b)˭g0rB^IYI))c@PY:! 7eRۖQH*R( sFЯ\$:_ NWe sIosU@$p%֛#q"4VmTJrꮣl dQ tNu27 ȭ?ƁޖVXЍ]#R6JY.j1IC[ɪwc#.)nnϞ^=ge9]^v*p\휭N{OiANw&z҂.zH}<*unDrO(w(M.i>u8HƜ͝?]oog $3MԝcIE^C*+r{={0N⥟ˁ*imO=z~N#:&Ys99y+q^;zf~H}18%lxd jtrF@SK[`/:[4VmYI}[mn)ȶr0LaNRET2f{ԛ8Jeȧ >N8~yB Wq=L0v4TKF){FP1%D;X|JTII,&crqHS4<&`3E5x,u)Q. }} ~Fd:j}j-pb Ep",ލ^>jJeNtq{{r26Uu]7y>T K=7|R,6qSBkapU8_mMiGh`JͶIJ\>7=URӕsdOsL9~i2- >Cq9e Re\QIM5Z)L6Q#A\R B}s9%8 믽HpL)mhA>˺$Yݔ/ nCy]\-'Y%LQ J( tG$!NCҨϽ&wj Sw:TcAQfAJXYjqڟO `0wAp$-m jm6񰜘Si X3Z@I7B]sG'9BX籍X"ﻇ57{uCo&S(FAgH3s#j1*″rG_BQ 'i7Zhj{6DP=^SrL: C|D78DQ >O6:kQ7Gx(f P]bI͖ ݐfܳy1ʑ Z ̕(8[}4dI~j {}WGK$d y:s]R2 f>q(cU4b.\-˨bk '=_,c/+r Q_⼉` 5,q0MM%{ܯ.e6l}jWij_yb{5x Hnja!>0w++iDkI6۶3ȁƌ<1̒mx I^0.=d/s$mnu,!mo {f}>j iWW'٥wx%&i([Oy䠪<&p!=^1FX@W [%{n<3%nrsV)ooT{l9]=' ^r}ql=n ;~J{m|j=p;_B`E8/0Ks|o6EiCZi_l´ծGM1Sy8 /@3CF& |xM6@FS.4@=^̠iFx,_#aw0 M-2Su#lh:_}w[ ܍ˮ-'-Ь6n}Sj_! RUZˠ/ R+ڑJnR)C=*kl^n.˃|> stream x\Ys$q~_:hkeE:Fi 7SnH#@PbJ$ė_5n_Of _7͟N3盳/'q|c^/'}+UNo|eqggi9ʹ仏rB$tSJQ$R-^J!,|F"%UZEcX@91g8.MyITp?Kjt2-۪0;WV˓ 1f:c̾{A(A9=۫6RV8O8'VQvz}s#]!U̘!ĽdU 'u E_ң|ΠiÿUܾ$u%|ڐ0(We 5ܾʚ,ԇC]:=k0%-ltڧXMr0JhAƳHUo;$uNov\RfFcW2E/y\燊')c4٠D͋ Vn.r'm8V}[64YNZG=MUKKF1.'%pYm*'M~6}}]:i#**%.[]f=re4#6a*IbԂ2e$<7+ vhWE= [ [$ΒC9Z#(\ᇳ?7k׎z7+-'vN>'VZ2Nkn8u{RB\!r k-dT(URI;͂t=ԗu6wuq5elc lnpIt\u=dQٿ%VH)S\ޢbFtAJ_~wzI/埊op"Q~8tj}%JluB^K 9rU:C"LRRos.cY8uF̔r7w0Woq'VIuCm"U[w0c| C­e&==@Nұ.*a" '.(Rf 5^aHP<|6 Ydq`%5N;&+qX%Hu}J+ĵyN7a~/ ں)&@vs8`9КjK~y Zm_ ~.םdVRc܄L]2M$g -k'y(8><λ6KMO2W}' )dτD%Rf~z}67~1FdaK?:qpA;Gr ܧ7 Xs]ƣ܆ӱ>sr Aj٤Kčf +Nb80)m΃ яQ'1}gO'UawK7ʯQOPkVL7"Q󞺔!ߖ11UAVcZܸwE5q AijG9!x-*7U?DT8LPN Gƭ:0ZFJ\CBk`S M ]F4\LhĀ##l^qMг/|O\k=aLe`֘j pǰBRf'ʥwZd Sa^_B1X___MI"3+g b}{s 3Me>J$B~ݗysGUy4_ޅџvmt[}~<̒V {=8h7"pl&9@1 7w$1k,^"!ZJ-,!9޾cP?\y4VM€т\R-#VTtr1 (aB5PYDž% UC(cz2r@z2WtSܣ]aȠ5MfNA*c,(M]L|?(Er?yGe򦤹ni^:*g[7_fͩv ;aFSk]]6O2+`?o\9',svRjj-X%~ycZi* tU *%Rc81e~{ߒJQ%J.c9&jKF]w}I 5 (PLlKD@,0g}RTCU$ #,lrA>קOa3$֝ք+.CBT5njfsƑ 1* gЀzFR%0#7Z%Ve?SNu3]vep#@C}z^'2pOxT~Vpȼ䑘oWI.TX<=S}sU엽Z"ډg;d$XWY/xf:͛:+3ӿ:VxtW[$ٟ@3Ti?I6aŅ G{,4J-FF4zBR#*1vIY((ma7}IJF@ғSSMSZ33%aԍ6|$Z[7nrԂ:ӫ~fA‘OBAʈA2P >ƍoĔڸ\G]v @f:K&e:׻55'zCxjXi 3鱐/桡X)E[vrCRU<Ƨy`F(-*y&_bKw R/ PAOz.NJ+@+f++)}wP,?2Y ;i<ށ&ˡ@ԬDB,lw ȐEV䡴Ƅw?/p|2 kd?raZFCqvN`XT &Pw}w}@;F8tVn~E[Hy6 g,c0~Û~kMc)ڃ6oP(j(4F]Uo Ccʱ)qܽ@2"Ӝz7; R{'?n!ﻛxMMΒKT] R-vYR3GD_o}Ğ8e(i@  %?8^U^jXZ *5̗t۷CvhGCjK1O2-ɧ;PYKH';hcviP5J85V8. v],Ni!8UjZ% <ъt;+R?2 Hc+2鯗a6w YNU!ˣ?,0U?)˴bZQ2ot,CO2ET6KWC7cD!P FIst,<Yhܛ%%o;)EO;o-ˆR |įH&%2){6cB0r޴=S踋wX5GZ*͹IP"MClL17Bb|$w^RmR&r9-2sJNn4^fJn+mOWĂfs5@8X ʠʗ71] ͉G.Q'5g{ǁϿq5-Dfr-|,5-&q9&Ygͥ*-[MŎSj{Guǭ D_o;#oXm 44d_3`D8"63n=Y`C^O_AFb:OtIL@㡏y4N=GlP:N7EhqYN;>`!35\s9|5&}#[8k˭y'6.U]dn˻ KYlJ(i5S(_ X Q}_N-Ֆ޳XqIy. }5CoT^**+oQ^I._ΛS)|W yDgr0 Ey+o)g5 =Nq#1ys$|v1-:*V8@M尰f4!1C)YMmim/(ݤz^uuZm3}hq˾pȓnЇW<5Y~B9Xۏ}U3Ƃ咿` '@JqKClWAQ!U}q1̈́EX:ojOu2)Ǥ6EM}!>ICP~JN54}S> stream xZKs7ŋgchfzrȔ),*hP ~qFj^BeR<؝G?{ iA_?_OH|PɣKm`C -? L,P؀(kcӽ/+htQL0\kpAQb˲_4RmԨ>tw4n6;Æ+ cPWo6?&.I"a t1AgRq0#PT`')DnnΤޔLacB$uפSVAC s!55$4f6uJtѥb68!1 i ŨZ a)'$" k-=.6f_V LC}M=_Y\bb2kv37ۍαрͶ[¢4,̽jNI}\ 0p\AZ_|߹0E.v)%brb){xr q8X*s=&NRSыʠϽh{ eLSA<`iTI{I﹩TH-0֤c6LD3?C q[-e 1H&]&@2=U/ $`ͽLƖ䘰+P?lwґ]Zs޺(a*+m/T# (;"k!"f77X$$wI|Yz:y킒2@SҴj2״ i~'Զ˅ݔ]AǭH>ŴFm(X^VP|x.R&1羊*EEmBpk6CZH:O'6lXh)Wm`r`*70Uӣ5ŀCy>5va0#!mnZ6[=w>nCAOY1ʰ$y556XW 궍:A|}H5jJBQ p'' @bM@W^PNF\"n0}%_c.aLDkeX XמDo} I0 Q@zpYqCYA.IHz`hgaSѡIȖP$oLhx$ĂuTUݛ𦛃*?fƺ]( U4fJIHCa`̕ 5DƺCP>[&=^s5YIڗ% T G;JPS$&jEA9.@8B~Ma Ԟs"%8rZ -{ bsf6w33.ʶ&`ܧ}V:e"dh X0FƳ/<>6we!iz9+h la'Yh.Jm*':+ivA0ms /B^1=WSpH 5jvk/=N۶<߹\1q{5vvx͠%8/+Τ4p3zpnCř"ܭ<컀.)@*:hwwC|͔No 8+Y+k&w Q dr]'_;j\Afk4~|t6bKUMXFʶ-> ku>Ex̼>:$9FՕ]-ox N2pQu=Bji2 P~3D|vH`E<ل}@u^K'ծd- < F2v+t,N`qgT:G8FO)eFއefTA x"Rp/eDѝBh2OS~j?vtt1Lx/LFᗮ&u,O=bXgQVUGPP:-."5`endstream endobj 305 0 obj << /Filter /FlateDecode /Length 4770 >> stream x[[oHv~_Hθk~fL&`AvV jeoTYU$%ju.s;9x/g^8xB=YהYsn^kmaRRa(+5--g{ǝqpjN/Œ rq:6-+Kmޓ͆߼7o/7*^sv~y}F\rUox|*!p}\L;ҵ$Оn^rz{m>[j;vԤ^wfz =l-{qE!plcδ/`_vPƤERH7-%)u^$3ӝw&Bk298*)Cw& Ξ\Y8.tp N8i~i$/9G_(涒QTШ<6o, uզ ~u =U+zWQ uZZuKzE߄g퓧Iۡ,wP*c+=(pxp0ѧ<YCs\OCz*d޸4iizxҌDY4<9w΀L.{>vw:,nԂT(7 " OW  ٠5ZJ+SQlVZR%T03:xhd/6KJHꓣRbJ= E|pWUO0o-"eBQ-Wjt%;{v^SD?D4'!r\v֡T2K XZ6H. zJcPah& kcOeWG)@ȕPCZџ+M3$HZ|)q)&9I"CIf.YBj?CIr)ϭ:$pHIE7c]6z$t<|&Cf+])o책P9qsB/#Kd}4 `e"!5 VK~j8!@ĭ2)ϷPgmRbNrK'B6F ɖL&0 E4f ^?B7l g8^` c^  sH\T y#cF) vrHV-Goc 8맀)Pl7y*+w5!cT%(d ^qQ5LH )ȲL\x\9b2PP!msQ~@ X8K^0s18C%Q0͢પ7R9f}< t(R!v0ajV΁+/'C6@FIVI%jQ(œO!С\rsSͅ  y>pHoSXZ.޽Ű|I j$^W@*ޢ!hK>nv2j'|gUn _?}7= +ec ҏ#x+FaD dykj`*e=-@-M'/k;=wi eyD Mr~IM790-UiE*sq)S1.)s m+)ARQD ̩ S&W9*(R: 1澜ʡO*S<+%Jy2.UBύQPZ֪srai⮎1M}TVck&0% G^[7B r a.`c j>8ԵCoK _7d'?# bD17i֮eT=+CnzJ[^rۂoR 4o,g,;X{j| O$v2fųRh+C{_mcSR$XcsY^,U3f<7/GkX p:BǦ+>Cρzݗz䖠>l4GL(<8QW]uPt&*fRЂF2A͆!n C>;SGL@Cen¿doE(P`)M U 5Qޏ۞ט9U ePJ:l!nQNaM޽1UͽдSHEK_*C3 )ꇿjN1i%J<@ސ@@᪕0Ѱ蒭6Us,{䭂阮I&Sr@\ǔw qؗb4$imrf(?]L_֯߳ Vg۟'Gv`0/_CV򌁡KG9|+7howVPO}(@wlu`_pW7n6/$uقV^[0˗{ sH=!͛͋4!Wo`?l,]{v4  ޿!qBsIatdO,M>Sm9vz wܙr߽MO0gkש%m3ILydWv<0E{5oybc{Zj?Ygz0endstream endobj 306 0 obj << /Filter /FlateDecode /Length 5471 >> stream x\ے}_>+5 qU>P^ۡ]צf "g8*{jF&j 3FHd<_6ˍW+J_7WwWOy "(ipvp{?³m=xg/oϵ:뇾#س]+B`cw_tC?m~WOP.A\\1i?]/WOMW[y%6Z.Ɓ2*Yzsp˷*Z4&]7NI`ߧ"xN ɦ_ǒGS*Ǻ(# %<>,ȘǃZUzȤBJ,lvG\싓BtS|3>C쯕1u+8_. lx򵑈aOze ҅q3(cB 4ٰM8Wݼm2k͎o[RC`]j]%2Ԟkl_΢Vq*^ێwփ]`rB}(i YnIT6S:;_i1t0fR~J3j˻XYnڝ&S]})Bi1yXf#5mY,\UЦwwC4w[@-Rv?9`;6nDi <Ŭ1pP0GCiz*:U@=JzB|-q|0,tt(r4 Rd ~+WlB8 %yrR[@!%HXjllx.71Դح-dmZ=.-=%4bwy(mbOCwS~hXB9Sx.qI%Ss;6mMɅ8TF-]=o}qv1NW ?;}نv sr/zJ.:.1B9@ nC~  ֆ&7 BZa:%/T$Іl i> x.?jZY8#` 8tx=G4{J~(8JӐ& (` ēZE1'5>+N|ȦtñWV_!ǧE61^!AC ,3\BOy9g=EbX.~:okx0gbtbjR3G1g:ej6K['pHǜBumd N|ާC9ǃp87Y):J+2toj7|`ӇdycǮlEHMNDZMxˍ?yU rVݟeon~.KnC/(Zu)TD6,cԬ8qPo)%Tn4#m:@tEh03+A Pil:_b P'k|; NYomk9Xؤ |Խyp+Jʌf?qGmw< ?>OGVVr6UZ"9SڜҦjd6!AP5 Y`Iߍs't0>gVv;gC т\: [DDPnZ+|,ꢇ֦bMŕxKJ><]ž[XQ:٠q1TemΤgK\(\1X4hB#\!Y|bONeWW gZ;B.#R)f݅ڒ4mKY) 'ҔjTW[!@ 0f傋,`5.4kZVNh,Yi+UJ*kZ-q~JsޯXpz_#TCH8\b|ʸ} T:Uk\ [5"͗!jjBJ'>2U*ycy,qXݖǮذcˎbtH%δL _W,37lב8b~\\U:5W:WTQ=COqٮ:T!䗤QACYVmʭpTMt$9rA2*A )LUhG5jRERU,j_7#ߤʦ -+g4vA|w-)gja [m6c/ViԵ5W-`8e.kLHōâ|tk;P6e4\!6UTLntoIþ YGүn9!GTW]K"neM_3sk@窨R.|<6Hɥpe W9_OX*,ʕ]_ c!x I:0%ЬtP`>'i j E[UY*x^P1Mz$ /PMFiɝ*,?70̧*T"W{b G_؏FU\+]WLuu +)PtI,^h-@*ynHnW7rA~5#Jm<bҫX:+~m/C0<?h1Nr۶ZoX<^ &aۙE$d ܁׃/J λsL*ʓS_1Ì1#~V)cM0M)JvM?ˡnzz-2 sבT^`1=p7vNM1{(Od^?9$WSJ 4OY,o}ė\^/\'Ba}%x" Ȕ;Ee?= xFڦH`z]B#^J]M~r)NŋBf\ҏT)j>Â@5nJgXgѥxZ%ɺU#QNPZ &:VeV4jU:ׁZ pYwZnܷEjt_\ޛ(2;Vz !3a͚|ɥʘj sLy|BeH/d=ڙ&gh8G>](N@/Y:d C`NRZ]ԟ\?l, 璲T8-ۆ5:ѕg*GKY|լf\|KsчRF!%R4FBa5I҉DB-]MZ2N#-Cp1VÛ(-Y^Z6K?QIaA!#a/~DۻX ]P~OW՛7[e@# GrѤ4gO(x!0R voyFՒ%:ޯu2XzBiU6Ţ5v8h>[$bqTp,\˗P/&냙4lu0U]l$|d8. .^.Y؇[^+QAԩrƥtv"iSLz\{NX]90!%ՍCì ]"ŇM4QŗaDn~;x0cyY'8endstream endobj 307 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 496 >> stream xLMSans10-Bold V  RCR+$3 o'pvnwjjhiMMc^ӋыѕӸɜɋzvkjjiij'$vDFEFu&()&FEwvu$$,!>ʚ걋Ym^gfg8s+fP}Uu]IW+vw`aa``aa`u^i   To endstream endobj 308 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 775 >> stream x5kHSqǹsN4-sht1r$fִ9]tS4=8͜:S`t C( C*1R>/ ϘzlCrlrD~&\ (XT Yak֮[ 1h!RDz!yXOʱNjF #3#2qFiN<I zCtUæ.]<&cƓqx Ojɛ㭖3QK_[]pph>wkI2{%5 7Jjܝ+{Ӧ;@1|(GI*)@TZmP$r?X;h U/'# S?p^82 Ҍ6lpy(]S~s[}Վl=y hF<\53 0Yv( "{cܢKc7]8f t%1/E3I;9,3equfQ7X9}Y ePz;r*{!m).[.'ݢrZrsU5{p> stream x5kHSqgsաmkمξ(E!]4 /%AVJXSG$mI6ݻ9xissA$L5,.E{ET0$DFQe*-.,uXxOJrP 䫟ӫȟ(mAhj%k+# !G,c`&d%; v =okPEuNv(Sc#?]=;鞇)y {y[fjϳ [e땺d2Y\}}p'U♴^=~Ρjiw|n1S{w0]'٤b:w<9 C?&e(MGqe½/= bg%plW(4x,IQ1nTG5oK 6iUt3Izr)LNp@,5+ 7,5y"eT ɂ\$ G^hx~)&/ѳB(ݯ{% Z~/.RF~oj4F1yZdKڴ\6`#M5 mzح|% NJ'MpPnnoFb$H[. gtsyU)e3h}[«qﶡ7"*>-ݬ·*C}NjrgJB~Vendstream endobj 310 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5472 >> stream xXyXSg!{PFZZ[VjZqGQE-$!d@" hJ];ڱiֶz.sQ;t:_ɹy9GAus E%KW?0V%8h+1Zّ ЫA'bp?ts/%& x3jA˜ظ [-V Y]v'NFSj5Q˩Jj$EPk5ZGyP7j5ZHE-&SW)j*FCMzS.TR)55N&;Q 裸4V[nziΗUCTIGzƕAco{ ^彻K[E}ӵ}^_UW_P? d2ݾj'J'E;^3@A/]~w}`L$!_iRcf-R ̀΂FWvPfچj N٩&+!҇-'0DjSa"]DJLbkp͍I4 (2Ϡ.)_^ }[G뜵<7`妣p' H/l/px2$as(D)^<(*:vXxCTvH"7M.^Bqht,  MHבd B>rܡ-;FR*p9kl߸x1ܵq~'ќZs858R;O夌'mJup-6CI(؇X)|x_X-Ffn?X]^h!vW~W Xch(ksp!#ȥqaL%Nl'?9dj5oN6鋁)k%.OLkNN֐d ![52 Wk?؝w.5"]GVrcGI{PF?n.c2Jĕ|gПRb]`':}nDpk>5M\r~銖>9 x;ܖ;j\Ax|u2ݪf]YEtĨp.Qɏ[`Ȫkz-P F^K7s۸Ǫp֫6rb\ ٖ Q/XOWZwi g|b!P'Ŧ〬yBa3c胅8U6S ܱrsyT~M68.EʁCnOXKyzÖpW$0b=1G͆U/ ;,\5U2{DUpEAʎ5U|\)޶'0wnIu^13 [B*wz3@f10%[E(R9!--Sl&xWHIXQ/x]BՎt{3G@/NpB1'$HΓH+1˸be izwybELa]# "X S h{~ M\8HAsw TSy$kX_5koGJJGQn+j^$j]H+^7=a횵~YkAdcCqA_9] gʃCPHc68=ʧuw%' ! wm5D@<2 ĢbŽF4p"Q0X+AAbaq ̐^ ! YܵQ(6mC5EcMمq'';5[gwX '~:w0FMhIv kWnyG^*Zh)4C=޶uLrGMmyEMښuoӫ soxŮ?͸q}%;Z&OP1sB7m_sTωBi?Xq4`~^X}N60!?Ef(NxHL3ߞCF PTX[7D}p'֌!-[a͹R u F,.( ʪŚz{X0@&Re{n1WZ َ-W~Kz@z-%uV=|Nn)pͨLjؐ&/6dv utsR%dDC9 K+p ƷfB8_{(D׊/ҿpc]] ;b@]VjV!ЖY5P)M)t; 冢Ik=9-}\b:Gf<%a8dB?(krvZ5?;-4&sL gjъUvh4{do޼JυWzDk=G 3x4Q~?n,ߦQu cXf6_udKd 4@[ɚU œj ] 9#K(Wva=$V\y|4y" Cu&ν X1-|b+B^9/ѵplgɜ]]p))r9iBF6|a'xÖژcƳ>U*Z-OzJG {_$K/-ui8k"LTl}+c*;jL&T,#4l‰dD65)$#%CoܿCgA~zP J"fQvWtw︱$>=8ܬ#yB 2"4c[9vH RS ,n-+ 8RK.ܬŌZ׺'7,iݮI4I=e2# Ɯ_onJ`n! d4D)O-rԴ+ns,~^Rl;&u1?s=O*p\i:լ~TGWFGVGWWs.XG+pmEtэu\CO.MԼ^y1N]'Ǝ(, &}QW_jR2Ɣ .y{Aqk #ݧM>۪o*cO {1p ߀3y rxMӑt<LE\qYjH= |ci5_t  % VK4(.BtXȅB$Es &""l{| koX>guD qWٱJRc?hU7w6FX >F~Ze=h2{_Nں짫.:]|ōmƒ^Z~%.+%c@/*:Һ:Hm@ɨ3V@$ Ydev YE]}VqDG@AaVI;;49;-P k >T_r*K p>z(*?W=3@<0dop:9w#=&CY'kW՗0fqW.6aӸgO^˓z .g:n Cj"xڊ TDC7N j{M>S:઄:}jmjZUEB3yO!O B1:&9vqm#z%^vhdDUEto2݇D(J > stream x%LMSans9-Regularu`  HS4quS.@&XXӽv_Y[0"1('rc]O|v}_MIRM2:?L{4N惺uPU  To 8SYendstream endobj 312 0 obj << /Type /XRef /Length 211 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 313 /ID [<3636a75f041fd854ef42d0ff4878b8cf>] >> stream xcb&F~0 $8JP?L lzz4)Dc &FF(6-A*Pڐ"*@CX"A$T"'H L | 6 D2iHaq{D "YR@$7&0 "95+X خ[ R4 l6 ܊`6`7x]6w7Xܞ$ endstream endobj startxref 149778 %%EOF Rcpp/vignettes/Rcpp-jss-2011.Rnw0000644000176200001440000000044513555366266015764 0ustar liggesusers\documentclass{article} \usepackage{pdfpages} %\VignetteIndexEntry{Rcpp-JSS-2011} %\VignetteKeywords{Rcpp, foreign function interface, .Call, C++, R} %\VignettePackage{Rcpp} %\VignetteEncoding{UTF-8} \begin{document} \includepdf[pages=-, fitpaper=true]{pdf/Rcpp-jss-2011.pdf} \end{document} Rcpp/vignettes/Rcpp-quickref.Rnw0000644000176200001440000000041313555366266016410 0ustar liggesusers\documentclass{article} \usepackage{pdfpages} %\VignetteIndexEntry{Rcpp-quickref} %\VignetteKeywords{Rcpp, quickref, R, Cpp} %\VignettePackage{Rcpp} %\VignetteEncoding{UTF-8} \begin{document} \includepdf[pages=-, fitpaper=true]{pdf/Rcpp-quickref.pdf} \end{document} Rcpp/vignettes/Rcpp-introduction.Rnw0000644000176200001440000000041213555366266017317 0ustar liggesusers\documentclass{article} \usepackage{pdfpages} %\VignetteIndexEntry{Rcpp-introduction} %\VignetteKeywords{Rcpp, R, Cpp} %\VignettePackage{Rcpp} %\VignetteEncoding{UTF-8} \begin{document} \includepdf[pages=-, fitpaper=true]{pdf/Rcpp-introduction.pdf} \end{document} Rcpp/vignettes/Rcpp-extending.Rnw0000644000176200001440000000041613555366266016567 0ustar liggesusers\documentclass{article} \usepackage{pdfpages} %\VignetteIndexEntry{Rcpp-extending} %\VignetteKeywords{Rcpp, extending, R, Cpp} %\VignettePackage{Rcpp} %\VignetteEncoding{UTF-8} \begin{document} \includepdf[pages=-, fitpaper=true]{pdf/Rcpp-extending.pdf} \end{document} Rcpp/vignettes/Rcpp-libraries.Rnw0000644000176200001440000000041513652710366016545 0ustar liggesusers\documentclass{article} \usepackage{pdfpages} %\VignetteIndexEntry{Rcpp-libraries} %\VignetteKeywords{Rcpp, Package, Library} %\VignettePackage{Rcpp} %\VignetteEncoding{UTF-8} \begin{document} \includepdf[pages=-, fitpaper=true]{pdf/Rcpp-libraries.pdf} \end{document} Rcpp/vignettes/Rcpp-modules.Rnw0000644000176200001440000000041013555366266016244 0ustar liggesusers\documentclass{article} \usepackage{pdfpages} %\VignetteIndexEntry{Rcpp-modules} %\VignetteKeywords{Rcpp, modules, R, Cpp} %\VignettePackage{Rcpp} %\VignetteEncoding{UTF-8} \begin{document} \includepdf[pages=-, fitpaper=true]{pdf/Rcpp-modules.pdf} \end{document} Rcpp/vignettes/Rcpp-attributes.Rnw0000644000176200001440000000042113555366266016764 0ustar liggesusers\documentclass{article} \usepackage{pdfpages} %\VignetteIndexEntry{Rcpp-attributes} %\VignetteKeywords{Rcpp, attributes, R, Cpp} %\VignettePackage{Rcpp} %\VignetteEncoding{UTF-8} \begin{document} \includepdf[pages=-, fitpaper=true]{pdf/Rcpp-attributes.pdf} \end{document} Rcpp/src/0000755000176200001440000000000014740551304011750 5ustar liggesusersRcpp/src/module.cpp0000644000176200001440000001554513701060673013753 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // Module.cpp: Rcpp R/C++ interface class library -- Rcpp modules // // Copyright (C) 2010 - 2017 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #define COMPILING_RCPP #include #include "internal.h" typedef Rcpp::XPtr XP_Module; typedef Rcpp::XPtr XP_Class; typedef Rcpp::XPtr XP_Function; RCPP_FUN_1(bool, Class__has_default_constructor, XP_Class cl) { return cl->has_default_constructor(); } RCPP_FUN_2(SEXP, Module__get_function, XP_Module module, std::string fun) { return module->get_function(fun); } RCPP_FUN_2(bool, Class__has_method, XP_Class cl, std::string m) { // #nocov start return cl->has_method(m); } RCPP_FUN_2(bool, Class__has_property, XP_Class cl, std::string m) { return cl->has_property(m); } RCPP_FUN_1(std::string, Class__name, XP_Class cl) { return cl->name; } RCPP_FUN_2(bool, Module__has_function, XP_Module module, std::string met) { return module->has_function(met); } RCPP_FUN_2(bool, Module__has_class, XP_Module module, std::string cl) { return module->has_class(cl); } // #nocov end RCPP_FUN_2(Rcpp::CppClass, Module__get_class, XP_Module module, std::string cl) { return module->get_class(cl); } RCPP_FUN_1(bool, CppObject__needs_init, SEXP xp) { // #nocov start return R_ExternalPtrAddr(xp) == 0; } RCPP_FUN_1(Rcpp::CharacterVector, CppClass__methods, XP_Class cl) { return cl->method_names(); } RCPP_FUN_1(Rcpp::CharacterVector, CppClass__properties, XP_Class cl) { return cl->property_names(); } RCPP_FUN_1(Rcpp::List, CppClass__property_classes, XP_Class cl) { return cl->property_classes(); } RCPP_FUN_1(Rcpp::IntegerVector, CppClass__methods_arity, XP_Class cl) { return cl->methods_arity(); } RCPP_FUN_1(Rcpp::LogicalVector, CppClass__methods_voidness, XP_Class cl) { return cl->methods_voidness(); } RCPP_FUN_2(bool, CppClass__property_is_readonly, XP_Class cl, std::string p) { return cl->property_is_readonly(p); } RCPP_FUN_2(std::string, CppClass__property_class, XP_Class cl, std::string p) { return cl->property_class(p); } RCPP_FUN_1(Rcpp::IntegerVector, Module__functions_arity, XP_Module module) { return module-> functions_arity(); } // #nocov end RCPP_FUN_1(Rcpp::CharacterVector, Module__functions_names, XP_Module module) { return module-> functions_names(); } RCPP_FUN_1(std::string, Module__name, XP_Module module) { // #nocov start return module->name; } // #nocov end RCPP_FUN_1(Rcpp::List, Module__classes_info, XP_Module module) { return module->classes_info(); } RCPP_FUN_1(Rcpp::CharacterVector, Module__complete, XP_Module module) { // #nocov start return module->complete(); } RCPP_FUN_1(Rcpp::CharacterVector, CppClass__complete, XP_Class cl) { return cl->complete(); } // these operate directly on the external pointers, rather than // looking up the property in the map // #nocov end RCPP_FUN_3(SEXP, CppField__get, XP_Class cl, SEXP field_xp, SEXP obj) { return cl->getProperty(field_xp, obj); } RCPP_FUN_4(SEXP, CppField__set, XP_Class cl, SEXP field_xp, SEXP obj, SEXP value) { cl->setProperty(field_xp, obj, value); return R_NilValue; } RCPP_FUN_2(SEXP, CppObject__finalize, XP_Class cl, SEXP obj) { cl->run_finalizer(obj); return R_NilValue; } // .External functions SEXP InternalFunction_invoke(SEXP args) { BEGIN_RCPP SEXP p = CDR(args); XP_Function fun(CAR(p)); p = CDR(p); UNPACK_EXTERNAL_ARGS(cargs,p) return fun->operator()(cargs); END_RCPP } SEXP Module__invoke(SEXP args) { // #nocov start BEGIN_RCPP SEXP p = CDR(args); XP_Module module(CAR(p)); p = CDR(p); std::string fun = Rcpp::as(CAR(p)); p = CDR(p); UNPACK_EXTERNAL_ARGS(cargs,p) return module->invoke(fun, cargs, nargs); END_RCPP } // #nocov end SEXP class__newInstance(SEXP args) { SEXP p = CDR(args); XP_Module module(CAR(p)); p = CDR(p); XP_Class clazz(CAR(p)); p = CDR(p); UNPACK_EXTERNAL_ARGS(cargs,p) return clazz->newInstance(cargs, nargs); } // relies on being set in .onLoad() SEXP rcpp_dummy_pointer = R_NilValue; #define CHECK_DUMMY_OBJ(p) if (p == rcpp_dummy_pointer) throw Rcpp::not_initialized() SEXP class__dummyInstance(SEXP args) { SEXP p; if (args == R_NilValue) { return rcpp_dummy_pointer; // #nocov } p = CDR(args); if (p != R_NilValue) { rcpp_dummy_pointer = CAR(p); } return rcpp_dummy_pointer; } SEXP CppMethod__invoke(SEXP args) { // #nocov start SEXP p = CDR(args); // the external pointer to the class XP_Class clazz(CAR(p)); p = CDR(p); // the external pointer to the method SEXP met = CAR(p); p = CDR(p); // the external pointer to the object SEXP obj = CAR(p); p = CDR(p); CHECK_DUMMY_OBJ(obj); // additional arguments, processed the same way as .Call does UNPACK_EXTERNAL_ARGS(cargs,p) return clazz->invoke(met, obj, cargs, nargs); } // #nocov end SEXP CppMethod__invoke_void(SEXP args) { SEXP p = CDR(args); // the external pointer to the class XP_Class clazz(CAR(p)); p = CDR(p); // the external pointer to the method SEXP met = CAR(p); p = CDR(p); // the external pointer to the object SEXP obj = CAR(p); p = CDR(p); CHECK_DUMMY_OBJ(obj); // additional arguments, processed the same way as .Call does UNPACK_EXTERNAL_ARGS(cargs,p) clazz->invoke_void(met, obj, cargs, nargs); return R_NilValue; } SEXP CppMethod__invoke_notvoid(SEXP args) { SEXP p = CDR(args); // the external pointer to the class XP_Class clazz(CAR(p)); p = CDR(p); // the external pointer to the method SEXP met = CAR(p); p = CDR(p); // the external pointer to the object SEXP obj = CAR(p); p = CDR(p); CHECK_DUMMY_OBJ(obj); // additional arguments, processed the same way as .Call does UNPACK_EXTERNAL_ARGS(cargs,p) return clazz->invoke_notvoid(met, obj, cargs, nargs); } namespace Rcpp{ static Module* current_scope ; } Rcpp::Module* getCurrentScope() { return Rcpp::current_scope; } void setCurrentScope(Rcpp::Module* scope) { Rcpp::current_scope = scope; } Rcpp/src/Makevars.win0000644000176200001440000000004312253723677014250 0ustar liggesusersPKG_CPPFLAGS = -I../inst/include/ Rcpp/src/barrier.cpp0000644000176200001440000001520614647556006014120 0ustar liggesusers // barrier.cpp: Rcpp R/C++ interface class library -- write barrier // // Copyright (C) 2010 - 2020 Dirk Eddelbuettel and Romain Francois // Copyright (C) 2021 - 2022 Dirk Eddelbuettel, Romain Francois and Iñaki Ucar // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #define COMPILING_RCPP #define USE_RINTERNALS #include #include #include #include #include #include "internal.h" // [[Rcpp::register]] SEXP get_string_elt(SEXP x, R_xlen_t i) { // #nocov start return STRING_ELT(x, i); } // [[Rcpp::register]] const char* char_get_string_elt(SEXP x, R_xlen_t i) { return CHAR(STRING_ELT(x, i)); } // [[Rcpp::register]] void set_string_elt(SEXP x, R_xlen_t i, SEXP value) { SET_STRING_ELT(x, i, value); } // [[Rcpp::register]] void char_set_string_elt(SEXP x, R_xlen_t i, const char* value) { SET_STRING_ELT(x, i, Rf_mkChar(value)); } // [[Rcpp::register]] SEXP* get_string_ptr(SEXP x) { // TODO: should we deprecate this? return const_cast(RCPP_STRING_PTR(x)); } // [[Rcpp::register]] SEXP get_vector_elt(SEXP x, R_xlen_t i) { return VECTOR_ELT(x, i); } // [[Rcpp::register]] void set_vector_elt(SEXP x, R_xlen_t i, SEXP value) { SET_VECTOR_ELT(x, i, value); } // [[Rcpp::register]] SEXP* get_vector_ptr(SEXP x) { // TODO: should we deprecate this? return const_cast(RCPP_VECTOR_PTR(x)); // #nocov end } // [[Rcpp::register]] void* dataptr(SEXP x) { return DATAPTR(x); } // [[Rcpp::register]] const char* char_nocheck(SEXP x) { return CHAR(x); } static bool Rcpp_cache_know = false; static SEXP Rcpp_cache = R_NilValue; #define RCPP_HASH_CACHE_INDEX 4 #define RCPP_CACHE_SIZE 5 #ifndef RCPP_HASH_CACHE_INITIAL_SIZE #define RCPP_HASH_CACHE_INITIAL_SIZE 1024 #endif namespace Rcpp { static SEXP Rcpp_precious = R_NilValue; // [[Rcpp::register]] void Rcpp_precious_init() { Rcpp_precious = CONS(R_NilValue, R_NilValue); // set up R_PreserveObject(Rcpp_precious); // and protect } // [[Rcpp::register]] void Rcpp_precious_teardown() { R_ReleaseObject(Rcpp_precious); // release resource } // [[Rcpp::register]] SEXP Rcpp_precious_preserve(SEXP object) { if (object == R_NilValue) { return R_NilValue; } PROTECT(object); SEXP cell = PROTECT(CONS(Rcpp_precious, CDR(Rcpp_precious))); SET_TAG(cell, object); SETCDR(Rcpp_precious, cell); if (CDR(cell) != R_NilValue) { SETCAR(CDR(cell), cell); } UNPROTECT(2); return cell; } // [[Rcpp::register]] void Rcpp_precious_remove(SEXP token) { if (token == R_NilValue || TYPEOF(token) != LISTSXP) { return; } SET_TAG(token, R_NilValue); SEXP before = CAR(token); SEXP after = CDR(token); SETCDR(before, after); if (after != R_NilValue) { SETCAR(after, before); } } } // only used for debugging SEXP get_rcpp_cache() { if (! Rcpp_cache_know) { SEXP getNamespaceSym = Rf_install("getNamespace"); // cannot be gc()'ed once in symbol table Rcpp::Shield RcppString(Rf_mkString("Rcpp")); Rcpp::Shield call(Rf_lang2(getNamespaceSym, RcppString)); Rcpp::Shield RCPP(Rf_eval(call, R_GlobalEnv)); Rcpp_cache = Rf_findVarInFrame(RCPP, Rf_install(".rcpp_cache")); Rcpp_cache_know = true; } return Rcpp_cache; } namespace Rcpp { namespace internal { // [[Rcpp::register]] SEXP get_Rcpp_namespace() { return VECTOR_ELT(get_rcpp_cache() , 0); } } } // [[Rcpp::register]] SEXP rcpp_get_stack_trace() { return VECTOR_ELT(get_rcpp_cache(), 3); } // [[Rcpp::register]] SEXP rcpp_set_stack_trace(SEXP e) { SET_VECTOR_ELT(get_rcpp_cache(), 3, e); return R_NilValue; } SEXP set_error_occured(SEXP cache, SEXP e) { SET_VECTOR_ELT(cache, 1, e); return R_NilValue; } SEXP set_current_error(SEXP cache, SEXP e) { SET_VECTOR_ELT(cache, 2, e); return R_NilValue; } SEXP init_Rcpp_cache() { SEXP getNamespaceSym = Rf_install("getNamespace"); // cannot be gc()'ed once in symbol table Rcpp::Shield RcppString(Rf_mkString("Rcpp")); Rcpp::Shield call(Rf_lang2(getNamespaceSym, RcppString)); Rcpp::Shield RCPP(Rf_eval(call, R_GlobalEnv)); Rcpp::Shield cache(Rf_allocVector(VECSXP, RCPP_CACHE_SIZE)); // the Rcpp namespace SET_VECTOR_ELT(cache, 0, RCPP); set_error_occured(cache, Rf_ScalarLogical(FALSE)); // error occured set_current_error(cache, R_NilValue); // current error SET_VECTOR_ELT(cache, 3, R_NilValue); // stack trace Rcpp::Shield tmp(Rf_allocVector(INTSXP, RCPP_HASH_CACHE_INITIAL_SIZE)); SET_VECTOR_ELT(cache, RCPP_HASH_CACHE_INDEX, tmp); Rf_defineVar(Rf_install(".rcpp_cache"), cache, RCPP); return cache; } // [[Rcpp::register]] SEXP reset_current_error() { // #nocov start SEXP cache = get_rcpp_cache(); // error occured set_error_occured(cache, Rf_ScalarLogical(FALSE)); // current error set_current_error(cache, R_NilValue); // stack trace SET_VECTOR_ELT(cache, 3, R_NilValue); return R_NilValue; } // [[Rcpp::register]] int error_occured() { SEXP err = VECTOR_ELT(get_rcpp_cache(), 1); return LOGICAL(err)[0]; } // [[Rcpp::internal]] SEXP rcpp_error_recorder(SEXP e) { SEXP cache = get_rcpp_cache(); // error occured set_error_occured(cache, Rf_ScalarLogical(TRUE)); // current error set_current_error(cache, e); return R_NilValue; } // [[Rcpp::register]] SEXP rcpp_get_current_error() { return VECTOR_ELT(get_rcpp_cache(), 2); // #nocov end } // [[Rcpp::register]] int* get_cache(int m) { SEXP cache = get_rcpp_cache(); SEXP hash_cache = VECTOR_ELT(cache, RCPP_HASH_CACHE_INDEX); int n = Rf_length(hash_cache); if (m > n) { Rcpp::Shield new_hash_cache(Rf_allocVector(INTSXP, m)); hash_cache = new_hash_cache; SET_VECTOR_ELT(cache,RCPP_HASH_CACHE_INDEX, hash_cache); } int *res = INTEGER(hash_cache); std::fill(res, res+m, 0); return res; } Rcpp/src/date.cpp0000644000176200001440000013107414625104621013375 0ustar liggesusers// Date.cpp: Rcpp R/C++ interface class library -- Date type // // Copyright (C) 2010 - 2023 Dirk Eddelbuettel and Romain Francois // // The mktime00() as well as the gmtime_() replacement function are // Copyright (C) 2000 - 2010 The R Development Core Team. // // gmtime_() etc are from the public domain timezone code dated // 1996-06-05 by Arthur David Olson. // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #define COMPILING_RCPP #include // for TRUE,FALSE #include #include // for gmtime #include namespace Rcpp { // Taken (in 2010) from R's src/main/datetime.c and made a member function called with C++ reference // Later, R added the following comment we now (in 2016) add /* There are two implementation paths here. 1) Use the system functions for mktime, gmtime[_r], localtime[_r], strftime. Use the system time_t, struct tm and time-zone tables. 2) Use substitutes from src/extra/tzone for mktime, gmtime, localtime, strftime with a R_ prefix. The system strftime is used for locale-dependent names in R_strptime and R_strftime. This uses the time-zone tables shipped with R and installed into R_HOME/share/zoneinfo . Our own versions of time_t (64-bit) and struct tm (including the BSD-style fields tm_zone and tm_gmtoff) are used. For path 1), the system facilities are used for 1902-2037 and outside those limits where there is a 64-bit time_t and the conversions work (most OSes currently have only 32-bit time-zone tables). Otherwise there is code below to extrapolate from 1902-2037. Path 2) was added for R 3.1.0 and is the only one supported on Windows: it is the default on macOS. The only currently (Jan 2014) known OS with 64-bit time_t and complete tables is Linux. */ // Now, R only ships share/zoneinfo on Windows AFAIK /* Substitute for mktime -- no checking, always in GMT */ // [[Rcpp::register]] double mktime00(struct tm &tm) { static const int days_in_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; static const int year_base = 1900; #define isleap(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0) #define days_in_year(year) (isleap(year) ? 366 : 365) int day = 0; int i, year, year0; double excess = 0.0; day = tm.tm_mday - 1; year0 = year_base + tm.tm_year; /* safety check for unbounded loops */ if (year0 > 3000) { excess = (int)(year0/2000) - 1; // #nocov start year0 -= (int)(excess * 2000); } else if (year0 < 0) { excess = -1 - (int)(-year0/2000); year0 -= (int)(excess * 2000); // #nocov end } for(i = 0; i < tm.tm_mon; i++) day += days_in_month[i]; if (tm.tm_mon > 1 && isleap(year0)) day++; tm.tm_yday = day; if (year0 > 1970) { for (year = 1970; year < year0; year++) day += days_in_year(year); } else if (year0 < 1970) { for (year = 1969; year >= year0; year--) day -= days_in_year(year); } /* weekday: Epoch day was a Thursday */ if ((tm.tm_wday = (day + 4) % 7) < 0) tm.tm_wday += 7; return tm.tm_sec + (tm.tm_min * 60) + (tm.tm_hour * 3600) + (day + excess * 730485) * 86400.0; } #undef isleap #undef days_in_year #include "sys/types.h" /* for time_t */ #include "string.h" #include "limits.h" /* for CHAR_BIT et al. */ #define _NO_OLDNAMES /* avoid tznames */ #include "time.h" #undef _NO_OLDNAMES #include #ifndef EOVERFLOW # define EOVERFLOW 79 #endif #include "stdlib.h" #include "stdint.h" #include "stdio.h" #include "fcntl.h" #include "float.h" /* for FLT_MAX and DBL_MAX */ #include // solaris needs this for read() and close() /* merged from private.h */ #define TYPE_BIT(type) (sizeof (type) * CHAR_BIT) #define TYPE_SIGNED(type) (((type) -1) < 0) #define TYPE_INTEGRAL(type) (((type) 0.5) != 0.5) #define TWOS_COMPLEMENT(t) ((t) ~ (t) 0 < 0) #define GRANDPARENTED "Local time zone must be set--see zic manual page" #define YEARSPERREPEAT 400 /* years before a Gregorian repeat */ #define AVGSECSPERYEAR 31556952L #define SECSPERREPEAT ((int_fast64_t) YEARSPERREPEAT * (int_fast64_t) AVGSECSPERYEAR) #define SECSPERREPEAT_BITS 34 /* ceil(log2(SECSPERREPEAT)) */ #define is_digit(c) ((unsigned)(c) - '0' <= 9) #define INITIALIZE(x) (x = 0) /* Max and min values of the integer type T, of which only the bottom B bits are used, and where the highest-order used bit is considered to be a sign bit if T is signed. */ #define MAXVAL(t, b) \ ((t) (((t) 1 << ((b) - 1 - TYPE_SIGNED(t))) \ - 1 + ((t) 1 << ((b) - 1 - TYPE_SIGNED(t))))) #define MINVAL(t, b) \ ((t) (TYPE_SIGNED(t) ? - TWOS_COMPLEMENT(t) - MAXVAL(t, b) : 0)) /* The minimum and maximum finite time values. This assumes no padding. */ static time_t const time_t_min = MINVAL(time_t, TYPE_BIT(time_t)); static time_t const time_t_max = MAXVAL(time_t, TYPE_BIT(time_t)); //#include "tzfile.h" // from src/extra/tzone/tzfile.h // BEGIN ------------------------------------------------------------------------------------------ tzfile.h #ifndef TZFILE_H #define TZFILE_H /* ** This file is in the public domain, so clarified as of ** 1996-06-05 by Arthur David Olson. */ /* ** This header is for use ONLY with the time conversion code. ** There is no guarantee that it will remain unchanged, ** or that it will remain at all. ** Do NOT copy it to any system include directory. ** Thank you! */ /* ** Information about time zone files. */ #ifndef TZDIR #define TZDIR "/usr/local/etc/zoneinfo" /* Time zone object file directory */ #endif /* !defined TZDIR */ #ifndef TZDEFAULT #define TZDEFAULT "localtime" // NB this is "UTC" in R, but R also loads tz data #endif /* !defined TZDEFAULT */ #ifndef TZDEFRULES #define TZDEFRULES "America/New_York" #endif /* !defined TZDEFRULES */ /* ** Each file begins with. . . */ #define TZ_MAGIC "TZif" struct tzhead { char tzh_magic[4]; /* TZ_MAGIC */ char tzh_version[1]; /* '\0' or '2' as of 2005 */ char tzh_reserved[15]; /* reserved--must be zero */ char tzh_ttisgmtcnt[4]; /* coded number of trans. time flags */ char tzh_ttisstdcnt[4]; /* coded number of trans. time flags */ char tzh_leapcnt[4]; /* coded number of leap seconds */ char tzh_timecnt[4]; /* coded number of transition times */ char tzh_typecnt[4]; /* coded number of local time types */ char tzh_charcnt[4]; /* coded number of abbr. chars */ }; /* ** . . .followed by. . . ** ** tzh_timecnt (char [4])s coded transition times a la time(2) ** tzh_timecnt (unsigned char)s types of local time starting at above ** tzh_typecnt repetitions of ** one (char [4]) coded UTC offset in seconds ** one (unsigned char) used to set tm_isdst ** one (unsigned char) that's an abbreviation list index ** tzh_charcnt (char)s '\0'-terminated zone abbreviations ** tzh_leapcnt repetitions of ** one (char [4]) coded leap second transition times ** one (char [4]) total correction after above ** tzh_ttisstdcnt (char)s indexed by type; if TRUE, transition ** time is standard time, if FALSE, ** transition time is wall clock time ** if absent, transition times are ** assumed to be wall clock time ** tzh_ttisgmtcnt (char)s indexed by type; if TRUE, transition ** time is UTC, if FALSE, ** transition time is local time ** if absent, transition times are ** assumed to be local time */ /* ** If tzh_version is '2' or greater, the above is followed by a second instance ** of tzhead and a second instance of the data in which each coded transition ** time uses 8 rather than 4 chars, ** then a POSIX-TZ-environment-variable-style string for use in handling ** instants after the last transition time stored in the file ** (with nothing between the newlines if there is no POSIX representation for ** such instants). ** ** If tz_version is '3' or greater, the above is extended as follows. ** First, the POSIX TZ string's hour offset may range from -167 ** through 167 as compared to the POSIX-required 0 through 24. ** Second, its DST start time may be January 1 at 00:00 and its stop ** time December 31 at 24:00 plus the difference between DST and ** standard time, indicating DST all year. */ /* ** In the current implementation, "tzset()" refuses to deal with files that ** exceed any of the limits below. */ #ifndef TZ_MAX_TIMES #define TZ_MAX_TIMES 1200 #endif /* !defined TZ_MAX_TIMES */ #ifndef TZ_MAX_TYPES #ifndef NOSOLAR #define TZ_MAX_TYPES 256 /* Limited by what (unsigned char)'s can hold */ #endif /* !defined NOSOLAR */ #ifdef NOSOLAR /* ** Must be at least 14 for Europe/Riga as of Jan 12 1995, ** as noted by Earl Chew. */ #define TZ_MAX_TYPES 20 /* Maximum number of local time types */ #endif /* !defined NOSOLAR */ #endif /* !defined TZ_MAX_TYPES */ // increased from 50, http://mm.icann.org/pipermail/tz/2015-August/022623.html #ifndef TZ_MAX_CHARS #define TZ_MAX_CHARS 100 /* Maximum number of abbreviation characters */ /* (limited by what unsigned chars can hold) */ #endif /* !defined TZ_MAX_CHARS */ #ifndef TZ_MAX_LEAPS #define TZ_MAX_LEAPS 50 /* Maximum number of leap second corrections */ #endif /* !defined TZ_MAX_LEAPS */ #define SECSPERMIN 60 #define MINSPERHOUR 60 #define HOURSPERDAY 24 #define DAYSPERWEEK 7 #define DAYSPERNYEAR 365 #define DAYSPERLYEAR 366 #define SECSPERHOUR (SECSPERMIN * MINSPERHOUR) #define SECSPERDAY ((int_fast32_t) SECSPERHOUR * HOURSPERDAY) #define MONSPERYEAR 12 #define TM_SUNDAY 0 #define TM_MONDAY 1 #define TM_TUESDAY 2 #define TM_WEDNESDAY 3 #define TM_THURSDAY 4 #define TM_FRIDAY 5 #define TM_SATURDAY 6 #define TM_JANUARY 0 #define TM_FEBRUARY 1 #define TM_MARCH 2 #define TM_APRIL 3 #define TM_MAY 4 #define TM_JUNE 5 #define TM_JULY 6 #define TM_AUGUST 7 #define TM_SEPTEMBER 8 #define TM_OCTOBER 9 #define TM_NOVEMBER 10 #define TM_DECEMBER 11 #define TM_YEAR_BASE 1900 #define EPOCH_YEAR 1970 #define EPOCH_WDAY TM_THURSDAY #define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0)) /* ** Since everything in isleap is modulo 400 (or a factor of 400), we know that ** isleap(y) == isleap(y % 400) ** and so ** isleap(a + b) == isleap((a + b) % 400) ** or ** isleap(a + b) == isleap(a % 400 + b % 400) ** This is true even if % means modulo rather than Fortran remainder ** (which is allowed by C89 but not C99). ** We use this to avoid addition overflow problems. */ #define isleap_sum(a, b) isleap((a) % 400 + (b) % 400) #endif /* !defined TZFILE_H */ // -------------------------------------------------------------------------------------- END tzfile.h //#include "localtime.c" // from src/extra/tzone/localtime.c // note though that was included is partial as we support only gmtime_() // BEGIN --------------------------------------------------------------------------------- localtime.c #ifdef O_BINARY #define OPEN_MODE (O_RDONLY | O_BINARY) #endif /* defined O_BINARY */ #ifndef O_BINARY #define OPEN_MODE O_RDONLY #endif /* !defined O_BINARY */ static const char gmt[] = "GMT"; /* ** The DST rules to use if TZ has no rules and we can't load TZDEFRULES. ** We default to US rules as of 1999-08-17. ** POSIX 1003.1 section 8.1.1 says that the default DST rules are ** implementation dependent; for historical reasons, US rules are a ** common default. */ #ifndef TZDEFRULESTRING #define TZDEFRULESTRING ",M4.1.0,M10.5.0" #endif /* !defined TZDEFDST */ #define BIGGEST(a, b) (((a) > (b)) ? (a) : (b)) #ifdef TZNAME_MAX #define MY_TZNAME_MAX TZNAME_MAX #endif /* defined TZNAME_MAX */ #ifndef TZNAME_MAX #define MY_TZNAME_MAX 255 #endif /* !defined TZNAME_MAX */ struct ttinfo { /* time type information */ int_fast32_t tt_gmtoff; /* UTC offset in seconds */ int tt_isdst; /* used to set tm_isdst */ int tt_abbrind; /* abbreviation list index */ int tt_ttisstd; /* TRUE if transition is std time */ int tt_ttisgmt; /* TRUE if transition is UTC */ }; struct lsinfo { /* leap second information */ time_t ls_trans; /* transition time */ int_fast64_t ls_corr; /* correction to apply */ }; struct state { int leapcnt; int timecnt; int typecnt; int charcnt; int goback; int goahead; time_t ats[TZ_MAX_TIMES]; unsigned char types[TZ_MAX_TIMES]; struct ttinfo ttis[TZ_MAX_TYPES]; char chars[BIGGEST(BIGGEST(TZ_MAX_CHARS + 1, sizeof gmt), (2 * (MY_TZNAME_MAX + 1)))]; struct lsinfo lsis[TZ_MAX_LEAPS]; }; struct rule { int r_type; /* type of rule--see below */ int r_day; /* day number of rule */ int r_week; /* week number of rule */ int r_mon; /* month number of rule */ int_fast32_t r_time; /* transition time of rule */ }; #define JULIAN_DAY 0 /* Jn - Julian day */ #define DAY_OF_YEAR 1 /* n - day of year */ #define MONTH_NTH_DAY_OF_WEEK 2 /* Mm.n.d - month, week, day of week */ static const int mon_lengths[2][MONSPERYEAR] = { { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } }; static const int year_lengths[2] = { DAYSPERNYEAR, DAYSPERLYEAR }; static int gmt_is_set; //static struct state lclmem; static struct state gmtmem; //#define lclptr (&lclmem) #define gmtptr (&gmtmem) static struct tm tm; //extern const char *getTZinfo(void); static int tzparse(const char * name, struct state * sp, int lastditch); static int typesequiv(const struct state * sp, int a, int b); static const char * getsecs(const char * strp, int_fast32_t * secsp); static const char * getnum(const char * strp, int * const nump, const int min, const int max); static const char * getrule(const char * strp, struct rule * const rulep); static int_fast32_t transtime(int year, const struct rule * rulep, int_fast32_t offset); static struct tm * timesub(const time_t *timep, int_fast32_t offset, const struct state *sp, struct tm *tmp); static int leaps_thru_end_of(const int y); /* ** Normalize logic courtesy Paul Eggert. */ static int increment_overflow(int *const ip, int j) { int const i = *ip; /* ** If i >= 0 there can only be overflow if i + j > INT_MAX ** or if j > INT_MAX - i; given i >= 0, INT_MAX - i cannot overflow. ** If i < 0 there can only be overflow if i + j < INT_MIN ** or if j < INT_MIN - i; given i < 0, INT_MIN - i cannot overflow. */ if ((i >= 0) ? (j > INT_MAX - i) : (j < INT_MIN - i)) return TRUE; // #nocov *ip += j; return FALSE; } static int increment_overflow_time(time_t *tp, int_fast32_t j) { // #nocov start /* ** This is like ** 'if (! (time_t_min <= *tp + j && *tp + j <= time_t_max)) ...', ** except that it does the right thing even if *tp + j would overflow. */ if (! (j < 0 ? (TYPE_SIGNED(time_t) ? time_t_min - j <= *tp : -1 - j < *tp) : *tp <= time_t_max - j)) return TRUE; *tp += j; return FALSE; } static int_fast32_t detzcode(const char *const codep) { int_fast32_t result = (codep[0] & 0x80) ? -1 : 0; for (int i = 0; i < 4; ++i) result = (result << 8) | (codep[i] & 0xff); return result; } static int_fast64_t detzcode64(const char *const codep) { int_fast64_t result = (codep[0] & 0x80) ? -1 : 0; for (int i = 0; i < 8; ++i) result = (result << 8) | (codep[i] & 0xff); return result; } static int differ_by_repeat(const time_t t1, const time_t t0) { if (TYPE_INTEGRAL(time_t) && TYPE_BIT(time_t) - TYPE_SIGNED(time_t) < SECSPERREPEAT_BITS) return 0; /* R change */ return (int_fast64_t)t1 - (int_fast64_t)t0 == SECSPERREPEAT; } static const char * getzname(const char * strp) { char c; while ((c = *strp) != '\0' && !is_digit(c) && c != ',' && c != '-' && c != '+') ++strp; return strp; } static const char * getqzname(const char *strp, const int delim) { int c; while ((c = *strp) != '\0' && c != delim) ++strp; return strp; } static const char * getoffset(const char *strp, int_fast32_t *const offsetp) { int neg = 0; if (*strp == '-') { neg = 1; ++strp; } else if (*strp == '+') ++strp; strp = getsecs(strp, offsetp); if (strp == NULL) return NULL; /* illegal time */ if (neg) *offsetp = -*offsetp; return strp; } static const char * getsecs(const char *strp, int_fast32_t *const secsp) { int num; /* ** 'HOURSPERDAY * DAYSPERWEEK - 1' allows quasi-Posix rules like ** "M10.4.6/26", which does not conform to Posix, ** but which specifies the equivalent of ** "02:00 on the first Sunday on or after 23 Oct". */ strp = getnum(strp, &num, 0, HOURSPERDAY * DAYSPERWEEK - 1); if (strp == NULL) return NULL; *secsp = num * (int_fast32_t) SECSPERHOUR; if (*strp == ':') { ++strp; strp = getnum(strp, &num, 0, MINSPERHOUR - 1); if (strp == NULL) return NULL; *secsp += num * SECSPERMIN; if (*strp == ':') { ++strp; /* 'SECSPERMIN' allows for leap seconds. */ strp = getnum(strp, &num, 0, SECSPERMIN); if (strp == NULL) return NULL; *secsp += num; } } return strp; } static const char * getnum(const char * strp, int * const nump, const int min, const int max) { char c; int num; if (strp == NULL || !is_digit(c = *strp)) return NULL; num = 0; do { num = num * 10 + (c - '0'); if (num > max) return NULL; /* illegal value */ c = *++strp; } while (is_digit(c)); if (num < min) return NULL; /* illegal value */ *nump = num; return strp; } static const char * getrule(const char * strp, struct rule * const rulep) { if (*strp == 'J') { /* ** Julian day. */ rulep->r_type = JULIAN_DAY; ++strp; strp = getnum(strp, &rulep->r_day, 1, DAYSPERNYEAR); } else if (*strp == 'M') { /* ** Month, week, day. */ rulep->r_type = MONTH_NTH_DAY_OF_WEEK; ++strp; strp = getnum(strp, &rulep->r_mon, 1, MONSPERYEAR); if (strp == NULL) return NULL; if (*strp++ != '.') return NULL; strp = getnum(strp, &rulep->r_week, 1, 5); if (strp == NULL) return NULL; if (*strp++ != '.') return NULL; strp = getnum(strp, &rulep->r_day, 0, DAYSPERWEEK - 1); } else if (is_digit(*strp)) { /* ** Day of year. */ rulep->r_type = DAY_OF_YEAR; strp = getnum(strp, &rulep->r_day, 0, DAYSPERLYEAR - 1); } else return NULL; /* invalid format */ if (strp == NULL) return NULL; if (*strp == '/') { /* ** Time specified. */ ++strp; strp = getsecs(strp, &rulep->r_time); } else rulep->r_time = 2 * SECSPERHOUR; /* default = 2:00:00 */ return strp; } // this routine modified / simplified / reduced in 2010 static int tzload(const char * name, struct state * const sp, const int doextend) { const char * p; int i; int fid; int stored; int nread; union { struct tzhead tzhead; char buf[2 * sizeof(struct tzhead) + 2 * sizeof *sp + 4 * TZ_MAX_TIMES]; } u; sp->goback = sp->goahead = FALSE; /* if (name == NULL && (name = TZDEFAULT) == NULL) return -1; */ if (name == NULL) { // edd 06 Jul 2010 let's do without getTZinfo() //name = getTZinfo(); //if( strcmp(name, "unknown") == 0 ) name = TZDEFAULT; name = TZDEFAULT; } { int doaccess; /* ** Section 4.9.1 of the C standard says that ** "FILENAME_MAX expands to an integral constant expression ** that is the size needed for an array of char large enough ** to hold the longest file name string that the implementation ** guarantees can be opened." */ char fullname[FILENAME_MAX + 1]; // edd 08 Jul 2010 not currently needed const char *sname = name; if (name[0] == ':') ++name; doaccess = name[0] == '/'; if (!doaccess) { char buf[1000]; p = getenv("TZDIR"); if (p == NULL) { snprintf(buf, 1000, "%s/share/zoneinfo", getenv("R_HOME")); buf[999] = '\0'; p = buf; } /* if ((p = TZDIR) == NULL) return -1; */ if ((strlen(p) + strlen(name) + 1) >= sizeof fullname) return -1; (void) strcpy(fullname, p); (void) strcat(fullname, "/"); (void) strcat(fullname, name); /* ** Set doaccess if '.' (as in "../") shows up in name. */ if (strchr(name, '.') != NULL) doaccess = TRUE; name = fullname; } // edd 16 Jul 2010 comment out whole block //if (doaccess && access(name, R_OK) != 0) { // edd 08 Jul 2010 we use this without TZ for dates only // so no need to warn //Rf_warning("unknown timezone '%s'", sname); //return -1; //} if ((fid = open(name, OPEN_MODE)) == -1) { // edd 08 Jul 2010 we use this without TZ for dates only // so no need to warn //Rf_warning("unknown timezone '%s'", sname); return -1; } } nread = (int)read(fid, u.buf, sizeof u.buf); if (close(fid) < 0 || nread <= 0) return -1; for (stored = 4; stored <= 8; stored *= 2) { int ttisstdcnt; int ttisgmtcnt; ttisstdcnt = (int) detzcode(u.tzhead.tzh_ttisstdcnt); ttisgmtcnt = (int) detzcode(u.tzhead.tzh_ttisgmtcnt); sp->leapcnt = (int) detzcode(u.tzhead.tzh_leapcnt); sp->timecnt = (int) detzcode(u.tzhead.tzh_timecnt); sp->typecnt = (int) detzcode(u.tzhead.tzh_typecnt); sp->charcnt = (int) detzcode(u.tzhead.tzh_charcnt); p = u.tzhead.tzh_charcnt + sizeof u.tzhead.tzh_charcnt; if (sp->leapcnt < 0 || sp->leapcnt > TZ_MAX_LEAPS || sp->typecnt <= 0 || sp->typecnt > TZ_MAX_TYPES || sp->timecnt < 0 || sp->timecnt > TZ_MAX_TIMES || sp->charcnt < 0 || sp->charcnt > TZ_MAX_CHARS || (ttisstdcnt != sp->typecnt && ttisstdcnt != 0) || (ttisgmtcnt != sp->typecnt && ttisgmtcnt != 0)) return -1; if (nread - (p - u.buf) < sp->timecnt * stored + /* ats */ sp->timecnt + /* types */ sp->typecnt * 6 + /* ttinfos */ sp->charcnt + /* chars */ sp->leapcnt * (stored + 4) + /* lsinfos */ ttisstdcnt + /* ttisstds */ ttisgmtcnt) /* ttisgmts */ return -1; for (i = 0; i < sp->timecnt; ++i) { sp->ats[i] = (stored == 4) ? detzcode(p) : detzcode64(p); p += stored; } for (i = 0; i < sp->timecnt; ++i) { sp->types[i] = (unsigned char) *p++; if (sp->types[i] >= sp->typecnt) return -1; } for (i = 0; i < sp->typecnt; ++i) { struct ttinfo * ttisp; ttisp = &sp->ttis[i]; ttisp->tt_gmtoff = detzcode(p); p += 4; ttisp->tt_isdst = (unsigned char) *p++; if (ttisp->tt_isdst != 0 && ttisp->tt_isdst != 1) return -1; ttisp->tt_abbrind = (unsigned char) *p++; if (ttisp->tt_abbrind < 0 || ttisp->tt_abbrind > sp->charcnt) return -1; } for (i = 0; i < sp->charcnt; ++i) sp->chars[i] = *p++; sp->chars[i] = '\0'; /* ensure '\0' at end */ for (i = 0; i < sp->leapcnt; ++i) { struct lsinfo * lsisp; lsisp = &sp->lsis[i]; lsisp->ls_trans = (stored == 4) ? detzcode(p) : detzcode64(p); p += stored; lsisp->ls_corr = detzcode(p); p += 4; } for (i = 0; i < sp->typecnt; ++i) { struct ttinfo * ttisp; ttisp = &sp->ttis[i]; if (ttisstdcnt == 0) ttisp->tt_ttisstd = FALSE; else { ttisp->tt_ttisstd = *p++; if (ttisp->tt_ttisstd != TRUE && ttisp->tt_ttisstd != FALSE) return -1; } } for (i = 0; i < sp->typecnt; ++i) { struct ttinfo * ttisp; ttisp = &sp->ttis[i]; if (ttisgmtcnt == 0) ttisp->tt_ttisgmt = FALSE; else { ttisp->tt_ttisgmt = *p++; if (ttisp->tt_ttisgmt != TRUE && ttisp->tt_ttisgmt != FALSE) return -1; } } /* ** Out-of-sort ats should mean we're running on a ** signed time_t system but using a data file with ** unsigned values (or vice versa). */ for (i = 0; i < sp->timecnt - 2; ++i) if (sp->ats[i] > sp->ats[i + 1]) { ++i; if (TYPE_SIGNED(time_t)) { /* ** Ignore the end (easy). */ sp->timecnt = i; } else { /* ** Ignore the beginning (harder). */ int j; for (j = 0; j + i < sp->timecnt; ++j) { sp->ats[j] = sp->ats[j + i]; sp->types[j] = sp->types[j + i]; } sp->timecnt = j; } break; } /* ** If this is an old file, we're done. */ if (u.tzhead.tzh_version[0] == '\0') break; nread -= p - u.buf; for (i = 0; i < nread; ++i) u.buf[i] = p[i]; /* ** If this is a narrow integer time_t system, we're done. */ if (stored >= (int) sizeof(time_t) && TYPE_INTEGRAL(time_t)) break; } if (doextend && nread > 2 && u.buf[0] == '\n' && u.buf[nread - 1] == '\n' && sp->typecnt + 2 <= TZ_MAX_TYPES) { struct state ts; int result; u.buf[nread - 1] = '\0'; result = tzparse(&u.buf[1], &ts, FALSE); if (result == 0 && ts.typecnt == 2 && sp->charcnt + ts.charcnt <= TZ_MAX_CHARS) { for (i = 0; i < 2; ++i) ts.ttis[i].tt_abbrind += sp->charcnt; for (i = 0; i < ts.charcnt; ++i) sp->chars[sp->charcnt++] = ts.chars[i]; i = 0; while (i < ts.timecnt && ts.ats[i] <= sp->ats[sp->timecnt - 1]) ++i; while (i < ts.timecnt && sp->timecnt < TZ_MAX_TIMES) { sp->ats[sp->timecnt] = ts.ats[i]; sp->types[sp->timecnt] = (unsigned char)sp->typecnt + ts.types[i]; ++sp->timecnt; ++i; } sp->ttis[sp->typecnt++] = ts.ttis[0]; sp->ttis[sp->typecnt++] = ts.ttis[1]; } } i = 2 * YEARSPERREPEAT; sp->goback = sp->goahead = sp->timecnt > i; sp->goback = sp->goback && typesequiv(sp, sp->types[i], sp->types[0]) && differ_by_repeat(sp->ats[i], sp->ats[0]); sp->goahead = sp->goahead && typesequiv(sp, sp->types[sp->timecnt - 1], sp->types[sp->timecnt - 1 - i]) && differ_by_repeat(sp->ats[sp->timecnt - 1], sp->ats[sp->timecnt - 1 - i]); return 0; } /* ** Given a year, a rule, and the offset from UT at the time that rule takes ** effect, calculate the year-relative time that rule takes effect. */ static int_fast32_t transtime(const int year, const struct rule *const rulep, const int_fast32_t offset) { int leapyear; int_fast32_t value; int d, m1, yy0, yy1, yy2, dow; INITIALIZE(value); leapyear = isleap(year); switch (rulep->r_type) { case JULIAN_DAY: /* ** Jn - Julian day, 1 == January 1, 60 == March 1 even in leap ** years. ** In non-leap years, or if the day number is 59 or less, just ** add SECSPERDAY times the day number-1 to the time of ** January 1, midnight, to get the day. */ value = (rulep->r_day - 1) * SECSPERDAY; if (leapyear && rulep->r_day >= 60) value += SECSPERDAY; break; case DAY_OF_YEAR: /* ** n - day of year. ** Just add SECSPERDAY times the day number to the time of ** January 1, midnight, to get the day. */ value = rulep->r_day * SECSPERDAY; break; case MONTH_NTH_DAY_OF_WEEK: /* ** Mm.n.d - nth "dth day" of month m. */ /* ** Use Zeller's Congruence to get day-of-week of first day of ** month. */ m1 = (rulep->r_mon + 9) % 12 + 1; yy0 = (rulep->r_mon <= 2) ? (year - 1) : year; yy1 = yy0 / 100; yy2 = yy0 % 100; dow = ((26 * m1 - 2) / 10 + 1 + yy2 + yy2 / 4 + yy1 / 4 - 2 * yy1) % 7; if (dow < 0) dow += DAYSPERWEEK; /* ** "dow" is the day-of-week of the first day of the month. Get ** the day-of-month (zero-origin) of the first "dow" day of the ** month. */ d = rulep->r_day - dow; if (d < 0) d += DAYSPERWEEK; for (int i = 1; i < rulep->r_week; ++i) { if (d + DAYSPERWEEK >= mon_lengths[leapyear][rulep->r_mon - 1]) break; d += DAYSPERWEEK; } /* ** "d" is the day-of-month (zero-origin) of the day we want. */ value = d * SECSPERDAY; for (int i = 0; i < rulep->r_mon - 1; ++i) value += mon_lengths[leapyear][i] * SECSPERDAY; break; } /* ** "value" is the year-relative time of 00:00:00 UT on the day in ** question. To get the year-relative time of the specified local ** time on that day, add the transition time and the current offset ** from UT. */ return value + rulep->r_time + offset; } /* ** Given a POSIX section 8-style TZ string, fill in the rule tables as ** appropriate. */ static int tzparse(const char * name, struct state * const sp, const int lastditch) { const char * stdname; const char * dstname; size_t stdlen; size_t dstlen; int_fast32_t stdoffset; int_fast32_t dstoffset; char * cp; int load_result; static struct ttinfo zttinfo; INITIALIZE(dstname); stdname = name; if (lastditch) { stdlen = strlen(name); /* length of standard zone name */ name += stdlen; if (stdlen >= sizeof sp->chars) stdlen = (sizeof sp->chars) - 1; stdoffset = 0; } else { if (*name == '<') { name++; stdname = name; name = getqzname(name, '>'); if (*name != '>') return (-1); stdlen = name - stdname; name++; } else { name = getzname(name); stdlen = name - stdname; } if (*name == '\0') return -1; name = getoffset(name, &stdoffset); if (name == NULL) return -1; } load_result = tzload(TZDEFRULES, sp, FALSE); if (load_result != 0) sp->leapcnt = 0; /* so, we're off a little */ if (*name != '\0') { if (*name == '<') { dstname = ++name; name = getqzname(name, '>'); if (*name != '>') return -1; dstlen = name - dstname; name++; } else { dstname = name; name = getzname(name); dstlen = name - dstname; /* length of DST zone name */ } if (*name != '\0' && *name != ',' && *name != ';') { name = getoffset(name, &dstoffset); if (name == NULL) return -1; } else dstoffset = stdoffset - SECSPERHOUR; if (*name == '\0' && load_result != 0) name = TZDEFRULESTRING; if (*name == ',' || *name == ';') { struct rule start; struct rule end; int year; int yearlim; int timecnt; time_t janfirst; ++name; if ((name = getrule(name, &start)) == NULL) return -1; if (*name++ != ',') return -1; if ((name = getrule(name, &end)) == NULL) return -1; if (*name != '\0') return -1; sp->typecnt = 2; /* standard time and DST */ /* ** Two transitions per year, from EPOCH_YEAR forward. */ sp->ttis[0] = sp->ttis[1] = zttinfo; sp->ttis[0].tt_gmtoff = -dstoffset; sp->ttis[0].tt_isdst = 1; sp->ttis[0].tt_abbrind = (int)(stdlen + 1); sp->ttis[1].tt_gmtoff = -stdoffset; sp->ttis[1].tt_isdst = 0; sp->ttis[1].tt_abbrind = 0; timecnt = 0; janfirst = 0; yearlim = EPOCH_YEAR + YEARSPERREPEAT; for (year = EPOCH_YEAR; year < yearlim; year++) { int_fast32_t starttime = transtime(year, &start, stdoffset), endtime = transtime(year, &end, dstoffset); int_fast32_t yearsecs = (year_lengths[isleap(year)] * SECSPERDAY); int reversed = endtime < starttime; if (reversed) { int_fast32_t swap = starttime; starttime = endtime; endtime = swap; } if (reversed || (starttime < endtime && (endtime - starttime < (yearsecs + (stdoffset - dstoffset))))) { if (TZ_MAX_TIMES - 2 < timecnt) break; yearlim = year + YEARSPERREPEAT + 1; sp->ats[timecnt] = janfirst; if (increment_overflow_time (&sp->ats[timecnt], starttime)) break; sp->types[timecnt++] = (unsigned char) reversed; sp->ats[timecnt] = janfirst; if (increment_overflow_time (&sp->ats[timecnt], endtime)) break; sp->types[timecnt++] = !reversed; } if (increment_overflow_time(&janfirst, yearsecs)) break; } sp->timecnt = timecnt; if (!timecnt) sp->typecnt = 1; /* Perpetual DST. */ } else { int_fast32_t theirstdoffset, theirdstoffset, theiroffset; int isdst; if (*name != '\0') return -1; /* ** Initial values of theirstdoffset and theirdstoffset. */ theirstdoffset = 0; for (int i = 0; i < sp->timecnt; ++i) { int j = sp->types[i]; if (!sp->ttis[j].tt_isdst) { theirstdoffset = -sp->ttis[j].tt_gmtoff; break; } } theirdstoffset = 0; for (int i = 0; i < sp->timecnt; ++i) { int j = sp->types[i]; if (sp->ttis[j].tt_isdst) { theirdstoffset = -sp->ttis[j].tt_gmtoff; break; } } /* ** Initially we're assumed to be in standard time. */ isdst = FALSE; theiroffset = theirstdoffset; /* ** Now juggle transition times and types ** tracking offsets as you do. */ for (int i = 0; i < sp->timecnt; ++i) { int j = sp->types[i]; sp->types[i] = (unsigned char)sp->ttis[j].tt_isdst; if (sp->ttis[j].tt_ttisgmt) { /* No adjustment to transition time */ } else { /* ** If summer time is in effect, and the ** transition time was not specified as ** standard time, add the summer time ** offset to the transition time; ** otherwise, add the standard time ** offset to the transition time. */ /* ** Transitions from DST to DDST ** will effectively disappear since ** POSIX provides for only one DST ** offset. */ if (isdst && !sp->ttis[j].tt_ttisstd) { sp->ats[i] += dstoffset - theirdstoffset; } else { sp->ats[i] += stdoffset - theirstdoffset; } } theiroffset = -sp->ttis[j].tt_gmtoff; if (sp->ttis[j].tt_isdst) theirdstoffset = theiroffset; else theirstdoffset = theiroffset; } /* ** Finally, fill in ttis. */ sp->ttis[0] = sp->ttis[1] = zttinfo; sp->ttis[0].tt_gmtoff = -stdoffset; sp->ttis[0].tt_isdst = FALSE; sp->ttis[0].tt_abbrind = 0; sp->ttis[1].tt_gmtoff = -dstoffset; sp->ttis[1].tt_isdst = TRUE; sp->ttis[1].tt_abbrind = (int)(stdlen + 1); sp->typecnt = 2; } } else { dstlen = 0; sp->typecnt = 1; /* only standard time */ sp->timecnt = 0; sp->ttis[0] = zttinfo; sp->ttis[0].tt_gmtoff = -stdoffset; sp->ttis[0].tt_isdst = 0; sp->ttis[0].tt_abbrind = 0; } sp->charcnt = (int)(stdlen + 1); if (dstlen != 0) sp->charcnt += dstlen + 1; if ((size_t) sp->charcnt > sizeof sp->chars) return -1; cp = sp->chars; (void) strncpy(cp, stdname, stdlen); cp += stdlen; *cp++ = '\0'; if (dstlen != 0) { (void) strncpy(cp, dstname, dstlen); *(cp + dstlen) = '\0'; } return 0; } static int typesequiv(const struct state * const sp, const int a, const int b) { int result; if (sp == NULL || a < 0 || a >= sp->typecnt || b < 0 || b >= sp->typecnt) result = FALSE; else { const struct ttinfo * ap = &sp->ttis[a]; const struct ttinfo * bp = &sp->ttis[b]; result = ap->tt_gmtoff == bp->tt_gmtoff && ap->tt_isdst == bp->tt_isdst && ap->tt_ttisstd == bp->tt_ttisstd && ap->tt_ttisgmt == bp->tt_ttisgmt && strcmp(&sp->chars[ap->tt_abbrind], &sp->chars[bp->tt_abbrind]) == 0; } return result; } // #nocov end static int leaps_thru_end_of(const int y) { return (y >= 0) ? (y / 4 - y / 100 + y / 400) : -(leaps_thru_end_of(-(y + 1)) + 1); } static struct tm * timesub(const time_t *const timep, const int_fast32_t offset, const struct state *const sp, struct tm *const tmp) { const struct lsinfo * lp; time_t tdays; int idays; /* unsigned would be so 2003 */ int_fast64_t rem; int y; const int * ip; int_fast64_t corr; int hit; int i; corr = 0; hit = 0; i = sp->leapcnt; while (--i >= 0) { lp = &sp->lsis[i]; // #nocov start if (*timep >= lp->ls_trans) { if (*timep == lp->ls_trans) { hit = ((i == 0 && lp->ls_corr > 0) || lp->ls_corr > sp->lsis[i - 1].ls_corr); if (hit) while (i > 0 && sp->lsis[i].ls_trans == sp->lsis[i - 1].ls_trans + 1 && sp->lsis[i].ls_corr == sp->lsis[i - 1].ls_corr + 1) { ++hit; --i; } } corr = lp->ls_corr; break; // #nocov end } } y = EPOCH_YEAR; tdays = *timep / SECSPERDAY; rem = *timep - tdays * SECSPERDAY; while (tdays < 0 || tdays >= year_lengths[isleap(y)]) { int newy; time_t tdelta; int idelta; int leapdays; tdelta = tdays / DAYSPERLYEAR; if (! ((! TYPE_SIGNED(time_t) || INT_MIN <= tdelta) && tdelta <= INT_MAX)) return NULL; // #nocov idelta = (int)tdelta; if (idelta == 0) idelta = (tdays < 0) ? -1 : 1; newy = y; if (increment_overflow(&newy, idelta)) return NULL; // #nocov leapdays = leaps_thru_end_of(newy - 1) - leaps_thru_end_of(y - 1); tdays -= ((time_t) newy - y) * DAYSPERNYEAR; tdays -= leapdays; y = newy; } { int_fast32_t seconds; seconds = (int_fast32_t)(tdays * SECSPERDAY); tdays = seconds / SECSPERDAY; rem += seconds - tdays * SECSPERDAY; } /* ** Given the range, we can now fearlessly cast... */ idays = (int)tdays; rem += offset - corr; while (rem < 0) { // #nocov start rem += SECSPERDAY; --idays; } while (rem >= SECSPERDAY) { rem -= SECSPERDAY; ++idays; } while (idays < 0) { if (increment_overflow(&y, -1)) return NULL; idays += year_lengths[isleap(y)]; } while (idays >= year_lengths[isleap(y)]) { idays -= year_lengths[isleap(y)]; if (increment_overflow(&y, 1)) return NULL; // #nocov end } // Previously we returned 'year + base', so keep behaviour // It seems like R now returns just 'year - 1900' (as libc does) // But better for continuity to do as before tmp->tm_year = y + TM_YEAR_BASE; if (increment_overflow(&tmp->tm_year, -TM_YEAR_BASE)) return NULL; // #nocov tmp->tm_yday = idays; /* ** The "extra" mods below avoid overflow problems. */ tmp->tm_wday = EPOCH_WDAY + ((y - EPOCH_YEAR) % DAYSPERWEEK) * (DAYSPERNYEAR % DAYSPERWEEK) + leaps_thru_end_of(y - 1) - leaps_thru_end_of(EPOCH_YEAR - 1) + idays; tmp->tm_wday %= DAYSPERWEEK; if (tmp->tm_wday < 0) tmp->tm_wday += DAYSPERWEEK; // #nocov tmp->tm_hour = (int) (rem / SECSPERHOUR); rem %= SECSPERHOUR; tmp->tm_min = (int) (rem / SECSPERMIN); /* ** A positive leap second requires a special ** representation. This uses "... ??:59:60" et seq. */ tmp->tm_sec = (int) (rem % SECSPERMIN) + hit; ip = mon_lengths[isleap(y)]; for (tmp->tm_mon = 0; idays >= ip[tmp->tm_mon]; ++(tmp->tm_mon)) idays -= ip[tmp->tm_mon]; tmp->tm_mday = (int) (idays + 1); tmp->tm_isdst = 0; #if ! (defined(__MINGW32__) || defined(__MINGW64__) || defined(__sun) || defined(sun) || defined(_AIX)) //#ifdef HAVE_TM_GMTOFF tmp->tm_gmtoff = offset; #endif return tmp; } static void gmtload(struct state * const sp) { if (tzload(gmt, sp, TRUE) != 0) (void) tzparse(gmt, sp, TRUE); } /* ** gmtsub is to gmtime as localsub is to localtime. */ static struct tm * gmtsub(const time_t *const timep, const int_fast32_t offset, struct tm *const tmp) { struct tm * result; if (!gmt_is_set) { gmt_is_set = TRUE; gmtload(gmtptr); } result = timesub(timep, offset, gmtptr, tmp); return result; } // [[Rcpp::register]] struct tm * gmtime_(const time_t * const timep) { return gmtsub(timep, 0L, &tm); } } Rcpp/src/attributes.cpp0000644000176200001440000043243014721070610014643 0ustar liggesusers// attributes.cpp: Rcpp R/C++ interface class library -- Rcpp attributes // // Copyright (C) 2012 - 2020 JJ Allaire, Dirk Eddelbuettel and Romain Francois // Copyright (C) 2021 - 2023 JJ Allaire, Dirk Eddelbuettel, Romain Francois, Iñaki Ucar and Travers Ching // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #define COMPILING_RCPP #include #include #include #include #include #include #include #include #include #include // for std::endl #include #include #define RCPP_NO_SUGAR #include /******************************************************************* * AttributesUtil.h *******************************************************************/ namespace Rcpp { namespace attributes { // Utility class for getting file existence and last modified time class FileInfo { public: // create from path explicit FileInfo(const std::string& path); // create from R list explicit FileInfo(const List& fileInfo) { // #nocov start path_ = as(fileInfo["path"]); exists_ = as(fileInfo["exists"]); lastModified_ = as(fileInfo["lastModified"]); } // #nocov end // convert to R list List toList() const { List fileInfo; fileInfo["path"] = path_; fileInfo["exists"] = exists_; fileInfo["lastModified"] = lastModified_; return fileInfo; } std::string path() const { return path_; } bool exists() const { return exists_; } double lastModified() const { return lastModified_; } std::string extension() const { std::string::size_type pos = path_.find_last_of('.'); if (pos != std::string::npos) return path_.substr(pos); else return ""; // #nocov } bool operator<(const FileInfo& other) const { return path_ < other.path_; }; bool operator==(const FileInfo& other) const { return path_ == other.path_ && exists_ == other.exists_ && lastModified_ == other.lastModified_; }; bool operator!=(const FileInfo& other) const { return ! (*this == other); }; std::ostream& operator<<(std::ostream& os) const { os << path_; return os; } private: std::string path_; bool exists_; double lastModified_; }; // Remove a file bool removeFile(const std::string& path); // Recursively create a directory void createDirectory(const std::string& path); // Known whitespace chars extern const char * const kWhitespaceChars; // Query whether a character is whitespace bool isWhitespace(char ch); // Trim a string void trimWhitespace(std::string* pStr); // Strip trailing line comments void stripTrailingLineComments(std::string* pStr); // Strip balanced quotes from around a string (assumes already trimmed) void stripQuotes(std::string* pStr); // is the passed string quoted? bool isQuoted(const std::string& str); // does a string end with another string? bool endsWith(const std::string& str, const std::string& suffix); // show a warning message void showWarning(const std::string& msg); // is the line a C++ roxygen comment? (started with //') bool isRoxygenCpp(const std::string& str); } // namespace attributes } // namespace Rcpp /******************************************************************* * AttributesTypes.h *******************************************************************/ namespace Rcpp { namespace attributes { // Known attribute names & parameters const char * const kExportAttribute = "export"; const char * const kExportName = "name"; const char * const kExportRng = "rng"; const char * const kExportInvisible = "invisible"; const char * const kExportSignature = "signature"; const char * const kInitAttribute = "init"; const char * const kDependsAttribute = "depends"; const char * const kPluginsAttribute = "plugins"; const char * const kInterfacesAttribute = "interfaces"; const char * const kInterfaceR = "r"; const char * const kInterfaceCpp = "cpp"; const char * const kParamValueFalse = "false"; const char * const kParamValueTrue = "true"; const char * const kParamValueFALSE = "FALSE"; const char * const kParamValueTRUE = "TRUE"; const char * const kParamBlockStart = "{;"; const char * const kParamBlockEnd = "}"; // Type info class Type { public: Type(): isConst_(false), isReference_(false) {} Type(const std::string& name, bool isConst, bool isReference) : name_(name), isConst_(isConst), isReference_(isReference) { } bool empty() const { return name().empty(); } bool operator==(const Type& other) const { // #nocov start return name_ == other.name_ && isConst_ == other.isConst_ && isReference_ == other.isReference_; }; // #nocov end bool operator!=(const Type& other) const { return !(*this == other); }; const std::string& name() const { return name_; } std::string full_name() const { std::string res ; if( isConst() ) res += "const " ; res += name() ; if( isReference() ) res += "&" ; return res ; } bool isVoid() const { return name() == "void"; } bool isConst() const { return isConst_; } bool isReference() const { return isReference_; } private: std::string name_; bool isConst_; bool isReference_; }; // Argument info class Argument { public: Argument() {} Argument(const std::string& name, const Type& type, const std::string& defaultValue) : name_(name), type_(type), defaultValue_(defaultValue) { } bool empty() const { return type().empty(); } bool operator==(const Argument& other) const { // #nocov start return name_ == other.name_ && type_ == other.type_ && defaultValue_ == other.defaultValue_; }; // #nocov end bool operator!=(const Argument& other) const { return !(*this == other); }; const std::string& name() const { return name_; } const Type& type() const { return type_; } const std::string& defaultValue() const { return defaultValue_; } private: std::string name_; Type type_; std::string defaultValue_; }; // Function info class Function { public: Function() {} Function(const Type& type, const std::string& name, const std::vector& arguments) : type_(type), name_(name), arguments_(arguments) { } Function renamedTo(const std::string& name) const { // #nocov start return Function(type(), name, arguments()); } std::string signature() const { return signature(name()); } std::string signature(const std::string& name) const; bool isHidden() const { return name().find_first_of('.') == 0; } // #nocov end bool empty() const { return name().empty(); } bool operator==(const Function& other) const { // #nocov start return type_ == other.type_ && name_ == other.name_ && arguments_ == other.arguments_; }; // #nocov end bool operator!=(const Function& other) const { return !(*this == other); }; const Type& type() const { return type_; } const std::string& name() const { return name_; } const std::vector& arguments() const { return arguments_; } private: Type type_; std::string name_; std::vector arguments_; }; // Attribute parameter (with optional value) class Param { public: Param() {} explicit Param(const std::string& paramText); bool empty() const { return name().empty(); } bool operator==(const Param& other) const { // #nocov start return name_ == other.name_ && value_ == other.value_; }; // #nocov end bool operator!=(const Param& other) const { return !(*this == other); }; const std::string& name() const { return name_; } const std::string& value() const { return value_; } // #nocov private: std::string name_; std::string value_; }; // Attribute (w/ optional params and signature of function it qualifies) class Attribute { public: Attribute() {} Attribute(const std::string& name, const std::vector& params, const Function& function, const std::vector& roxygen) : name_(name), params_(params), function_(function), roxygen_(roxygen) { } bool empty() const { return name().empty(); } // #nocov start bool operator==(const Attribute& other) const { return name_ == other.name_ && params_ == other.params_ && function_ == other.function_ && roxygen_ == other.roxygen_; }; // #nocov end bool operator!=(const Attribute& other) const { return !(*this == other); }; const std::string& name() const { return name_; } const std::vector& params() const { return params_; } Param paramNamed(const std::string& name) const; bool hasParameter(const std::string& name) const { return !paramNamed(name).empty(); } const Function& function() const { return function_; } bool isExportedFunction() const { return (name() == kExportAttribute) && !function().empty(); } std::string exportedName() const { // check for explicit name parameter if (hasParameter(kExportName)) { return paramNamed(kExportName).value(); // #nocov } // otherwise un-named parameter in the first slot else if (!params().empty() && params()[0].value().empty()) { return params()[0].name(); // #nocov } // otherwise the actual function name { return function().name(); } } std::string exportedCppName() const { // #nocov start std::string name = exportedName(); std::replace(name.begin(), name.end(), '.', '_'); return name; } // #nocov end bool rng() const { Param rngParam = paramNamed(kExportRng); if (!rngParam.empty()) return rngParam.value() == kParamValueTrue || // #nocov rngParam.value() == kParamValueTRUE; // #nocov else return true; } bool invisible() const { Param invisibleParam = paramNamed(kExportInvisible); if (!invisibleParam.empty()) return invisibleParam.value() == kParamValueTrue || // #nocov invisibleParam.value() == kParamValueTRUE; // #nocov else return false; } const std::vector& roxygen() const { return roxygen_; } std::string customRSignature() const { Param sigParam = paramNamed(kExportSignature); std::string sig = sigParam.value(); trimWhitespace(&sig); if (sig.empty()) return sig; #if __cplusplus < 201103L if (sig[sig.size() - 1] == '}') #else if (sig.back() == '}') #endif sig = sig.substr(0, sig.size()-1); // check sig.empty again since we deleted an element if (sig.empty()) return sig; #if __cplusplus < 201103L if (sig[0] == '{') #else if (sig.front() == '{') #endif sig.erase(0,1); return sig; } private: std::string name_; std::vector params_; Function function_; std::vector roxygen_; }; // Operator << for parsed types std::ostream& operator<<(std::ostream& os, const Type& type); std::ostream& operator<<(std::ostream& os, const Argument& argument); std::ostream& operator<<(std::ostream& os, const Function& function); std::ostream& operator<<(std::ostream& os, const Param& param); std::ostream& operator<<(std::ostream& os, const Attribute& attribute); // interface to source file attributes class SourceFileAttributes { public: virtual ~SourceFileAttributes() {}; virtual const std::string& sourceFile() const = 0; virtual bool hasInterface(const std::string& name) const = 0; typedef std::vector::const_iterator const_iterator; virtual const_iterator begin() const = 0; virtual const_iterator end() const = 0; virtual const std::vector& modules() const = 0; virtual const std::vector >& roxygenChunks() const = 0; virtual bool hasGeneratorOutput() const = 0; virtual bool hasPackageInit() const = 0; }; } // namespace attributes } // namespace Rcpp /******************************************************************* * AttributesParser.h *******************************************************************/ namespace Rcpp { namespace attributes { // Helper class for determining whether we are in a comment class CommentState { public: CommentState() : inComment_(false) {} private: // prohibit copying CommentState(const CommentState&); CommentState& operator=(const CommentState&); public: bool inComment() const { return inComment_; } void submitLine(const std::string& line); void reset() { inComment_ = false; } private: bool inComment_; }; // Class used to parse and return attribute information from a source file class SourceFileAttributesParser : public SourceFileAttributes { public: explicit SourceFileAttributesParser(const std::string& sourceFile, const std::string& packageFile, bool parseDependencies); private: // prohibit copying SourceFileAttributesParser(const SourceFileAttributesParser&); SourceFileAttributesParser& operator=(const SourceFileAttributesParser&); public: // implemetnation of SourceFileAttributes interface virtual const std::string& sourceFile() const { // #nocov return sourceFile_; // #nocov } virtual const_iterator begin() const { return attributes_.begin(); } virtual const_iterator end() const { return attributes_.end(); } virtual const std::vector& modules() const { return modules_; } virtual const std::vector >& roxygenChunks() const { return roxygenChunks_; } virtual bool hasGeneratorOutput() const { return !attributes_.empty() || !modules_.empty() || !roxygenChunks_.empty(); } virtual bool hasInterface(const std::string& name) const { for (const_iterator it=begin(); it != end(); ++it) { if (it->name() == kInterfacesAttribute) { return it->hasParameter(name); // #nocov } } // if there's no interfaces attrbute we default to R if (name == kInterfaceR) return true; else return false; } // Was a package init function found? bool hasPackageInit() const { return hasPackageInit_; } // Get lines of embedded R code const std::vector& embeddedR() const { return embeddedR_; } // Get source dependencies const std::vector& sourceDependencies() const { return sourceDependencies_; }; private: // Parsing helpers Attribute parseAttribute(const std::vector& match, int lineNumber); std::vector parseParameters(const std::string& input); Function parseFunction(size_t lineNumber); std::string parseSignature(size_t lineNumber); std::vector parseArguments(const std::string& argText); Type parseType(const std::string& text); // Validation helpers bool isKnownAttribute(const std::string& name) const; void attributeWarning(const std::string& message, const std::string& attribute, size_t lineNumber); void attributeWarning(const std::string& message, size_t lineNumber); void rcppExportWarning(const std::string& message, size_t lineNumber); void rcppExportNoFunctionFoundWarning(size_t lineNumber); void rcppExportInvalidParameterWarning(const std::string& param, size_t lineNumber); void rcppInterfacesWarning(const std::string& message, size_t lineNumber); private: std::string sourceFile_; CharacterVector lines_; std::vector attributes_; std::vector modules_; bool hasPackageInit_; std::vector embeddedR_; std::vector sourceDependencies_; std::vector > roxygenChunks_; std::vector roxygenBuffer_; }; } // namespace attributes } // namespace Rcpp /******************************************************************* * AttributesGen.h *******************************************************************/ namespace Rcpp { namespace attributes { // Abstract class which manages writing of code for compileAttributes class ExportsGenerator { protected: ExportsGenerator(const std::string& targetFile, const std::string& package, const std::string& commentPrefix); private: // prohibit copying ExportsGenerator(const ExportsGenerator&); ExportsGenerator& operator=(const ExportsGenerator&); public: virtual ~ExportsGenerator() {} // Name of target file and package const std::string& targetFile() const { return targetFile_; } const std::string& package() const { return package_; } const std::string& packageCpp() const { return packageCpp_; } const std::string packageCppPrefix() const { return "_" + packageCpp(); } // Abstract interface for code generation virtual void writeBegin() = 0; void writeFunctions(const SourceFileAttributes& attributes, bool verbose); // see doWriteFunctions below virtual void writeEnd(bool hasPackageInit) = 0; virtual bool commit(const std::vector& includes) = 0; // Remove the generated file entirely bool remove(); // Allow generator to appear as a std::ostream& operator std::ostream&() { return codeStream_; } protected: // Allow access to the output stream std::ostream& ostr() { return codeStream_; } bool hasCppInterface() const { return hasCppInterface_; } // Shared knowledge about function namees std::string exportValidationFunction() { return "RcppExport_validate"; } std::string exportValidationFunctionRegisteredName() { return packageCppPrefix() + "_" + exportValidationFunction(); } std::string registerCCallableExportedName() { // #nocov return packageCppPrefix() + "_RcppExport_registerCCallable"; // #nocov } // Commit the stream -- is a no-op if the existing code is identical // to the generated code. Returns true if data was written and false // if it wasn't (throws exception on io error) bool commit(const std::string& preamble = std::string()); // Convert a dot in package name to underscore for use in header file name std::string dotNameHelper(const std::string & name) const; private: // Private virtual for doWriteFunctions so the base class // can always intercept writeFunctions virtual void doWriteFunctions(const SourceFileAttributes& attributes, bool verbose) = 0; // Check whether it's safe to overwrite this file (i.e. whether we // generated the file in the first place) bool isSafeToOverwrite() const { return existingCode_.empty() || (existingCode_.find(generatorToken()) != std::string::npos); } // UUID that we write into a comment within the file (so that we can // strongly identify that a file was generated by us before overwriting it) std::string generatorToken() const { return "10BE3573-1514-4C36-9D1C-5A225CD40393"; } private: std::string targetFile_; std::string package_; std::string packageCpp_; std::string commentPrefix_; std::string existingCode_; std::ostringstream codeStream_; bool hasCppInterface_; }; // Class which manages generating RcppExports.cpp class CppExportsGenerator : public ExportsGenerator { public: explicit CppExportsGenerator(const std::string& packageDir, const std::string& package, const std::string& fileSep); virtual void writeBegin() {}; virtual void writeEnd(bool hasPackageInit); virtual bool commit(const std::vector& includes); private: virtual void doWriteFunctions(const SourceFileAttributes& attributes, bool verbose); std::string registerCCallable(size_t indent, const std::string& exportedName, const std::string& name) const; private: // for generating calls to init functions std::vector initFunctions_; // for generating C++ interfaces std::vector cppExports_; // for generating Rcpp::export native routine registration std::vector nativeRoutines_; // for generating module native routine registration std::vector modules_; }; // Class which manages generating PackageName_RcppExports.h header file class CppExportsIncludeGenerator : public ExportsGenerator { public: CppExportsIncludeGenerator(const std::string& packageDir, const std::string& package, const std::string& fileSep); virtual void writeBegin(); virtual void writeEnd(bool hasPackageInit); virtual bool commit(const std::vector& includes); private: virtual void doWriteFunctions(const SourceFileAttributes& attributes, bool verbose); std::string getCCallable(const std::string& function) const; std::string getHeaderGuard() const; private: std::string includeDir_; }; // Class which manages generating PackageName.h header file class CppPackageIncludeGenerator : public ExportsGenerator { public: CppPackageIncludeGenerator(const std::string& packageDir, const std::string& package, const std::string& fileSep); virtual void writeBegin() {} virtual void writeEnd(bool hasPackageInit); virtual bool commit(const std::vector& includes); private: virtual void doWriteFunctions(const SourceFileAttributes&, bool) {} std::string getHeaderGuard() const; private: std::string includeDir_; }; // Class which manages generator RcppExports.R class RExportsGenerator : public ExportsGenerator { public: RExportsGenerator(const std::string& packageDir, const std::string& package, bool registration, const std::string& fileSep); virtual void writeBegin() {} virtual void writeEnd(bool hasPackageInit); virtual bool commit(const std::vector& includes); private: virtual void doWriteFunctions(const SourceFileAttributes& attributes, bool verbose); bool registration_; }; // Class to manage and dispatch to a list of generators class ExportsGenerators { public: typedef std::vector::iterator Itr; ExportsGenerators() {} virtual ~ExportsGenerators(); void add(ExportsGenerator* pGenerator); void writeBegin(); void writeFunctions(const SourceFileAttributes& attributes, bool verbose); void writeEnd(bool hasPackageInit); // Commit and return a list of the files that were updated std::vector commit( const std::vector& includes); // Remove and return a list of files that were removed std::vector remove(); private: // prohibit copying ExportsGenerators(const ExportsGenerators&); ExportsGenerators& operator=(const ExportsGenerators&); private: std::vector generators_; }; // Standalone generation helpers (used by sourceCpp) std::string generateRArgList(const Function& function); bool checkRSignature(const Function& function, std::string args); void initializeGlobals(std::ostream& ostr); void generateCpp(std::ostream& ostr, const SourceFileAttributes& attributes, bool includePrototype, bool cppInterface, const std::string& contextId); } // namespace attributes } // namespace Rcpp /******************************************************************* * AttributesParser.cpp *******************************************************************/ namespace Rcpp { namespace attributes { namespace { Rcpp::List regexMatches(Rcpp::CharacterVector lines, const std::string& regex) { Rcpp::Environment base("package:base"); Rcpp::Function regexec = base["regexec"]; Rcpp::Function regmatches = base["regmatches"]; Rcpp::RObject result = regexec(regex, lines); Rcpp::List matches = regmatches(lines, result); return matches; } template void readFile(const std::string& file, Stream& os) { std::ifstream ifs(file.c_str()); if (ifs.fail()) throw Rcpp::file_io_error(file); // #nocov os << ifs.rdbuf(); ifs.close(); } template void readLines(std::istream& is, Collection* pLines) { pLines->clear(); std::string line; while(std::getline(is, line)) { // strip \r (for the case of windows line terminators on posix) if (line.length() > 0 && *line.rbegin() == '\r') line.erase(line.length()-1, 1); stripTrailingLineComments(&line); pLines->push_back(line); } } bool addUniqueDependency(Rcpp::CharacterVector include, std::vector* pDependencies) { // return false if we already have this include std::string path = Rcpp::as(include); for (size_t i = 0; isize(); ++i) { if (pDependencies->at(i).path() == path) return false; } // add it and return true pDependencies->push_back(FileInfo(path)); return true; } void parseSourceDependencies(const std::string& sourceFile, std::vector* pDependencies) { // import R functions Rcpp::Environment baseEnv = Rcpp::Environment::base_env(); Rcpp::Function dirname = baseEnv["dirname"]; Rcpp::Function filepath = baseEnv["file.path"]; Rcpp::Function normalizePath = baseEnv["normalizePath"]; Rcpp::Function fileExists = baseEnv["file.exists"]; Rcpp::Environment toolsEnv = Rcpp::Environment::namespace_env( "tools"); Rcpp::Function filePathSansExt = toolsEnv["file_path_sans_ext"]; // get the path to the source file's directory Rcpp::CharacterVector sourceDir = dirname(sourceFile); // read the source file into a buffer std::stringstream buffer; readFile(sourceFile, buffer); // Now read into a list of strings (which we can pass to regexec) // First read into a std::deque (which will handle lots of append // operations efficiently) then copy into an R chracter vector std::deque lines; readLines(buffer, &lines); Rcpp::CharacterVector linesVector = Rcpp::wrap(lines); // look for local includes Rcpp::List matches = regexMatches( linesVector, "^\\s*#include\\s*\"([^\"]+)\"\\s*$"); // accumulate local includes (skip commented sections) CommentState commentState; std::vector newDependencies; for (int i = 0; i(include))); } std::vector exts; exts.push_back(".cc"); exts.push_back(".cpp"); for (size_t i = 0; i( // #nocov filePathSansExt(include)) + exts[i]; exists = fileExists(file); if (exists[0]) { if (addUniqueDependency(file, pDependencies)) { FileInfo fileInfo(file); newDependencies.push_back(fileInfo); } } } } } } } // look for dependencies recursively for (size_t i = 0; i parseSourceDependencies( std::string sourceFile) { // normalize source file Rcpp::Environment baseEnv = Rcpp::Environment::base_env(); Rcpp::Function normalizePath = baseEnv["normalizePath"]; sourceFile = Rcpp::as(normalizePath(sourceFile, "/")); // parse dependencies std::vector dependencies; parseSourceDependencies(sourceFile, &dependencies); // remove main source file dependencies.erase(std::remove(dependencies.begin(), // #nocov dependencies.end(), FileInfo(sourceFile)), dependencies.end()); return dependencies; } // Parse embedded R code chunks from a file (receives the lines of the // file as a CharcterVector for using with regexec and as a standard // stl vector for traversal/insepection) std::vector parseEmbeddedR( Rcpp::CharacterVector linesVector, const std::deque& lines) { Rcpp::List matches = regexMatches(linesVector, "^\\s*/\\*{3,}\\s*[Rr]\\s*$"); bool withinRBlock = false; CommentState commentState; std::vector embeddedR; for (int i = 0; i 0; // check state and do the right thing if (beginRBlock) { withinRBlock = true; // #nocov } else if (withinRBlock) { if (commentState.inComment()) // #nocov start embeddedR.push_back(line); else withinRBlock = false; // #nocov end } } return embeddedR; } } // anonymous namespace // Generate a type signature for the function with the provided name // (type signature == function pointer declaration) std::string Function::signature(const std::string& name) const { // #nocov start std::ostringstream ostr; ostr << type() << "(*" << name << ")("; const std::vector& args = arguments(); for (std::size_t i = 0; i::const_iterator it = params_.begin(); it != params_.end(); ++it) { if (it->name() == name) // #nocov return *it; // #nocov } return Param(); } // Type operator << std::ostream& operator<<(std::ostream& os, const Type& type) { if (!type.empty()) { if (type.isConst()) os << "const "; os << type.name(); if (type.isReference()) os << "&"; } return os; } // Print argument void printArgument(std::ostream& os, const Argument& argument, bool printDefault = true) { if (!argument.empty()) { os << argument.type(); if (!argument.name().empty()) { os << " "; os << argument.name(); if (printDefault && !argument.defaultValue().empty()) os << " = " << argument.defaultValue(); // #nocov } } } // Argument operator << std::ostream& operator<<(std::ostream& os, const Argument& argument) {// #nocov start printArgument(os, argument); return os; // #nocov end } // Print function void printFunction(std::ostream& os, const Function& function, bool printArgDefaults = true) { if (!function.empty()) { if (!function.type().empty()) { os << function.type(); os << " "; } os << function.name(); os << "("; const std::vector& arguments = function.arguments(); for (std::size_t i = 0; i& params = attribute.params(); if (params.size() > 0) { os << "("; for (std::size_t i = 0; i lines; readLines(buffer, &lines); lines_ = Rcpp::wrap(lines); // Scan for attributes CommentState commentState; Rcpp::List matches = regexMatches(lines_, "^\\s*//\\s*\\[\\[Rcpp::(\\w+)(\\(.*?\\))?\\]\\]\\s*$"); for (int i = 0; i 0) { // if the match size isn't 3 then regmatches has not behaved // as expected (it should return a vector of either 0 or 3 // elements). we don't ever expect this to occur but if it // does let's not crash if (match.size() != 3) continue; // #nocov // add the attribute Attribute attr = parseAttribute( Rcpp::as >(match), i); attributes_.push_back(attr); } // if it's not an attribute line then it could still be a // line of interest (e.g. roxygen comment) else { // save roxygen comments if (line.find("//'") == 0) { std::string roxLine = "#" + line.substr(2); roxygenBuffer_.push_back(roxLine); } // a non-roxygen line causes us to clear the roxygen buffer else if (!roxygenBuffer_.empty()) { roxygenChunks_.push_back(roxygenBuffer_); // #nocov roxygenBuffer_.clear(); // #nocov } } } // Scan for Rcpp modules commentState.reset(); Rcpp::List modMatches = regexMatches(lines_, "^\\s*RCPP_MODULE\\s*\\(\\s*(\\w+)\\s*\\).*$"); for (int i = 0; i 0) { const char * name = match[1]; modules_.push_back(name); } } // Scan for package init function hasPackageInit_ = false; commentState.reset(); std::string pkgInit = "R_init_" + packageNameCpp; Rcpp::List initMatches = regexMatches(lines_, "^[^/]+" + pkgInit + ".*DllInfo.*$"); for (int i = 0; i 0) { hasPackageInit_ = true; // #nocov start break; } // #nocov end } // Parse embedded R embeddedR_ = parseEmbeddedR(lines_, lines); // Recursively parse dependencies if requested if (parseDependencies) { // get source dependencies sourceDependencies_ = parseSourceDependencies(sourceFile); // parse attributes and modules from each dependent file for (size_t i = 0; i& match, int lineNumber) { // Attribute name std::string name = match[1]; // Warn if this is an unknown attribute if (!isKnownAttribute(name)) { attributeWarning("Unrecognized attribute Rcpp::" + name, // #nocov lineNumber); // #nocov } // Extract params if we've got them std::vector params; std::string paramsText = match[2]; if (!paramsText.empty()) { // we know from the regex that it's enclosed in parens so remove // trim before we do this just in case someone updates the regex // to allow for whitespace around the call trimWhitespace(¶msText); paramsText = paramsText.substr(1, paramsText.size()-2); // parse the parameters params = parseParameters(paramsText); } // Extract function signature if this is a function attribute // and it doesn't appear at the end of the file Function function; // special handling for export and init if (name == kExportAttribute || name == kInitAttribute) { // parse the function (unless we are at the end of the file in // which case we print a warning) if ((lineNumber + 1) < lines_.size()) function = parseFunction(lineNumber + 1); else rcppExportWarning("No function found", lineNumber); // #nocov // validate parameters for (std::size_t i=0; i 0)) { rcppExportWarning("No value specified for parameter '" + name + "'", lineNumber); } // parameter that isn't name or rng else if (!value.empty() && (name != kExportName) && (name != kExportRng) && (name != kExportInvisible) && (name != kExportSignature)) { rcppExportWarning("Unrecognized parameter '" + name + "'", lineNumber); } // rng that isn't true or false else if (name == kExportRng) { if (value != kParamValueFalse && value != kParamValueTrue && value != kParamValueFALSE && value != kParamValueTRUE) { rcppExportWarning("rng value must be true or false", lineNumber); } } // invisible that isn't true of false else if (name == kExportInvisible) { if (value != kParamValueFalse && value != kParamValueTrue && value != kParamValueFALSE && value != kParamValueTRUE) { rcppExportWarning("invisible value must be true or false", lineNumber); // #nocov end } } } } // validate interfaces parameter else if (name == kInterfacesAttribute) { if (params.empty()) { // #nocov start rcppInterfacesWarning("No interfaces specified", lineNumber);// } else { for (std::size_t i=0; i SourceFileAttributesParser::parseParameters( const std::string& input) { std::string::size_type blockstart = input.find_first_of(kParamBlockStart); std::string::size_type blockend = input.find_last_of(kParamBlockEnd); const std::string delimiters(","); std::vector params; std::string::size_type current; std::string::size_type next = std::string::npos; std::string::size_type signature_param_start = std::string::npos; do { // #nocov next = input.find_first_not_of(delimiters, next + 1); if (next == std::string::npos) break; // #nocov current = next; do { next = input.find_first_of(delimiters, next + 1); } while((next >= blockstart) && (next <= blockend) && (next != std::string::npos)); params.push_back(Param(input.substr(current, next - current))); if(params.back().name() == kExportSignature) { signature_param_start = current; } } while(next != std::string::npos); // if the signature param was found, then check that the name, // start block and end block exist and are in the correct order if(signature_param_start != std::string::npos) { bool sigchecks = signature_param_start < blockstart && blockstart < blockend && blockstart != std::string::npos && blockend != std::string::npos; if(!sigchecks) { throw Rcpp::exception("signature parameter found but missing {}"); } } return params; } // Parse a function from the specified spot in the source file Function SourceFileAttributesParser::parseFunction(size_t lineNumber) { // Establish the text to parse for the signature std::string signature = parseSignature(lineNumber); if (signature.empty()) { rcppExportNoFunctionFoundWarning(lineNumber); // #nocov return Function(); // #nocov } // Start at the end and look for the () that deliniates the arguments // (bail with an empty result if we can't find them) std::string::size_type endParenLoc = signature.find_last_of(')'); std::string::size_type beginParenLoc = signature.find_first_of('('); if (endParenLoc == std::string::npos || beginParenLoc == std::string::npos || endParenLoc < beginParenLoc) { rcppExportNoFunctionFoundWarning(lineNumber); // #nocov return Function(); // #nocov } // Find the type and name by scanning backwards for the whitespace that // delimites the type and name Type type; std::string name; const std::string preambleText = signature.substr(0, beginParenLoc); for (std::string::const_reverse_iterator it = preambleText.rbegin(); it != preambleText.rend(); ++it) { char ch = *it; if (isWhitespace(ch)) { if (!name.empty()) { // we are at the break between type and name so we can also // extract the type std::string typeText; while (++it != preambleText.rend()) typeText.insert(0U, 1U, *it); type = parseType(typeText); // break (since we now have the name and the type) break; } else continue; // #nocov } else { name.insert(0U, 1U, ch); } } // If we didn't find a name then bail if (name.empty()) { rcppExportNoFunctionFoundWarning(lineNumber); // #nocov return Function(); // #nocov } // If we didn't find a type then bail if (type.empty()) { // #nocov start rcppExportWarning("No function return type found", lineNumber); return Function(); // #nocov end } // Now scan for arguments std::vector arguments; std::string argsText = signature.substr(beginParenLoc + 1, endParenLoc-beginParenLoc-1); std::vector args = parseArguments(argsText); for (std::vector::const_iterator it = args.begin(); it != args.end(); ++it) { // Get argument sans whitespace (bail if the arg is empty) std::string arg = *it; trimWhitespace(&arg); if (arg.empty()) { // we don't warn here because the compilation will fail anyway continue; // #nocov } // If the argument has an = within it then it has a default value std::string defaultValue; std::string::size_type eqPos = arg.find_first_of('='); if ( (eqPos != std::string::npos) && ((eqPos + 1) < arg.size()) ) { defaultValue = arg.substr(eqPos+1); trimWhitespace(&defaultValue); arg = arg.substr(0, eqPos); trimWhitespace(&arg); } // Scan backwards for whitespace to determine where the type ends // (we go backwards because whitespace is valid inside the type // identifier but invalid inside the variable name). Note that if // there is no whitespace we'll end up taking the whole string, // which allows us to capture a type with no variable (but note // we'll ultimately fail to parse types with no variable if they // have embedded whitespace) std::string::size_type pos = arg.find_last_of(kWhitespaceChars); // check for name std::string name; if (pos != std::string::npos) { // insert whitespace if variables are joint with '&' std::string::size_type ref_pos = arg.substr(pos).find_last_of("&"); if (ref_pos != std::string::npos) { pos += ref_pos + 1; // #nocov arg.insert(pos, " "); // #nocov } name = arg.substr(pos); trimWhitespace(&name); } if (name.empty()) { // #nocov start rcppExportInvalidParameterWarning(arg, lineNumber); return Function(); // #nocov end } // check for type string Type type = parseType(arg.substr(0, pos)); if (type.empty()) { // #nocov start rcppExportInvalidParameterWarning(arg, lineNumber); return Function(); // #nocov end } // add argument arguments.push_back(Argument(name, type, defaultValue)); } return Function(type, name, arguments); } // Parse the text of a function signature from the specified line std::string SourceFileAttributesParser::parseSignature(size_t lineNumber) { // Look for the signature termination ({ or ; not inside quotes) // on this line and then subsequent lines if necessary std::string signature; for (size_t i = lineNumber; i < (size_t)lines_.size(); i++) { std::string line; line = lines_[i]; bool insideQuotes = false; char prevChar = 0; // scan for { or ; not inside quotes for (size_t c = 0; c < line.length(); ++c) { // alias character char ch = line.at(c); // update quotes state if (ch == '"' && prevChar != '\\') insideQuotes = !insideQuotes; // found signature termination, append and return if (!insideQuotes && ((ch == '{') || (ch == ';'))) { signature.append(line.substr(0, c)); return signature; } // record prev char (used to check for escaped quote i.e. \") prevChar = ch; } // if we didn't find a terminator on this line then just append the line // and move on to the next line signature.append(line); signature.push_back(' '); } // Not found return std::string(); // #nocov } // Parse arguments from function signature. This is tricky because commas // are used to delimit arguments but are also valid inside template type // qualifiers. std::vector SourceFileAttributesParser::parseArguments( const std::string& argText) { int templateCount = 0; int parenCount = 0; std::string currentArg; std::vector args; char quote = 0; bool escaped = false; typedef std::string::const_iterator it_t; for (it_t it = argText.begin(); it != argText.end(); ++it) { // Store current character char ch = *it; // Ignore quoted strings and character values in single quotes if ( ! quote && (ch == '"' || ch == '\'')) quote = ch; else if (quote && ch == quote && ! escaped) quote = 0; // Escaped character inside quotes if (escaped) escaped = false; else if (quote && ch == '\\') escaped = true; // Detect end of argument declaration if ( ! quote && (ch == ',') && (templateCount == 0) && (parenCount == 0)) { args.push_back(currentArg); currentArg.clear(); continue; } // Append current character if not a space at start if ( ! currentArg.empty() || ch != ' ') currentArg.push_back(ch); // Count use of potentially enclosed brackets if ( ! quote) { switch(ch) { case '<': templateCount++; break; case '>': templateCount--; break; case '(': // #nocov start parenCount++; break; case ')': parenCount--; break; // #nocov end } } } if (!currentArg.empty()) args.push_back(currentArg); return args; } Type SourceFileAttributesParser::parseType(const std::string& text) { const std::string constQualifier("const"); const std::string referenceQualifier("&"); // trim whitespace std::string type = text; trimWhitespace(&type); // check for const and reference bool isConst = false; bool isReference = false; if (type.find(constQualifier) == 0) { isConst = true; type.erase(0, constQualifier.length()); } // if the type is now empty (because it was detected as only const) // then this is an invalid state so we bail if (type.empty()) return Type(); // #nocov if (type.find(referenceQualifier) == (type.length() - referenceQualifier.length())) { isReference = true; type.erase(type.length() - referenceQualifier.length()); } trimWhitespace(&type); // if the type is now empty because of some strange parse then bail if (type.empty()) return Type(); // #nocov return Type(type, isConst, isReference); } // Validation helpers bool SourceFileAttributesParser::isKnownAttribute(const std::string& name) const { return name == kExportAttribute || name == kInitAttribute || name == kDependsAttribute || name == kPluginsAttribute || name == kInterfacesAttribute; } // Print an attribute parsing related warning void SourceFileAttributesParser::attributeWarning( // #nocov start const std::string& message, const std::string& attribute, size_t lineNumber) { // get basename of source file for warning message Rcpp::Function basename = Rcpp::Environment::base_env()["basename"]; std::string file = Rcpp::as(basename(sourceFile_)); std::ostringstream ostr; ostr << message; if (!attribute.empty()) ostr << " for " << attribute << " attribute"; ostr << " at " << file << ":" << lineNumber; showWarning(ostr.str()); } void SourceFileAttributesParser::attributeWarning( const std::string& message, size_t lineNumber) { attributeWarning(message, "", lineNumber); } void SourceFileAttributesParser::rcppExportWarning( const std::string& message, size_t lineNumber) { attributeWarning(message, "Rcpp::export", lineNumber); } void SourceFileAttributesParser::rcppExportNoFunctionFoundWarning( size_t lineNumber) { rcppExportWarning("No function found", lineNumber); } void SourceFileAttributesParser::rcppExportInvalidParameterWarning( const std::string& param, size_t lineNumber) { rcppExportWarning("Invalid parameter: " "'" + param + "'", lineNumber); } void SourceFileAttributesParser::rcppInterfacesWarning( const std::string& message, size_t lineNumber) { attributeWarning(message + " (valid interfaces are 'r' and 'cpp')", "Rcpp::interfaces", lineNumber); } // #nocov end // Track /* */ comment state void CommentState::submitLine(const std::string& line) { std::size_t pos = 0; while (pos != std::string::npos) { // check for a // which would invalidate any other token found std::size_t lineCommentPos = line.find("//", pos); // look for the next token std::string token = inComment() ? "*/" : "/*"; pos = line.find(token, pos); // process the comment token if found if (pos != std::string::npos) { // break if the line comment precedes the comment token if (lineCommentPos != std::string::npos && lineCommentPos < pos) break; // #nocov inComment_ = !inComment_; pos += token.size(); } } } } // namespace attributes } // namespace Rcpp /******************************************************************* * AttributesGen.cpp *******************************************************************/ namespace Rcpp { namespace attributes { // constants namespace { const char * const kRcppExportsSuffix = "_RcppExports.h"; const char * const kTrySuffix = "_try"; } ExportsGenerator::ExportsGenerator(const std::string& targetFile, const std::string& package, const std::string& commentPrefix) : targetFile_(targetFile), package_(package), packageCpp_(package), commentPrefix_(commentPrefix), hasCppInterface_(false) { // read the existing target file if it exists if (FileInfo(targetFile_).exists()) { std::ifstream ifs(targetFile_.c_str()); // #nocov start if (ifs.fail()) throw Rcpp::file_io_error(targetFile_); std::stringstream buffer; buffer << ifs.rdbuf(); existingCode_ = buffer.str(); // #nocov end } std::replace(packageCpp_.begin(), packageCpp_.end(), '.', '_'); // see if this is safe to overwite and throw if it isn't if (!isSafeToOverwrite()) throw Rcpp::file_exists(targetFile_); // #nocov } void ExportsGenerator::writeFunctions( const SourceFileAttributes& attributes, bool verbose) { if (attributes.hasInterface(kInterfaceCpp)) hasCppInterface_ = true; // #nocov doWriteFunctions(attributes, verbose); } // Commit the stream -- is a no-op if the existing code is identical // to the generated code. Returns true if data was written and false // if it wasn't (throws exception on io error) bool ExportsGenerator::commit(const std::string& preamble) { // get the generated code std::string code = codeStream_.str(); // if there is no generated code AND the exports file does not // currently exist then do nothing if (code.empty() && !FileInfo(targetFile_).exists()) return false; // #nocov // write header/preamble std::ostringstream headerStream; headerStream << commentPrefix_ << " Generated by using " << "Rcpp::compileAttributes()" << " -> do not edit by hand" << std::endl; headerStream << commentPrefix_ << " Generator token: " << generatorToken() << std::endl << std::endl; if (!preamble.empty()) headerStream << preamble; // get generated code and only write it if there was a change std::string generatedCode = headerStream.str() + code; if (generatedCode != existingCode_) { // open the file std::ofstream ofs(targetFile_.c_str(), std::ofstream::out | std::ofstream::trunc); if (ofs.fail()) throw Rcpp::file_io_error(targetFile_); // #nocov // write generated code and return ofs << generatedCode; ofs.close(); return true; } else { return false; // #nocov } } // Remove the generated file entirely bool ExportsGenerator::remove() { return removeFile(targetFile_); } // Convert a possible dot in package name to underscore as needed for header file std::string ExportsGenerator::dotNameHelper(const std::string & name) const { std::string newname(name); std::replace(newname.begin(), newname.end(), '.', '_'); return newname; } CppExportsGenerator::CppExportsGenerator(const std::string& packageDir, const std::string& package, const std::string& fileSep) : ExportsGenerator( packageDir + fileSep + "src" + fileSep + "RcppExports.cpp", package, "//") { } void CppExportsGenerator::doWriteFunctions( const SourceFileAttributes& attributes, bool verbose) { // generate functions generateCpp(ostr(), attributes, true, attributes.hasInterface(kInterfaceCpp), packageCppPrefix()); // track cppExports, signatures, and native routines (we use these // at the end to generate the ValidateSignature and RegisterCCallable // functions, and to generate a package init function with native // routine registration) for (SourceFileAttributes::const_iterator // #nocov start it = attributes.begin(); it != attributes.end(); ++it) { if (it->isExportedFunction()) { // add it to the cpp exports list if we are generating // a C++ interface and it's not hidden if (attributes.hasInterface(kInterfaceCpp)) { Function fun = it->function().renamedTo(it->exportedCppName()); if (!fun.isHidden()) cppExports_.push_back(*it); } // add it to the native routines list nativeRoutines_.push_back(*it); } else if (it->name() == kInitAttribute) { initFunctions_.push_back(*it); } } // #nocov end // record modules const std::vector& modules = attributes.modules(); modules_.insert(modules_.end(), modules.begin(), modules.end()); // verbose if requested if (verbose) { // #nocov start Rcpp::Rcout << "Exports from " << attributes.sourceFile() << ":" << std::endl; for (std::vector::const_iterator it = attributes.begin(); it != attributes.end(); ++it) { if (it->isExportedFunction()) Rcpp::Rcout << " " << it->function() << std::endl; } Rcpp::Rcout << std::endl; // #nocov end } } void CppExportsGenerator::writeEnd(bool hasPackageInit) { // generate a function that can be used to validate exported // functions and their signatures prior to looking up with // GetCppCallable (otherwise inconsistent signatures between // client and library would cause a crash) if (hasCppInterface()) { ostr() << std::endl; // #nocov start ostr() << "// validate" << " (ensure exported C++ functions exist before " << "calling them)" << std::endl; ostr() << "static int " << exportValidationFunctionRegisteredName() << "(const char* sig) { " << std::endl; ostr() << " static std::set signatures;" << std::endl; ostr() << " if (signatures.empty()) {" << std::endl; for (std::size_t i=0;i routineNames; std::vector routineArgs; for (std::size_t i=0;i declarations = extraRoutines["declarations"]; std::vector callEntries = extraRoutines["call_entries"]; // add declarations for modules for (std::size_t i=0;i 0) { ostr() << std::endl; for (std::size_t i = 0; i 0) { for (std::size_t i = 0; i& includes) { // includes std::ostringstream ostr; if (!includes.empty()) { for (std::size_t i=0;i" << std::endl; // #nocov ostr << "#include " << std::endl; // #nocov } ostr << std::endl; // always bring in Rcpp ostr << "using namespace Rcpp;" << std::endl << std::endl; // initialize references to global Rostreams initializeGlobals(ostr); // commit with preamble return ExportsGenerator::commit(ostr.str()); } CppExportsIncludeGenerator::CppExportsIncludeGenerator( const std::string& packageDir, const std::string& package, const std::string& fileSep) : ExportsGenerator( packageDir + fileSep + "inst" + fileSep + "include" + fileSep + dotNameHelper(package) + kRcppExportsSuffix, package, "//") { includeDir_ = packageDir + fileSep + "inst" + fileSep + "include"; } void CppExportsIncludeGenerator::writeBegin() { ostr() << "namespace " << packageCpp() << " {" << std::endl << std::endl; // Import Rcpp into this namespace. This allows declarations to // be written without fully qualifying all Rcpp types. The only // negative side-effect is that when this package's namespace // is imported it will also pull in Rcpp. However since this is // opt-in and represents a general desire to do namespace aliasing // this seems okay ostr() << " using namespace Rcpp;" << std::endl << std::endl; // Write our export validation helper function. Putting it in // an anonymous namespace will hide it from callers and give // it per-translation unit linkage ostr() << " namespace {" << std::endl; ostr() << " void validateSignature(const char* sig) {" << std::endl; ostr() << " Rcpp::Function require = " << "Rcpp::Environment::base_env()[\"require\"];" << std::endl; ostr() << " require(\"" << package() << "\", " << "Rcpp::Named(\"quietly\") = true);" << std::endl; std::string validate = "validate"; std::string fnType = "Ptr_" + validate; ostr() << " typedef int(*" << fnType << ")(const char*);" << std::endl; std::string ptrName = "p_" + validate; ostr() << " static " << fnType << " " << ptrName << " = " << "(" << fnType << ")" << std::endl << " " << getCCallable(exportValidationFunctionRegisteredName()) << ";" << std::endl; ostr() << " if (!" << ptrName << "(sig)) {" << std::endl; ostr() << " throw Rcpp::function_not_exported(" << std::endl << " " << "\"C++ function with signature '\" + std::string(sig) + \"' not found in " << package() << "\");" << std::endl; ostr() << " }" << std::endl; ostr() << " }" << std::endl; ostr() << " }" << std::endl << std::endl; } void CppExportsIncludeGenerator::doWriteFunctions( const SourceFileAttributes& attributes, bool) { // don't write anything if there is no C++ interface if (!attributes.hasInterface(kInterfaceCpp)) return; for(std::vector::const_iterator // #nocov start it = attributes.begin(); it != attributes.end(); ++it) { if (it->isExportedFunction()) { Function function = it->function().renamedTo(it->exportedCppName()); // if it's hidden then don't generate a C++ interface if (function.isHidden()) continue; ostr() << " inline " << function << " {" << std::endl; std::string fnType = "Ptr_" + function.name(); ostr() << " typedef SEXP(*" << fnType << ")("; for (size_t i=0; irng()) ostr() << " RNGScope RCPP_rngScope_gen;" << std::endl; ostr() << " rcpp_result_gen = " << ptrName << "("; const std::vector& args = function.arguments(); for (std::size_t i = 0; i(Rcpp::wrap(" << args[i].name() << "))"; if (i != (args.size()-1)) ostr() << ", "; } ostr() << ");" << std::endl; ostr() << " }" << std::endl; ostr() << " if (rcpp_result_gen.inherits(\"interrupted-error\"))" << std::endl << " throw Rcpp::internal::InterruptedException();" << std::endl; ostr() << " if (Rcpp::internal::isLongjumpSentinel(rcpp_result_gen))" << std::endl << " throw Rcpp::LongjumpException(rcpp_result_gen);" << std::endl; ostr() << " if (rcpp_result_gen.inherits(\"try-error\"))" << std::endl << " throw Rcpp::exception(Rcpp::as(" << "rcpp_result_gen).c_str());" << std::endl; if (!function.type().isVoid()) { ostr() << " return Rcpp::as<" << function.type() << " >" << "(rcpp_result_gen);" << std::endl; } ostr() << " }" << std::endl << std::endl; // #nocov end } } } void CppExportsIncludeGenerator::writeEnd(bool) { ostr() << "}" << std::endl; ostr() << std::endl; ostr() << "#endif // " << getHeaderGuard() << std::endl; } bool CppExportsIncludeGenerator::commit( const std::vector& includes) { if (hasCppInterface()) { // create the include dir if necessary createDirectory(includeDir_); // #nocov start // generate preamble std::ostringstream ostr; // header guard std::string guard = getHeaderGuard(); ostr << "#ifndef " << guard << std::endl; ostr << "#define " << guard << std::endl << std::endl; // includes if (!includes.empty()) { for (std::size_t i=0;i&) { if (hasCppInterface()) { // create the include dir if necessary createDirectory(includeDir_); // #nocov // commit return ExportsGenerator::commit(); // #nocov } else { return ExportsGenerator::remove(); } } std::string CppPackageIncludeGenerator::getHeaderGuard() const { // #nocov return "RCPP_" + packageCpp() + "_H_GEN_"; // #nocov } RExportsGenerator::RExportsGenerator(const std::string& packageDir, const std::string& package, bool registration, const std::string& fileSep) : ExportsGenerator( packageDir + fileSep + "R" + fileSep + "RcppExports.R", package, "#"), registration_(registration) { } void RExportsGenerator::doWriteFunctions( const SourceFileAttributes& attributes, bool) { // write standalone roxygen chunks const std::vector >& roxygenChunks = attributes.roxygenChunks(); for (std::size_t i = 0; i& chunk = roxygenChunks[i]; // #nocov start for (std::size_t l = 0; l < chunk.size(); l++) ostr() << chunk[l] << std::endl; ostr() << "NULL" << std::endl << std::endl; // #nocov end } // write exported functions if (attributes.hasInterface(kInterfaceR)) { // process each attribute for(std::vector::const_iterator it = attributes.begin(); it != attributes.end(); ++it) { // alias the attribute and function (bail if not export) const Attribute& attribute = *it; if (!attribute.isExportedFunction()) continue; // #nocov const Function& function = attribute.function(); // print roxygen lines for (size_t i=0; i& arguments = function.arguments(); for (size_t i = 0; i&) { return ExportsGenerator::commit(); } ExportsGenerators::~ExportsGenerators() { try { for(Itr it = generators_.begin(); it != generators_.end(); ++it) delete *it; generators_.clear(); } catch(...) {} } void ExportsGenerators::add(ExportsGenerator* pGenerator) { generators_.push_back(pGenerator); } void ExportsGenerators::writeBegin() { for(Itr it = generators_.begin(); it != generators_.end(); ++it) (*it)->writeBegin(); } void ExportsGenerators::writeFunctions( const SourceFileAttributes& attributes, bool verbose) { for(Itr it = generators_.begin(); it != generators_.end(); ++it) (*it)->writeFunctions(attributes, verbose); } void ExportsGenerators::writeEnd(bool hasPackageInit) { for(Itr it = generators_.begin(); it != generators_.end(); ++it) (*it)->writeEnd(hasPackageInit); } // Commit and return a list of the files that were updated std::vector ExportsGenerators::commit( const std::vector& includes) { std::vector updated; for(Itr it = generators_.begin(); it != generators_.end(); ++it) { if ((*it)->commit(includes)) updated.push_back((*it)->targetFile()); } return updated; } // Remove and return a list of files that were removed std::vector ExportsGenerators::remove() { // #nocov start std::vector removed; for(Itr it = generators_.begin(); it != generators_.end(); ++it) { if ((*it)->remove()) removed.push_back((*it)->targetFile()); } return removed; } // Helpers for converting C++ default arguments to R default arguments namespace { // convert a C++ numeric argument to an R argument value // (returns empty string if no conversion is possible) std::string cppNumericArgToRArg(const std::string& type, const std::string& cppArg) { // check for a number double num; std::stringstream argStream(cppArg); if ((argStream >> num)) { // L suffix means return the value literally if (!argStream.eof()) { std::string suffix; argStream >> suffix; if (argStream.eof() && suffix == "L") return cppArg; } // no decimal and the type isn't explicitly double or // float means integer if (cppArg.find('.') == std::string::npos && type != "double" && type != "float") return cppArg + "L"; // otherwise return arg literally else return cppArg; } else { return std::string(); } } // convert a C++ ::create style argument value to an R argument // value (returns empty string if no conversion is possible) std::string cppCreateArgToRArg(const std::string& cppArg) { std::string create = "::create"; size_t createLoc = cppArg.find(create); if (createLoc == std::string::npos || ((createLoc + create.length()) >= cppArg.size())) { return std::string(); } std::string type = cppArg.substr(0, createLoc); std::string rcppScope = "Rcpp::"; size_t rcppLoc = type.find(rcppScope); if (rcppLoc == 0 && type.size() > rcppScope.length()) type = type.substr(rcppScope.length()); std::string args = cppArg.substr(createLoc + create.length()); if (type == "CharacterVector") return "as.character( c" + args + ")"; if (type == "IntegerVector") return "as.integer( c" + args + ")"; if (type == "NumericVector") return "as.numeric( c" + args + ")"; if (type == "LogicalVector") return "as.logical( c" + args + ")"; return std::string(); } // convert a C++ Matrix to an R argument (returns empty string // if no conversion possible) std::string cppMatrixArgToRArg(const std::string& cppArg) { // look for Matrix std::string matrix = "Matrix"; size_t matrixLoc = cppArg.find(matrix); if (matrixLoc == std::string::npos || ((matrixLoc + matrix.length()) >= cppArg.size())) { return std::string(); } std::string args = cppArg.substr(matrixLoc + matrix.length()); return "matrix" + args; // #nocov end } // convert a C++ literal to an R argument (returns empty string // if no conversion possible) std::string cppLiteralArgToRArg(const std::string& cppArg) { if (cppArg == "true") return "TRUE"; else if (cppArg == "false") return "FALSE"; else if (cppArg == "R_NilValue") return "NULL"; else if (cppArg == "NA_STRING") // #nocov start return "NA_character_"; else if (cppArg == "NA_INTEGER") return "NA_integer_"; else if (cppArg == "NA_LOGICAL") return "NA_integer_"; else if (cppArg == "NA_REAL") return "NA_real_"; else return std::string(); } // convert an Rcpp container constructor to an R argument // (returns empty string if no conversion possible) std::string cppConstructorArgToRArg(const std::string& cppArg) { // map Rcpp containers to R default initializers static std::map RcppContainerToR; RcppContainerToR.insert(std::make_pair("NumericVector", "numeric")); RcppContainerToR.insert(std::make_pair("DoubleVector", "numeric")); RcppContainerToR.insert(std::make_pair("CharacterVector", "character")); RcppContainerToR.insert(std::make_pair("IntegerVector", "integer")); RcppContainerToR.insert(std::make_pair("LogicalVector", "logical")); RcppContainerToR.insert(std::make_pair("ComplexVector", "complex")); // for each entry in the map above, see if we find it; if we do, // return the R version typedef std::map::const_iterator Iterator; for (Iterator it = RcppContainerToR.begin(); it != RcppContainerToR.end(); ++it) { size_t loc = cppArg.find(it->first); if (loc != std::string::npos) { return it->second + cppArg.substr(it->first.size(), std::string::npos); } } return std::string(); // #nocov end } // convert a C++ argument value to an R argument value (returns empty // string if no conversion is possible) std::string cppArgToRArg(const std::string& type, const std::string& cppArg) { // try for quoted string if (isQuoted(cppArg)) return cppArg; // try for literal std::string rArg = cppLiteralArgToRArg(cppArg); if (!rArg.empty()) return rArg; // try for a create arg rArg = cppCreateArgToRArg(cppArg); // #nocov start if (!rArg.empty()) return rArg; // try for a matrix arg rArg = cppMatrixArgToRArg(cppArg); if (!rArg.empty()) return rArg; // try for a numeric arg rArg = cppNumericArgToRArg(type, cppArg); if (!rArg.empty()) return rArg; // try for a constructor arg rArg = cppConstructorArgToRArg(cppArg); if (!rArg.empty()) return rArg; // couldn't parse the arg return std::string(); // #nocov end } } // anonymous namespace // Generate an R argument list for a function std::string generateRArgList(const Function& function) { std::ostringstream argsOstr; const std::vector& arguments = function.arguments(); for (size_t i = 0; i required_args; const std::vector& arguments = function.arguments(); for (size_t i = 0; i parsed_args = Rcpp::as >(pargs_cv); for(size_t i=0; i& Rcpp::Rcout = Rcpp::Rcpp_cout_get();"; ostr << std::endl; ostr << "Rcpp::Rostream& Rcpp::Rcerr = Rcpp::Rcpp_cerr_get();"; ostr << std::endl; ostr << "#endif" << std::endl << std::endl; } // Generate the C++ code required to make [[Rcpp::export]] functions // available as C symbols with SEXP parameters and return void generateCpp(std::ostream& ostr, const SourceFileAttributes& attributes, bool includePrototype, bool cppInterface, const std::string& contextId) { // process each attribute for(std::vector::const_iterator it = attributes.begin(); it != attributes.end(); ++it) { // alias the attribute and function (bail if not export) const Attribute& attribute = *it; if (!attribute.isExportedFunction()) continue; const Function& function = attribute.function(); // include prototype if requested if (includePrototype) { ostr << "// " << function.name() << std::endl; printFunction(ostr, function, false); ostr << ";"; } // write the C++ callable SEXP-based function (this version // returns errors via "try-error") ostr << std::endl; ostr << (cppInterface ? "static" : "RcppExport"); ostr << " SEXP "; std::string funcName = contextId + "_" + function.name(); ostr << funcName; if (cppInterface) ostr << kTrySuffix; // #nocov ostr << "("; std::ostringstream ostrArgs; const std::vector& arguments = function.arguments(); for (size_t i = 0; i::type " << argument.name() << "(" << argument.name() << "SEXP);" << std::endl; } ostr << " "; if (!function.type().isVoid()) ostr << "rcpp_result_gen = Rcpp::wrap("; ostr << function.name() << "("; for (size_t i = 0; i(buffer.st_mtime); } } // Remove a file (call back into R for this) bool removeFile(const std::string& path) { if (FileInfo(path).exists()) { Rcpp::Function rm = Rcpp::Environment::base_env()["file.remove"]; // #nocov start rm(path); return true; // #nocov end } else { return false; } } // Recursively create a directory (call back into R for this) void createDirectory(const std::string& path) { // #nocov start if (!FileInfo(path).exists()) { Rcpp::Function mkdir = Rcpp::Environment::base_env()["dir.create"]; mkdir(path, Rcpp::Named("recursive") = true); } } // #nocov end // Known whitespace chars const char * const kWhitespaceChars = " \f\n\r\t\v"; // Query whether a character is whitespace bool isWhitespace(char ch) { return std::strchr(kWhitespaceChars, ch) != NULL; } // Remove trailing line comments -- ie, find comments that don't begin // a line, and remove them. We avoid stripping attributes. void stripTrailingLineComments(std::string* pStr) { if (pStr->empty()) return; size_t len = pStr->length(); bool inString = false; size_t idx = 0; // if this is an roxygen comment, then bail if (isRoxygenCpp(*pStr)) return; // skip over initial whitespace idx = pStr->find_first_not_of(kWhitespaceChars); if (idx == std::string::npos) return; // skip over a first comment if (idx + 1 < len && pStr->at(idx) == '/' && pStr->at(idx + 1) == '/') { idx = idx + 2; } // since we are searching for "//", we iterate up to 2nd last character while (idx < len - 1) { if (inString) { if (pStr->at(idx) == '"' && pStr->at(idx - 1) != '\\') { inString = false; } } else { if (pStr->at(idx) == '"') { inString = true; } } if (!inString && pStr->at(idx) == '/' && pStr->at(idx + 1) == '/') { pStr->erase(idx); return; } ++idx; } } // Trim a string void trimWhitespace(std::string* pStr) { // skip empty case if (pStr->empty()) return; // #nocov // trim right std::string::size_type pos = pStr->find_last_not_of(kWhitespaceChars); if (pos != std::string::npos) pStr->erase(pos + 1); // trim left pos = pStr->find_first_not_of(kWhitespaceChars); pStr->erase(0, pos); } // Strip balanced quotes from around a string (assumes already trimmed) void stripQuotes(std::string* pStr) { if (pStr->length() < 2) return; char quote = *(pStr->begin()); if ( (quote == '\'' || quote == '\"') && (*(pStr->rbegin()) == quote) ) *pStr = pStr->substr(1, pStr->length()-2); // #nocov } // is the passed string quoted? bool isQuoted(const std::string& str) { if (str.length() < 2) return false; // #nocov char quote = *(str.begin()); return (quote == '\'' || quote == '\"') && (*(str.rbegin()) == quote); } // does a string end with another string? bool endsWith(const std::string& str, const std::string& suffix) { return str.size() >= suffix.size() && str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0; } // show a warning message void showWarning(const std::string& msg) { // #nocov start Rcpp::Function warning = Rcpp::Environment::base_env()["warning"]; warning(msg, Rcpp::Named("call.") = false); } // #nocov end bool isRoxygenCpp(const std::string& str) { size_t len = str.length(); if (len < 3) return false; size_t idx = str.find_first_not_of(kWhitespaceChars); if (idx == std::string::npos) return false; // make sure there are characters to check if (len - 2 < idx) return false; if (str[idx] == '/' && str[idx + 1] == '/' && str[idx + 2] == '\'') { return true; } return false; } } // namespace attributes } // namespace Rcpp /******************************************************************* * Attributes.cpp *******************************************************************/ using namespace Rcpp::attributes; // Implementation helpers for sourceCppContext namespace { // Class that manages generation of source code for the sourceCpp dynlib class SourceCppDynlib { public: SourceCppDynlib() {} SourceCppDynlib(const std::string& cacheDir, const std::string& cppSourcePath, Rcpp::List platform) : cppSourcePath_(cppSourcePath) { // get cpp source file info FileInfo cppSourceFilenameInfo(cppSourcePath_); if (!cppSourceFilenameInfo.exists()) throw Rcpp::file_not_found(cppSourcePath_); // #nocov // record the base name of the source file Rcpp::Function basename = Rcpp::Environment::base_env()["basename"]; cppSourceFilename_ = Rcpp::as(basename(cppSourcePath_)); // get platform info fileSep_ = Rcpp::as(platform["file.sep"]); dynlibExt_ = Rcpp::as(platform["dynlib.ext"]); // generate temp directory Rcpp::Function tempfile = Rcpp::Environment::base_env()["tempfile"]; buildDirectory_ = Rcpp::as(tempfile("sourcecpp_", cacheDir)); std::replace(buildDirectory_.begin(), buildDirectory_.end(), '\\', '/'); Rcpp::Function dircreate = Rcpp::Environment::base_env()["dir.create"]; dircreate(buildDirectory_); // generate a random context id contextId_ = "sourceCpp_" + uniqueToken(cacheDir); // regenerate the source code regenerateSource(cacheDir); } // create from list explicit SourceCppDynlib(const Rcpp::List& dynlib) { using namespace Rcpp; cppSourcePath_ = as(dynlib["cppSourcePath"]); generatedCpp_ = as(dynlib["generatedCpp"]); cppSourceFilename_ = as(dynlib["cppSourceFilename"]); contextId_ = as(dynlib["contextId"]); buildDirectory_ = as(dynlib["buildDirectory"]); fileSep_ = as(dynlib["fileSep"]); dynlibFilename_ = as(dynlib["dynlibFilename"]); previousDynlibFilename_ = as(dynlib["previousDynlibFilename"]); dynlibExt_ = as(dynlib["dynlibExt"]); exportedFunctions_ = as >(dynlib["exportedFunctions"]); modules_ = as >(dynlib["modules"]); depends_ = as >(dynlib["depends"]); plugins_ = as >(dynlib["plugins"]); embeddedR_ = as >(dynlib["embeddedR"]); List sourceDependencies = as(dynlib["sourceDependencies"]); for (R_xlen_t i = 0; i(sourceDependencies.at(i)); // #nocov sourceDependencies_.push_back(FileInfo(fileInfo)); // #nocov } } // convert to list Rcpp::List toList() const { using namespace Rcpp; List dynlib; dynlib["cppSourcePath"] = cppSourcePath_; dynlib["generatedCpp"] = generatedCpp_; dynlib["cppSourceFilename"] = cppSourceFilename_; dynlib["contextId"] = contextId_; dynlib["buildDirectory"] = buildDirectory_; dynlib["fileSep"] = fileSep_; dynlib["dynlibFilename"] = dynlibFilename_; dynlib["previousDynlibFilename"] = previousDynlibFilename_; dynlib["dynlibExt"] = dynlibExt_; dynlib["exportedFunctions"] = exportedFunctions_; dynlib["modules"] = modules_; dynlib["depends"] = depends_; dynlib["plugins"] = plugins_; dynlib["embeddedR"] = embeddedR_; List sourceDependencies; for (std::size_t i = 0; i FileInfo(generatedCppSourcePath()).lastModified()) return true; // #nocov // no dynlib means we're dirty if (!FileInfo(dynlibPath()).exists()) return true; // #nocov // variation in source dependencies means we're dirty std::vector sourceDependencies = parseSourceDependencies( cppSourcePath_); if (sourceDependencies != sourceDependencies_) return true; // #nocov // not dirty return false; } void regenerateSource(const std::string& cacheDir) { // create new dynlib filename previousDynlibFilename_ = dynlibFilename_; dynlibFilename_ = "sourceCpp_" + uniqueToken(cacheDir) + dynlibExt_; // copy the source file to the build dir Rcpp::Function filecopy = Rcpp::Environment::base_env()["file.copy"]; filecopy(cppSourcePath_, generatedCppSourcePath(), true, Rcpp::_["copy.mode"] = false); // parse attributes SourceFileAttributesParser sourceAttributes(cppSourcePath_, "", true); // generate cpp for attributes and append them std::ostringstream ostr; // always include Rcpp.h in case the user didn't ostr << std::endl << std::endl; ostr << "#include " << std::endl; // initialize references to global Rostreams initializeGlobals(ostr); generateCpp(ostr, sourceAttributes, true, false, contextId_); generatedCpp_ = ostr.str(); std::ofstream cppOfs(generatedCppSourcePath().c_str(), std::ofstream::out | std::ofstream::app); if (cppOfs.fail()) throw Rcpp::file_io_error(generatedCppSourcePath()); // #nocov cppOfs << generatedCpp_; cppOfs.close(); // generate R for attributes and write it into the build directory std::ofstream rOfs(generatedRSourcePath().c_str(), std::ofstream::out | std::ofstream::trunc); if (rOfs.fail()) throw Rcpp::file_io_error(generatedRSourcePath()); // #nocov // DLLInfo - hide using . and ensure uniqueness using contextId std::string dllInfo = "`." + contextId_ + "_DLLInfo`"; rOfs << dllInfo << " <- dyn.load('" << dynlibPath() << "')" << std::endl << std::endl; // Generate R functions generateR(rOfs, sourceAttributes, dllInfo); // remove the DLLInfo rOfs << std::endl << "rm(" << dllInfo << ")" << std::endl; rOfs.close(); // discover exported functions and dependencies exportedFunctions_.clear(); depends_.clear(); plugins_.clear(); for (SourceFileAttributesParser::const_iterator it = sourceAttributes.begin(); it != sourceAttributes.end(); ++it) { if (it->name() == kExportAttribute && !it->function().empty()) exportedFunctions_.push_back(it->exportedName()); else if (it->name() == kDependsAttribute) { for (size_t i = 0; iparams().size(); ++i) // #nocov depends_.push_back(it->params()[i].name()); // #nocov } else if (it->name() == kPluginsAttribute) { for (size_t i = 0; iparams().size(); ++i) plugins_.push_back(it->params()[i].name()); } } // capture modules modules_ = sourceAttributes.modules(); // capture embededded R embeddedR_ = sourceAttributes.embeddedR(); // capture source dependencies sourceDependencies_ = sourceAttributes.sourceDependencies(); } const std::string& contextId() const { return contextId_; } const std::string& cppSourcePath() const { return cppSourcePath_; } const std::vector cppDependencySourcePaths() { std::vector dependencies; for (size_t i = 0; i& exportedFunctions() const { return exportedFunctions_; } const std::vector& modules() const { return modules_; } const std::vector& depends() const { return depends_; }; const std::vector& plugins() const { return plugins_; }; const std::vector& embeddedR() const { return embeddedR_; } private: std::string generatedCppSourcePath() const { return buildDirectory_ + fileSep_ + cppSourceFilename(); } std::string generatedRSourcePath() const { return buildDirectory_ + fileSep_ + rSourceFilename(); } void generateR(std::ostream& ostr, const SourceFileAttributes& attributes, const std::string& dllInfo) const { // process each attribute for(std::vector::const_iterator it = attributes.begin(); it != attributes.end(); ++it) { // alias the attribute and function (bail if not export) const Attribute& attribute = *it; if (!attribute.isExportedFunction()) continue; const Function& function = attribute.function(); // build the parameter list std::string args = generateRArgList(function); // check if has a custom signature if(attribute.hasParameter(kExportSignature)) { args = attribute.customRSignature(); if(!checkRSignature(function, args)) { std::string rsig_err_msg = "Missing args in " + args; throw Rcpp::exception(rsig_err_msg.c_str()); } } // export the function ostr << attribute.exportedName() << " <- Rcpp:::sourceCppFunction(" << "function(" << args << ") {}, " << (function.type().isVoid() ? "TRUE" : "FALSE") << ", " << dllInfo << ", " << "'" << contextId_ + "_" + function.name() << "')" << std::endl; } // modules std::vector modules = attributes.modules(); if (modules.size() > 0) { // modules require definition of C++Object to be loaded ostr << "library(Rcpp)" << std::endl; // load each module for (std::vector::const_iterator it = modules.begin(); it != modules.end(); ++it) { ostr << " populate( Rcpp::Module(\"" << *it << "\"," << dllInfo << "), environment() ) " << std::endl; } } } std::string uniqueToken(const std::string& cacheDir) { Rcpp::Environment rcppEnv = Rcpp::Environment::namespace_env("Rcpp"); Rcpp::Function uniqueTokenFunc = rcppEnv[".sourceCppDynlibUniqueToken"]; return Rcpp::as(uniqueTokenFunc(cacheDir)); } private: std::string cppSourcePath_; std::string generatedCpp_; std::string cppSourceFilename_; std::string contextId_; std::string buildDirectory_; std::string fileSep_; std::string dynlibFilename_; std::string previousDynlibFilename_; std::string dynlibExt_; std::vector exportedFunctions_; std::vector modules_; std::vector depends_; std::vector plugins_; std::vector embeddedR_; std::vector sourceDependencies_; }; // Dynlib cache that allows lookup by either file path or code contents void dynlibCacheInsert(const std::string& cacheDir, const std::string& file, const std::string& code, const SourceCppDynlib& dynlib) { Rcpp::Environment rcppEnv = Rcpp::Environment::namespace_env("Rcpp"); Rcpp::Function dynlibInsertFunc = rcppEnv[".sourceCppDynlibInsert"]; dynlibInsertFunc(cacheDir, file, code, dynlib.toList()); } void dynlibCacheInsertFile(const std::string& cacheDir, const std::string& file, const SourceCppDynlib& dynlib) { dynlibCacheInsert(cacheDir, file, "", dynlib); } void dynlibCacheInsertCode(const std::string& cacheDir, const std::string& code, const SourceCppDynlib& dynlib) { dynlibCacheInsert(cacheDir, "", code, dynlib); } SourceCppDynlib dynlibCacheLookup(const std::string& cacheDir, const std::string& file, const std::string& code) { Rcpp::Environment rcppEnv = Rcpp::Environment::namespace_env("Rcpp"); Rcpp::Function dynlibLookupFunc = rcppEnv[".sourceCppDynlibLookup"]; Rcpp::List dynlibList = dynlibLookupFunc(cacheDir, file, code); if (dynlibList.length() > 0) return SourceCppDynlib(dynlibList); else return SourceCppDynlib(); } SourceCppDynlib dynlibCacheLookupByFile(const std::string& cacheDir, const std::string& file) { return dynlibCacheLookup(cacheDir, file, ""); } SourceCppDynlib dynlibCacheLookupByCode(const std::string& cacheDir, const std::string& code) { return dynlibCacheLookup(cacheDir, "", code); } } // anonymous namespace // Create temporary build directory, generate code as necessary, and return // the context required for the sourceCpp function to complete it's work RcppExport SEXP sourceCppContext(SEXP sFile, SEXP sCode, SEXP sRebuild, SEXP sCacheDir, SEXP sPlatform) { BEGIN_RCPP // parameters std::string file = Rcpp::as(sFile); std::string code = sCode != R_NilValue ? Rcpp::as(sCode) : ""; bool rebuild = Rcpp::as(sRebuild); std::string cacheDir = Rcpp::as(sCacheDir); Rcpp::List platform = Rcpp::as(sPlatform); // get dynlib (using cache if possible) SourceCppDynlib dynlib = !code.empty() ? dynlibCacheLookupByCode(cacheDir, code) : dynlibCacheLookupByFile(cacheDir, file); // check dynlib build state bool buildRequired = false; // if there is no dynlib in the cache then create a new one if (dynlib.isEmpty()) { buildRequired = true; dynlib = SourceCppDynlib(cacheDir, file, platform); } // if the cached dynlib is dirty then regenerate the source else if (rebuild || dynlib.isSourceDirty()) { buildRequired = true; // #nocov dynlib.regenerateSource(cacheDir); // #nocov } // if the dynlib hasn't yet been built then note that else if (!dynlib.isBuilt()) { buildRequired = true; // #nocov } // save the dynlib to the cache if (!code.empty()) dynlibCacheInsertCode(cacheDir, code, dynlib); else dynlibCacheInsertFile(cacheDir, file, dynlib); // return context as a list using namespace Rcpp; return List::create( _["contextId"] = dynlib.contextId(), _["cppSourcePath"] = dynlib.cppSourcePath(), _["cppDependencySourcePaths"] = dynlib.cppDependencySourcePaths(), _["buildRequired"] = buildRequired, _["buildDirectory"] = dynlib.buildDirectory(), _["generatedCpp"] = dynlib.generatedCpp(), _["exportedFunctions"] = dynlib.exportedFunctions(), _["modules"] = dynlib.modules(), _["cppSourceFilename"] = dynlib.cppSourceFilename(), _["rSourceFilename"] = dynlib.rSourceFilename(), _["dynlibFilename"] = dynlib.dynlibFilename(), _["dynlibPath"] = dynlib.dynlibPath(), _["previousDynlibPath"] = dynlib.previousDynlibPath(), _["depends"] = dynlib.depends(), _["plugins"] = dynlib.plugins(), _["embeddedR"] = dynlib.embeddedR()); END_RCPP } // Compile the attributes within the specified package directory into // RcppExports.cpp and RcppExports.R RcppExport SEXP compileAttributes(SEXP sPackageDir, SEXP sPackageName, SEXP sDepends, SEXP sRegistration, SEXP sCppFiles, SEXP sCppFileBasenames, SEXP sIncludes, SEXP sVerbose, SEXP sPlatform) { BEGIN_RCPP // arguments std::string packageDir = Rcpp::as(sPackageDir); std::string packageName = Rcpp::as(sPackageName); Rcpp::CharacterVector vDepends = Rcpp::as(sDepends); std::set depends; for (Rcpp::CharacterVector::iterator it = vDepends.begin(); it != vDepends.end(); ++it) { depends.insert(std::string(*it)); } bool registration = Rcpp::as(sRegistration); std::vector cppFiles = Rcpp::as >(sCppFiles); std::vector cppFileBasenames = Rcpp::as >(sCppFileBasenames); std::vector includes = Rcpp::as >(sIncludes); bool verbose = Rcpp::as(sVerbose); Rcpp::List platform = Rcpp::as(sPlatform); std::string fileSep = Rcpp::as(platform["file.sep"]); // initialize generators ExportsGenerators generators; generators.add(new CppExportsGenerator(packageDir, packageName, fileSep)); generators.add(new RExportsGenerator(packageDir, packageName, registration, fileSep)); // catch file exists exception if the include file already exists // and we are unable to overwrite it try { generators.add(new CppExportsIncludeGenerator(packageDir, packageName, fileSep)); } catch(const Rcpp::file_exists& e) { std::string msg = "The header file '" + e.filePath() + "' already exists so " "cannot be overwritten by Rcpp::interfaces"; throw Rcpp::exception(msg.c_str(), __FILE__, __LINE__); } // catch file exists exception for package include (because if it // already exists we simply leave it alone) try { generators.add(new CppPackageIncludeGenerator(packageDir, packageName, fileSep)); } catch(const Rcpp::file_exists& e) {} // write begin generators.writeBegin(); // Parse attributes from each file and generate code as required. bool hasPackageInit = false; bool haveAttributes = false; std::set dependsAttribs; for (std::size_t i=0; iname() == kDependsAttribute) { for (size_t i = 0; iparams().size(); ++i) // #nocov dependsAttribs.insert(it->params()[i].name()); // #nocov } } } // write end generators.writeEnd(hasPackageInit); // commit or remove std::vector updated; if (haveAttributes) updated = generators.commit(includes); else updated = generators.remove(); // #nocov // print warning if there are depends attributes that don't have // corresponding entries in the DESCRIPTION file std::vector diff; std::set_difference(dependsAttribs.begin(), dependsAttribs.end(), depends.begin(), depends.end(), std::back_inserter(diff)); if (!diff.empty()) { std::string msg = // #nocov start "The following packages are referenced using Rcpp::depends " "attributes however are not listed in the Depends, Imports or " "LinkingTo fields of the package DESCRIPTION file: "; for (size_t i=0; i >(updated); END_RCPP } Rcpp/src/Makevars0000644000176200001440000000004314370331407013440 0ustar liggesusersPKG_CPPFLAGS = -I../inst/include/ Rcpp/src/internal.h0000644000176200001440000001321314410112652013726 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // internal.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2012 - 2015 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_internal_h #define Rcpp_internal_h #include #define CALLFUN_0(name) SEXP name() #define CALLFUN_1(name) SEXP name(SEXP) #define CALLFUN_2(name) SEXP name(SEXP,SEXP) #define CALLFUN_3(name) SEXP name(SEXP,SEXP,SEXP) #define CALLFUN_4(name) SEXP name(SEXP,SEXP,SEXP,SEXP) #define CALLFUN_5(name) SEXP name(SEXP,SEXP,SEXP,SEXP,SEXP) #define EXTFUN(name) SEXP name(SEXP) // this file contains declarations of functions that are not // exported via Rcpp.h but are needed to make Rcpp work internally #define MAX_ARGS 65 #define UNPACK_EXTERNAL_ARGS(__CARGS__,__P__) \ SEXP __CARGS__[MAX_ARGS]; \ int nargs = 0; \ for (; nargs. #define COMPILING_RCPP #define RCPP_USE_GLOBAL_ROSTREAM #include using namespace Rcpp; #include "internal.h" #include #ifdef RCPP_HAS_DEMANGLING #include #endif namespace Rcpp { // [[Rcpp::register]] Rostream& Rcpp_cout_get() { static Rostream Rcpp_cout; return Rcpp_cout; } // [[Rcpp::register]] Rostream& Rcpp_cerr_get() { static Rostream Rcpp_cerr; return Rcpp_cerr; } Rostream& Rcout = Rcpp_cout_get(); Rostream& Rcerr = Rcpp_cerr_get(); namespace internal { int rngSynchronizationSuspended = 0; // [[Rcpp::register]] unsigned long enterRNGScope() { if (rngSynchronizationSuspended == 0) GetRNGstate(); return 0; } // [[Rcpp::register]] unsigned long exitRNGScope() { if (rngSynchronizationSuspended == 0) PutRNGstate(); return 0; } // [[Rcpp::register]] unsigned long beginSuspendRNGSynchronization() { // #nocov start ++rngSynchronizationSuspended; return rngSynchronizationSuspended; } // [[Rcpp::register]] unsigned long endSuspendRNGSynchronization() { --rngSynchronizationSuspended; return rngSynchronizationSuspended; } // #nocov end // [[Rcpp::register]] char* get_string_buffer() { static char buffer[MAXELTSIZE]; return buffer; } } // [[Rcpp::register]] const char * type2name(SEXP x) { // #nocov start switch (TYPEOF(x)) { case NILSXP: return "NILSXP"; case SYMSXP: return "SYMSXP"; case RAWSXP: return "RAWSXP"; case LISTSXP: return "LISTSXP"; case CLOSXP: return "CLOSXP"; case ENVSXP: return "ENVSXP"; case PROMSXP: return "PROMSXP"; case LANGSXP: return "LANGSXP"; case SPECIALSXP: return "SPECIALSXP"; case BUILTINSXP: return "BUILTINSXP"; case CHARSXP: return "CHARSXP"; case LGLSXP: return "LGLSXP"; case INTSXP: return "INTSXP"; case REALSXP: return "REALSXP"; case CPLXSXP: return "CPLXSXP"; case STRSXP: return "STRSXP"; case DOTSXP: return "DOTSXP"; case ANYSXP: return "ANYSXP"; case VECSXP: return "VECSXP"; case EXPRSXP: return "EXPRSXP"; case BCODESXP: return "BCODESXP"; case EXTPTRSXP: return "EXTPTRSXP"; case WEAKREFSXP: return "WEAKREFSXP"; #if R_VERSION >= R_Version(4,4,0) // replaces S4SXP in R 4.4.0 case OBJSXP: return Rf_isS4(x) ? "S4SXP" : "OBJSXP"; // cf src/main/inspect.c #else case S4SXP: return "S4SXP"; #endif default: return ""; } } // #nocov end } // namespace Rcpp // [[Rcpp::register]] std::string demangle(const std::string& name) { #ifdef RCPP_HAS_DEMANGLING std::string real_class; int status =-1; char *dem = 0; dem = abi::__cxa_demangle(name.c_str(), 0, 0, &status); if (status == 0) { real_class = dem; free(dem); } else { real_class = name; } return real_class; #else return name; #endif } // NOTE: remains registered but this routine is now effectively unused by Rcpp; // we retain it for backwards compatibility with any existing packages which // (explicitly or implicitly) rely on its existence. See also: // https://github.com/RcppCore/Rcpp/issues/1066 // [[Rcpp::register]] const char* short_file_name(const char* file) { // #nocov start static std::string f; f = file; size_t index = f.find("/include/"); if (index != std::string::npos) { f = f.substr(index + 9); } return f.c_str(); } // [[Rcpp::internal]] SEXP as_character_externalptr(SEXP xp) { char buffer[20]; snprintf(buffer, 20, "%p", (void*)R_ExternalPtrAddr(xp)); return Rcpp::wrap((const char*)buffer); } // #nocov end // [[Rcpp::internal]] SEXP rcpp_capabilities() { Shield cap(Rf_allocVector(LGLSXP, 13)); Shield names(Rf_allocVector(STRSXP, 13)); #ifdef HAS_VARIADIC_TEMPLATES LOGICAL(cap)[0] = TRUE; #else LOGICAL(cap)[0] = FALSE; #endif #ifdef HAS_CXX0X_INITIALIZER_LIST LOGICAL(cap)[1] = TRUE; #else LOGICAL(cap)[1] = FALSE; #endif /* exceptions are always supported */ LOGICAL(cap)[2] = TRUE; #ifdef HAS_TR1_UNORDERED_MAP LOGICAL(cap)[3] = TRUE; #else LOGICAL(cap)[3] = FALSE; #endif #ifdef HAS_TR1_UNORDERED_SET LOGICAL(cap)[4] = TRUE; #else LOGICAL(cap)[4] = FALSE; #endif LOGICAL(cap)[5] = TRUE; #ifdef RCPP_HAS_DEMANGLING LOGICAL(cap)[6] = TRUE; #else LOGICAL(cap)[6] = FALSE; #endif LOGICAL(cap)[7] = FALSE; #ifdef RCPP_HAS_LONG_LONG_TYPES LOGICAL(cap)[8] = TRUE; #else LOGICAL(cap)[8] = FALSE; #endif #ifdef HAS_CXX0X_UNORDERED_MAP LOGICAL(cap)[9] = TRUE; #else LOGICAL(cap)[9] = FALSE; #endif #ifdef HAS_CXX0X_UNORDERED_SET LOGICAL(cap)[10] = TRUE; #else LOGICAL(cap)[10] = FALSE; #endif #ifdef RCPP_USING_CXX11 LOGICAL(cap)[11] = TRUE; #else LOGICAL(cap)[11] = FALSE; #endif #ifdef RCPP_NEW_DATE_DATETIME_VECTORS LOGICAL(cap)[12] = TRUE; #else LOGICAL(cap)[12] = FALSE; #endif SET_STRING_ELT(names, 0, Rf_mkChar("variadic templates")); SET_STRING_ELT(names, 1, Rf_mkChar("initializer lists")); SET_STRING_ELT(names, 2, Rf_mkChar("exception handling")); SET_STRING_ELT(names, 3, Rf_mkChar("tr1 unordered maps")); SET_STRING_ELT(names, 4, Rf_mkChar("tr1 unordered sets")); SET_STRING_ELT(names, 5, Rf_mkChar("Rcpp modules")); SET_STRING_ELT(names, 6, Rf_mkChar("demangling")); SET_STRING_ELT(names, 7, Rf_mkChar("classic api")); SET_STRING_ELT(names, 8, Rf_mkChar("long long")); SET_STRING_ELT(names, 9, Rf_mkChar("C++0x unordered maps")); SET_STRING_ELT(names, 10, Rf_mkChar("C++0x unordered sets")); SET_STRING_ELT(names, 11, Rf_mkChar("Full C++11 support")); SET_STRING_ELT(names, 12, Rf_mkChar("new date(time) vectors")); Rf_setAttrib(cap, R_NamesSymbol, names); return cap; } // [[Rcpp::internal]] SEXP rcpp_can_use_cxx0x() { // #nocov start #if defined(HAS_VARIADIC_TEMPLATES) return Rf_ScalarLogical(TRUE); #else return Rf_ScalarLogical(FALSE); #endif } // [[Rcpp::internal]] SEXP rcpp_can_use_cxx11() { #if defined(RCPP_USING_CXX11) return Rf_ScalarLogical(TRUE); #else return Rf_ScalarLogical(FALSE); #endif } // [[Rcpp::register]] SEXP stack_trace(const char* file, int line) { return R_NilValue; } // #nocov end // // [ [ Rcpp::register ] ] // void print(SEXP s) { // Rf_PrintValue(s); // defined in Rinternals.h // } // }}} // [[Rcpp::internal]] SEXP getRcppVersionStrings() { Shield versionstring(Rf_allocVector(STRSXP,2)); SET_STRING_ELT(versionstring, 0, Rf_mkChar(RCPP_VERSION_STRING)); SET_STRING_ELT(versionstring, 1, Rf_mkChar(RCPP_DEV_VERSION_STRING)); return versionstring; } Rcpp/src/rcpp_init.cpp0000644000176200001440000001126114410112640014432 0ustar liggesusers // Rcpp_init.cpp : Rcpp R/C++ interface class library -- Initialize and register // // Copyright (C) 2010 - 2020 John Chambers, Dirk Eddelbuettel and Romain Francois // Copyright (C) 2021 John Chambers, Dirk Eddelbuettel, Romain Francois and Iñaki Ucar // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #define COMPILING_RCPP #include #include "internal.h" // borrowed from Matrix #define CALLDEF(name, n) {#name, (DL_FUNC) &name, n} #define EXTDEF(name) {#name, (DL_FUNC) &name, -1} static R_CallMethodDef callEntries[] = { CALLDEF(Class__name,1), CALLDEF(Class__has_default_constructor,1), CALLDEF(CppClass__complete,1), CALLDEF(CppClass__methods,1), CALLDEF(CppObject__finalize,2), CALLDEF(Module__classes_info,1), CALLDEF(Module__complete,1), CALLDEF(Module__get_class,2), CALLDEF(Module__has_class,2), CALLDEF(Module__has_function,2), CALLDEF(Module__functions_arity,1), CALLDEF(Module__functions_names,1), CALLDEF(Module__name,1), CALLDEF(Module__get_function, 2), CALLDEF(get_rcpp_cache,0), CALLDEF(rcpp_error_recorder,1), CALLDEF(as_character_externalptr,1), CALLDEF(CppField__get,3), CALLDEF(CppField__set,4), CALLDEF(rcpp_capabilities,0), CALLDEF(rcpp_can_use_cxx0x,0), CALLDEF(rcpp_can_use_cxx11,0), CALLDEF(getRcppVersionStrings,0), {NULL, NULL, 0} }; static R_ExternalMethodDef extEntries[] = { EXTDEF(CppMethod__invoke), EXTDEF(CppMethod__invoke_void), EXTDEF(CppMethod__invoke_notvoid), EXTDEF(InternalFunction_invoke), EXTDEF(Module__invoke), EXTDEF(class__newInstance), EXTDEF(class__dummyInstance), {NULL, NULL, 0} }; // this is called by R_init_Rcpp that is in Module.cpp void init_Rcpp_routines(DllInfo *info){ // Register routines, allocate resources. R_registerRoutines(info, NULL, // .C callEntries, // .Call NULL, // .Fortran extEntries // .External ); } void registerFunctions(){ using namespace Rcpp; using namespace Rcpp::internal; #define RCPP_REGISTER(__FUN__) R_RegisterCCallable( "Rcpp", #__FUN__ , (DL_FUNC)__FUN__ ); RCPP_REGISTER(rcpp_get_stack_trace) RCPP_REGISTER(rcpp_set_stack_trace) RCPP_REGISTER(type2name) RCPP_REGISTER(demangle) RCPP_REGISTER(enterRNGScope) RCPP_REGISTER(exitRNGScope) RCPP_REGISTER(beginSuspendRNGSynchronization); RCPP_REGISTER(endSuspendRNGSynchronization); RCPP_REGISTER(get_Rcpp_namespace) RCPP_REGISTER(get_cache) RCPP_REGISTER(stack_trace) RCPP_REGISTER(get_string_elt) RCPP_REGISTER(char_get_string_elt) RCPP_REGISTER(set_string_elt) RCPP_REGISTER(char_set_string_elt) RCPP_REGISTER(get_string_ptr) RCPP_REGISTER(get_vector_elt) RCPP_REGISTER(set_vector_elt) RCPP_REGISTER(get_vector_ptr) RCPP_REGISTER(char_nocheck) RCPP_REGISTER(dataptr) RCPP_REGISTER(getCurrentScope) RCPP_REGISTER(setCurrentScope) RCPP_REGISTER(get_string_buffer) RCPP_REGISTER(short_file_name) RCPP_REGISTER(mktime00) RCPP_REGISTER(gmtime_) RCPP_REGISTER(reset_current_error) RCPP_REGISTER(error_occured) RCPP_REGISTER(rcpp_get_current_error) // RCPP_REGISTER(print) RCPP_REGISTER(Rcpp_precious_init) RCPP_REGISTER(Rcpp_precious_teardown) RCPP_REGISTER(Rcpp_precious_preserve) RCPP_REGISTER(Rcpp_precious_remove) RCPP_REGISTER(Rcpp_cout_get) RCPP_REGISTER(Rcpp_cerr_get) #undef RCPP_REGISTER } extern "C" void R_unload_Rcpp(DllInfo *) { // #nocov start Rcpp::Rcpp_precious_teardown(); // release resource } // #nocov end extern "C" void R_init_Rcpp(DllInfo* dllinfo) { setCurrentScope(0); registerFunctions(); // call wrapper to register export symbols R_useDynamicSymbols(dllinfo, FALSE); // set up symbol symbol lookup (cf R 3.4.0) init_Rcpp_cache(); // init the cache Rcpp::Rcpp_precious_init(); init_Rcpp_routines(dllinfo); // init routines } Rcpp/ChangeLog0000644000176200001440000146515614740550564012764 0ustar liggesusers2025-01-11 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.14 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * vignettes/rmd/Rcpp.bib: Idem * inst/bib/Rcpp.bib: Idem * vignettes/pdf/*: Rebuilt 2025-01-01 Dirk Eddelbuettel * inst/include/Rcpp/Benchmark/Timer.h (R_NO_REMAP): Protect include with preceding #ifndef now that R 4.5.0 will set this too 2024-11-25 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version to 1.0.13.6 * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * inst/tinytest/test_date.R: Minor adjustment to datetime format test following R Dev Day change for R bug 17350 (and issue #1347 here) 2024-11-25 Simon Guest * src/attributes.cpp: fix CPP source having to be writable 2024-11-03 Marco Colombo * vignettes/rmd/Rcpp-FAQ.Rmd: Fixed typos * vignettes/rmd/Rcpp-attributes.Rmd: Idem * vignettes/rmd/Rcpp-extending.Rmd: Idem * vignettes/rmd/Rcpp-introduction.Rmd: Idem * vignettes/rmd/Rcpp-libraries.Rmd: Idem * vignettes/rmd/Rcpp-modules.Rmd: Idem * vignettes/rmd/Rcpp-package.Rmd: Idem * vignettes/rmd/Rcpp-quickref.Rmd: Idem * vignettes/rmd/Rcpp-sugar.Rmd: Idem 2024-11-02 Dirk Eddelbuettel * tests/tinytest.R: Minor code edit, removal of two no longer required setters for tinytest 2024-11-01 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version to 1.0.13.5 * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2024-10-31 Kevin Ushey * inst/include/Rcpp/r/compat.h: Require R (>= 4.5.0) for new APIs 2024-10-26 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version to 1.0.13.4 * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * .github/workflows/ci.yaml (jobs): Roll checkout action to v4 2024-10-26 Gábor Csárdi * inst/include/Rcpp/exceptions_impl.h: check for DragonFlyBSD to fix compilation 2024-10-07 Iñaki Ucar * inst/include/Rcpp/platform/compiler.h: Uncomment HAS_VARIADIC_TEMPLATES macro definition * src/api.cpp: Simplify checks for variadic templates * inst/include/Rcpp/DataFrame.h: Idem * inst/include/Rcpp/DottedPair.h: Idem * inst/include/Rcpp/Function.h: Idem * inst/include/Rcpp/InternalFunctionWithStdFunction.h: Idem * inst/include/Rcpp/Language.h: Idem * inst/include/Rcpp/Pairlist.h: Idem * inst/include/Rcpp/grow.h: Idem * inst/include/Rcpp/internal/call.h: Idem * inst/include/Rcpp/module/class.h: Idem * inst/include/Rcpp/traits/index_sequence.h: Idem * inst/include/Rcpp/traits/named_object.h: Idem * inst/include/Rcpp/vector/Vector.h: Idem * inst/include/Rcpp/Module.h: Idem + add missing is_void method * inst/tinytest/test_module.R: Add test for void functions and methods 2024-10-04 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version to 1.0.13.3 * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2024-09-29 Dirk Eddelbuettel * inst/include/Rcpp/vector/Vector.h: Remove a cast as R_xlen_t is returned now 2024-09-17 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2024-09-12 Iñaki Ucar * vignettes/.gitignore: Refinement to ignore more files under rmd/ * vignettes/pdf/*: Rebuilt with Ghostscript 10.03.1 * vignettes/*.pdf: Idem 2024-08-31 Dirk Eddelbuettel * DESCRIPTION (Authors@R): Added 2024-08-28 Dirk Eddelbuettel * R/Rcpp.package.skeleton.R: Create DESCRIPTION with Auhors@R file * inst/tinytest/test_rcpp_package_skeleton.R: Adjust tests 2024-08-20 Dirk Eddelbuettel * inst/tinytest/test_sugar.R: Skip one more NA related test on arm64 and macOS as failure is seen at r-universe on arm64 * .github/workflows/macos.yaml: Add basic r-ci setup but dialed-down to macOS only (as Linux is covered via multiple Docker setups) 2024-08-19 Dirk Eddelbuettel * Contributing.md: Refreshed content 2024-07-30 Dirk Eddelbuettel * vignettes/rmd/Rcpp-modules.Rmd (are): Add short two-sentence illustration following GitHub issue #1322 2024-07-24 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2024-07-11 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.13 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * vignettes/rmd/Rcpp.bib: Idem * inst/bib/Rcpp.bib: Idem * vignettes/pdf/*: Rebuilt 2024-07-07 Kevin Ushey * inst/include/Rcpp/internal/SEXP_Iterator.h: Avoid using VECTOR_PTR * inst/include/Rcpp/vector/Subsetter.h: Avoid using STRING_PTR * inst/include/RcppCommon.h: Include compatibility defines * src/barrier.cpp: Avoid using {STRING/VECTOR}_PTR * inst/include/Rcpp/r/compat.h: Include compatibility defines 2024-07-05 Kevin Ushey * inst/include/Rcpp/Environment.h: Drop support for UserDefinedDatabase [ merged 2024-07-22 after release of Rcpp 1.0.13 ] * inst/include/Rcpp/Language.h: Avoid using SET_TYPEOF * inst/include/Rcpp/Pairlist.h: Idem * inst/include/Rcpp/r_cast.h: Idem [ merged 2024-07-24 after release of Rcpp 1.0.13 ] 2024-06-22 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2024-06-11 Kevin Ushey * inst/include/Rcpp/internal/r_vector.h: Use template specializations to avoid DATAPTR usage * inst/include/Rcpp/vector/traits.h: Implement bounds checks in r_vector_cache access * inst/tinytest/cpp/Vector.cpp: Add unit tests * inst/tinytest/test_vector.R: Add unit tests * tests/tinytest.R: Test in serial by default 2024-06-02 Dirk Eddelbuettel * inst/include/Rcpp/internal/export.h: More R_xlen_t switching * inst/include/Rcpp/vector/SubMatrix.h: Idem * inst/include/Rcpp/vector/Vector.h: Idem 2024-06-01 Dirk Eddelbuettel * inst/include/Rcpp/internal/Proxy_Iterator.h (Proxy_Iterator): Switch to R_xlen_t ('clang++-17 -Wconversion -Wno-sign-conversion') * inst/include/Rcpp/DataFrame.h: Idem * inst/include/Rcpp/Vector.h: Idem 2024-05-28 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2024-05-27 Dirk Eddelbuettel * README.md: Remove link references to StackOverflow * inst/NEWS.Rd: Idem * inst/include/Rcpp/Module.h (S4_CppOverloadedMethods): Add cast to int to avoid warnings under 'clang++-17 -Wconversion -Wno-sign-conversion' * inst/include/Rcpp/vector/Vector.h (Vector): Idem * inst/include/Rcpp/module/class.h: Switch variable to size_t to avoid to avoid warnings under 'clang++-17 -Wconversion -Wno-sign-conversion' * inst/tinytest/testRcppClass/src/init.c: Add void to signature 2024-05-26 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2024-05-23 Andrew Johnson * inst/include/Rcpp/: Added variadic templates to be used instead of the generated code in `Rcpp/generated` and `Rcpp/module` when compiling with C++11 or later. 2024-05-18 Dirk Eddelbuettel * docker/ci-4.3/Dockerfile: Add rcpp/ci-4.3 container for R 4.3.* * .github/workflows/ci.yaml (jobs): Add rcpp/ci-4.3 to matrix 2024-05-16 Dirk Eddelbuettel * README.md: Use tinyverse.netlify.app for dependency badge 2024-03-05 Dirk Eddelbuettel * docker/ci/Dockerfile: Switch the base container to r2u * docker/plus/Dockerfile: Given r2u, install more binaries * README.md: Add r-universe badge 2024-02-21 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * inst/include/Rcpp/r/headers.h: Set R_NO_REMAP (and MAXELTSIZE) only if not already defined (as will be needed with R 4.4.0) 2024-01-09 Dirk Eddelbuettel * README.md: Update usage numbers * README.md: Remove StackOverflow badge which only works for logged-in users and is unsuitable for the README 2024-01-08 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.12 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * vignettes/rmd/Rcpp.bib: Idem * inst/bib/Rcpp.bib: Idem * vignettes/pdf/*: Rebuilt 2024-01-01 Dirk Eddelbuettel * vignettes/rmd/Rcpp.bib: Updated to current versions of cited packages * inst/bib/Rcpp.bib: Idem 2023-12-27 Dirk Eddelbuettel * src/api.cpp (type2name): Refine OBJSXP return 2023-12-21 Dirk Eddelbuettel * src/api.cpp (type2name): Recognise OBJSXP added in R 4.4.0 2023-11-28 Dirk Eddelbuettel * inst/tinytest/testRcppInterfaceExporter/R/RcppExports.R: Regenerated * inst/tinytest/testRcppInterfaceExporter/src/RcppExports.cpp: Idem 2023-11-26 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * src/attributes.cpp (generateCpp): Add a format string for Rf_error call to not run afoul of -Wformat-security 2023-11-24 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * inst/include/Rcpp/iostream/Rstreambuf.h: Cast streamsize to int in two spots * inst/include/Rcpp/print.h (warningcall): Add missing '%s' format 2023-11-11 Dirk Eddelbuettel * vignettes/rmd/Rcpp-FAQ.Rmd: Updated and edited * vignettes/pdf/Rcpp-FAQ.pdf: Updated * vignettes/rmd/Rcpp.bib: Updated 2023-10-28 Dirk Eddelbuettel * vignettes/rmd/Rcpp-FAQ.Rmd: Updated and edited * vignettes/pdf/Rcpp-FAQ.pdf: Updated * vignettes/rmd/Rcpp.bib: Updated 2023-10-27 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * R/tools.R: Correct missing Rd macros (spotted by R-devel CMD check) 2023-10-22 Aaron Lun * inst/include/Rcpp/vector/MatrixColumn.h: Cast integer index to R_xlen_t to avoid integer overflow with large matrices. * inst/include/Rcpp/vector/MatrixRow.h: Ditto. * inst/include/Rcpp/vector/Vector.h: Remove stray cast to int that causes overflow when returning the end iterator. 2023-09-30 Dirk Eddelbuettel * vignettes/rmd/Rcpp-introduction.Rmd (Rcpp): Correct caption of third figure (cf GitHub issue #1276) * vignettes/pdf/Rcpp-introduction.pdf: Rebuilt 2023-08-31 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2023-08-29 Iñaki Ucar * R/Attributes.R: Ad-hoc fix for testthat's C entrypoint in RcppExports.cpp 2023-08-03 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2023-08-03 Michael Chirico * src/attributes.cpp: Directly `#include ` for `std::endl` * src/date.cpp: Directly `#include ` for `TRUE` and `FALSE` 2023-07-03 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.11 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * vignettes/rmd/Rcpp.bib: Idem * inst/bib/Rcpp.bib: Idem * vignettes/pdf/*: Rebuilt 2023-07-02 Dirk Eddelbuettel * README.md: Update usage numbers in Examples section 2023-07-01 Dirk Eddelbuettel * docker/ci-dev/Dockerfile: Make 'rm' more robust as 'rm -f' * docker/ci-4.2/Dockerfile: Add new container for R 4.2.3 * .github/workflows/ci.yaml (jobs): Add entry for R 4.2.3 2023-06-12 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll micro version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * README.md: Two URL updates for appease R CMD check * DESCRIPTION (Encoding): Somewhat belated addition 2023-04-18 Dirk Eddelbuettel * README.md: Use app.codecov.io as base for codecov link 2023-04-12 Dirk Eddelbuettel * .github/workflows/ci.yaml: Simplified container use 2023-03-27 Dirk Eddelbuettel * .github/workflows/stale.yaml: Roll to v8 2023-03-27 Iñaki Ucar * R/Attributes.R: Remove command quoting, not needed anymore for system2() * inst/tinytest/test_xptr.R: Update copyright 2023-03-26 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * inst/tinytest/test_stats.R: Revisit change from PR #1252; we now use a slightly smaller tolerance to accomodate old and new value * inst/tinytest/test_sugar.R: Protect a small number of tests on NA propagation from running on arm64/Darwin which requires special care 2023-03-25 Iñaki Ucar * R/Attributes.R: Switch to system2 to be able to capture stderr on error 2023-03-24 Dirk Eddelbuettel * docker/ci-dev/Dockerfile: During Debian freeze experimental repo is renamed which leads to a hickup here so temporarily remove list file 2023-03-24 Iñaki Ucar * inst/tinytest/test_xptr.R: Skip some tests on Windows 2023-03-19 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * src/attributes.cpp (RExportsGenerator::writeEnd): Replace a pair of apostrophes with backticks in generated .Call() statemente 2023-02-07 Dirk Eddelbuettel * inst/tinytest/test_stats.R: Use more accurate value in R 4.3.0 2023-02-06 Dirk Eddelbuettel * inst/CITATION: Update to new format preferred by r-devel 2023-02-02 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * inst/include/Rcpp/sugar/functions/sapply.h: Enable compilation under C++20 (using clang++ and its C++ library) via invoke_result 2023-01-29 Iñaki Ucar * inst/tinytest/test_xptr.R: Fix a couple of tests writing to stdout 2023-01-24 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2023-01-24 Lukasz Laniewski-Wollk * R/RcppLdpath.R: CxxFlags() now quotes only non-standard paths on linux 2023-01-22 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.10 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem 2023-01-08 Dirk Eddelbuettel * inst/include/Rcpp/String.h: Address clang++-14 conversion warning * inst/include/Rcpp/sugar/functions/mean.h: Idem * inst/include/Rcpp/vector/Vector.h: Idem * src/attributes.cpp: Idem * src/date.cpp: Idem 2022-12-29 Dirk Eddelbuettel * .github/workflows/docker.yaml (jobs): Update several actions 2022-12-26 Dirk Eddelbuettel * .github/workflows/stale.yaml (jobs): Update actions/stale@v6 2022-11-14 Dirk Eddelbuettel * .github/workflows/ci.yaml (jobs): Update to actions/checkout@v3 2022-10-27 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2022-10-27 Kevin Ushey * inst/tinytest/cpp/coerce.cpp: add coerce unit tests * inst/tinytest/test_coerce.R: idem 2022-10-25 Dirk Eddelbuettel * inst/include/Rcpp/internal/r_coerce.h (coerce_to_string): Replace last remaining sprintf with snprintf 2022-10-12 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * R/Attributes.R (sourceCpp): Protect path to binary from spaces 2022-10-06 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * inst/tinytest/test_dataframe.R (test.DataFrame.PushZeroLength): Add new test * inst/tinytest/cpp/DataFrame.cpp (DataFrame_PushOnEmpty): C++ support for new test 2022-10-04 Dirk Eddelbuettel * inst/include/Rcpp/DataFrame.h (set_type_after_push): Allow zero-row data.frame objects to be grown by push_{back,front}() 2022-09-25 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2022-09-23 Kevin Ushey * R/Module.R: Force 'finalize' method to be materialized 2022-09-20 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * R/Attributes.R: Support C++20, C++23 and C++2b (for experimental / incomplete support) via new plugins 2022-07-27 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2022-07-23 Iñaki Ucar * inst/include/Rcpp/r/headers.h: Unwind protection is enabled by default unless `RCPP_NO_UNWIND_PROTECT` is defined (`RCPP_USE_UNWIND_PROTECT` is not checked anymore and has no effect) * inst/include/Rcpp/vector/Vector.h: Switch evaluation to `Rcpp_eval` * R/Attributes.R: `[[Rcpp::plugins(unwindProtect)]]` is deprecated * inst/tinytest/cpp/stack.cpp: Adapted * inst/tinytest/test_exceptions.R: Adapted * inst/tinytest/test_interface.R: Adapted * inst/tinytest/testRcppInterfaceExporter/src/config.h: Removed 2022-07-10 Dirk Eddelbuettel * docker/ci-4.1/Dockerfile: Add Dockerfile for 4.1 series * .github/workflows/ci.yaml: Add 4.1 to CI matrix * .github/workflows/docker.yaml: Do not rebuild versioned ones 2022-07-02 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.9 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * vignettes/rmd/Rcpp.bib: Idem * inst/bib/Rcpp.bib: Idem * vignettes/pdf/*: Rebuilt 2022-07-01 Dirk Eddelbuettel * man/dependsAttribute.Rd: Use https in URL * man/exportAttribute.Rd: Idem * man/interfacesAttribute.Rd: Idem * DESCRIPTION (URL): Idem * README.md: Idem, use Amazon page for Rcpp book 2022-05-26 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2022-05-25 Dirk Eddelbuettel * inst/tinytest/test_string.R: Add C++11 conditioning for new unit tests 2022-05-23 Dean Scarff * inst/include/Rcpp/String.h: Make less copies of strings via move semantics and preserving the buffer/SEXP representation when copying * inst/include/RcppCommon.h: include for std::move * inst/tinytest/cpp/String.cpp: Add unit tests * inst/tinytest/test_string.R: Add unit tests 2022-05-12 Dirk Eddelbuettel * docker/ci/Dockerfile: Added xml2, also use more r-cran-* binaries 2022-05-12 Marco Colombo * vignettes/rmd/Rcpp-FAQ.Rmd: Fixed typo 2022-04-03 Dirk Eddelbuettel * vignettes/rmd/Rcpp-FAQ.Rmd: Add paragraph about Date(time) not being aimed at parsing large quantities at once * vignettes/pdf/Rcpp-FAQ.pdf: Idem * vignettes/rmd/Rcpp.bib: Add four entries * inst/bib/Rcpp.bib: Idem 2022-03-14 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2022-03-13 Iñaki Ucar * src/barrier.cpp: Untag tokens upon removal from the precious list, so that the internal reference counter can be safely decremented by R 2022-03-13 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * tests/tinytest.R: Disable full tests on four-digits release to not exceed CRAN test time preference 2022-03-10 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * inst/tinytest/cpp/sugar.cpp: Also conditionally replace std::unary_function with std::function * vignettes/rmd/Rcpp-sugar.Rmd: Replace std::unary_function example with std::function (implicitly requiring C++ in vignette example) * vignettes/rmd/Rcpp-FAQ.Rmd: Idem 2022-03-09 Dirk Eddelbuettel * inst/include/Rcpp/Language.h: To quieten compilations, replace std::(unary|binary)_function with std::function for C++11 or later * inst/include/Rcpp/StringTransformer.he: Idem 2022-01-21 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2022-01-20 Dirk Eddelbuettel * src/attributes.cpp: Make three small changes to permit compilation under C++98 now (while we consider just turning to C++11 overall) 2022-01-14 Dirk Eddelbuettel * inst/tinytest/test_packageversion.R: Comparison to 'dev' revision version now tolerant of optional trailing zero (e.g. 1.0.8.0) 2022-01-11 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.8 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * vignettes/rmd/Rcpp.bib: Idem * inst/bib/Rcpp.bib: Idem * vignettes/pdf/*: Rebuilt * inst/include/Rcpp/r/headers.h: STRICT_R_HEADERS set by default unless override RCPP_NO_STRICT_HEADERS is set (cf issue #1158) 2022-01-10 Dirk Eddelbuettel * vignettes/rmd/Rcpp.bib: Updated CRAN and R references * inst/bib/Rcpp.bib: Idem * vignettes/rmd/getCurrentVersionsOfCitedPackages.R: Updated 2022-01-01 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/NEWS.Rd: Added entries for a few PRs since last release * vignettes/rmd/Rcpp.bib: Provide both url and doi entries * inst/bib/Rcpp.bib: Idem 2021-12-28 Dirk Eddelbuettel * README.md: Add section on performance 2021-12-24 Dirk Eddelbuettel * README.md: Update usage counts 2021-12-16 Dirk Eddelbuettel * vignettes/rmd/Rcpp.bib: Update JSS references to new doi scheme, update http URL links to https * inst/bib/Rcpp.bib: Idem 2021-12-10 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2021-12-08 Dirk Eddelbuettel * inst/include/Rcpp/Rcpp: Added as new entry point * inst/include/Rcpp/Light: Added as lighter-weight entry point * inst/include/Rcpp/Lighter: Idem * inst/include/Rcpp/Lightest: Idem 2021-11-30 Dirk Eddelbuettel * README.md: Remove Travis badge * .travis.yml: Removed 2021-11-15 Dirk Eddelbuettel * docker/ci/Dockerfile: Minor cleanup 2021-11-14 Dirk Eddelbuettel * R/RcppLdpath.R: Simplified as we no longer need to worry about CXX0X 2021-11-11 Kevin Ushey * R/RcppLdpath.R: CxxFlags() now quotes its include path 2021-10-15 Travers Ching * inst/tinytest/testRcppAttributePackage: Tests `signature` attribute * inst/tinytest/test_attribute_package.R: Tests `signature` attribute 2021-10-13 Dirk Eddelbuettel * README.md: Switch JSS url to doi form per JSS request * man/Rcpp-package.Rd: Idem * man/RcppLdFlags.Rd: Idem * inst/CITATION: Only use doi entries in three citEntry blocks 2021-10-11 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * .codecov.yml (comment): Disable codecov comments on PRs 2021-10-10 Travers Ching * src/attributes.cpp: Add `signature` attribute and syntax checks 2021-10-02 Dirk Eddelbuettel * .github/workflows/docker.yaml (jobs): Add container builder action 2021-10-01 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Updated 2021-09-29 Iñaki Ucar * inst/include/Rcpp/XPtr.h: Check for new define `RCPP_USE_FINALIZE_ON_EXIT` to flip the value of XPtr's `finalizeOnExit` parameter from false (default) to true. * inst/tinytest/test_xptr.R: Added test for this functionality. 2021-09-27 Dirk Eddelbuettel * README.md: Added total downloads badge 2021-09-06 Dirk Eddelbuettel * docker/ci-4.0/Dockerfile: Using R 4.0.5 to build ci-4.0 * .github/workflows/ci.yaml (jobs): Also run against R 4.0.* 2021-09-05 Dirk Eddelbuettel * inst/examples/Misc/piSugar.cpp (piSugar): Remove spurious call to RNGScope we do not need with Rcpp Attributes * inst/examples/RcppGibbs/RcppGibbs.R (Rgibbs): Comment on two uses of RNGScope as historical in pre-Attributes code * inst/examples/RcppGibbs/timeRNGs.R: Idem for one more 2021-08-05 Dirk Eddelbuettel * inst/bib/Rcpp.bib: Use https for CRAN URLs * vignettes/rmd/Rcpp.bib: Idem 2021-07-25 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2021-07-24 Dirk Eddelbuettel * vignettes/rmd/Rcpp-FAQ.Rmd: New entry on growing vectors 2021-07-08 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * cleanup: Check for optional vignettes/rmd before trying to access it 2021-07-06 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.7 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * vignettes/rmd/Rcpp.bib: Idem * inst/bib/Rcpp.bib: Idem * vignettes/pdf/*: Rebuilt 2021-07-05 Iñaki Ucar * src/barrier.cpp (Rcpp_precious_remove): Protect from call with wrong token when unloading modules compiled under earlier version 2021-07-02 Dirk Eddelbuettel * inst/include/Rcpp/r/headers.h: Update notice as January 2022 release will remove protection for STRICT_R_HEADERS making it default 2021-05-27 Dirk Eddelbuettel * inst/tinytest/cpp/rcppversion.cpp (checkVersion): Allow for more than four components of a development version number * inst/tinytest/test_packageversion.R: Idem * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Clarify in comment 2021-05-13 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2021-05-09 Dirk Eddelbuettel * inst/include/RcppCommon.h: Add cfloat header 2021-04-09 Dirk Eddelbuettel * inst/include/Rcpp/hash/IndexHash.h: Silence one comparison, update use of unsigned int to uint32_t throughout 2021-03-22 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2021-03-21 Dirk Eddelbuettel * inst/include/Rcpp/api/meat/message.h: Add wrapper for base::message * inst/include/Rcpp/api/meat/meat.h: Include new file * inst/tinytest/test_misc.R: Simple test * inst/tinytest/cpp/misc.cpp (messageWrapper): Test support 2021-02-23 Dirk Eddelbuettel * Contributing.md: Update unit test link to tinytest 2021-02-08 Dirk Eddelbuettel * DESCRIPTION (Author): Add Inaki to the team 2021-02-01 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * README.md: Mention the Rcpp drap repo and its release candidates in installation section 2021-01-30 Iñaki Ucar * inst/include/test_global_rostream.R: Added test new (optionally) global Rcout and Rcerr objects 2021-01-28 Iñaki Ucar * inst/include/Rcpp/iostream/Rstreambuf.h: Support for global Rcout/Rcerr by defining `-DRCPP_USE_GLOBAL_ROSTREAM`; this mimics std::cout/cerr; initialization code is automatically generated. * inst/include/Rcpp/routines.h: Ditto * src/api.cpp: Ditto * src/attributes.cpp: Ditto * src/rcpp_init.cpp: Ditto 2021-01-21 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * inst/include/Rcpp/DataFrame.h: Remove unused variable * R/Attributes.R (sourceCpp): Support argument echo to be passed to source() to silence optional R evaluation 2021-01-19 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * inst/include/RcppCommon.h: Preverse existing API and offer new token-based API alongside via Rcpp_Precious{Preserve,Release} * inst/include/Rcpp/String.h: Use Rcpp_Precious{Preserve,Release} * inst/include/Rcpp/storage/PreserveStorage.h: Ditto 2021-01-17 Iñaki Ucar * inst/include/Rcpp/String.h: Use Rcpp_{Preserve,Release}Object throughout which connects to Rcpp_precious_* routines * inst/include/Rcpp/exceptions.h: Use Rcpp_ReleaseObject * inst/include/Rcpp/routines.h: Several corrections and refinements * inst/include/Rcpp/storage/PreserveStorage.h: Ditto * inst/include/Rcpp/traits/named_object.h: Ditto * inst/include/Rcpp/unwuindProtect.h: Ditto * inst/include/RcppCommon.h: Ditto * src/barrier.cpp: Ditto 2021-01-17 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem [ these were originally committed 17 May 2020 and have been rebased ] * src/barrier.cpp: Implement Rcpp_precious_{init,teardown,preserve,remove} * src/rcpp_init.c: Register cpp_precious_{init,teardown,preserve,remove} and call from R_{init,unload}_Rcpp * inst/include/Rcpp/routines.h: Declare Rcpp_precious_{init,teardown, preserve,remove} * inst/include/Rcpp/exceptions.h: Use Rcpp_precious_remove * inst/include/Rcpp/traits/named_object.h: Use Rcpp_precious_{preserve,remove} * inst/include/Rcpp/unwuindProtect.h: Use Rcpp_precious_preserve * inst/include/RcppCommon.h: Use Rcpp_precious_{preserve,remove} 2021-01-16 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * tests/tinytest.R: Test for CODECOV when deciding to run extensive tests or just a subset, and set CI=true to enable run full set * .github/workflows/stale.yaml: Run weekly instead of daily * src/attributes.cpp: Additional #nocov tag(s) * R/Attributes.R: Idem * R/Module.R: Idem * R/Rcpp.package.skeleton.R: Idem * R/RcppClass.R: Idem * R/RcppLdpath.R: Idem * src/attributes.cpp: Support include files with dots in package name 2021-01-14 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.6 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * vignettes/rmd/Rcpp.bib: Idem * inst/bib/Rcpp.bib: Idem 2021-01-13 Dirk Eddelbuettel * vignettes/rmd/Rcpp.bib: Updated package versions * inst/bib/Rcpp.bib: Idem 2021-01-02 Dirk Eddelbuettel * R/Rcpp.package.skeleton.R: Wrap any() around grepl() 2020-12-22 Dirk Eddelbuettel * .github/workflows/stale.yaml: Adding a staleness monitor labeling and ultimately closing issues and PRs after suitably long windows 2020-12-16 Dirk Eddelbuettel * inst/NEWS.Rd: Updated for recent activity * .github/workflows/ci.yaml: Add container-based CI runner * README.md: Add new badge 2020-11-06 Dirk Eddelbuettel * DESCRIPTION: More URL updates, e.g. http -> https * README.md: Ditto * inst/CITATION: Ditto * man/Rcpp-package.Rd: Ditto * inst/CITATION: Change from PeerJ Preprint to TAS 2020-10-25 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * inst/include/Rcpp/generated/InternalFunction__ctors.h: Switch XPtr finalizer argument from false to true 2020-10-22 Dirk Eddelbuettel * inst/include/Rcpp/lang.h: Remove spurious whitespace * vignettes/.gitignore: Refined to no longer ignore pdf files * vignettes/pdf/*: Added * inst/NEWS.Rd: Updated for two PRs 2020-10-21 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2020-10-19 Benjamin Christoffersen * src/attributes.cpp: Initialize two private bool variable in default constructor to avoid santizer warning 2020-08-20 Mattias Ellert * inst/include/Rcpp/lang.h: Remove obsolete and confusing comment 2020-08-05 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2020-07-09 Walter Somerville * inst/include/Rcpp/DataFrame.h: Warn when data.frame has varying length * inst/tinyTest/cpp/DataFrame.cpp: Test added * inst/tinyTest/test_dataframe.R: Idem 2020-07-07 Walter Somerville * inst/include/Rcpp/DataFrame.h: Implement explict push_back and push_front for DataFrame, which takes care to set the class and row.names attributes. * inst/tinyTest/test_dataframe.R: Add in tests for push_back/push_front * inst/tinyTest/cpp/DataFrame.cpp: Idem 2020-07-06 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2020-07-06 Kevin Ushey * inst/include/Rcpp/module/class.h: EXTPTR_PTR -> R_ExternalPtrAddr * src/api.cpp: Idem * src/module.cpp: Idem 2020-07-01 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.5 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * vignettes/rmd/Rcpp.bib: Idem * inst/bib/Rcpp.bib: Idem 2020-06-27 Dirk Eddelbuettel * docker/ci/Dockerfile: Revert back to standard r-base container * docker/plus/Dockerfile: Also install bit64 2020-06-19 Dirk Eddelbuettel * .travis.yml: Determine package name and version from DESCRIPTION, switch to bionic 2020-06-14 Dirk Eddelbuettel * inst/bib/Rcpp.bib: Add John's new 'S, R, and Data Science' article * vignettes/rmd/Rcpp.bib: Idem 2020-06-07 Dirk Eddelbuettel * .travis.yml (jobs): Replace R 3.4.3 with R 3.6.3 in matrix 2020-06-05 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * R/Rcpp.package.skeleton.R: Remove a remaining NAMESPACE entry for a temporary function symbol; ensure an exportPattern is set 2020-05-18 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2020-05-17 Kevin Ushey * inst/include/Rcpp/String.h: Don't preserve returned SEXP in wrap * inst/include/RcppCommon.h: Simplify 2020-04-30 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * vignettes/rmd/Rcpp-libraries.Rmd: Add new vignette source * vignettes/rmd/Rcpp.bib: Complete references * inst/bib/Rcpp.bib: Idem 2020-04-26 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2020-04-25 Dirk Eddelbuettel * inst/include/Rcpp/sugar/functions/sample.h: Replace R_alloc() with a standard vector allocation to reduce memory consumption in sample * docker/ci/Dockerfile: Update for R 4.0.0 (with a temporary diversion to rocker/r-base:4.0.0, and all-source installations) * vignettes/rmd/Makefile: Add bibtex call to JSS 2011 paper builds 2020-04-16 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2020-04-15 Kevin Ushey * inst/include/Rcpp/String.h: Avoid 'debug' namespace collisions * inst/include/Rcpp/macros/debug.h: Idem * inst/include/Rcpp/macros/macros.h: Idem 2020-04-15 Uwe Korn * inst/include/Rcpp/DataFrame.h: Explicit call to scalar std::abs 2020-04-11 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2020-04-10 Kevin Ushey * inst/include/Rcpp/macros/macros.h: Safer definition of short_file_name * inst/include/Rcpp/String.h: Idem * inst/include/Rcpp/macros/debug.h: Idem * src/api.cpp: Idem 2020-04-10 Dirk Eddelbuettel * inst/tinytest/test_exceptions.R: Skip parts of file if on Solaris 2020-04-02 Dirk Eddelbuettel * inst/NEWS.rd: Mark as patch release 1.0.4.6 * inst/tinytest/test_exceptions.R: If running skip remainder of file on Windows to not trigger failed test 2020-04-01 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2020-03-31 Dirk Eddelbuettel * docker/ci-dev/Dockerfile: Also install the 'codetools' package 2020-03-31 Kevin Ushey * R/Attributes.R: Fix for sourceCpp() on Windows w/R-devel 2020-03-28 Dirk Eddelbuettel * inst/examples/RcppGibbs/RcppGibbs_Updated.R: Updated example 2020-03-24 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * inst/include/Rcpp/Environment.h: Added two Shield wrappers around Rf_langX calls 2020-03-23 Dirk Eddelbuettel * .travis.yml (script): Run coverage as parallel step 2020-03-22 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * docker/ci-3.4/Dockerfile: Added * docker/ci-3.5/Dockerfile: Idem * docker/ci-dev/Dockerfile: Idem * .travis.yml (jobs): Expand to matrix 2020-03-22 Mattias Ellert * inst/include/Rcpp/exceptions_impl.h: Add include guard, Make sure RCPP_DEMANGLER_ENABLED is always defined, Add missing inline qualifier 2020-03-18 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * inst/include/Rcpp/lang.h: Define Rcpp_list{2,3,4,5} in the Rcpp namespace * DESCRIPTION: Remove versioned depends on R (>= 3.0.0) from 2013 2020-03-17 Davis Vaughan * inst/include/Rcpp/lang.h: Inline Rcpp_list6() to support R 3.3. 2020-03-17 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version (twice) * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Updated 2020-03-15 Kevin Ushey * inst/include/Rcpp/exceptions_impl.h: Ensure is included into global namespace; refactor detection of demangler support 2020-03-13 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.4 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * vignettes/rmd/Rcpp.bib: Idem * inst/bib/Rcpp.bib: Idem 2020-03-12 Dirk Eddelbuettel * vignettes/rmd/Rcpp.bib: Updated to current package versions * inst/bib/Rcpp.bib: Idem 2020-02-24 Dirk Eddelbuettel * inst/include/Rcpp/exceptions_impl.h: Remove spurious semicolon 2020-02-23 Dirk Eddelbuettel * inst/include/Rcpp/generated/Vector__create.h: Added #nocov tags * inst/include/Rcpp/exceptions_impl.h: Idem * src/api.cpp: Idem plus some whitespace realignment 2020-02-13 Dirk Eddelbuettel * README.md: Add a Debian badge 2020-02-12 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * README.md: Added indirect CRAN use badge 2020-02-09 Joshua Pritikin * inst/include/Rcpp.h: Include exceptions_impl.h * inst/include/Rcpp/exceptions.h: Make thread-safe * inst/include/Rcpp/exceptions_impl.h: New home for code moved from src/api.cpp 2020-01-05 Dirk Eddelbuettel * inst/include/Rcpp/exceptions.h: A few more #nocov tags * inst/include/Rcpp/generated/Vector__create.h: Idem, plus whitespace 2020-01-04 Dirk Eddelbuettel * R/Attributes.R: A few more #nocov tags 2020-01-01 Dirk Eddelbuettel * inst/include/Rcpp/module/Module.h: A few more #nocov tags * inst/include/Rcpp/XPtr.h: Idem * inst/include/Rcpp/vector/Vector.h: Idem 2019-12-31 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2019-12-29 Qiang Kou * inst/include/Rcpp/vector/Matrix.h: Ensure scalar OP matrix do not change right-hand side in operation * inst/tinytest/test_matrix.R: New tests * inst/tinytest/cpp/Matrix.cpp: Idem 2019-12-20 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2019-12-18 Dirk Eddelbuettel * inst/include/Rcpp/XPtr.h: Additional null check, refactored 2019-12-17 Kirill Müller * inst/include/Rcpp/XPtr.h: Clear external pointer before finalizer 2019-12-17 Dirk Eddelbuettel * R/Attributes.R (sourceCpp): Very minor cosmetic changes 2019-12-15 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2019-12-14 Dirk Eddelbuettel * R/Attributes.R (sourceCpp): Support new argument windowsDebugDLL to create a debug DLL, supported on Windows only * man/sourceCpp.Rd: Document it * src/date.cpp: A few more #nocov tage 2019-12-13 Dirk Eddelbuettel * src/api.cpp: A few more #nocov tags * src/attributes.cpp: Idem * src/barrier.cpp: Idem 2019-12-08 Dirk Eddelbuettel * tests/tinytest.R: Turn verbose tests on in dev and on Travis * inst/tinytest/test_client_package.R: Finer-grained skip messages * inst/tinytest/test_module_client_package.R: Idem * inst/tinytest/test_expose_class.R: Idem * inst/tinytest/test_interface.R: Idem * inst/tinytest/test_rcpp_package_skeleton.R: Idem * inst/tinytest/test_reference.R: Idem * inst/tinytest/test_*.R: Streamlined initial test and sourceCpp call * src/attributes.cpp: Remove dangling '#nocov end' 2019-12-07 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * inst/tinytest/test_binary_package.R: Finer-grained skip messages * inst/tinytest/test_misc.R: Add commented-out test that fails * tests/tinytest.R: Minor edit * docker/ci/Dockerfile: Add curl and ssl -dev packages needed for covr 2019-12-05 Dirk Eddelbuettel * vignettes/rmd/Rcpp-FAQ.Rmd (Rcpp): Add entry about "'dataptr' (or 'enterRNGScope') not provided by Rcpp" recommending proper importFrom 2019-12-03 Dirk Eddelbuettel * docker/ci/Dockerfile: Lighter builds as fewer Suggests: * docker/plus/Dockerfile: Take packages moved from ci/Dockerfile 2019-12-01 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * DESCRIPTION (Suggests): Remove knitr, rmarkdown, pinp * DESCRIPTION (VignetteBuilder): Remove knitr 2019-11-26 Dirk Eddelbuettel * inst/tinytest/test_embedded_r.R: Use sink to suppress noisy output, reenable tests (still conditional on usual environment variable) 2019-11-25 Dirk Eddelbuettel * inst/tinytest/cpp/Vector.cpp (no_op): Suppress compiler warning 2019-11-24 Dirk Eddelbuettel * DESCRIPTION (Suggests): Add tinytest, remove RUnit * tests/doRUnit.R: Removed * tests/tinytest.R: Added * tests/tinytest.R: Converted from RUnit to tinytest * inst/tinytest/test_algorithm.R: Idem * inst/tinytest/test_as.R: Idem * inst/tinytest/test_binary_package.R: Idem (but inactive for now) * inst/tinytest/test_client_package.R: Idem (but inactive for now) * inst/tinytest/test_dataframe.R: Idem * inst/tinytest/test_date.R: Idem (but condition two test sets on TZ) * inst/tinytest/test_dispatch.R: Idem * inst/tinytest/test_embedded.R: Idem * inst/tinytest/test_environments.R: Idem * inst/tinytest/test_exceptions.R: Idem * inst/tinytest/test_exceptions_nocall.R: Idem * inst/tinytest/test_expose_class.R: Idem * inst/tinytest/test_function.R: Idem * inst/tinytest/test_interface.R: Idem (but inactive for now) * inst/tinytest/test_internal_function.R: Idem * inst/tinytest/test_internal_function_cpp11.R: Idem * inst/tinytest/test_language.R: Idem * inst/tinytest/test_listof.R: Idem * inst/tinytest/test_matrix.R: Idem * inst/tinytest/test_misc.R: Idem * inst/tinytest/test_modref.R: Idem * inst/tinytest/test_module.R: Idem * inst/tinytest/test_module_client_package.R: Idem * inst/tinytest/test_na.R: Idem * inst/tinytest/test_quickanddirty.R: Idem * inst/tinytest/test_rcpp_package_skeleton.R: Idem * inst/tinytest/test_reference.R: Idem * inst/tinytest/test_rmath.R: Idem * inst/tinytest/test_robject.R: Idem * inst/tinytest/test_s4.R: Idem * inst/tinytest/test_stack.R: Idem * inst/tinytest/test_stats.R: Idem * inst/tinytest/test_string.R: Idem * inst/tinytest/test_subset.R: Idem * inst/tinytest/test_sugar.R: Idem * inst/tinytest/test_sugar_var.R: Idem * inst/tinytest/test_support.R: Idem * inst/tinytest/test_system.R: Idem * inst/tinytest/test_table.R: Idem * inst/tinytest/test_vector.R: Idem * inst/tinytest/test_vector_old.R: Idem * inst/tinytest/test_wrap.R: Idem * inst/tinytest/test_wstring.R: Idem * inst/tinytest/test_xptr.R: Idem * inst/tinytest/cpp/*: C++ support files for tests * inst/tinytest/*: Other support files and directories from unitTests * R/unitTests.R: Removed as tied to RUnit setuo * inst/tinytest/test_attributes.R: Added test for error with non-existing package in cppFunction 2019-11-23 Dirk Eddelbuettel * docker/ci/Dockerfile: Add tinytest to ci Docker image 2019-11-20 Dirk Eddelbuettel * R/Attributes.R: Test for and report unavailable 'LinkingTo' package 2019-11-19 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2019-11-18 Kun Ren * src/attributes.cpp: Add invisible param to export attribute (#1024) * vignettes/rmd/Rcpp-attributes.Rmd: Add an section of Returning invisible object 2019-11-13 Dirk Eddelbuettel * .github/ISSUE_TEMPLATE.md: Another small edit * .github/PULL_REQUEST_TEMPLATE.md: Idem 2019-11-13 Stephen Wade * inst/include/Rcpp/XPtr.h: Delete delegating ctor (follow-up #1012) * inst/unitTests/runit.XPTr.R: Reinsert self-tag test on Windows 2019-11-11 Dirk Eddelbuettel * inst/unitTests/runit.packageversion.R: New test * inst/unitTests/cpp/rcppversion.cpp: Cpp portion of test 2019-11-10 Dirk Eddelbuettel * .github/: Add files CONTRIBUTING.md, FUNDING.yml, ISSUE_TEMPLATE.md and PULL_REQUEST_TEMPLATE.md * inst/include/Rcpp/config.h: Correct RCPP_VERSION and RCPP_DEV_VERSION to 1.0.3 2019-11-09 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version 2019-11-09 TJ McKinley * R/Attributes.R: Correct how cppFunction() deals with multiple depends arguments 2019-11-08 Romain Francois * inst/include/Rcpp/lang.h: Safer Rcpp_list* and Rcpp_lang* * inst/include/Rcpp/Function.h: Add Function.invoke() for operator() * inst/include/Rcpp/generated/Function__operator.h: Safer Function.operator() using Function.invoke() 2019-11-08 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Release 1.0.3 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * inst/bib/Rcpp.bib: Idem * vignettes/Rcpp.bib: Idem 2019-11-06 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/XPtr.h: Provided fallback for old constructor when C++11 is not available (follow-up to #1003) * inst/unitTests/runit.XPTr.R (test.XPtr): On Windows (as a proxy for old compilers) do not test new feature * tests/doRUnit.R: Protect printing to /tmp from Windows use * vignettes/rmd/Rcpp.bib: Updated * inst/bib/Rcpp.bib: Idem 2019-11-02 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/Reference.h: Shield Rf_mkstring inside Rf_lang2 * inst/include/Rcpp/Environment.h: Idem (inside Rf_lang4) * inst/include/Rcpp/proxy/FieldProxy.h: Idem (inside Rf_lang3 and 4) 2019-10-31 Romain Francois * inst/include/Rcpp/DataFrame.h: Protect temporaries from gc * inst/include/Rcpp/Environment.h: Idem * inst/include/Rcpp/r_cast.h: Idem 2019-10-27 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/unitTests/runit.exposeClass.R: Updated to pass with r-devel * vignettes/rmd/Rcpp-FAQ.Rmd: Two new short section on speedier compilation and lack of exceptions / stop() across shared libraries 2019-10-26 Dirk Eddelbuettel * vignettes/Rcpp-package.Rnw: Another wrapper * vignettes/Rcpp-jss-2011.Rnw: Idem * vignettes/Makefile: Refinements * vignettes/rmd/Makefile: Idem * cleanup: Removed bashism, added invocation of make clean 2019-10-23 Dirk Eddelbuettel * vignettes/Rcpp-*.Rnw: Wrappers around pdf/*pdf * vignettes/Makefile: Added 2019-10-21 Dirk Eddelbuettel * vignettes/rmd/*: Moved from parent directory * vignettes/pdf/*: New target directory 2019-10-20 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * vignettes/Rcpp-FAQ.Rmd: Turn off knitr cache * vignettes/Rcpp-introduction.Rmd: Idem * vignettes/Makefile: Add simple Makefile * .Rbuildignore: Exclude vignettes/Makefile 2019-10-19 Stephen Wade * inst/include/Rcpp/XPtr.h: XPtr constructor split up, a single argument does not modify tags and protected data of the external pointer * inst/unitTests/cpp/Xptr.cpp: Added test * inst/unitTests/runit.XPtr.R: Idem 2019-10-14 Dirk Eddelbuettel * README.md: Added CRAN + BioConductor badges for reverse depends, 2019-10-11 Dirk Eddelbuettel * inst/include/Rcpp/exceptions.h: Condition use of typeid() on absence of RCPP_NO_RTTI in two places * inst/include/Rcpp/r/headers.h: RCPP_NO_RTTI implies RCPP_NO_MODULES 2019-10-04 Dirk Eddelbuettel * vignettes/Rcpp-attributes.Rmd: Correct two unevaluated knitr C++ chunks to mode 'Rcpp' rather than the (unregistered) C++ mode * vignettes/Rcpp-extending.Rmd: Minor white-space tweak to avoid paragraph-spacing warnings from latex and its mdframed style * vignettes/Rcpp-modules.Rmd: Idem * vignettes/Rcpp-sugar.Rmd: Idem 2019-10-01 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version 2019-09-30 Kevin Ushey * inst/include/Rcpp.h: add RCPP_NO_MODULES * inst/include/Rcpp/api/meat/is.h: Idem * inst/include/Rcpp/api/meat/meat.h: Idem 2019-09-28 Dirk Eddelbuettel * README.md: Add a stackoverflow tag to indicate where to ask questions, also updated package counts on CRAN and BioC for Rcpp users 2019-08-06 Riccardo Porreca * vignettes/Rcpp-modules.Rmd: Extensive review and edit improving the Modules vignette 2019-08-04 Dirk Eddelbuettel * README.md: Add thre doi badges * inst/NEWS.Rd: Two minor edits 2019-07-21 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version 2019-07-21 Riccardo Porreca * R/Module.R: Use an explicit Rcpp:: in the initalize method for C++ classes wrapped inside modules to ensure proper initialization 2019-07-20 Dirk Eddelbuettel * DESCRIPTION: Release 1.0.2 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * inst/bib/Rcpp.bib: Idem * vignettes/Rcpp.bib: Idem 2019-07-18 Pierrick Roger * src/attributes.cpp: Correct parsing of default function values * inst/unitTests/cpp/attributes.cpp: Added tests * inst/unitTests/runit.attributes.R: Idem 2019-07-16 Dirk Eddelbuettel * debian/: Removed, see https://salsa.debian.org/edd/r-base/ instead 2019-07-04 Dirk Eddelbuettel * vignettes/Rcpp.bib: Updated * inst/bib/Rcpp.bib: Idem 2019-05-05 Dirk Eddelbuettel * .Rbuildignore: Small tweak 2019-04-27 Dirk Eddelbuettel * R/Rcpp.package.skeleton.R (Rcpp.package.skeleton): Use getRcppVersion() 2019-04-26 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * R/tools.R (getRcppVersion): More idiomatic code 2019-04-25 Dirk Eddelbuettel * R/tools.R (getRcppVersion): Export R (and dev) package version * man/getRcppVersion.Rd: Documentation for new function * inst/include/Rcpp/config.h (RCPP_VERSION_STRING): New version and development version string #define * src/api.cpp (getRcppVersionStrings): Expose new versions strings * src/internal.h: Register new version string exporter * src/rcpp_init.cpp (callEntries[]): Idem * inst/unitTests/runit.misc.R (test.getRcppVersion): test new function 2019-03-23 Ralf Stubner * vignettes/Rcpp-modules.Rmd: Describe RCPP_EXPOSED_* macros * vignettes/Rcpp-extending.Rmd: Reference Modules extensions 2019-03-23 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/NEWS.Rd: Updated 2019-03-20 James J Balamuta * inst/include/Rcpp/sugar/functions/unique.h: Added decreasing parameter to control sort. * inst/unitTests/runit.sugar.R: Added sort_unique() tests * inst/unitTests/cpp/sugar.cpp: Ditto 2019-03-20 Dirk Eddelbuettel * src/date.cpp: Renamed from Date.cpp * src/module.cpp: Renamed from Module.cpp * src/rcpp_init.cpp: Renamed from Rcpp_init.cpp 2019-03-19 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * tests/doRUnit.R: On Travis always set RunAllRcppTests * docker/ci/Dockerfile: Set environment variables container-wide 2019-03-18 Dirk Eddelbuettel * inst/include/Rcpp/macros/macros.h (END_RCPP_RETURN_ERROR): Add UNPROTECT to reference nprot, also check for stop_sym 2019-03-17 Dirk Eddelbuettel * DESCRIPTION: Release 1.0.1 * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * inst/bib/Rcpp.bib: Idem * vignettes/Rcpp.bib: Idem 2019-03-16 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/unitTests/runit.sugar.R: Set the sample() behaviour to R 3.5.0 as R 3.6.0 has a breaking change (for the better) 2019-03-13 Romain François * inst/include/Rcpp/macros/macros.h: Add UNPROTECT to please rchk 2019-03-12 Romain François * inst/include/Rcpp/api/meat/proxy.h: AttributeProxy::set() with Shield<> and a few related uses of Shield<> to please rchk * inst/include/Rcpp/clone.h: Idem * inst/include/Rcpp/proxy/AttributeProxy.h: Idem * inst/include/Rcpp/proxy/NamesProxy.h: Idem * inst/include/Rcpp/vector/Matrix.h: Idem * inst/include/Rcpp/vector/Vector.h: Idem 2019-02-25 Dirk Eddelbuettel * .travis.yml (after_success): Setting CODECOV_TOKEN to reenable codecov.io coverage as detailed by Ralf in GitHub issue #941 2019-02-16 Dirk Eddelbuettel * inst/include/Rcpp/sugar/functions/cbind.h: Converted CRLF to CR 2019-02-15 Dirk Eddelbuettel * inst/README: Moved stale file to local/ * inst/THANKS: Idem 2019-02-13 Dirk Eddelbuettel * DESCRIPTION (Version, Date): New minor version 2019-02-11 Kevin Ushey * R/Attributes.R: better handle pre-existing RcppExports.cpp, RcppExports.R when calling compileAttributes() 2019-02-09 Ralf Stubner * Rcpp-modules.Rmd: Added example for .factory 2019-01-31 Dirk Eddelbuettel * inst/include/Rcpp/protection/Shelter.h (Rcpp): Only increase nprotected count if object is not NULL (suggested by Stepan Sindelar) 2018-12-26 Zhuoer Dong * vignettes/Rcpp-quickref.Rmd: Fix three bugs: use `Named()`, define `glob`, `glob.ls(TRUE)`. 2018-12-01 Dirk Eddelbuettel * R/Attributes.R: Added new 'c++2a' plugin for '-std=c++2a' compilation standard supported by g++ 8 or later 2018-11-11 Dirk Eddelbuettel * inst/include/Rcpp/vector/Subsetter.h (check_indices): More informative error message as suggested by KK 2018-11-09 William Nolan * inst/include/Rcpp/vector/Subsetter.h: Fixed to use R_xlen_t instead of int for indexing and added warning when indexing by IntegerVector (only for large enough vectors) 2018-11-05 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Version 1.0, and happy 10th birthday! * inst/include/Rcpp/config.h: Idem * inst/NEWS.Rd: Idem * inst/bib/Rcpp.bib: Idem * vignettes/Rcpp.bib: Idem 2018-11-04 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * README.md: Updated stated package and test numbers 2018-10-25 Kevin Ushey * inst/include/Rcpp/String.h: Use Rf_mkCharLenCE() as appropriate * inst/unitTests/cpp/String.cpp: Add unit tests * inst/unitTests/runit.String.R: Add unit tests 2018-10-12 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * tests/doRUnit.R: Simplified to something similar to what RcppArmadillo (and other packages) had for a while now * vignettes/Rcpp-unitTests.Rnw: Removed as less useful now 2018-10-08 JJ Allaire * R/Attributes.R: Sort the files scanned for attributes in the C locale for stable output across systems. 2018-10-07 Ralf Stubner * vignettes/Rcpp-extending.Rmd: Correct EXPORT to EXPOSED in displays of the corresponding macro, and remove two spurious semicolons 2018-10-02 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem 2018-10-02 Romain Francois * inst/include/Rcpp/vector/Matrix.h: Init nrow in Matrix(no_init) ctor * inst/unitTests/runit.Matrix.R: New test * inst/unitTests/cpp/Matrix.cpp: Idem 2018-09-30 Dirk Eddelbuettel * man/RcppUnitTests.Rd: Remove \details{} with conditional code which R-devel (as of Sep 28) warns about as empty 2018-09-28 Dirk Eddelbuettel * .travis.yml (env): Set distinct build and check options to skip tests of vignettes 2018-09-27 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/date_datetime/Date.h: Remove the empty destructor to make g++-9 (prerelease) happy [CRAN request] * inst/unitTests/runit.Matrix.R: Correct typo 2018-09-27 Romain Francois * inst/include/Rcpp/vector/Matrix.h: Fix Matrix(no_init(int,int)) constructor * inst/unitTests/runit.Matrix.R: test for above * inst/unitTests/cpp/Matrix.cpp: same 2018-09-26 Dirk Eddelbuettel * docker/ci/Dockerfile: Set env var RunAllRcppTests=yes * .travis.yml: Do not set env var here as needed in Docker 2018-09-21 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.19 * inst/NEWS.Rd: Idem * inst/bib/Rcpp.bib: Idem * vignettes/Rcpp.bib: Idem * inst/include/Rcpp/config.h: Idem * R/RcppLdpath.R (RcppLdPath, RcppLdFlags, CxxFlags, RcppCxx0xFlags): After discussion with CRAN, do not mark as .Deprecated() as too many packages are involved. This will need to be phased in more slowly. 2018-09-20 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rmd: Set 'eval=FALSE' on another RcppArmadillo example to not create a build-time dependency 2018-09-18 JJ Allaire * src/attributes.cpp: Add support for [[Rcpp::init]] attribute * vignettes/Rcpp-attributes.Rmd: Documentation for [[Rcpp::init]] attribute 2018-09-17 Dirk Eddelbuettel * inst/include/Rcpp/r/headers.h: Define STRICT_R_HEADERS, but until September 2019 protect by defining RCPP_NO_STRICT_HEADERS * .travis.yml (env): Switch to rcpp/ci for ci use 2018-09-15 Dirk Eddelbuettel * docker/ci/Dockerfile: Move Dockerfile to docker/ci * docker/run/Dockerfile: Add deployment Dockerfile * docker/plus/Dockerfile: Add 'plus-sized' Dockerfile suitable for different add-on packages requiring Rcpp{Armadillo,Eigen,GSL} or BH 2018-09-02 Dirk Eddelbuettel * .travis.yml: Switch to rcpp/rcpp-testing container 2018-08-29 Dirk Eddelbuettel * .travis.yml: Use Dockerfile 2018-08-28 Dirk Eddelbuettel * docker/Dockerfile: Add Dockerfile for use by Travis CI 2018-08-27 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * man/Rcpp-deprecated.Rd: Fix two-char typo/thinko in \link{} 2018-07-29 Dirk Eddelbuettel * README.md: Refreshed via some edits and updates * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2018-07-28 Dirk Eddelbuettel * R/RcppLdpath.R (RcppLdPath, RcppLdFlags, CxxFlags, RcppLdFlags) (RcppCxx0xFlags): Marked as deprecated * man/Rcpp-deprecated.Rd: Add exported functions LdFlags() and RcppLdFlags() as deprecated * man/RcppLdFlags.Rd: Idem 2018-07-27 Dirk Eddelbuettel * man/loadRcppModules-deprecated.Rd: Fix typo; was deprecated in 0.12.5, not 0.16.5 which does not exist 2018-07-26 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rmd: Use collapse: true * vignettes/Rcpp-introduction.Rmd: Idem 2018-07-25 Dirk Eddelbuettel * vignettes/Rcpp-extending.Rmd: Use collapse: true 2018-07-24 Martin Lysy * R/loadRcppClass.R: Search in R module for 'Class' instead of 'CppClass'. * R/exposeClass.R: Fixed 'rename' argument to work as expected. * inst/unitTests/runit.exposeClass.R: Added unit tests for the above. 2018-07-23 Dirk Eddelbuettel * inst/bib/Rcpp.bib: More updates * vignettes/Rcpp.bib: Idem 2018-07-21 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.18 * inst/NEWS.Rd: Idem * inst/bib/Rcpp.bib: Idem * vignettes/Rcpp.bib: Idem * inst/include/Rcpp/config.h: Idem * vignettes/Rcpp.bib: Updated other references * inst/bib/Rcpp.bib: Idem * inst/unitTests/runit.sugar.R: Additional min, max unit tests * inst/unitTests/cpp/sugar.cpp: Idem 2018-07-20 Dirk Eddelbuettel * inst/include/Rcpp/sugar/functions/max.h: Also consider case of an empty vector * inst/include/Rcpp/sugar/functions/min.h: Idem 2018-07-19 Jack Wasey * inst/include/Rcpp/r_cast.h: Error and abort if debugging for STRSXP 2018-07-24 Martin Lysy * R/loadRcppClass.R: Search in R module for 'Class' instead of 'CppClass'. * R/exposeClass.R: Fixed 'rename' argument to work as expected. * inst/unitTests/runit.exposeClass.R: Added unit tests for the above. 2018-07-12 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2018-07-12 Jack Wasey * R/Attributes.R: Use case-insensitive sort of filenames to make RcppExports more deterministic 2018-07-10 Lionel Henry * inst/include/Rcpp/exceptions.h: Move LongjumpException from the Rcpp::internal namespace to the public Rcpp namespace. If you have a catch-all statement like `catch (...)`, be sure to catch and rethrow Rcpp::LongjumpException to prevent the R longjump from being ignored. * inst/include/Rcpp/macros/macros.h (VOID_END_RCPP): idem * src/attributes.cpp: idem 2018-07-09 Dirk Eddelbuettel * src/Date.cpp: Skip 'tm_gmtoff' on AIX as well (thanks to PR 876 by @ayappanec) 2018-07-05 Lionel Henry * inst/include/Rcpp/api/meat/Rcpp_eval.h: Rename `RCPP_PROTECTED_EVAL` to `RCPP_USE_UNWIND_PROTECT` because the new API is now more general than just evaluation of R code. * inst/NEWS.Rd: idem * inst/unitTests/runit.interface.R: idem * R/unit.tests.R (unitTestSetup): Pass extra arguments to sourceCpp() for easier debugging. * R/Attributes.R (.plugins[["unwindProtect"]]): You can now add `[[Rcpp::plugins(unwindProtect)]]` in one of your source file to enable the new unwind-protect mechanism easily. It appends `-DRCPP_USE_UNWIND_PROTECT` to `PKG_CPPFLAGS`. This is safer than using a `#define` because it ensures unwind-protect is enabled in all compilation units, including RcppExports.cpp. * inst/unitTests/cpp/stack.cpp: Use new plugin to enable unwind-protect. 2018-06-22 Kevin Ushey * inst/include/Rcpp/api/meat/Rcpp_eval.h: Ensure R_BaseEnv is used 2018-06-21 Lionel Henry * inst/include/Rcpp/api/meat/unwind.h: Extract unwind protection from Rcpp::Rcpp_fast_eval() into Rcpp::unwindProtect(). Use this function whenever you need to call a C function that might longjump, for instance a function from R's C API. Rcpp::unwindProtect() will protect your C++ stack and throw a Rcpp::internal::LongJump exception to ensure all destructors are called. The R longjump is then resumed once it is safe to do so. This function powers Rcpp_fast_eval(). You can use Rcpp::unwindProtect() in two ways. First with a C-like callback interface that takes a `SEXP (*)(void* data)` function pointer and a `void*` data argument that is passed to the function. Second, if you have C++11 enabled, Rcpp::unwindProtect() implements an `std::function` overload. You can pass any function object or lambda function with the right signature. * inst/include/Rcpp/api/meat/Rcpp_eval.h: Idem 2018-06-15 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem 2018-06-13 Filip Schouwenaars * inst/unitTests/runit.embeddedR.R: Evaluate in environment derived of baseenv 2018-06-11 Romain Francois * inst/include/Rcpp/exceptions.h: Control call and stack display after exception / stop * inst/unitTests/cpp/Exceptions_nocall.cpp: new test * inst/unitTests/runit.Exceptions_nocall.R: idem 2018-06-09 Qiang Kou * inst/include/Rcpp/DataFrame.h: Use Rcpp_fast_eval, not Rcpp_eval * inst/include/Rcpp/Environment.h: Idem * inst/include/Rcpp/Function.h: Idem * inst/include/Rcpp/Language.h: Idem * inst/include/Rcpp/Module.h: Idem * inst/include/Rcpp/Reference.h: Idem * inst/include/Rcpp/exceptions.h: Idem * inst/include/Rcpp/generated/Function__operator.h: Idem * inst/include/Rcpp/proxy/FieldProxy.h: Idem * inst/include/Rcpp/proxy/NamesProxy.h: Idem * inst/include/Rcpp/r_cast.h: Idem * inst/include/Rcpp/vector/Vector.h: Idem * inst/examples/SugarPerformance/sugarBenchmarks.R: Idem * inst/unitTests/cpp/language.c: Idem * inst/unitTests/cpp/misc.c: Idem * src/barrier.c: Idem 2018-06-09 Dirk Eddelbuettel * inst/unitTests/runit.embeddedR.R: Suspend test for now 2018-06-08 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h: Idem * Contributing.md: Minor update coding style 2018-06-07 Kevin Ushey * inst/include/Rcpp/config.h: bump dev version 2018-06-06 Kevin Ushey * inst/include/Rcpp/RNGScope.h: Allow suspension of RNG synchronization * inst/include/Rcpp/routines.h: Idem * src/Rcpp_init.cpp: Idem * src/api.cpp: Idem * inst/include/Rcpp/api/meat/Rcpp_eval.h: Evaluate in base env 2018-06-05 Jack Wasey * inst/include/Rcpp/r_cast.h: Error and abort if debugging 2018-06-02 Lionel Henry * inst/unitTests/runit.interface.R: New test for the case where the client package was compiled without protected evaluation enabled. On R 3.5, longjump exceptions thrown from imported functions are still caught and dealt with properly by the client package. * inst/unitTests/runit.interface.R: Test both Rcpp_eval() and Rcpp_fast_eval(). 2018-06-01 Lionel Henry * inst/unitTests/runit.interface.R: New tests for interfaces and unwind. These tests build two packages, and that exports a function via Rcpp::interfaces(cpp) and the other that calls it. The attributes are regenerated and the packages rebuilt each time the tests are run. The tests check in particular that the C++ stack is properly unwound when a long jump occurs. 2018-06-01 Romain Francois * inst/include/Rcpp/Environment.h: Make Environment::new_child() const 2018-05-31 Lionel Henry * inst/include/Rcpp/api/meat/Rcpp_eval.h: Fix protected evaluation. Setting `RCPP_PROTECTED_EVAL` before including Rcpp.h enables a new R 3.5 API for safe evaluation of R code. R longjumps are now correctly intercepted and rethrown. Thanks to this the C++ stack is now safely unwound when a longjump is detected while calling into R code. This includes the following cases: thrown errors, caught condition of any class, long return, restart invokation, debugger exit. Note that this is still experimental! When `RCPP_PROTECTED_EVAL` is enabled, Rcpp_eval() uses the protect-unwind API under the hood in order to gain safety. It is fully backward-compatibile and still catches errors and interrupts to rethrow them as typed C++ exceptions. If you don't need to catch those, consider using Rcpp_fast_eval() instead to avoid the catching overhead. Rcpp_fast_eval() is a wrapper around Rf_eval(). Unlike Rcpp_eval(), it does not evaluate R code within tryCatch() and thus avoids the overhead of wrapping and evaluating the expression in a tryCatch() call. When Rcpp is compiled with a lower version than R 3.5, Rcpp_fast_eval() falls back to Rf_eval() without any protection from long jumps, even when `RCPP_PROTECTED_EVAL` is set. Either add R 3.5 to your `Depends` or make sure the legacy Rcpp_eval() function is called instead of Rcpp_fast_eval() when your package is compiled with an older version of R. Note that Rcpp_fast_eval() behaves a bit differently to Rcpp_eval(). The former has the semantics of the C function Rf_eval() whereas the latter behaves like the R function base::eval(). This has subtle implications for control flow. For instance evaluating a return() expression within a frame environment returns from that frame rather than from the Rcpp_eval() call. * inst/include/Rcpp/macros/macros.h: Leave the try/catch scope before resuming jump to ensure proper destruction of the exception reference. * inst/include/Rcpp/exceptions.h: Functions to create and check a longjump sentinel. This sentinel is used as return value in contexts where it is not safe to resume a jump (i.e. in the glue code of cpp interfaces). * inst/include/Rcpp/macros/macros.h: Return a longjump sentinel in END_RCPP_RETURN_ERROR. * src/attributes.cpp: Detect longjump sentinels and resume jump. 2018-05-27 Romain Francois * inst/include/Rcpp/vector/string_proxy.h: Make StringProxy::operator== const * inst/unitTests/cpp/Vector.cpp: New test * inst/unitTests/runit.Vector.R: Idem 2018-05-09 Filip Schouwenaars * R/Attributes.R: Set local environment in source() * inst/unitTests/cpp/embeddedR.cpp: New test * inst/unitTests/runit.embeddedR.R: Idem 2018-05-09 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.17 * inst/NEWS.Rd: Release 0.12.17 * inst/bib/Rcpp.bib: Release 0.12.17 * vignettes/Rcpp.bib: Release 0.12.17 * inst/include/Rcpp/config.h: Release 0.12.17 * debian/*: Changes for Debian release of 0.12.16 2018-05-05 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rmd: Also mention TAS paper * vignettes/Rcpp-introduction.Rmd: Idem * vignettes/Rcpp-jss-2011.Rnw: Idem 2018-05-04 Romain Francois * inst/include/Rcpp/String.h: Extend StoragePolicy support * inst/include/Rcpp/vector/00_forward_proxy.h: Idem * inst/include/Rcpp/vector/Vector.h: Idem * inst/include/Rcpp/vector/const_generic_proxy.h: Idem * inst/include/Rcpp/vector/const_string_proxy.h: Idem * inst/include/Rcpp/vector/generic_proxy.h: Idem * inst/include/Rcpp/vector/proxy.h: Idem * inst/include/Rcpp/vector/string_proxy.h: Idem * inst/include/Rcpp/vector/traits.h: Idem * inst/unitTests/cpp/Vector.cpp: New test * inst/unitTests/runit.Vector.R: Idem 2018-04-25 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version 2018-04-25 Romain Francois * inst/include/Rcpp/Benchmark/Timer.h: If defined, undefine FALSE 2018-04-17 Ralf Stubner * vignettes/Rcpp-attributes.Rmd: Replace back-quote with straight quote * vignettes/Rcpp-modules.Rmd: Idem 2018-04-02 Dirk Eddelbuettel * .editorconfig: Added support for editorconfig.org * .clang_format: Removed * .dir-locals.el: Removed 2018-03-31 Dirk Eddelbuettel * inst/include/Rcpp/sprintf.h (Rcpp): Remove parens [gcc8 warning] * vignettes/Rcpp-attributes.Rmd: Update link to JSS intro vignette * vignettes/Rcpp-modules.Rmd: Idem 2018-03-21 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version 2018-03-18 Kevin Ushey * inst/include/Rcpp/stats/random/random.h: No inheritance from RNGScope 2018-03-14 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rmd: Correct a double-quote (thanks, Joris Meys) 2018-03-08 Peter Hickey * vignettes/Rcpp-attributes.Rmd: Correct stray backslash 2018-03-08 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.16 * inst/NEWS.Rd: Release 0.12.16 * inst/bib/Rcpp.bib: Release 0.12.16 * vignettes/Rcpp.bib: Release 0.12.16 * inst/include/Rcpp/config.h: Release 0.12.16 * debian/*: Changes for Debian release of 0.12.16 2018-02-07 Kevin Ushey * inst/include/Rcpp/longlong.h: Revised and more general logic for long long on 64bit Windows etc via C++11 and as int64_t alias where possible 2018-03-01 Dirk Eddelbuettel * inst/include/Rcpp/sugar/functions/complex.h (Rcpp): Remove RCPP_HYPOT macro and use ::hypot() throught as it is provided with C99 * inst/include/Rcpp/sugar/undoRmath.h: Also uncomment pythag here 2018-02-28 Dirk Eddelbuettel * inst/include/Rcpp/Rmath.h (R): Rf_pythag has been remove in R 2.14.0 so comment-out the R::pythag wrapper (per request of Brian Ripley) 2018-02-26 Kevin Ushey * src/api.cpp: Always set / put RNG state when calling Rcpp function 2018-02-25 Dirk Eddelbuettel * vignettes/Rcpp.bib: Updated * inst/bib/Rcpp.bib: Idem * vignettes/Rcpp-FAQ.Rmd (Note): Expand conda answer by adding link 2018-02-14 Dirk Eddelbuettel * DESCRIPTION (Version, Date): New minor version 2018-02-14 Kirill Müller * R/Attributes.R: Code compiled with cppFunction() uses .Call instead of .Primitive(".Call"), #795 2018-02-07 Kevin Ushey * inst/include/Rcpp/longlong.h: Allow long long on 64bit Windows 2018-01-21 Dirk Eddelbuettel * README.md: Added new section 'Support' * vignettes/Rcpp-FAQ.Rmd (vignette): Uppercase index to 'Rcpp-FAQ'; removed reference to Gmane which sadly is no more 2018-01-19 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rmd (Note): Document the conda package `gxx_linux-64` as helpful in that environment 2018-01-16 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.15 * inst/NEWS.Rd: Release 0.12.15 * inst/bib/Rcpp.bib: Release 0.12.15 * vignettes/Rcpp.bib: Release 0.12.15 * inst/include/Rcpp/config.h: Release 0.12.15 * debian/*: Changes for Debian release of 0.12.15 2018-01-15 Dirk Eddelbuettel * inst/include/RcppCommon.h: Check for new #define RCPP_USE_UNWIND_PROTECT and unset if defined, this is being be used to "park" code from #789 * inst/include/Rcpp/Environment.h: Ifdef #789 via RCPP_USE_UNWIND_PROTECT * inst/include/Rcpp/Language.h: Idem * inst/include/Rcpp/api/meat/Rcpp_eval.h: Idem * inst/include/Rcpp/exceptions.h: Idem * inst/include/Rcpp/macros/macros.h: Idem * inst/unitTests/runit.stack.R: Ensure test is not running 2018-01-14 Dirk Eddelbuettel * DESCRIPTION (Version, Date): New minor version 0.12.14.8 * inst/include/Rcpp/traits/is_na.h (Rcpp): Also speed up Rcpp::is_na 2018-01-14 Lionel Henry * inst/unitTests/cpp/stack.cpp: Move stack unwinding tests from misc.cpp * inst/unitTests/runit.stack.R: Move stack unwinding tests from misc.R; disaggregate stack unwinding tests; also disable for now 2018-01-11 Kirill Müller * inst/include/Rcpp/traits/is_na.h: Speed up Rcpp::is_na() 2018-01-09 Iñaki Ucar * inst/include/Rcpp/vector/proxy.h: Improve support for NVCC, the CUDA compiler, by making three more methods const 2018-01-06 Kendon Bell * src/api.cpp: Allow for compilation on ANDROID 2017-12-21 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Updated minor version and date 2017-12-21 Kirill Müller * inst/include/Rcpp/internal/wrap.h: Appease gcc-7 with fall-through * inst/include/Rcpp/macros/unroll.h: Idem 2017-12-20 Kirill Müller * inst/include/Rcpp/utils/tinyformat.h: Update to new upstream c42f/tinyformat@8f60162, simplify future updates by separating Rcpp-specific changes (issue #786). 2017-12-19 Kevin Ushey * inst/include/Rcpp/internal/na.h: Remove 'clever' NA / NaN checks 2017-12-16 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Updated minor version and date 2017-12-13 Lionel Henry * inst/include/Rcpp/api/meat/Rcpp_eval.h: Add Rcpp_fast_eval() for safe and fast evaluation of R code using the new protect-unwind API in R 3.5. [ This is however disabled for release 0.12.15. ] * inst/include/Rcpp/exceptions.h: Add LongjumpException and resumeJump() to support Rcpp_fast_eval(). * inst/include/Rcpp/macros/macros.h: Catch LongjumpException and call resumeJump(). If resumeJump() doesn't jump (on old R versions), throw an R error (this normally should not happen). * inst/include/RcppCommon.h: Add Rcpp_fast_eval() to the public API and internal::Rcpp_eval_impl() to the private API. * inst/include/Rcpp/Environment.h: Use safe evaluation * inst/include/Rcpp/Language.h: idem 2017-12-05 Kevin Ushey * inst/include/Rcpp/Environment.h: Use public R APIs * inst/include/Rcpp/api/meat/Environment.h: Idem 2017-12-04 Kevin Ushey * inst/include/Rcpp/RObject.h: Protect temporary wrapped SEXPs * inst/include/Rcpp/api/meat/DataFrame.h: Idem * inst/include/Rcpp/api/meat/Environment.h: Idem * inst/include/Rcpp/api/meat/proxy.h: Idem * inst/include/Rcpp/proxy/ProtectedProxy.h: Idem * inst/include/Rcpp/vector/generic_proxy.h: Idem 2017-12-03 Dirk Eddelbuettel * DESCRIPTION (Version, Date): New minor version * inst/include/Rcpp/sugar/functions/is_na.h: Correct test for NA to work with new as well as old Date(time)Vectors * inst/unitTests/cpp/dates.cpp (has_na): Added tests * inst/unitTests/runit.Date.R (test.NA): Idem 2017-11-30 James J Balamuta * src/attributes.cpp: Fixed missing Rcpp namespace in export interface generation 2017-11-25 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/exceptions/cpp11/exceptions.h: Ensure Rf_format gets a format string * inst/include/Rcpp/exceptions/cpp98/exceptions.h (Rcpp): Ditto 2017-11-18 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * vignettes/Rcpp-FAQ.Rmd: Use Rcpp::Rcpp.plugin.maker(), not ':::' 2017-11-17 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.14 * inst/NEWS.Rd: Release 0.12.14 * inst/bib/Rcpp.bib: Release 0.12.14 * vignettes/Rcpp.bib: Release 0.12.14 * inst/include/Rcpp/config.h: Release 0.12.14 2017-11-04 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rmd: Add 'skip_final_break: true' toggle * vignettes/Rcpp-attributes.Rmd: Idem * vignettes/Rcpp-extending.Rmd: Idem * vignettes/Rcpp-modules.Rmd: Idem * vignettes/Rcpp-sugar.Rmd: Idem 2017-10-30 Dirk Eddelbuettel * inst/include/Rcpp.h: Unless RCPP_FORCE_OLD_DATE_DATETIME_VECTORS is defined, define RCPP_NEW_DATE_DATETIME_VECTORS to switch to new date and datetime vector as announced in release 0.12.8 one year ago 2017-10-03 Dirk Eddelbuettel * inst/include/Rcpp/iostream/Rstreambuf.h: White-space edits 2017-10-02 Kirill Müller * inst/include/Rcpp/iostream/Rstreambuf.h: Embed buffer class instance in Rostream to not require run-time allocation, and please Coverity 2017-09-29 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * DESCRIPTION (Description): Add per suggestion by CRAN * inst/CITATION: Add PeerJ article, add doi info, reindent 2017-09-26 Daniel C. Dillon * inst/include/Rcpp/vector/MatrixRow.h: Added cbegin() / cend() to MatrixRow, and fixing return types * inst/include/Rcpp/vector/VectorBase.h: Ditto 2017-09-24 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.13 * inst/NEWS.Rd: Release 0.12.13 * inst/bib/Rcpp.bib: Release 0.12.13 * inst/include/Rcpp/config.h: Release 0.12.13 2017-09-23 Dirk Eddelbuettel * inst/bib/Rcpp.bib: Updated references * viignettes/Rcpp.bib: Idem 2017-09-21 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * vignettes/Rcpp-FAQ.Rmd (Rcpp): Add entry for 'symbols not found' error requiring two runs of compileAttributes 2017-09-20 James J Balamuta * vignettes/rcpp-docs.cls: Removed 2017-09-20 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rmd: Modified formatting and cleaned a bit more. * vignettes/Rcpp-sugar.Rmd: Idem * vignettes/Rcpp-introduction.Rmd: Added new PeerJ preprint 2017-09-19 James J Balamuta * vignettes/Rcpp-FAQ.Rmd: Formatted and cleaned up vignette. * vignettes/Rcpp-sugar.Rmd: Idem 2017-09-19 Dirk Eddelbuettel * vignettes/Rcpp-attributes.Rmd: Formatted and cleaned up vignette. * vignettes/Rcpp-extending.Rmd: Idem * vignettes/Rcpp-modules.Rmd: Idem * vignettes/Rcpp-package.Rmd: Idem * vignettes/Rcpp-quickref.Rmd: Idem 2017-09-18 James J Balamuta * DESCRIPTION (Suggests): Added rmarkdown, knitr, and pinp dependencies * .travis.yml: idem * vignettes/Rcpp-quickref.Rmd: Translated vignette from highlight/sweave to RMarkdown for use with the pinp template. * vignettes/Rcpp-sugar.Rmd: Idem * vignettes/Rcpp-package.Rmd: Idem * vignettes/Rcpp-modules.Rmd: Idem * vignettes/Rcpp-FAQ.Rmd: Idem * vignettes/Rcpp-extending.Rmd: Idem * vignettes/Rcpp-attributes.Rmd: Idem 2017-09-18 Daniel C. Dillon * inst/include/Rcpp/vector/MatrixRow.h: Added cbegin() and cend() to the class along with a framework for proper const-correctness in the future. 2017-09-03 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version 2017-09-02 James J Balamuta * inst/include/Rcpp/vector/VectorBase.h: Defined both iterator AND const_iterator for future considerations. Currently, as before, only const_iterator is available (though it used to be called iterator). Added cbegin() and cend() functions. We should revisit whether there should be a non-const iterator on VectorBase in the future. * inst/include/Rcpp/vector/Matrix.h: Added cbegin() and cend() functions. Iterator defintions inherited from Vector are appropriate. * inst/include/Rcpp/vector/MatrixColumn.h: Added cbegin() and cend() functions. Iterator definitions inherited from Vector are appropriate because Matrix is column-major. * inst/include/Rcpp/vector/Vector.h: Added cbegin() and cend() functions. Iterators are appropriate minus the problem with the const proxy class of objects (which may or may not actually be const depending on which one). * inst/include/Rcpp/vector/traits.h: Removed (accidentally) some some trailing whitespace on lines. 2017-09-02 Dirk Eddelbuettel * DESCRIPTION (Version): Roll minor version * vignettes/Rcpp-jss-2011.Rnw: Renamed again from Rcpp-introduction-2011, added reference to new Rcpp-introduction * inst/bib/Rcpp.bib: Merged bibliography from new vignette; also added PeerJ Preprint with new Rcpp Introduction 2017-09-01 Dirk Eddelbuettel * vignettes/Rcpp-introduction.Rnw: New introductory vignette from PeerJ preprints but typeset 'more nicely' * vignettes/rcpp-docs.cls: New LaTeX style file derived from pnas-new and its supporting files * vignettes/figures/: Three support figures for new vignette * vignettes/intro2Rcpp.bib: New bibliography * vignettes/Rcpp-introduction-2011.Rnw: Renamed from from Rcpp-introduction 2017-08-26 Dirk Eddelbuettel * .travis.yml (before_install): Use https for curl fetch 2017-08-14 James J Balamuta * vignettes/Rcpp-FAQ.Rnw: Sunset macOS documentation dealing with toolchains by redirecting to the R Installation and Administration manual * vignettes/.gitignore: Added various LaTeX build artifacts to ignore. 2017-08-05 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version and date * inst/include/Rcpp/XPtr.h: Whitespace only-changes 2017-08-04 Lei Yu * inst/include/Rcpp/Module.h: Correct one closing parenthesis 2017-07-13 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.12 * inst/NEWS.Rd: Release 0.12.12 * inst/bib/Rcpp.bib: Release 0.12.12 * inst/include/Rcpp/config.h: Release 0.12.12 * README.md: Updated counts for dependents and tests * debian/*: Changes for Debian release of 0.12.12 2017-07-10 Jeff Pollock * inst/include/Rcpp/Module.h: Avoid unused variable warning * inst/include/Rcpp/Module_generated_Constructor.h: Ditto 2017-07-09 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Ditto * inst/NEWS.Rd: Added missing entries 2017-07-08 Kirill Müller * inst/include/Rcpp/vector/no_init.h: Accept R_xlen_t instead of int * inst/include/Rcpp/internal/wrap.h: Use R_xlen_t not int in loop unroll * inst/include/Rcpp/macros/unroll.h: Ditto * inst/include/Rcpp/vector/Vector.h: Ditto 2017-07-05 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Ditto 2017-07-02 JJ Allaire * src/attributes.cpp: Generate C++ native routines with underscore prefix to avoid export when standard exportPattern is used in NAMESPACE 2017-06-29 JJ Allaire * src/attributes.cpp: Replace dot (".") with underscore ("_") in package names when generating native routine registrations. 2017-06-27 Jeroen Ooms * inst/include/RcppCommon.h: Support attribute_visible macro 2017-06-17 Kirill Müller * inst/include/Rcpp/Dimension.h: Explicit cast to int * inst/include/Rcpp/exceptions.h: Don't declare unused arguments * src/attributes.cpp: Ditto 2017-06-14 JJ Allaire * src/attributes.cpp: Add Shield around parameters in Rcpp::interfaces 2017-06-07 Dirk Eddelbuettel * README.md: Use alternates for img.shields.io GPL-2+ badges 2017-06-06 Yu Gong * src/api.cpp: Also permit compilation under Haiku-OS 2017-06-04 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * man/Rcpp.plugin.maker.Rd: Update manual page to additional Imports argument 2017-06-02 JJ Allaire * src/attributes.cpp: Automatically register init functions for RcppModules * R/Rcpp.package.skeleton.R: compileAttributes only after all code is generated 2017-06-01 JJ Allaire * src/attributes.cpp: Fix registration for exports with name attribute. 2017-05-30 Dirk Eddelbuettel * inst/include/Rcpp/utils/tinyformat.h: Added missing newline 2017-05-23 JJ Allaire * R/Attributes.R: Execute tools::package_native_routine_registration_skeleton within package rather than current working directory. * src/attributes.cpp: Execute tools::package_native_routine_registration_skeleton within package rather than current working directory. 2017-05-22 Dirk Eddelbuettel * R/inline.R (Rcpp.plugin.maker): Whitespace changes 2017-05-20 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.11 * inst/NEWS.Rd: Release 0.12.11 * inst/bib/Rcpp.bib: Release 0.12.11 * inst/include/Rcpp/config.h: Release 0.12.11 * README.md: Updated counts for dependents and tests * debian/*: Changes for Debian release of 0.12.10 2017-05-19 Dirk Eddelbuettel * inst/NEWS.Rd: Removed one duplicate entry * inst/include/Rcpp/api/meat/Rcpp_eval.h (Rcpp): Minor whitespace changes 2017-05-18 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll Date and Version once more * inst/NEWS.Rd: Updated * R/Attributes.R (.plugins[["openmp"]]): Fix typo in comment * src/attributes.cpp (Rcpp): Use size_t (twice) to suppress nags from g++ 2017-05-16 JJ Allaire * R/Attributes.R: Automatically generate native routine registrations. * src/attributes.cpp: Automatically generate native routine registrations. * R/Rcpp.package.skeleton.R: Don't generate native routines when creating a package using attributes. 2017-05-09 Dirk Eddelbuettel * R/Rcpp.package.skeleton.R (Rcpp.package.skeleton): Under R 3.4.0, run tools::package_native_routine_registration_skeleton to create src/init.c 2017-05-07 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version again * inst/include/Rcpp/module/Module_Property.h: Remove two typed exception specifications which upset g++ 7.1 or higher 2017-05-05 Kirill Müller * inst/include/Rcpp/date_datetime/Date.h: Suppress -Wconversion warnings * inst/include/Rcpp/date_datetime/Datetime.h: Idem * inst/include/Rcpp/date_datetime/newDateVector.h: Idem * inst/include/Rcpp/date_datetime/newDatetimeVector.h: Idem * inst/include/Rcpp/sugar/functions/rowSums.h: Idem * inst/include/Rcpp/sugar/functions/sample.h: Idem * inst/include/Rcpp/sugar/functions/strings/trimws.h: Idem 2017-04-26 Dirk Eddelbuettel * inst/include/Rcpp/exceptions.h (string_to_try_error): Protect result from Rf_mkString 2017-04-25 Dirk Eddelbuettel * R/Attributes.R (.plugins[["cpp11"]]): If R 3.4.0 or newer is used, set USE_CXX11 (instead of the older USE_CXX1X); (.plugins[["cpp14"]]): similarly updated for C++14 (.plugins[["cpp17"]]): similarly updated for C++17 (.plugins[["cpp98"]]): added 2017-04-22 Nathan Russell * inst/include/Rcpp/sugar/functions/strings/trimws.h: Added sugar function trimws with unit tests * inst/include/Rcpp/sugar/functions/strings/strings.h: Idem * inst/unitTests/cpp/sugar.cpp: Idem * inst/unitTests/runit.sugar.R: Idem 2017-04-20 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Idem * inst/include/Rcpp/exceptions/cpp98/exceptions.h (RCPP_ADVANCED_EXCEPTION_CLASS): Suppressing some warnings 2017-04-20 James J Balamuta * inst/include/Rcpp/api/meat/DottedPairImpl.h: Corrected format specifier from '%s' to '%i'. 2017-04-18 James J Balamuta * inst/include/Rcpp/vector/Matrix.h: Corrected exception throws from not_compatible to not_a_matrix. * inst/include/Rcpp/S4.h: Fixed documentation detailing exception class throw. * inst/include/Rcpp/Environment.h: Improved error handling messages * inst/include/Rcpp/Function.h: idem * inst/include/Rcpp/Promise.h: idem * inst/include/Rcpp/String.h: idem * inst/include/Rcpp/Symbol.h: idem * inst/include/Rcpp/XPtr.h: idem * inst/include/Rcpp/as.h: idem * inst/include/Rcpp/r_cast.h: idem * inst/include/Rcpp/api/meat/DottedPairImpl.h: idem * inst/include/Rcpp/internal/export.h: idem * inst/include/Rcpp/proxy/DottedPairProxy.h: idem * inst/include/Rcpp/proxy/SlotProxy.h: idem * inst/include/Rcpp/vector/MatrixColumn.h: idem * inst/include/Rcpp/vector/MatrixRow.h: idem * inst/include/Rcpp/vector/Vector.h: idem 2017-04-17 James J Balamuta * inst/include/Rcpp/Rcpp/exceptions/cpp11/exceptions.h: Removed semicolons from RCPP_ADVANCED_EXCEPTION_CLASS to quiet 'extra ;' -Wpedantic * inst/include/Rcpp/exceptions.h: Modified exceptions macros to support a default string and removed generated stop, warning from file. * inst/include/Rcpp/Rcpp/exceptions/cpp98/exceptions.h: Contains generated RCPP_ADVANCED_EXCEPTION_CLASS macro, stop & warning. * inst/include/Rcpp/Rcpp/exceptions/cpp11/exceptions.h: idem but for variadic versions. * inst/include/Rcpp/utils/tinyformat.h: Enabled ability to use variadic tinyformat function if c++11 is detected. 2017-04-14 James J Balamuta * inst/include/Rcpp/utils/tinyformat.h: Refreshed tinyformat.h against May 13, 2016 upstream, retained local mods. 2017-04-14 Kirill Müller * inst/include/Rcpp/macros/macros.h: Remove unused variable warning in BEGIN_RCPP macro * inst/include/Rcpp/DataFrame.h: Explicitly call parent constructor * inst/include/Rcpp/sugar/functions/rep.h: Remove variable name in function declaration to suppress unused argument warning * src/Rcpp_init.cpp: Ditto * src/attributes.cpp: Ditto 2017-04-11 Dirk Eddelbuettel * inst/inst/unitTests/testRcppClass/src/init.c (R_init_testRcppClass): Call R_registerRoutines() and R_useDynamicSymbols(); also ensure _rcpp_module_boot_* is registered for each module * inst/unitTests/testRcppClass/NAMESPACE: Added registration * inst/unitTests/testRcppClass/DESCRIPTION (Title): Title case * inst/unitTests/testRcppClass/R/rcpp_hello_world.R (rcpp_hello_world): Call the renamed C++ function * inst/unitTests/testRcppClass/src/rcpp_hello_world.cpp (rcpp_hello_world_cpp): Renamed C++ function to be distinct from R function calling it * inst/unitTests/testRcppClass/src/rcpp_hello_world.h: Ditto * inst/unitTests/testRcppClass/man/rcpp_hello_world.Rd: Alias renamed C++ function 2017-04-09 Dirk Eddelbuettel * inst/unitTests/testRcppModule/src/init.c (R_init_testRcppModule): Call R_registerRoutines() and R_useDynamicSymbols(); also ensure _rcpp_module_boot_* is registered for each module * inst/unitTests/testRcppModule/NAMESPACE: Added registration * inst/unitTests/testRcppModule/DESCRIPTION (Title): Title case * inst/unitTests/testRcppModule/R/rcpp_hello_world.R (rcpp_hello_world): Call the renamed C++ function * inst/unitTests/testRcppModule/src/rcpp_hello_world.cpp (rcpp_hello_world_cpp): Renamed C++ function to be distinct from R function calling it * inst/unitTests/testRcppModule/src/rcpp_hello_world.h: Ditto * inst/unitTests/testRcppModule/man/rcpp_hello_world.Rd: Alias renamed C++ function * inst/unitTests/testRcppModule/man/Rcpp_modules_examples.Rd: Alias renamed modules * inst/unitTests/testRcppModule/tests/modules.R: Call renamed module 2017-04-03 Jim Hester * inst/include/Rcpp/exceptions.h: Added support for throwing exceptions without call stacks. * inst/include/Rcpp/macros/macros.h: Idem * inst/unitTests/cpp/exceptions.cpp: Idem * inst/unitTests/runit.exceptions.R: Idem 2017-03-28 James J Balamuta * inst/vignettes/Rcpp-FAQ.Rnw: Added "Known Issues" section to FAQ 2017-03-25 Dirk Eddelbuettel * LICENSE: Added * .Rbuildignore: Do not include LICENSE in package 2017-03-17 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.10 * inst/NEWS.Rd: Release 0.12.10 * inst/bib/Rcpp.bib: Release 0.12.10 * inst/include/Rcpp/config.h: Release 0.12.10 * README.md: Updated counts for dependents and tests * debian/*: Changes for Debian release of 0.12.10 2017-03-15 Jeroen Ooms * inst/include/Rcpp/XPtr.h: added finalizeOnExit parameter 2017-02-28 Dirk Eddelbuettel * src/Rcpp_init.cpp (R_init_Rcpp): Call R_useDynamicSymbols() * DESCRIPTION (Version, Date): New minor version 2017-02-25 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rnw: New subsection on C++11, C++14, C++17 2017-02-17 Dirk Eddelbuettel * R/tools.R: More #nocov * inst/include/Rcpp/internal/r_vector.h: Idem 2017-02-15 Dirk Eddelbuettel * DESCRIPTION (Version, Date): New minor version 2017-02-14 Iñaki Ucar * inst/include/Rcpp/iostream/Rstreambuf.h: Fixed single-character handling (pull request #649, fixes issue #647) 2017-02-13 Dirk Eddelbuettel * R/Attributes.R (.plugins[["cpp17"]]): New plugin (.plugins[["cpp1z"]]): Idem 2017-02-04 Daniel C. Dillon * inst/include/Rcpp/algorithm.h: Improved setup for Intel's icc 2017-01-31 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll minor version * inst/include/Rcpp/algorithm.h: Allow algorithm.h to be compiler under Intel's compiler, add copyright header and include guard 2017-01-31 Nathan Russell * inst/include/Rcpp/sugar/matrix/upper_tri.h: Inherit from MatrixBase and use correct comparators in get() to fix segfault * inst/include/Rcpp/sugar/matrix/lower_tri.h: Idem * inst/unitTests/cpp/sugar.cpp: Added unit tests for upper_tri and lower_tri * inst/unitTests/runit.sugar.R: Idem 2017-01-23 James J Balamuta * inst/include/Rcpp/DataFrame.h: Corrected return type for column size. 2017-01-22 Dirk Eddelbuettel * inst/include/Rcpp/DataFrame.h: Simplified and removed deprecation language. 2017-01-21 James J Balamuta * inst/include/Rcpp/DataFrame.h: Added alias for column and row size * inst/unitTests/runit.DataFrame.R: Added unit tests for aliases * inst/unitTests/cpp/DataFrame.cpp: Idem 2017-01-17 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version and Date * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Roll minor * src/Date.cpp (Rcpp): Do not access tm_gmtoff on Solaris 2017-01-14 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.9 * inst/NEWS.Rd: Release 0.12.9 * inst/bib/Rcpp.bib: Release 0.12.9 * inst/include/Rcpp/config.h: Release 0.12.9 * README.md: Updated counts for dependents and tests * debian/*: Changes for Debian release of 0.12.9 2017-01-13 Dirk Eddelbuettel * inst/include/Rcpp/exceptions.h: Added more #nocov tags * inst/include/Rcpp/api/bones/wrap_extra_steps.h: Idem * inst/include/Rcpp/iostream/Rstreambuf.h: Idem * inst/include/Rcpp/traits/named_object.h: Idem * inst/include/Rcpp/r_cast.h: Idem * src/Module.cpp: Idem 2017-01-12 Dirk Eddelbuettel * inst/bib/Rcpp.bib: Moved from vignettes/ directory * R/bib.R (bib): Idem * vignettes/Rcpp-FAQ.Rnw: Evaluate \Sexpr{Rcpp:::bib()} * vignettes/Rcpp-attributes.Rnw: Idem * vignettes/Rcpp-extending.Rnw: Idem * vignettes/Rcpp-introduction.Rnw: Idem * vignettes/Rcpp-modules.Rnw: Idem * vignettes/Rcpp-packages.Rnw: Idem * vignettes/Rcpp-sugar.Rnw: Idem * inst/unitTests/runit.misc.R (test.bib): New test * R/exceptions.R: Added #nocov 2017-01-11 Dirk Eddelbuettel * vignettes/Rcpp.bib: Updated references * src/attributes.cpp (Rcpp): Correct typos in #nocov tags, added tags 2017-01-07 James J Balamuta * inst/include/Rcpp/sugar/functions/complex.h: Added Arg() function * inst/unitTests/runit.sugar.R: Added Arg() unit test to complex list * inst/unitTests/cpp/sugar.cpp: Idem 2017-01-06 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Mark new minor version * src/attributes.cpp: Additional nocov tags 2017-01-04 Dirk Eddelbuettel * src/Date.cpp (Rcpp): Protect assignment to tm_gmtoff to not being under MinGW; could potentially bite other too-limited systems * inst/unitTests/runit.Date.R (test.Datetime.formating): Do not set TZ when running test, only set digits option 2017-01-01 Dirk Eddelbuettel * inst/unitTests/runit.Date.R (test.mktime, test.gmtime): New tests * inst/unitTests/cpp/dates.cpp (test_mktime, test_gmtime): Idem 2016-12-31 Dirk Eddelbuettel * inst/include/Rcpp/vector/Matrix.h: Minor simplification 2016-12-31 James J Balamuta * inst/include/Rcpp/vector/Matrix.h: Fixed non-symmetric case of matrix fills by switching to a loop based solution from iterator. * inst/unitTests/runit.Matrix.R: Added unit tests for diagonally filling matrices. * inst/unitTests/cpp/Matrix.cpp: Idem 2016-12-30 Dirk Eddelbuettel * src/Date.cpp: Synchronized internal code with R * inst/unitTests/cpp/dates.cpp (gmtime_mktime): New test * inst/unitTests/runit.Date.R (test.mktime_gmtime): Idem 2016-12-26 Dirk Eddelbuettel * R/Attributes.R: Added #nocov markers * R/Module.R: Idem * R/exposeClass.R: Idem, added copyright header 2016-12-25 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll minor version * src/api.cpp: Added #nocov markers * src/Rcpp_init.cpp: Idem * src/Date.cpp: Date 2016-12-14 Nathan Russell * inst/include/Rcpp/sugar/functions/sample.h: Use vector instead of manual memory management. 2016-12-13 Nathan Russell * inst/include/Rcpp/sugar/functions/sample.h: Use malloc.h instead of alloca.h when building on Windows * inst/include/Rcpp/date_datetime/Date.h: Include time.h when building on Windows * inst/include/Rcpp/date_datetime/Datetime.h: Idem 2016-12-12 Dirk Eddelbuettel * inst/include/Rcpp/sugar/functions/sample.h: In case sample.h from the RcppArmadillo extensions was included, skip this file 2016-12-10 Nathan Russell * inst/include/Rcpp/sugar/functions/sample.h: New function sample() * inst/include/Rcpp/sugar/functions/functions.h: Idem * inst/unitTests/cpp/sugar.cpp: Unit tests for sample() * inst/unitTests/runit.sugar.R: Idem 2016-12-10 Dirk Eddelbuettel * R/loadRcppModules.R: Added #nocov tags * R/loadModule.R: Ditto * R/unit.tests.R (test): Adjusted one #nocov tag 2016-12-09 Dirk Eddelbuettel * R/00_classes.R: Added #nocov tags * R/01_show.R: Ditto * R/02_completion.R: Ditto * R/03_prompt.R: Ditto 2016-12-07 Dirk Eddelbuettel * inst/include/Rcpp/vector/Matrix.h: Add 'using ...' to disambiguate size() 2016-12-04 Dirk Eddelbuettel * .codecov.yml (comment): Enable more verbose codecov.io reports 2016-12-03 Dirk Eddelbuettel * inst/unitTests/cpp/dates.cpp (Datetime_format): Additional ostream tests * inst/unitTests/runit.Date.R (test.Date.formating): Ditto * inst/unitTests/runit.system.R (test.RcppCxx): New tests * R/RcppLdpath.R (canUseCXX0X): Simplified as we can now rely on more modern compilers; underlying C++ code has not been present for a while * R/compilerCheck.R (compilerCheck): Added some #nocov tags * R/unit.tests.R (test, gctortureRUnitTest): Ditto * R/zzz.R (.onLoad): Ditto 2016-11-29 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll minor version to 0.12.8.2 2016-11-28 Dirk Eddelbuettel * inst/unitTests/cpp/dates.cpp (Date_format, Datetime_format): New tests * inst/unitTests/runit.Date.R (test.Date.formating): Ditto (test.Datetime.formating): Ditto * inst/unitTests/runit.sugar.R (test.intersect): Added sort() around call to Sugar's intersect to ensure sorted output with g++-6.* 2016-11-27 Dirk Eddelbuettel * inst/include/Rcpp/date_datetime/Date.h (format, operator<<): Added * inst/include/Rcpp/date_datetime/Datetime.h (format, operator<<): Ditto * inst/include/Rcpp/date_datetime/newDateVector.h (operator<<): Ditto * inst/include/Rcpp/date_datetime/newDatetimeVector.h (operator<<): Ditto 2016-11-23 Dirk Eddelbuettel * inst/include/Rcpp/config.h (RCPP_DEV_VERSION): Set minor version 2016-11-22 Dirk Eddelbuettel * DESCRIPTION (Date, Version): Roll minor version * inst/include/Rcpp/date_datetime/newDatetimeVector.h (Rcpp): Small correction concerning timezone attribute to ctor from RTYPE 2016-11-22 Jim Hester * inst/src/api.cpp: Cleanup to stack message parseing * inst/unitTests/cpp/exceptions.cpp: Unit tests for cleanup * inst/unitTests/runit.exceptions.R: Ditto 2016-11-19 James J Balamuta * inst/unitTests/runit.environments.R: Added environment find unit tests as well as a symbol access test for environment get. * inst/unitTests/cpp/Environment.cpp: Idem 2016-11-18 James J Balamuta * vignettes/Rcpp-extending: Switched to attributes and added external class pointer macro notes by MathurinD 2016-11-16 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.8 * inst/NEWS.Rd: Release 0.12.8 * vignettes/Rcpp.bib: Release 0.12.8 * inst/include/Rcpp/config.h: Release 0.12.8 * README.md: Updated counts for dependents and tests * debian/*: Changes for Debian release of 0.12.8 2016-11-15 Dirk Eddelbuettel * DESCRIPTION: Nathan Russell added to Authors 2016-11-14 Jim Hester * inst/include/Rcpp/exceptions.h: Improved exception call stack * inst/include/Rcpp/routines.h: Ditto * inst/src/api.cpp: Ditto * R/exections.R: Print and format method for stack straces * inst/unitTests/runit.exceptions.R: Unit tests * inst/unitTests/cpp/exceptions.cpp: Ditto 2016-11-13 Dirk Eddelbuettel * R/Attributes.R (mergeIntoBuildEnv): Correct 'empty' return 2016-11-10 Dirk Eddelbuettel * inst/include/Rcpp/date_datetime/newDateVector.h: Added constructor using VectorBase<> 2016-11-05 Daniel C. Dillon * inst/include/Rcpp/date_datetime/newDatetimeVector.h: Added constructor to instantiate newDatetimeVector from VectorBase. 2016-11-04 Nathan Russell * inst/include/Rcpp/macros/dispatch.h: Modify variadic macros to not use GNU extensions * DESCRIPTION: roll minor version 2016-11-03 Nathan Russell * inst/include/Rcpp/hash/IndexHash.h: Add casts to eliminate signed / unsigned comparison warning * inst/include/Rcpp/hash/SelfHash.h: Idem * inst/unitTests/cpp/sugar.cpp: Added unit tests for sugar function unique() * inst/unitTests/runit.sugar.R: Idem 2016-10-30 Dirk Eddelbuettel * src/api.cpp: New capabilities field for new date(time) vectors * inst/unitTests/runit.Date.R (test.DatetimeVector.ctor): Differentiate in test as case of 'Inf' is handling differently by new and old datetime classes (and passed through as is by new ones which is better) * inst/unitTests/runit.InternalFunctionCPP11.R: Small cosmetic edit 2016-10-24 Qiang Kou * inst/include/Rcpp/sugar/Range.h : fix range sugar ambiguity * inst/unitTests/cpp/sugar.cpp: range sugar unit test * inst/unitTests/runit.sugar.R: range sugar unit test 2016-10-24 Nathan Russell * inst/include/Rcpp/vector/MatrixBase.h: Change sugar functions eye(), ones(), and zeros() into static methods in MatrixBase * inst/include/Rcpp/traits/one_type.h: Idem * inst/include/Rcpp/traits/traits.h: Idem * inst/unitTests/cpp/Matrix.cpp: Idem * inst/unitTests/runit.Matrix.R: Idem 2016-10-24 Qiang Kou * inst/include/Rcpp/sugar/Range.h: Range sugar uses R_xlen_t as start/end type 2016-10-23 Nathan Russell * inst/include/Rcpp/sugar/matrix/eye.h: New functions eye(), ones(), and zeros() * inst/include/Rcpp/sugar/matrix/matrix_functions.h: Idem * inst/unitTests/cpp/sugar.cpp: Unit tests for new functions * inst/unitTests/runit.sugar.R: Idem * inst/unitTests/runit.dispatch.R (test.ExpressionVector): Use expression rather than parse, correct typo 2016-10-22 Qiang Kou * inst/include/Rcpp/hash/IndexHash.h: change hashing function to return unsigned int * inst/include/Rcpp/hash/SelfHash.h: Ditto 2016-10-21 Qiang Kou * inst/include/Rcpp/barrier.h: Change string_elt/vector_elt to accept R_xlen_t * inst/include/Rcpp/routines.h: Ditto * src/barrier.cpp: Ditto 2016-10-19 Dirk Eddelbuettel * inst/include/Rcpp/date_datetime/Datetime.h (Rcpp): Additional operator+ for int argument 2016-10-18 Dirk Eddelbuettel * inst/include/Rcpp/date_datetime/Date.h (Rcpp): Add operator double() * inst/include/Rcpp/date_datetime/Datetime.h (Rcpp): Ditto 2016-10-17 Dirk Eddelbuettel * inst/include/Rcpp/date_datetime/newDatetimeVector.h (Rcpp): Allow setting of timezone attribute; default not-set leads to local as in R 2016-10-16 Dirk Eddelbuettel * inst/include/Rcpp.h (RCPP_NEW_DATE_DATETIME_VECTORS): Add a new compile-time #define to switch between 'old' (existing) and 'new' DateVector and DatimeVector classes. Currently uses 'new' for testing plan to switch to proper deprecation schedule. * inst/include/Rcpp/date_datetime/date_datetime.h: New header file (and directory) regrouping all Date and Datetime headers, scalar and vector * inst/include/Rcpp/date_datetime/Date.h: Moved one directory down * inst/include/Rcpp/date_datetime/Datetime.h: Ditto * inst/include/Rcpp/date_datetime/oldDateVector.h: Moved and renamed * inst/include/Rcpp/date_datetime/oldDatetimeVector.h: Ditto * inst/include/Rcpp/date_datetime/newDateVector.h: New implementation inheriting from NumericVector, still optional * inst/include/Rcpp/date_datetime/newDatetimeVector.h: Ditto 2016-09-05 Dirk Eddelbuettel * DESCRIPTION (Version): Roll minor version * cleanup: Clean two more file type from vignettes/ 2016-09-04 Nathan Russell * inst/include/Rcpp/sugar/functions/rowSums.h: New functions rowSums(), colSums(), rowMeans(), and colMeans() * inst/include/Rcpp/sugar/functions/functions.h: Idem * inst/unitTests/cpp/sugar.cpp: Unit tests for new functions * inst/unitTests/runit.sugar.R: Idem 2016-09-04 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.7 * inst/NEWS.Rd: Release 0.12.7 * vignettes/Rcpp.bib: Release 0.12.7 * inst/include/Rcpp/config.h: Release 0.12.7 * README.md: Updated counts for dependents and tests * debian/*: Changes for Debian release of 0.12.7 2016-09-02 Simon Dirmeier * src/attributes.cpp: Remove leading underscore in header guard 2016-08-14 James J Balamuta * inst/examples/FastLM/lmGSL.R: Updated example to use new GSL templates 2016-08-11 Dirk Eddelbuettel * .travis.yml: Switch to using run.sh for Travis CI 2016-08-09 Artem Klevtsov * inst/include/Rcpp/macros/dispatch.h: Add variadic conditional macro when C++11 compiler used * ints/include/unitTests/cpp/dispatch.cpp: Add unit tests for RCPP_RETURN_VECTOR and RCPP_RETURN_MATRIX macro * ints/include/unitTests/runit.dispatch.R: Idem 2016-08-05 James J Balamuta * inst/examples/FastLM/fastLMviaArmadillo.r: format fix * inst/examples/FastLM/lmGSL.R: Updated example to use Rcpp attributes instead of cxxfunction * inst/examples/FastLM/lmArmadillo.R: Idem * inst/examples/functionCallback/newApiExample.r: Idem * inst/examples/RcppInline/RcppInlineExample.r: Idem * inst/examples/RcppInline/RcppInlineWithLibsExamples.r: Idem * inst/examples/RcppInline/UncaughtExceptions.r: Idem * inst/examples/RcppInline/external_pointer.r: Idem 2016-08-04 James J Balamuta * src/attributes.cpp: Correct variable re-declaration * inst/examples/RcppGibbs/RcppGibbs.R: Updated example to use Rcpp attributes instead of cxxfunction * inst/examples/RcppGibbs/timeRNGs.R: Idem 2016-08-03 Dirk Eddelbuettel * .gitattributes: Added to have ChangeLog and NEWS.Rd merge via union 2016-08-02 James J Balamuta * R/Rcpp.package.skeleton.R: Added autogeneration warning * src/attributes.cpp: Fixed invalid C++ Identifiers and modified export header to warn against hand edits * vignettes/Rcpp-package.Rnw: Updated code generation snippets * man/Rcpp.package.skeleton.Rd: Add warning on hand edits to the autogenerated RcppExports files. * man/compileAttributes.Rd: Idem 2016-08-02 Qiang Kou * inst/include/Rcpp/String.h: CE_UTF8 as default encoding * inst/unitTests/cpp/String.cpp: Update unit test * inst/unitTests/runit.String.R: Idem 2016-08-01 Nathan Russell * inst/include/Rcpp/vector/Vector.h: Added decreasing option for Vector sort * inst/include/Rcpp/internal/NAComparator.h: Idem * inst/unitTests/cpp/Vector.cpp: Idem * inst/unitTests/runit.Vector.R: Idem 2016-07-31 Qiang Kou * inst/examples/SugarPerformance/sugarBenchmarks.R: Remove usage of Rf_eval * inst/include/Rcpp/Environment.h: Idem * inst/include/Rcpp/Module.h: Idem * inst/include/Rcpp/exceptions.h: Idem * inst/include/Rcpp/proxy/FieldProxy.h: Idem * inst/include/Rcpp/r_cast.h: Idem * inst/unitTests/cpp/language.cpp: Idem * src/barrier.cpp: Idem 2016-07-24 Dirk Eddelbuettel * inst/unitTests/cpp/rmath.cpp: Added RNG unit tests for sugar variants * inst/unitTests/runit.rmath.R: Idem 2016-07-22 James J Balamuta * inst/unitTests/cpp/rmath.cpp: Added unit tests for Rmath RNGs * inst/unitTests/runit.rmath.R: idem * inst/include/Rcpp/Environment.h: Added get() & find() that accept a symbol * inst/include/Rcpp.h: Modified header load order so that Symbol.h is now placed before Environment.h 2016-07-21 Dirk Eddelbuettel * DESCRIPTION (Version): Roll minor release 2016-07-18 Kevin Ushey * inst/include/Rcpp/r/headers.h: Ensure NORET macro is set appropriately 2016-07-18 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.6 * inst/NEWS.Rd: Release 0.12.6 * vignettes/Rcpp.bib: Release 0.12.6, RProtoBuf updates * inst/include/Rcpp/config.h: Release 0.12.6 * README.md: Updated counts for dependents and tests * debian/*: Changes for Debian release of 0.12.5 2016-07-17 James J Balamuta * vignettes/Rcpp-quickref.Rnw: Added sections on Rcpp attributes and plugins. Facelifts on important notes, inline, environments, and calling R functions. 2016-07-16 Daniel C. Dillon * Added a const_interator typedef to VectorBase 2016-07-15 James J Balamuta * vignettes/Rcpp-FAQ.Rnw: Added section on default function parameters 2016-07-15 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rnw: Also point to Rcpp-attributes in Question 1 2016-07-13 Dirk Eddelbuettel * NAMESPACE: Add import for glob2rx to please R CMD check * man/cppFunction.Rd: line break below 90 columns to please R CMD check 2016-07-11 J.J. Allaire * R/Attributes.R Add cacheDir argument to sourceCpp to enable caching of shared libraries across R sessions * src/attributes.cpp Add cacheDir argument to sourceCpp to enable caching of shared libraries across R sessions * man/sourceCpp.Rd: Document new cacheDir option * man/cppFunction.Rd: Idem * man/evalFunction.Rd: Idem 2016-07-10 Nathan Russell * inst/include/Rcpp/algorithm.h: Accomodate clang compiler 2016-07-03 Dirk Eddelbuettel * DESCRIPTION (Version): Rolling minor version 2016-07-02 Qiang Kou * src/attributes.cpp: Replace '.' in package names 2016-06-23 Dirk Eddelbuettel * DESCRIPTION (Version): Rolling minor version * inst/include/Rcpp/exceptions.h (Rcpp): Also expose Rf_warningcall() within Rcpp namespace (without leading Rf_) 2016-06-20 Qin Wenfeng * inst/include/Rcpp/exceptions.h: add RCPP_USING_UTF8_ERROR_STRING macro to use UTF-8 encoding exception string in R 2016-06-14 Artem Klevtsov * inst/include/Rcpp/sugar/functions/na_omit.h: Improve na_omit for vectors without NA * inst/unitTests/cpp/sugar.cpp: Add unit test for the na_omit * inst/unitTests/runit.sugar.R: Ditto 2016-06-02 Kirill Müller * inst/include/Rcpp/algorithm.h: Use "long long" only if available * inst/include/Rcpp/exceptions.h: Annotate stop() with NORET 2016-05-18 Daniel C. Dillon * inst/include/Rcpp/algorithm.h: New approach for sugar * inst/unitTests/cpp/algorithm.cpp: Unit test support * inst/unitTests/runit.algorithm.R: Ditto 2016-05-17 Dirk Eddelbuettel * DESCRIPTION (Version): Rolling minor version 2016-05-16 Qiang Kou * inst/include/Rcpp/String.h: Correct string replacement * inst/unitTests/runit.String.R: Unit test 2016-05-16 Daniel C. Dillon * inst/include/Rcpp/sugar/functions/max.h: Fixing constness * inst/include/Rcpp/sugar/functions/min.h: Ditto 2016-05-15 Daniel C. Dillon * inst/include/Rcpp/vector/Matrix.h: Correcting ambiguities in Vector/Matrix and scalar operations * inst/include/Rcpp/sugar/operators/divides.h: Ditto * inst/include/Rcpp/sugar/operators/minus.h: Ditto * inst/include/Rcpp/sugar/operators/plus.h: Ditto * inst/include/Rcpp/sugar/operators/times.h: Ditto 2016-05-14 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.5 * inst/NEWS.Rd: Release 0.12.5 * vignettes/Rcpp.bib: Release 0.12.5 * inst/include/Rcpp/config.h: Release 0.12.5 * debian/*: Changes for Debian release of 0.12.5 * vignettes/Rcpp.bib: Updated references 2016-05-13 Dirk Eddelbuettel * DESCRIPTION: Rolled minor version * R/compilerCheck.R: Minimal R function to check g++ version sufficiency * man/compilerCheck.Rd: Documentation 2016-05-11 Dirk Eddelbuettel * R/Rcpp.package.skeleton.R: Modified to create a package without notes, warnings, or error even pkgKitten is not available * R/Rcpp.package.skeleton.R (.playWithPerPackageHelpPage): Added new helper function to be used when pkgKitten is not available * inst/skeleton/manual-page-stub.Rd: Stub for per-package help page used when pkgKitten is not available 2016-05-10 Dirk Eddelbuettel * R/Rcpp.package.skeleton.R: Also correct Title: and Description: to satisfy R CMD check in R-release and (current) R-devel 2016-05-08 Dirk Eddelbuettel * inst/unitTests/cpp/Matrix.cpp: Made four scalar/matrix tests less ambiguous for overloads by using double as scalar 2016-05-06 Dirk Eddelbuettel * R/loadRcppModules.R (loadRcppModules): Add call to .Deprecated pointing out that loadModule is preferred * man/Rcpp-deprecated.Rd: Added to list deprecated functions * man/loadRcppModules-deprecated.Rd: Renamed to -deprecated, added link to loadModule which is the preferred method * vignettes/Rcpp-modules.Rnw: Updated with respect to loadRcppModules deprecation and loadModule being preferred 2016-04-15 Kevin Ushey * src/attributes.cpp: Add a missing 'winslash = "/"' 2016-04-14 J.J. Allaire * src/attributes.cpp: Correct handling of dependent file paths on Windows (use winslash = "/") 2016-04-13 Dirk Eddelbuettel * DESCRIPTION (Version): Rolling minor version and Date 2016-04-11 Ben Goodrich * R/Module.R: Avoid calling as.character() on C++Object to prevent race 2016-04-02 Dirk Eddelbuettel * DESCRIPTION: Rolled to minor version 0.12.4.3 * inst/include/Rcpp/config.h: Ditto * ChangeLog: Added entries for PRs 453 and 454 * inst/NEWS.Rd: Add two missing \item uses * R/Module.R: Rename copy to copyObject to avoid function name collisions * inst/unitTests/runit.Module.R: Ditto * man/copyObject.Rd: Ditto * inst/NEWS.Rd: Ditto * NAMESPACE: Ditto * inst/unitTests/runit.environments.R: Skip test.environment.child test 2016-03-31 Romain Francois * R/Modules.R: New top-level functions copy, destruct and is_destructed * NAMESPACE: New functions copy, destruct and is_destructed exported * man/copy.Rd: New manual page * man/destruct.Rd: Ditto * inst/include/Rcpp/module/class.h: Add copy constructortor + destructor * inst/include/Rcpp/module/class_Base.h: Ditto * src/Module.cpp: Ditto * src/Rcpp_init.cpp: Ditto * src/internal.h: Ditto * inst/include/Rcpp/traits/traits.h: New trait detecting copy contructor * inst/include/Rcpp/traits/has_copy_constructor.h: Ditto * inst/unitTests/runit.Module.R: Test new copy constructor and destructor * inst/unitTests/cpp/Module.cpp: Ditto 2016-03-29 Daniel C. Dillon * inst/include/Rcpp/String.h: Correct Rcpp::String for Rcpp::Nullable 2016-03-27 Qin Wenfeng * R/Attributes.R: Support new R 3.3.0 Windows toolchain 2016-03-26 Dirk Eddelbuettel * DESCRIPTION: Rolled Date and minor Version 2016-03-23 Sergio Marques * src/api.cpp: Also check a flag __MUSL__ to accomodate Alpine 2016-03-22 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.4 * inst/NEWS.Rd: Release 0.12.4 * vignettes/Rcpp.bib: Release 0.12.4 * inst/include/Rcpp/config.h: Release 0.12.4 * debian/*: Changes for Debian release of 0.12.4 2016-03-19 Dirk Eddelbuettel * README.md: Use canonical CRAN URL to please R-devel CMD check 2016-03-12 Nathan Russell * inst/include/Rcpp/sugar/functions/cbind.h: Undefine MakeBindable macro after use 2016-03-12 Nathan Russell * inst/include/Rcpp/sugar/functions/cbind.h: New cbind() function * inst/include/Rcpp/sugar/functions/functions.h: Idem * inst/unitTests/cpp/sugar.cpp: Unit tests for cbind() * inst/unitTests/runit.sugar.R: Idem 2016-03-09 Colin Gillespie * vignettes/Rcpp-sugar.Rnw: Correct typos and indentation 2016-03-09 Dirk Eddelbuettel * inst/include/Rcpp/stats/random/rlogis.h: Updated Emacs header and copyright, aligned indentation * inst/include/Rcpp/stats/random/rnbinom.h: Idem * inst/include/Rcpp/stats/random/rnbinom_mu.h: Idem * inst/include/Rcpp/stats/random/rnchisq.h: Idem * inst/include/Rcpp/stats/random/rnorm.h: Idem * inst/include/Rcpp/stats/random/rt.h: Idem * inst/include/Rcpp/stats/random/runif.h: Idem * inst/include/Rcpp/stats/random/rweibull.h: Idem * inst/include/Rcpp/stats/random/random.h: Idem * inst/include/Rcpp/stats/random/rcauchy.h: Idem * inst/include/Rcpp/stats/random/rchisq.h: Idem * inst/include/Rcpp/stats/random/rexp.h: Idem * inst/include/Rcpp/stats/random/rf.h: Idem * inst/include/Rcpp/stats/random/rgeom.h: Idem * inst/include/Rcpp/stats/random/rlnorm.h: Idem * inst/include/Rcpp/stats/random/rbeta.h: Idem * inst/include/Rcpp/stats/random/rbinom.h: Idem * inst/include/Rcpp/stats/random/rgamma.h: Idem * inst/include/Rcpp/stats/random/rhyper.h: Idem * inst/include/Rcpp/stats/random/rpois.h: Idem * inst/include/Rcpp/stats/random/rsignrank.h: Idem * inst/include/Rcpp/stats/random/rwilcox.h: Idem 2016-03-07 Dirk Eddelbuettel * inst/include/Rcpp/stats/beta.h: Updated Emacs header and copyright * inst/include/Rcpp/stats/binom.h: Idem * inst/include/Rcpp/stats/cauchy.h: Idem * inst/include/Rcpp/stats/chisq.h: Idem * inst/include/Rcpp/stats/f.h: Idem * inst/include/Rcpp/stats/gamma.h: Idem * inst/include/Rcpp/stats/geom.h: Idem * inst/include/Rcpp/stats/hyper.h: Idem * inst/include/Rcpp/stats/nbeta.h: Idem * inst/include/Rcpp/stats/nbinom.h: Idem * inst/include/Rcpp/stats/nbinom_mu.h: Idem * inst/include/Rcpp/stats/nchisq.h: Idem * inst/include/Rcpp/stats/nf.h: Idem * inst/include/Rcpp/stats/nt.h: Idem * inst/include/Rcpp/stats/pois.h: Idem * inst/include/Rcpp/stats/stats.h: Idem * inst/include/Rcpp/stats/t.h: Idem * inst/include/Rcpp/stats/unif.h: Idem * inst/include/Rcpp/stats/dpq/dpq.h: Idem 2016-03-05 Dirk Eddelbuettel * inst/include/Rcpp/stats/exp.h: Replaced initial Emacs header line with current one, ran M-x untabify, streamlined indentation, update copyright * inst/include/Rcpp/stats/lnorm.h: Idem * inst/include/Rcpp/stats/logis.h: Idem * inst/include/Rcpp/stats/norm.h: Idem * inst/include/Rcpp/stats/weibull.h: Idem 2016-03-04 Dirk Eddelbuettel * inst/unitTests/runit.Function.R: Switched to '/usr/bin/env r' * inst/unitTests/runit.table.R: Idem * inst/unitTests/runit.as.R: Idem * inst/unitTests/runit.Date.R: Idem * inst/unitTests/runit.misc.R: Idem * inst/unitTests/runit.Language.R: Idem * inst/unitTests/runit.subset.R: Idem * inst/unitTests/runit.wrap.R: Idem * inst/unitTests/runit.sugar.R: Idem * inst/unitTests/runit.na.R: Idem * inst/unitTests/runit.String.R: Idem * inst/unitTests/runit.Vector.R: Idem * inst/unitTests/runit.environments.R: Idem * inst/unitTests/runit.Reference.R: Idem * inst/unitTests/runit.Matrix.R: Idem * inst/unitTests/runit.client.package.R: Idem * inst/unitTests/runit.binary.package.R: Idem * inst/unitTests/runit.support.R: Idem * inst/unitTests/runit.S4.R: Idem * inst/unitTests/runit.RObject.R: Idem * inst/unitTests/runit.modref.R: Idem * inst/unitTests/runit.InternalFunctionCPP11.R: Idem * inst/unitTests/runit.attributes.R: Idem * inst/unitTests/runit.sugar.var.R: Idem * inst/unitTests/runit.Module.R: Idem * inst/unitTests/runit.XPTr.R: Idem * inst/unitTests/runit.Module.client.package.R: Idem * inst/unitTests/runit.stats.R: Idem * inst/unitTests/runit.rmath.R: Idem * inst/unitTests/runit.DataFrame.R: Idem * inst/unitTests/runit.wstring.R: Idem * inst/unitTests/runit.InternalFunction.R: Idem 2016-03-03 Dirk Eddelbuettel * inst/examples/FastLM/benchmarkLongley.r: Switched to '/usr/bin/env r' * inst/examples/FastLM/fastLMviaArmadillo.r: Idem * inst/examples/FastLM/fastLMviaGSL.r: Idem * inst/examples/FastLM/lmArmadillo.R: Idem * inst/examples/FastLM/lmGSL.R: Idem * inst/examples/FastLM/benchmark.r: Idem * inst/examples/ConvolveBenchmarks/exampleRCode.r: Idem 2016-02-27 Dirk Eddelbuettel * inst/examples/RcppInline/RcppInlineWithLibsExamples.r: Switched to using '/usr/bin/env r', switch to using 'cxxfunction' and RcppGSL plugin * inst/examples/RcppInline/external_pointer.r: Switched to '/usr/bin/env r' * inst/examples/RcppInline/RcppInlineExample.r: Idem * inst/examples/ConvolveBenchmarks/overhead.r: Idem * inst/include/Rcpp/Fast.h (Rcpp): Undo two const declarations 2016-02-23 Dirk Eddelbuettel * inst/examples/OpenMP/OpenMPandInline.r: Switched to '/usr/bin/env r' * inst/examples/RcppInline/RcppSimpleExample.r: Idem * inst/examples/RcppInline/RObject.r: Idem * inst/examples/RcppInline/UncaughtExceptions.r: Idem 2016-02-21 Dirk Eddelbuettel * inst/examples/functionCallback/newApiExample.r (vecfunc): Switched to using '/usr/bin/env r', switch to using 'cxxfunction' * inst/examples/Misc/fibonacci.r: Switched to using '/usr/bin/env r', added explicit load of Rcpp package * inst/examples/Misc/newFib.r: Switched to using '/usr/bin/env r' * inst/examples/Misc/ifelseLooped.r: Idem * inst/examples/Misc/piBySimulation.r: Idem * inst/examples/SugarPerformance/sugarBenchmarks.r: Idem 2016-02-16 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rnw: Added answer on fixed-size limit of arguments 2016-02-07 Dirk Eddelbuettel * R/Attributes.R (sourceCppFunction): Use fully matched seq(along.with=...) * vignettes/Rcpp-FAQ.Rnw: Added a table of contents 2016-02-06 James J Balamuta * vignettes/Rcpp-FAQ.Rnw (Rcpp): Additional material, and corrections, for use on OS X 2016-01-30 Qiang Kou * inst/include/Rcpp/vector/Subsetter.h: Fix the error under gc * inst/unitTests/cpp/Vector.cpp : Add tests * inst/unitTests/runit.Vector.R : Idem 2016-01-29 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rnw (Rcpp): Add new entry about required TeXlive installation to build vignettes (issue #422) 2016-01-22 Dirk Eddelbuettel * DESCRIPTION (Version): Mark as 0.12.3.1 2016-01-22 Daniel C. Dillon * R/Attributes.R: Add plugin for cpp14 2016-01-18 Daniel C. Dillon * inst/include/Rcpp/Nullable.h: Add isUsable() * inst/unitTests/cpp/misc.cpp: Add tests * inst/unitTests/runit.misc.R: Idem 2016-01-17 Nathan Russell * inst/include/Rcpp/sugar/functions/median.h: New function * inst/unitTests/cpp/sugar.cpp: Add tests * inst/unitTests/runit.sugar.R: Idem 2016-01-17 Daniel C. Dillon * inst/include/Rcpp/Nullable.h: Add as() and clone() * inst/unitTests/cpp/misc.cpp: Add tests * inst/unitTests/runit.misc.R: Idem 2016-01-13 Kirill Mueller * inst/include/Rcpp/Nullable.h: Added const support * inst/unitTests/cpp/misc.cpp: Added tests for const support 2016-01-10 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.3 * inst/NEWS.Rd: Release 0.12.3 * vignettes/Rcpp.bib: Release 0.12.3 * inst/include/Rcpp/config.h: Release 0.12.3 * debian/*: Changes for Debian release of 0.12.3 * vignettes/Rcpp.bib: Updated all CRAN reference to current versions 2016-01-09 Dirk Eddelbuettel * Contributing.md: Added to GitHub repo * .Rbuildignore: Ensure Contributing.md is not in R package, also removed two old entries 2015-12-29 Joshua Pritikin * inst/include/Rcpp/Module.h: Initialize base class in copy ctor * inst/include/Rcpp/macros/interface.h: Idem 2015-12-12 Qiang Kou * inst/include/Rcpp/String.h: std::hash * inst/unitTests/cpp/wrap.cpp: Unit tests * inst/unitTests/runit.wrap.R: Unit tests 2015-12-04 Qiang Kou * inst/include/Rcpp/vector/Matrix.h: Add math operators between matrix and scalar * inst/unitTests/runit.Matrix.R: Unit tests * inst/unitTests/cpp/Matrix.cpp: Unit tests 2015-11-27 Daniel C. Dillon * inst/include/Rcpp/vector/proxy.h: const_iterators for CharacterVector now work analogously to iterators * inst/include/Rcpp/vector/const_generic_proxy.h: Idem * inst/include/Rcpp/vector/const_string_proxy.h: Idem * inst/include/Rcpp/vector/traits.h: Idem * inst/unitTests/cpp/Vector.cpp: Tests for above * inst/unitTests/runit.Vector.R: Idem [ All this was commited on Sep 5 but only merged Nov 27 ] 2015-11-25 JJ Allaire * src/attributes.cpp: Avoid invalid function names when generating C++ interfaces. 2015-11-15 Kazuki Fukui > * src/attributes.cpp: Insert extra space around & in interface 2015-11-14 Dirk Eddelbuettel * .travis.yml: Add token for secure Slack & Travis integration 2015-11-14 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.2 * inst/NEWS.Rd: Release 0.12.2 * vignettes/Rcpp.bib: Release 0.12.2 * inst/include/Rcpp/config.h: Release 0.12.2 * debian/*: Changes for Debian release of 0.12.2 * vignettes/Rcpp.bib: Updated all CRAN reference to current versions 2015-11-13 Dirk Eddelbuettel * inst/include/Rcpp/complex.h: Define a header guard for dplyr to prevent errorneous redefinition of operator<<() via dplyr 2015-11-11 Dirk Eddelbuettel * inst/include/Rcpp/vector/Matrix.h: Further simplification 2015-11-11 Qiang Kou * include/Rcpp/complex.h: operator<< for Rcomplex 2015-11-10 Dirk Eddelbuettel * inst/include/Rcpp/vector/Matrix.h: Added transpose for character matrices as well * inst/unitTests/runit.Matrix.R: New unit tests * inst/unitTests/cpp/Matrix.cpp: Ditto 2015-11-08 Dirk Eddelbuettel * inst/include/Rcpp/vector/Matrix.h: Matrix transpose is now a free function for both INTSXP and REALSXP * inst/unitTests/runit.Matrix.R: New unit tests * inst/unitTests/cpp/Matrix.cpp: Ditto 2015-11-08 Daniel C. Dillon * inst/include/Rcpp/Nullable.h: No longer prevent assignment of R_NilValue to Nullable<> in function signatures * inst/include/Rcpp/vector/Matrix.h: Use showpoint in operator<<() 2015-11-07 Dirk Eddelbuettel * inst/include/Rcpp/vector/Matrix.h: Beginnings of a Matrix transpose 2015-11-06 Kevin Ushey * inst/include/Rcpp/vector/Subsetter.h: Add sugar math operators * inst/unitTests/runit.subset.R: Unit tests * inst/unitTests/cpp/Subset.cpp: Unit tests * inst/NEWS.Rd: NEWS entry 2015-11-01 Qiang Kou * inst/include/Rcpp/vector/MatrixColumn.h: Fix overflow 2015-11-01 Dirk Eddelbuettel * DESCRIPTION: Roll Version: to 0.12.1.4 2015-10-30 Nathan Russell * inst/include/Rcpp/sugar/functions/cummax.h: New sugar function * inst/include/Rcpp/sugar/functions/cummin.h: New sugar function * inst/include/Rcpp/sugar/functions/cumprod.h: New sugar function * inst/unitTests/cpp/sugar.cpp: Unit test support for new functions * inst/unitTests/runit.sugar.R: Ditto 2015-10-08 Tianqi Chen * inst/include/Rcpp/api/meat/is.h: Enhance the check for Rcpp Module objects (PR #381 fixing #380) 2015-10-01 JJ Allaire * src/attributes.cpp: Enable export of C++ interface for functions that return void 2015-09-28 Dirk Eddelbuettel * inst/NEWS.Rd: GitHub pull requests and issues are now linked * src/barrier.cpp: Use SET_STRING_ELT() on LHS (with thanks to Luke) 2015-09-21 Dirk Eddelbuettel * inst/include/Rcpp/String.h: Before assigning ensure we received exactly one string argument 2015-09-10 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.1 * inst/NEWS.Rd: Release 0.12.1 * vignettes/Rcpp.bib: Release 0.12.1 * inst/include/Rcpp/config.h: Release 0.12.1 * debian/*: Changes for Debian release of 0.12.1 2015-09-09 Dirk Eddelbuettel * vignettes/Rcpp-attributes.Rnw: Less harsh grey border around code * vignettes/Rcpp-*.Rnw: Ditto * inst/include/Rcpp/String.h: More comparison operators 2015-09-08 Daniel C. Dillon * inst/include/Rcpp/vector/string_proxy.h: More comparison operators * inst/include/Rcpp/vector/const_string_proxy.h: More comparison operators 2015-09-08 Florian Plaza Onate * inst/include/Rcpp/Dimension.h: Correct creation and access of large matrices * inst/include/Rcpp/vector/Matrix.h: Ditto 2015-09-07 Dirk Eddelbuettel * inst/include/Rcpp/Nullable.h: New class for objects which may be NULL * inst/unitTests/cpp/Vector.cpp: Unit tests for Nullable * inst/unitTests/runit.Vector.R: Ditto 2015-09-06 Daniel C. Dillon * inst/include/Rcpp/String.h: Make strings and string_proxies comparable * inst/unitTests/cpp/String.cpp: Unit tests for above * inst/unitTests/runit.String.R: Ditto 2015-09-05 Daniel C. Dillon * inst/include/Rcpp/vector/Matrix.h: Matrix now has appropriate operator<< * inst/include/Rcpp/vector/Vector.h: Vector now has appropriate operator<< * inst/unitTests/cpp/Vector.cpp: Unit tests for above 2015-09-01 Florian Plaza Onate * inst/include/Rcpp/vector/Subsetter.h: Allow logical subsets to be assigned to a vector of size 1 (pull request #349, discussed in issue #345) * inst/unitTests/cpp/Subset.cpp: Add unit test for above * inst/unitTests/runit.subset.R: Ditto 2015-08-31 Dirk Eddelbuettel * DESCRIPTION (Version, Date): Roll Version and Date 2015-08-30 Dirk Eddelbuettel * vignettes/Rcpp.bib: Updated RcppGSL entry 2015-08-29 Dirk Eddelbuettel * vignettes/Rcpp.bib: Add RcppZiggurat entry * inst/include/Rcpp/utils/tinyformat.h: Updated to current upstream version keeping our local modifications / adaptations (PR #357) 2015-08-29 Qiang Kou * inst/include/Rcpp/vector/Subsetter.h: Enable logical subsetting on both LHS and RHS, eg 'a[b > 3] = b[b > 3]' (pull request #352 addressing issue #345) * inst/unitTests/cpp/Subset.cpp: Ditto * inst/unitTests/runit.subset.R: Unit tests for above 2015-08-26 Dirk Eddelbuettel * inst/unitTests/testRcppClass/src/rcpp_module.cpp: Renamed Module 'World' to 'RcppClassWorld' to avoid multiple modules with same name (pull request #351, fixed issue #350) * inst/unitTests/testRcppClass/man/Rcpp_class_examples.Rd: Ditto * inst/unitTests/testRcppClass/R/load.R: Ditto * inst/unitTests/testRcppClass/NAMESPACE: Ditto * inst/unitTests/runit.Module.client.package.R: Re-enable test * inst/unitTests/testRcppModule/src/rcpp_module.cpp: Renamed Module 'World' to 'RcppModuleWorld' to avoid multiple modules with same name * inst/unitTests/cpp/modref.cpp: Rename 'World' to 'ModRefWorld' * inst/unitTests/runit.modref.R (test.modRef): Ditto * inst/unitTests/cpp/Module.cpp: Rename 'World' to 'ModuleWorld' * inst/unitTests/runit.Module.R (test.Module): Ditto 2015-08-25 Kurt Hornik * R/loadModule.R: For now=TRUE, always set .botched to FALSE which corresponds to the case of the methods package being in the search path * inst/include/Rcpp/Reference.h: Call call with the internal Namespace 2015-08-24 Dirk Eddelbuettel * vignettes/Rcpp.bib: Updated R / R Core references 2015-08-23 Romain Francois * inst/include/Rcpp/Benchmark/Timer.h: Silence 'g++ -pedantic' by replaceing one R_xlen_t by size_t (pull request #348) 2015-08-19 Florian Plaza Onate * inst/include/Rcpp/vector/Vector.h: Add 'at' methods which implement accessors with bounds cheking (pull request #342, fixes issue #341) * inst/include/Rcpp/vector/Matrix.h: Ditto * inst/unitTests/cpp/Vector.cpp: Add unit tests for at acessors * inst/unitTests/cpp/Matrix.cpp: Ditto * inst/unitTests/runit.Vector.R: Ditto * inst/unitTests/runit.Matrix.R: Ditto 2015-08-18 Dirk Eddelbuettel * inst/unitTests/runit.Module.client.package.R: Disabled for bad interaction of Rcpp Modules and R 3.2.2 2015-08-15 Florian Plaza Onate * inst/include/Rcpp/vector/converter.h: Correct conversion from const char argument (pull request #344, fixes issue #343) 2015-08-14 Florian Plaza Onate * inst/include/Rcpp/vector/DimNameProxy.h: Add assignment operator, refactor code, update error message formatting (pull request #339) 2015-08-05 Kevin Ushey * src/api.cpp: use `_WIN32` instead of `WIN32` 2015-08-02 Dirk Eddelbuettel * R/Attributes.R (sourceCpp): In no-rebuild-needed case, also set a default directory restoration via on.exit() (pull request #335, addressing issue #309) 2015-07-24 Dirk Eddelbuettel * DESCRIPTION: Release 0.12.0 * inst/NEWS.Rd: Release 0.12.0 * vignettes/Rcpp.bib: Release 0.12.0 * inst/include/Rcpp/config.h: Release 0.12.0 * debian/*: Changes for Debian release of 0.12.0 2015-07-23 Dirk Eddelbuettel * inst/include/Rcpp/Symbol.h: Use Rf_installChar(x) instead of Rf_install(CHAR(X)) if R 3.2.0 or later is used 2015-07-07 Qiang Kou * src/include/Rcpp/String.h: Ensure proper initialization of String objects from two constructors * inst/unitTests/cpp/String.cpp: New unit test * inst/unitTests/runit.String.R: Ditto 2015-07-21 Kevin Ushey * inst/include/Rcpp/api/meat/Rcpp_eval.h: don't use 'CDDDR' 2015-07-20 Dirk Eddelbuettel * DESCRIPTION: Rolled minor Date and Version * R/Attributes.R: Use explicit 'utils::assignInMyNamespace' * R/Rcpp.package.skeleton.R: Use explicit 'utils::package.skeleton' 2015-07-17 JJ Allaire * Rcpp.Rproj: don't use devtools mode in RStudio (enables the Test Package command to invoke the RUnit based test-suite) * src/attributes.cpp: Correctly handle signature termination characters ('{' or ';') contained in quotes 2015-07-16 Kevin Ushey * inst/include/Rcpp/api/meat/Rcpp_eval.h: Don't use 'R_ToplevelExec'; ensure Rcpp_eval respects previously established handlers. Capture errors + interrupts with R-level 'tryCatch'. * inst/NEWS.Rd: Add news entry 2015-07-14 JJ Allaire * src/attributes.cpp: fix crash on second call to sourceCpp 2015-07-07 Qiang Kou * src/include/Rcpp/String.h: Use Rcpp_PreserveObject and Rcpp_ReplaceObject to protect underlying SEXP inside String objects 2015-07-07 Matt P. Dziubinski * inst/include/Rcpp/sugar/functions/var.h: Variance -- changed from the unstable formula back to the stable (two-pass) formula, fixed support for complex numbers (formula correction). * inst/unitTests/runit.sugar.var.R: Added tests for complex variance computation, applied simple code refactoring. 2015-07-04 Dirk Eddelbuettel * vignettes/Rcpp.bib: Updated reference to several CRAN packages 2015-07-02 Kevin Ushey * .clang_format: Added 2015-06-25 Kevin Ushey * inst/include/Rcpp/api/meat/Rcpp_eval.h: reset error after Rcpp_eval * inst/unitTests/cpp/Function.cpp: unit tests * inst/unitTests/runit.Function.R: unit tests * inst/include/Rcpp/Function.h: catch empty error messages * inst/include/Rcpp/api/meat/Rcpp_eval.h: protect call 2015-06-24 Qiang Kou * inst/include/Rcpp/String.h: Support encodings * src/String.cpp: Ditto * inst/unitTests/runit.String.R: Add unit tests 2015-06-18 Dirk Eddelbuettel * R/Attributes.R (evalCpp): Add support for plugings argument * man/evalCpp.Rd: Document argument 2015-06-07 JJ Allaire * src/attributes.cpp: Don't load sourceCpp dynamic library if it's already been loaded 2015-06-05 Dirk Eddelbuettel * R/Rcpp.package.skeleton.R (Rcpp.package.skeleton): Remove `character.only=TRUE` from `requireNamespace()` as it happens to flip the boolean value too 2015-06-03 Qiang Kou * inst/include/Rcpp/*: Finish changing R_len_t to R_xlen_t * src/*: Ditto 2014-05-27 Romain Francois * inst/include/Rcpp/DataFrame.h: Safe DataFram constructor 2015-05-16 Qiang Kou * inst/include/Rcpp/*: Begin changing R_len_t to R_xlen_t * src/*: Ditto 2015-05-17 Matt P. Dziubinski * inst/include/Rcpp/platform/compiler.h: Added RCPP_USING_CXX0X_OR_LATER * inst/include/Rcpp/sugar/functions/sapply.h: Updated to support lambda functions 2015-05-01 Kevin Ushey * vignettes/Rcpp-FAQ.Rnw: Notes on installing gfortran 2015-05-01 Dirk Eddelbuettel * DESCRIPTION: Release 0.11.6 * inst/NEWS.Rd: Release 0.11.6 * inst/include/Rcpp/config.h: Release 0.11.6 * debian/*: Changes for Debian release of 0.11.6 2015-04-27 JJ Allaire * src/Module.cpp: Revert parts of PR291 pertaining to Modules and {BEGIN/END}_RCPP * inst/include/Rcpp/api/meat/module/Module.h: Ditto * inst/include/Rcpp/InternalFunctionWithStdFunction.h: Ditto * inst/include/Rcpp/module/Module_generated_CppFunction.h: Ditto * inst/include/Rcpp/module/class.h: Ditto 2014-04-25 Romain Francois * inst/include/Rcpp/vector/Vector.h: update the parameterization of Vector cache * inst/include/Rcpp/vector/traits.h: ... * inst/include/Rcpp/vector/00_forward_proxy.h: ... * inst/unitTests/runit.Vector.R: test for above changes * inst/unitTests/cpp/Vector.cpp: ... 2015-04-22 Kevin Ushey * inst/include/Rcpp/utils/tinyformat.h: don't use C++11 features 2015-04-14 Dirk Eddelbuettel * .travis.yml (sudo): Adding 'sudo: required' to force older Travis backend 2014-04-14 Romain Francois * inst/include/Rcpp/api/meat/is.h: added is__simple * inst/include/Rcpp/config.h: not using floating point arithmetic in preprocessor 2015-04-12 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rnw: Also load Rcpp to make cppFunction visible 2014-04-11 Romain Francois * inst/include/Rcpp/macros/macros.h: Reworked BEGIN_RCPP and END_RCPP * inst/include/Rcpp/*: Removed BEGIN_RCPP and END_RCPP from a few files * src/Module.cpp: But added here 2015-04-19 Jonathan Marshall * inst/include/Rcpp/vector/string_proxy.h: Adds empty() constructor * inst/include/Rcpp/vector/const_string_proxy.h: Ditto 2015-03-18 Dmitrii Meleshko * inst/include/Rcpp/vector/Matrix.h: Added default ctor for 0x0 matrix 2015-03-18 JJ Allaire * R/Attributes.R: Revert to use of gcc 4.6.3 with Rtools 3.3 2015-03-16 JJ Allaire * src/attributes.cpp: Fix failing local include test (normalize path of base source file so comparisons work on Windows). 2015-03-15 Dirk Eddelbuettel * R/Attributes.R (.rtoolsPath): Replace trimws() use with a local variant 2015-03-11 JJ Allaire * R/Attributes.R: Rtools 3.3 is now located and used for compilation under R 3.2. 2015-03-11 Kevin Ushey * inst/include/RcppCommon.h: Move headers into major/minor protection * inst/include/Rcpp/r/headers.h: New file 2015-03-04 Dirk Eddelbuettel * DESCRIPTION: Release 0.11.5 * inst/NEWS.Rd: Release 0.11.5 * inst/include/Rcpp/config.h: Release 0.11.5 * debian/*: Changes for Debian release of 0.11.5 2015-03-03 Dirk Eddelbuettel * inst/include/Rcpp/routines.h: Additional application of the 'attribute_hidden' macro for a number of routines in Rcpp::internal 2015-03-02 Dirk Eddelbuettel * inst/include/Rcpp/print.h (Rcpp): New inline function Rcpp::print() * inst/include/RcppCommon.h: Include new header * src/api.cpp: Commented-out print() in global namespace * src/Rcpp_init.cpp: Commented-out registration of print() * inst/include/Rcpp/routines.h: Commented-out initialization 2015-03-01 Dirk Eddelbuettel * src/api.cpp: New function print() as a wrapper around Rf_PrintValue() * src/Rcpp_init.cpp: Corresponding registration for print() * inst/include/Rcpp/routines.h: Corresponding initialization 2015-02-25 Dirk Eddelbuettel * inst/include/Rcpp/routines.h: Use the 'attribute_hidden' define from the R header R_ext/Visibility.h to protect symbols (cf #264) * inst/include/RcppCommon.h: Also include R_ext/Visibility.h 2015-02-24 JJ Allaire * src/attributes.cpp: Guard against includes referencing themselves (and thus creating an endless loop of include processing); Process attributes in included files; Automatically build implementation files (*.cc; *.cpp) corresponding to local header files if they exist. 2015-02-20 Lionel Henry * inst/include/Rcpp/Function.h New Function constructors that will perform function-lookup in an environment or in a namespace. 2015-02-19 Dirk Eddelbuettel * DESCRIPTION: Bump Version: and Date: 2015-02-19 Lionel Henry * inst/include/Rcpp/Environment.h Allow new_env() to create an environment with a specified parent 2015-02-19 JJ Allaire * vignettes/Rcpp-attributes.Rnw: Add note on using inline keyword from shared header files. 2015-02-17 JJ Allaire * vignettes/Rcpp-attributes.Rnw: Update attributes vignette with docs on new features. 2015-02-14 JJ Allaire * src/attributes.cpp: Allow includes of local files (e.g. #include "foo.hpp") in sourceCpp * Rcpp.Rproj: Specify Sweave as Rnw handler for RStudio * vignettes/*.Rnw: Add driver magic comment and turn off Sweave concordance. * vignettes/.gitignore: Ignore artifacts of PDF preview 2015-02-13 Dirk Eddelbuettel * .travis.yml (install): Switch to using ppa:edd/misc to install all the R packages needed for the Travis CI run as r-cran-* binary packages 2015-02-13 JJ Allaire * src/attributes.cpp: Allow 'R' to come immediately after '***' for defining embedded R code chunks in sourceCpp 2015-02-12 JJ Allaire * DESCRIPTION: bump version * src/attributes.cpp: Add rng parameter to Rcpp::export to prevent inclusion of RNGScope in generated code; recognize Rtools 3.2 2015-02-06 Kevin Ushey * inst/include/Rcpp/vector/Subsetter.h: compare CHARSXP pointers rather than string contents in subsetter 2015-02-03 JJ Allaire * src/attributes.cpp: Simplify generated attributes code for RNGScope (use RObject and it's destructor rather than SEXP protect/unprotect). * vignettes/Rcpp-package.Rnw: Update docs on generated code. 2015-02-03 JJ Allaire * inst/include/Rcpp/exceptions.h: Add Rcpp::warning function as wrapper for Rf_warning 2014-02-03 JJ Allaire * inst/include/Rcpp/XPtr.h: Improvements to XPtr including new checked_get and release functions and improved behavior (throw an exception rather than crash) when a NULL external pointer is dereferenced. * inst/unitTests/runit.XPTr.R: tests for XPtr improvements. * inst/unitTests/cpp/XPtr.cpp: tests for XPtr improvements. 2014-02-03 JJ Allaire * R/Attributes.R: Include pkg_types.h file in RcppExports.cpp if it's present in inst/include or src * src/attributes.cpp: Include pkg_types.h file in generated C++ interface file if it's present in inst/include or src 2015-02-02 JJ Allaire * R/exceptions.R: Evaluate R code within an R_toplevelExec block * include/Rcpp/api/meat/Rcpp_eval.h: Evaluate R code within an R_toplevelExec block 2015-01-25 Kevin Ushey * inst/include/Rcpp/utils/tinyformat.h: define an error handler for tinyformat (using ::Rcpp::stop) to not spill assert 2015-01-20 Dirk Eddelbuettel * DESCRIPTION: Release 0.11.4 * inst/NEWS.Rd: Release 0.11.4 * inst/include/Rcpp/config.h: Release 0.11.4 * debian/*: Changes for Debian release of 0.11.4 2015-01-19 Kevin Ushey * inst/include/Rcpp/r/headers.h: move R headers inclusion to own file; move sysmacros.h workarounds to here * inst/include/RcppCommon.h: idem * inst/include/Rcpp/platform/sysmacros.h: idem 2015-01-19 Dirk Eddelbuettel * vignettes/Rcpp.bib: Updated to current package versions * vignettes/getCurrentVersionsOfCitedPackages.R: New helper function * .Rbuildignore: Added vignettes/getCurrentVersionsOfCitedPackages.R * R/unit.tests.R (test): Use requireNamespace() instead of require() * R/unit.tests.R (test): Ditto 2015-01-19 Wush Wu * inst/include/Rcpp/sugar/functions/var.h: Support four vector types * inst/unitTests/runit.sugar.var.R: Added corresponding tests 2015-01-16 Kevin Ushey * inst/include/Rcpp/String.h: fix push_front() * inst/unitTests/runit.String.R: test * inst/unitTests/cpp/String.cpp: test 2015-01-15 Kevin Ushey * inst/include/Rcpp/platform/sysmacros.h: remove leaked macros 'major', 'minor', 'makedev' from * inst/include/RcppCommon.h: ditto * inst/unitTests/cpp/Vector.cpp: simple test 2015-01-08 Dirk Eddelbuettel * inst/examples/OpenMP/GNUmakefile: Renamed from Makefile because it contains GNU make extentions (which we happen to like) * inst/examples/ConvolveBenchmarks: Ditto 2015-01-02 Kevin Ushey * inst/include/Rcpp/sugar/functions/setdiff.h: fix for setequals * inst/unitTests/cpp/sugar.cpp: unit tests * inst/unitTests/runit.sugar.R: unit tests 2015-01-01 Dirk Eddelbuettel * inst/include/Rcpp/sugar/functions/mean.h: Return type is double, not storage type; also added logical vector case; also added integer case to correctly deal with NA values * inst/unitTests/runit.sugar.R: Added unit tests for new sugar mean() * inst/unitTests/cpp/sugar.cpp: C++ side of new unit tests 2014-12-31 Dirk Eddelbuettel * inst/include/Rcpp/sugar/functions/mean.h: Support int and complex 2014-12-30 Dirk Eddelbuettel * inst/include/Rcpp/sugar/functions/mean.h: Use two-pass method 2014-12-29 Kevin Ushey * inst/include/Rcpp/macros/macros.h: reformat for legibility 2014-12-11 Yixuan Qiu * inst/include/Rcpp/internal/r_vector.h: Internal functions to help detect unqualified vector types for sorting, with the help of Romain Francois * inst/include/Rcpp/vector/Vector.h: Disallow sorting on List, RawVector and ExpressionVector, from the discussion with Dirk Eddelbuettel and Kevin Ushey 2014-11-30 Romain Francois * inst/include/Rcpp/vector/proxy.h: Const iteration correction * inst/include/Rcpp/sugar: Ditto in three files 2014-11-25 Dirk Eddelbuettel * inst/include/Rcpp/grow.h: Apply additional Shield<> use around tail object as suggested by Martin Morgan on the rcpp-devel list 2014-11-24 Dirk Eddelbuettel * inst/include/Rcpp/config.h: Release version is still 0.11.3 2014-11-23 Dirk Eddelbuettel * inst/include/Rcpp/config.h: New macro RcppDevVersion to account for four-part development versions such as the current 0.11.3.2 * DESCRIPTION: Version incremented to 0.11.3.2 2014-11-23 Romain Francois * inst/include/Rcpp/exceptions.h: Richer formatting for Rcpp::stop * inst/include/Rcpp/utils/tinyformat.h: Backend for formattinh * inst/unitTests/runit.misc.R: Added new unit test * inst/unitTests/cpp/misc.cpp: C++ backend for test 2014-11-19 Dirk Eddelbuettel * .travis.yml: Temporary stop-gap measure of setting CRAN to something other than the RStudio CDN which currently has DNS issue * inst/include/Rcpp/internal/NAComparator.h: Support sorting of complex numbers, thanks to patch by Yixuan Qiu (in PR #202) 2014-11-08 Kevin Ushey * R/Attributes.R: Fix regular expression used to find source files for compileAttributes 2014-11-02 Dirk Eddelbuettel * inst/unitTests/RcppTestA: Rename to inst/unitTests/testRcppPackage * inst/unitTests/testRcppPackage: Updated throughout * inst/include/Rcpp/Rmath.h: As suggested by Kevin, test for R_VERSION via #define to conditon on R >= 3.1.2 -- this does not require a hard constraint in DESCRIPTION yet on newer R will get R::[dpq]nbinom_mu() 2014-11-01 Dirk Eddelbuettel * src/api.cpp: Do not include execinfo.h on AIX, per r-devel discussion with Mike Beddo, and http://sf.net/p/predef/wiki/OperatingSystems/ 2014-10-29 Dirk Eddelbuettel * inst/include/Rcpp/Rmath.h: Comment out R::[dpqr]nbinom_mu functions as not declared by R with Rf_* name-mapping prefixes 2014-10-17 Chenliang Xu * R/Attributes: Enable scanning of header files 2014-10-03 JJ Allaire * R/Attributes.R: Only look for plugins in the package's namespace (rather than entire search path) 2014-10-01 Kevin Ushey * inst/include/Rcpp/vector/ListOf.h ListOf inherits relevant proxies * inst/unitTests/cpp/ListOf.cpp: Idem * inst/unitTests/runit.ListOf.R: Idem 2014-09-29 Dirk Eddelbuettel * debian/*: Changes for Debian release of 0.11.3 * inst/NEWS.Rd: Removed a double entry 2014-09-27 Dirk Eddelbuettel * DESCRIPTION: Release 0.11.3 * inst/NEWS.Rd: Release 0.11.3 * inst/include/Rcpp/config.h: Release 0.11.3 * ChangeLog: Added a few more entries based on commit log * inst/NEWS.Rd: Idem 2014-09-26 JJ Allaire * DESCRIPTION: Bump version to enable checking for dryRun. 2014-09-23 JJ Allaire * R/Attributes.R: Add dryRun parameter to sourceCpp. 2014-09-21 Dirk Eddelbuettel * DESCRIPTION: Shorten Description: to single paragraph 2014-09-21 Kevin Ushey * inst/unitTests/runit.environments.R: Use 'checkIdentical' as it's a more appropriate expression of intent 2014-09-15 Dirk Eddelbuettel * R/Rcpp.package.skeleton.R: Use more neutral default name, email settings * man/Rcpp.package.skeleton.Rd: Document these 2014-09-14 Dirk Eddelbuettel * inst/unitTests/testRcppClass/man/Rcpp_class_examples.Rd: Similar update to yesterday's update for testRcppModule 2014-09-14 Kevin Ushey * inst/include/Rcpp/vector/Vector.h: Alternate strategy using SFINAE * inst/include/Rcpp/traits/traits.h: Idem * inst/include/Rcpp/traits/enable_if.h: Idem 2014-09-13 Kevin Ushey * inst/include/Rcpp/vector/Vector.h: Allow logical vectors to be created from bools * inst/unitTests/runit.Vector.R: Idem * inst/unitTests/cpp/Vector.cpp: Idem 2014-09-13 Dirk Eddelbuettel * inst/skeleton/Rcpp_modules_examples.Rd: Added to document modules examples * inst/unitTests/testRcppModule/NAMESPACE: Updated for current Modules use * inst/unitTests/testRcppModule/R/zzz.R: Updated for current Modules use * inst/unitTests/testRcppModule/man/Rcpp_modules_examples.Rd: Also added here 2014-09-10 Dirk Eddelbuettel * R/R/Rcpp.package.skeleton.R: If available, pkgKitten used for skeleton pkg 2014-09-09 Dirk Eddelbuettel * R/unit.tests.R: Fully qualify three functions from RUnit via :: 2014-09-03 Kevin Ushey * inst/include/Rcpp/Environment.h: make new_env a free function 2014-09-02 Kevin Ushey * inst/include/Rcpp/api/meat/proxy.h: Finish meat reintroduction + tests * inst/unitTests/runit.wrap.R: Idem * inst/unitTests/cpp/wrap.cpp: Idem * inst/include/Rcpp/proxy/FieldProxy.h: Idem 2014-09-02 Dirk Eddelbuettel * inst/include/Rcpp/vector/Vector.h: Reversing change from Aug 30: the Vector ctor from char* and string are used for CharacterVector() 2014-09-02 JJ Allaire * R/Attributes.R: Include LinkingTo in DESCRIPTION fields scanned to confirm that C++ dependencies are referenced by package. 2014-09-01 Yixuan Qiu * inst/include/Rcpp/vector/Vector.h: fix return value of range eraser 2014-09-01 Kevin Ushey * inst/include/Rcpp/vector/ListOf.h: `size()` member function should return `R_len_t` rather than `int` 2014-08-30 Kevin Ushey * inst/include/Rcpp/Environment.h: Add 'new_env' function 2014-08-30 Dirk Eddelbuettel * inst/include/Rcpp/vector/Vector.h: Mark two 'from string' ctors as deprecated following a suggestion by Yixuan Qiu [reversed on 2014-09-02] 2014-08-18 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rnw: Added a new entry regarding licensing of packages stressing that any combined work linking to the GPL-ed R will also be under the terms of the GNU General Public License. 2014-08-13 Kevin Ushey * inst/include/Rcpp/api/meat/meat.h: Reintroduce meat * inst/include/Rcpp/api/meat/proxy.h: Idem * inst/include/Rcpp/proxy/AttributeProxy.h: Idem * inst/include/Rcpp/proxy/Binding.h: Idem * inst/include/Rcpp/proxy/NamesProxy.h: Idem * inst/include/Rcpp/proxy/SlotProxy.h: Idem * inst/include/Rcpp/proxy/TagProxy.h: Idem * inst/include/Rcpp/proxy/proxy.h: Idem 2014-08-08 Christian Authmann * inst/unitTests/cpp/InternalFunction.cpp: New unit test support * inst/unitTests/cpp/InternalFunctionCPP11.cpp: Idem * inst/unitTests/runit.InternalFunction.R: Idem * inst/unitTests/runit.InternalFunctionCPP11.R: Idem 2014-08-06 Christian Authmann * inst/include/Rcpp/InternalFunctionWithStdFunction.h: Extend the existing Rcpp::InternalFunction interface to work with std::function, conditional on a sufficient C++11 support by the compiler 2014-08-05 Dirk Eddelbuettel * inst/include/Rcpp/Date.h: Remove a const qualifier which triggers a warnings as 'type qualifiers ignored on function return type' 2014-08-03 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rnw: Updated with respect to OS X installations requiring Fortran (to e.g. build against RcppArmadillo) 2014-07-29 Kevin Ushey * inst/include/Rcpp/vector/no_init.h: Add no_init for matrices * inst/include/Rcpp/vector/Matrix.h: Idem * inst/include/Rcpp/vector/Vector.h: Idem * inst/unitTests/runit.Matrix.R: Idem * inst/unitTests/cpp/Matrix.cpp: Idem 2014-07-29 Dirk Eddelbuettel * inst/include/Rcpp/vector/proxy.h: Removed operator bool() cast as discussed by Christian Authmann on rcpp-devel 2014-07-28 Dirk Eddelbuettel * inst/include/Rcpp/generated/InternalFunction__ctors.h: Updated from corrected creator script 2014-07-25 Romain Francois * inst/include/Rcpp/Benchmark/Timer.h: Added new static method get_timers() to return a vector of timers useful for multithreaded contexts; also removed two unused old member functions (cf #157) 2014-07-14 Kevin Ushey * inst/unitTests/runit.Matrix.R: DimNames Proxy * inst/unitTests/cpp/Matrix.cpp: Idem * inst/include/Rcpp/vector/Matrix.h: Idem * inst/include/Rcpp/vector/DimNameProxy.h: Idem 2014-07-12 Kevin Ushey * R/Attributes.R: Strip version in .parseLinkingTo 2014-07-12 Dirk Eddelbuettel * inst/include/Rcpp/generated/InternalFunction__ctors.h: Regenerated with tighter whitespace and updated header information from updated generator script in corresponding rcpp-scripts repo * inst/include/Rcpp/module/Module_generated_CppFunction.h: Idem * inst/include/Rcpp/module/Module_generated_CppMethod.h: Idem * inst/include/Rcpp/module/Module_generated_Pointer_CppMethod.h: Idem * inst/include/Rcpp/module/Module_generated_Pointer_method.h: Idem * inst/include/Rcpp/module/Module_generated_function.h: Idem * inst/include/Rcpp/module/Module_generated_get_signature.h: Idem * inst/include/Rcpp/module/Module_generated_method.h: Idem 2014-07-09 Kevin Ushey * inst/include/Rcpp/Language.h: OUT -> RESULT_TYPE * inst/include/Rcpp/generated/InternalFunction__ctors.h: Idem * inst/include/Rcpp/module/Module_generated_CppFunction.h: Idem * inst/include/Rcpp/module/Module_generated_CppMethod.h: Idem * inst/include/Rcpp/module/Module_generated_Pointer_CppMethod.h: Idem * inst/include/Rcpp/module/Module_generated_Pointer_method.h: Idem * inst/include/Rcpp/module/Module_generated_function.h: Idem * inst/include/Rcpp/module/Module_generated_get_signature.h: Idem * inst/include/Rcpp/module/Module_generated_method.h: Idem * inst/include/Rcpp/module/get_return_type.h: Idem * inst/include/Rcpp/sugar/block/SugarBlock_1.h: Idem * inst/include/Rcpp/sugar/block/SugarBlock_2.h: Idem * inst/include/Rcpp/sugar/block/SugarBlock_3.h: Idem * inst/include/Rcpp/sugar/block/SugarMath.h: Idem * inst/include/Rcpp/sugar/functions/complex.h: Idem 2014-07-08 Dirk Eddelbuettel * inst/include/Rcpp/InternalFunction.h: Add missing update(SEXP) method per GitHub Pull Request #152, with thanks to Omar Andres Zapata Mesa * inst/THANKS: Updated 2014-07-04 Dirk Eddelbuettel * vignettes/Rcpp-unitTests.Rnw: Commented-out copy of results to /tmp 2014-06-29 JJ Allaire * R/Attributes.R: fix setwd problem when sourceCpp used a relative path and included an R code chunk 2014-06-20 Dirk Eddelbuettel * include/Rcpp/sugar/functions/ifelse.h: Applied pull request #150 by Romain to have operator{} return the correct NA type 2014-06-11 Dirk Eddelbuettel * inst/include/Rcpp/macros/macros.h: No longer include macros/preprocessor_generated.h which was deprecated as of Rcpp 0.10.5 * inst/include/Rcpp/macros/preprocessor_generated.h: Removed 2014-06-08 Dirk Eddelbuettel * cleanup: Do not remove 'build/Rcpp.pdf', thanks to hint by Kurt / CRAN 2014-06-06 Dirk Eddelbuettel * DESCRIPTION: Release 0.11.2 * inst/NEWS.Rd: Release 0.11.2 * inst/include/Rcpp/config.h: Release 0.11.2 * debian/*: Similarly updated for new release to Debian * tests/doRUnit.R: Additional check added for release version case 2014-06-05 JJ Allaire * R/Attributes.R: Use -std=c++0x for cpp11 plugin on Windows if R <= 3.0 2014-05-28 Kevin Ushey * inst/include/Rcpp/vector/vector_from_string.h: Protect result of Rf_mkString 2014-05-24 Dirk Eddelbuettel * .Rbuildignore: Add .dir-locals.el 2014-05-23 Dirk Eddelbuettel * R/Module.R (new_dummyObject): Remove erraneous quotes * .dir-locals.el: Setting tab-width to 8 2014-05-18 Kevin Ushey * inst/include/Rcpp/vector/Vector.h: Safer casting to fix #146 * inst/include/Rcpp/Environment.h: Idem * inst/include/Rcpp/api/meat/Environment.h: Idem * inst/include/Rcpp/vector/Vector.h: Idem * .dir-locals.el: Added for project-local Emacs settings 2014-05-10 Dirk Eddelbuettel * R/Attributes.R (compileAttributes): Read Imports: as well 2014-05-07 Kevin Ushey * R/Attributes.R (.plugins[["cpp11"]]): Set USE_CXX1X to more reasonable non-empty value 2014-05-06 Kevin Ushey * R/Attributes.R (.plugins[["cpp11"]]): Set USE_CXX1X to non-empty value 2014-04-30 Dirk Eddelbuettel * R/Attributes.R: Add plugins for C++0x and C++1y 2014-04-30 JJ Allaire * R/Attributes.R: Use USE_CXX1X for cpp11 plugin when R >= 3.1 2014-04-02 Dirk Eddelbuettel * tests/doRUnit.R: Better RUnit error report with thanks to Murray 2014-03-18 JJ Allaire * man/cppFunction.Rd: Correct package header file example to use .h 2014-03-14 Dirk Eddelbuettel * inst/include/Rcpp/DataFrame.h: Add missing return in Impl method 2014-03-13 Dirk Eddelbuettel * DESCRIPTION: Release 0.11.1 * inst/NEWS.Rd: Release 0.11.1 * inst/include/Rcpp/config.h: Release 0.11.1 * debian/*: Similarly updated for new release to Debian 2014-03-09 Kevin Ushey * inst/include/Rcpp/vector/const_string_proxy.h: Workaround for issue with constructing proxies from CHARSXPs 2014-03-08 Kevin Ushey * inst/include/Rcpp/proxy/proxy.h: Make sure proxies know about the const char* wrap shortcut 2014-03-08 Dirk Eddelbuettel * inst/include/Rcpp/proxy/Binding.h: Remove spurious ';' [g++ -pedantic] * inst/include/Rcpp/proxy/ProtectedProxy.h: Idem * inst/include/Rcpp/proxy/TagProxy.h: Idem * inst/include/Rcpp/proxy/AttributeProxy.h: Idem 2014-03-05 Kevin Ushey * inst/include/Rcpp/proxy/FieldProxy.h: bandaid for protection issue in operator= of FieldProxy * R/unit.tests.R: modify Rcpp:::test so we can run tests with gctorture(TRUE) 2014-03-03 Kevin Ushey * inst/include/Rcpp/proxy/SlotProxy.h: Add missing const_SlotProxy ctor definition 2014-02-24 Kevin Ushey * R/Rcpp.package.skeleton.R: make sure we add loadModule to NAMESPACE when module is TRUE 2014-02-23 Kevin Ushey * inst/include/Rcpp/DataFrame.h: better nrows behavior 2014-02-17 Romain Francois * inst/include/Rcpp/traits/un_pointer.h: fix bug in un_pointer for object 2014-02-17 Kevin Ushey * src/attributes.cpp: Fix attributes behavior with ::create, and also add an option for a default constructor (e.g. NumericVector v = NumericVector(10)) gives a default value of 'numeric(10)' at the R level). Also make NAs keep their type when exposed to R. 2014-02-16 JJ Allaire * src/attributes.cpp Replace (incorrect) call to Rcpp::internal::jumpToTop with Rf_onintr 2014-02-07 Kevin Ushey * inst/include/Rcpp/Reference.h: Add default ctor 2014-02-03 Kevin Ushey * inst/include/Rcpp/vector/Vector.h: Enable conversion from Rcpp vectors to RObject 2014-02-02 Dirk Eddelbuettel * DESCRIPTION: Release 0.11.0 * inst/NEWS.Rd: Release 0.11.0 * inst/include/Rcpp/config.h: Release 0.11.0 * debian/*: Similarly updated for new release to Debian 2014-02-02 JJ Allaire * R/Attributes.R: Use placeholder for .Call to avoid warning 2014-02-01 Dirk Eddelbuettel * tests/doRUnit.R: Simplified following pattern in RProtoBuf * vignettes/Rcpp-unitTests.Rnw: Remove a now superfluous global var * vignettes/Rcpp.bib: Updated references to current packages 2014-02-01 JJ Allaire * R/Attributes.R: Embedded R code chunks in sourceCpp can now be disabled 2014-01-31 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rnw: Render code with background boxen * vignettes/Rcpp-package.Rnw: Idem * vignettes/Rcpp-modules.Rnw: Idem * vignettes/Rcpp-extending.Rnw: Idem * vignettes/Rcpp-sugar.Rnw: Idem * vignettes/Rcpp-attributes.Rnw: Switched to highlight driver * inst/include/Rcpp/Benchmark/Timer.h: Reverted back to using iterators via use of anonymous namespace for accessors * inst/announce/ANNOUNCE-0.11.0.txt: Updated 2014-01-31 Dirk Eddelbuettel * man/Rcpp.package.skeleton.Rd: Also updated 2014-01-31 JJ Allaire * R/Attributes.R: Embedded R code chunks in sourceCpp are now executed within the working directory of the C++ source file. 2014-01-30 Dirk Eddelbuettel * vignettes/Rcpp-package.Rnw: Updates for upcoming release 2014-01-28 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rnw: Some updates for upcoming release 2014-01-25 Dirk Eddelbuettel * inst/include/Rcpp/Benchmark/Timer.h: Simplified -- Rcpp Gallery example using it was not building any longer under g++ 2014-01-23 Dirk Eddelbuettel * inst/announce/ANNOUNCE-0.11.0.txt: Added for next release 2014-01-21 Dirk Eddelbuettel * R/Rcpp.package.skeleton.R: Update skeleton package to add proper Imports: to DESCRIPTION, and importFrom() to NAMESPACE 2014-01-19 Kevin Ushey * inst/include/Rcpp/api/meat/Vector.h: Add missing UNPROTECT in push_back_name__impl 2014-01-18 Kevin Ushey * inst/unitTests/runit.S4.R: Add a test for ctor from slot proxy * inst/unitTests/cpp/S4.cpp: Add a test for ctor from slot proxy * inst/include/Rcpp/vector/Vector.h: Add missing r_cast to vector ctor from proxy 2014-01-18 JJ Allaire * R/Attributes.R: More restrictive matching of C++ file extensions for compileAttributes. 2014-01-18 Kevin Ushey * inst/unitTests/cpp/Matrix.cpp: Add unit test * inst/unitTests/runit.Matrix.R: Add unit test * inst/include/Rcpp/api/meat/Matrix.h: Bug fix in operator= 2014-01-17 Dirk Eddelbuettel * R/RcppLdpath.R (RcppCxxFlags): Restore function to supply values for include files for packages not yet converted to LinkingTo: 2014-01-16 JJ Allaire * inst/include/Rcpp/macros/macros.h: Use Rf_onintr rather than non-public Rf_jump_to_toplevel * inst/include/Rcpp/DateVector.h: Fix GreedyVector compilation error * inst/include/Rcpp/DatetimeVector.h: Fix GreedyVector compilation error 2014-01-15 Dirk Eddelbuettel * inst/include/Rcpp/exceptions.h: Move stop() into Rcpp namespace 2014-01-03 JJ Allaire * .gitignore: Added src/, *.Rproj, and .Rproj.user * inst/include/Rcpp/Interrupt.h: New checkUserInterrupt function that provides a C++ friendly implementation of R_CheckUserInterrupt * inst/include/RcppCommon.h: Include Rcpp/Interrupts.h * inst/include/macros/macros.h: Check for interrupts in END_RCPP * src/attributes.cpp: Handle interrupted-error in attribute function envelope. 2013-12-31 Dirk Eddelbuettel * vignettes/Rcpp.bib: Updated CRAN package references 2013-12-20 Kevin Ushey * inst/include/Rcpp/sugar/tools/mapcompare.h: Use a union for type punning, to avoid compiler warning on aliasing. Also switch to uint64_t to enforce 64bit comparison. * inst/include/Rcpp/RObject.h: Add missing *this return for RObject_impl::operator= 2013-12-20 Dirk Eddelbuettel * inst/include/Rcpp/RObject.h: Applied fix by Kevin Ushey (#88) * inst/include/Rcpp/vector/Vector.h: Ditto (#89) 2013-12-01 Kevin Ushey * R/Rcpp.package.skeleton.R: Fixed bug relating to user-supplied functions in 'list' argument * inst/unitTests/runit.Rcpp.package.skeleton.R: Added unit tests 2013-11-30 Dirk Eddelbuettel * vignettes/Rcpp-FAQ.Rnw: Updated and corrected in several spots 2013-11-22 Dirk Eddelbuettel * inst/include/Rcpp/stats/nt.h: Correct expansion of (d|q|p)nt() * inst/unitTests/runit.stats.R: Added unit tests for t dist with ncp * inst/unitTests/cpp/stats.cpp: C++ side of expamded unit tests 2013-11-05 Dirk Eddelbuettel * .travis.yml: Added to support continuous integration on github 2013-10-28 Romain Francois * include/Rcpp/protection/Armor.h : Armor::operator SEXP has to be const for it to work properly with wrap. 2013-10-27 Dirk Eddelbuettel * DESCRIPTION: Release 0.10.6 * inst/NEWS.Rd: Release 0.10.6 * inst/include/Rcpp/config.h: Release 0.10.5 * debian/*: Similarly updated for new release to Debian 2013-10-17 JJ Allaire * R/Attributes.R: sourceCpp now correctly binds to Rtools 3.0 and 3.1 2013-10-16 Dirk Eddelbuettel * R/Rcpp.package.skeleton.R (Rcpp.package.skeleton): Deprecate namespace argument which package.skeleton() no longer uses * man/Rcpp.package.skeleton.Rd: Updated documentation accordingly 2013-10-16 Romain Francois * include/Rcpp/api/meat/is.h : added missing implementation for is and is 2013-10-14 Romain Francois * inst/include/Rcpp/protection/protection.h: added Shield/Shelter/Armor * DESCRIPTION: bump to version 0.10.5.3 2013-10-12 Dirk Eddelbuettel * DESCRIPTION (Depends): Rolled Depends: on R to "R (>= 3.0.0)" as required by the vignette building code (with thanks to Uwe Ligges) 2013-10-08 Dirk Eddelbuettel * NAMESPACE: Export LdFlags as well as RcppLdFlags * man/RcppLdFlags.Rd: Updated 2013-10-06 John M Chambers * R/exposeClass.R: avoid warning from unclosed file() 2013-10-06 John M Chambers * NAMESPACE: change classModule to exposeClass * R/classModule.R: delete * man/classModule.Rd: delete * R/exposeClass.R: add * man/exposeClass.Rd: add * man/setRcppClass.Rd: update, clarify, recommend exposeClass() 2013-10-03 John M Chambers * R/classModule.R: new function to write module file for class * man/classModule.Rd: documentation for new function classModule() * NAMESPACE: export classModule * R/loadModule.R: clean up an error message * R/RcppClass.R: defaults for module consistent w. classModule() * man/setRcppClass.Rd: add defaults, explain need for saveAs 2013-10-02 Dirk Eddelbuettel * inst/include/Rcpp/traits/is_na.h: More fixes thanks to Thomas Tse 2013-10-01 Dirk Eddelbuettel * inst/include/Rcpp/api/meat/is.h: Applied patch by Thomas Tse to provide missing Character(Vector|Matrix) * DESCRIPTION: Bump to development release 0.10.5.1 2013-09-28 Dirk Eddelbuettel * DESCRIPTION: Release 0.10.5 * inst/NEWS.Rd: Release 0.10.5 * inst/include/Rcpp/config.h: Release 0.10.5 * debian/*: Similarly updated for new release to Debian * vignettes/Rcpp-unitTests.Rnw: Switched to Charter font just like the other eight vignettes 2013-09-28 Romain Francois * include/Rcpp/module/Module_generated_CppMethod.h : more code bloat to handle flexible semantics for passing parameters in methods * include/Rcpp/module/Module_generated_Pointer_CppMethod.h : same * inst/unitTests/cpp/Module.cpp: testing the above * unitTests/runit.Module.R: testing 2013-09-27 Dirk Eddelbuettel * vignettes/Rcpp-unitTests.Rnw: Re-activated vignette * DESCRIPTION: Version number bumped to 0.10.4.6 2013-09-27 Romain Francois * include/Rcpp/module/Module_generated_CppFunction.h : regenerated to use input_parameter traits for more flexible parameter passing strategy * unitTests/cpp/Module.cpp : more testing * unitTests/runit.Module.R : more testing 2013-09-22 Dirk Eddelbuettel * inst/include/Rcpp/sugar/functions/diff.h: Declare set_previous const and add a missing traits:: prefix before is_na * inst/unitTests/cpp/sugar.cpp: Unit test for diff() of int. vector * inst/unitTests/runit.sugar.R: Invoke new test 2013-09-21 Dirk Eddelbuettel * vignettes/Rcpp-modules.Rnw: Remove vignette-local compilations which again caused problems for the Windows builds at R-Forge and win-builder. Unit tests comprise the same functionality and pass. * vignettes/Rcpp-attributes.Rnw: Refresh look by using Bitstream Charter, and microtype package (cf http://www.khirevich.com/latex) * vignettes/Rcpp-extending.Rnw: Idem * vignettes/Rcpp-FAQ.Rnw: Idem * vignettes/Rcpp-modules.Rnw: Idem * vignettes/Rcpp-package.Rnw: Idem * vignettes/Rcpp-quickref.Rnw: Idem * vignettes/Rcpp-sugar.Rnw: Idem 2013-09-20 Dirk Eddelbuettel * R/Module.R: More ':::' cleanups to make R CMD check happy * R/RcppClass.R: Ditto * NAMESPACE: Some new exports related to this * man/setRcppClass.Rd: Document loadRcppClass() * man/Rcpp-internal.Rd: Added in order to document cpp_object_initializer() and cpp_object_dummy() 2013-09-19 Dirk Eddelbuettel * inst/include/Rcpp/longlong.h: Unbreak long long by making it (as before) conditional on g++ (or clang) as well as C++11. The condition can be OR'ed with another suitably-defined variable, but the default has to be off as CRAN compliance has to remain the standard 2013-09-19 Romain Francois * include/Rcpp/longlong.h: isolate all handling of long long in a separate file which we might choose not to include by default * include/Rcpp/traits/r_sexptype_traits.h : unsigned int wrapped as REALSXP long standing feature request from Murray. * R/Attributes.R : Added the helper demangle and sizeof functions * man/demangle.Rd : Documentation for demangle and sizeof * include/Rcpp/platform/compiler.h : less restritive support of long long types. But still behind a test for gcc and a test for the availability of the type, and the __extension__. -pedantic does not warn about it 2013-09-18 JJ Allaire * R/Attributes.R: Don't search the inline package as a fallback when loading plugins for the the Rcpp::plugins attribute 2013-09-18 Romain Francois * vignettes/Rcpp-package.Rnw: Updating the vignette. Setting attributes to TRUE by default. * R/Rcpp.package.skeleton.R: Setting attributes to TRUE by default. This is what we should encourage people to use. * include/Rcpp/as.h: add as specialization * include/Rcpp/sugar/functions/diff.h : rework the implementation of diff so that it works even when we don't know the previous value * unitTests/runit.sugar.R : * unitTests/cpp/sugar.cpp : * include/Rcpp/sugar/functions/range.h : factored out of minmax.h * include/Rcpp/sugar/functions/min.h : factored out of minmax.h * include/Rcpp/sugar/functions/max.h : factored out of minmax.h * TODO : 3 less items 2013-09-17 JJ Allaire * R/Attributes.R: Call inlineCxxPlugin and Rcpp.plugin.maker without qualification rather than with ':::' 2013-09-17 Dirk Eddelbuettel * NAMESPACE: Export RcppLdFlags which is often used to build Rcpp * man/RcppLdFlags.Rd: Added required manual page * R/Attributes.R: Call RcppLdFlags() via '::' instead of ':::' * R/SHLIB.R: Ditto * R/inline.R: Ditto * vignettes/Rcpp-FAQ.Rnw: Add %\VignetteEngine{highlight::highlight} * vignettes/Rcpp-attributes.Rnw: Idem * vignettes/Rcpp-extending.Rnw: Idem * vignettes/Rcpp-modules.Rnw: Idem * vignettes/Rcpp-package.Rnw: Idem * vignettes/Rcpp-quickref.Rnw: Idem * vignettes/Rcpp-sugar.Rnw: Idem * vignettes/Rcpp-package.Rnw: Altered to make use of highlight package; also no longer build embedded demo package (which upsets R CMD check under R-devel) 2013-09-16 JJ Allaire * R/Attributes.R : Remove calls to non-exported functions from the tools package 2013-09-16 Romain Francois * include/Rcpp/internal/Exporter.h : Specific handling of containers (std::vector, std::deque, and std::list so that we use their faster range constructor when we can, and so let the STL optimize how data is copied * include/Rcpp/api/meat/export.h : Implementation of the above * include/Rcpp/vector/Vector.h : added Vector( const char* ) ctor * DESCRIPTION : bump to 0.10.4.5 (for RcppExtras) 2013-09-15 Dirk Eddelbuettel * inst/include/Rcpp/InputParameter.h (Rcpp): Add 'const' case * inst/unitTests/cpp/Vector.cpp: New unit tests for std::vector conversions, using both int and double arguments * inst/unitTests/runit.Vector.R: R complement of these tests 2013-09-15 Romain Francois * include/Rcpp/InputParameter.h : added the traits::input_parameter trait to add another layer of abstration. * include/Rcpp/macros/module.h : taking advantage of input_parameter to specialize how to work with module objects * src/attributes.cpp : using traits::input_parameter instead of InputParameter 2013-09-14 Dirk Eddelbuettel * src/attributes.cpp : Precede closing '>' by space to avoid '>>' * inst/include/Rcpp/platform/compiler.h: Further refine #if test for 'long long' by conditioning __LP64__ on also using clang/llvm * src/attributes.cpp : Precede closing '>' by space to avoid '>>' 2013-09-13 Romain Francois * src/api.cpp : added "long long" to the capabilities function. * include/Rcpp/platform/compiler.h : demangling is definitely available on all mac versions using gcc. No point is testing for OSX version. * include/Rcpp/InputParameter.h : extra layer of abstraction to allow for custom handling of references etc ... used in RcppArmadillo * src/attributes.cpp : using InputParameter * DESCRIPTION: bump to 0.10.4.4 2013-09-12 Romain Francois * include/Rcpp/platform/compiler.h : patch submitted by Murray for better support of long long type. * include/Rcpp/platform/compiler.h : gcc 4.2.1 has tr1/unordered_map and tr1/unordered_set. Previous test was for gcc 4.4.0 for some reason 2013-08-31 Dirk Eddelbuettel * inst/doc/*: Moved all vignettes to vignettes/* * vignettes/*: Minor updates to some vignettes 2013-08-22 Romain Francois * include/Rcpp/traits/is_primitive.h : new trait to identify if a type is primitive, this is a shortcut of using r_type_traits and compare it to r_type_primitive_tag * include/Rcpp/traits/r_type_traits.h : new tag r_type_pair_tag to handle wrapping map where KEY can be converted to String and VALUE can wrap itself * include/Rcpp/internal/wrap.h : handling map and vector where T is a class handled by modules * include/Rcpp/api/meat/wrap.h : implementations to handle map * unitTests/cpp/wrap.cpp : more tests for map with KEY not a string * unitTests/runit.wrap.R : more tests for map with KEY not a string * include/Rcpp/internal/export.h : added export_range__dispatch for the r_type_generic_tag tag. Meaning we can now use as< vector > where T is not a primitive * include/Rcpp/api/meat/export.h : implementation in meat because it needs as 2013-08-01 Romain Francois * unitTests/cpp/wstring.cpp: fix to re-enable wstring test suite. * unitTests/runit.wstring.R: re-enable the wstring test suite. 2013-07-31 Dirk Eddelbuettel * DESCRIPTION: Bump development version to 0.10.4.3 * inst/doc/Makefile: Rejigged pdf builds in another attempt at pleasing whatever runs the builds on r-forge. L'espoir fait vivre. 2013-07-25 Romain Francois * include/Rcpp/sugar/functions/is_na.h : added is_na for DateVector and DatetimeVector * include/Rcpp/Date.h : added is_na method * include/Rcpp/Datetime.h : added is_na method * unitTests/cpp/dates.cpp : removed the ignoreme useless parameters * unitTests/runit.Date.R : idem * src/attributes.cpp: collecting functions in a FunctionMap. Will use this for dispatching 2013-07-24 Romain Francois * include/Rcpp/traits/is_module_object.h: trait class that identifies at compile time if a given type is a type exposed by a module, i.e. if we used the RCPP_EXPOSED_AS macro * include/Rcpp/is.h: able to identify if an object is of a given type exposed by a module (supports references and pointers too). * src/Module.cpp: implementation of is_module_object_internal that checks if an object is of a given typeid, used by is where T is module exposed 2013-07-23 Romain Francois * include/Rcpp/as.h: support as and as where T is a class exposed by modules * include/Rcpp/macros/module.h: idem * include/Rcpp/traits/un_pointer.h: handle the object case * include/Rcpp/traits/r_type_traits.h: adding traits to help the with as and as * unitTests/runit.Module.R: testing as and as * unitTests/cpp/Module.cpp: idem * src/attributes.cpp: take advantage of a more flexible as<>. The Type class gains a full_name() method that shows const-ness and reference-ness 2013-07-17 Romain Francois * include/Rcpp/vector/instantiation.h: added the DoubleVector alias to NumericVector * include/Rcpp/is.h: added is template function 2013-07-11 Dirk Eddelbuettel * R/Attributes.R: Add an OpenMP plugin 2013-07-03 Romain Francois * unitTests/runit.modref.R: using sourceCpp * unitTests/runit.Module.R: using sourceCpp * unitTests/runit.Vector.R: no more uses of inline * unitTests/runTests.R: we don't need inline no more for testing * doc/unitTests/Rcpp-unitTests.R: idem 2013-07-02 Romain Francois * include/Rcpp/vector/Vector.h: fill__dispatch was mispelled (as fill_dispatch) for the non trivial case, so it did not work * unitTests/runit.Matrix.R: using sourceCpp * unitTests/runit.misc.R: using sourceCpp * unitTests/runit.wrap.R: using sourceCpp * unitTests/runit.support.R: using sourceCpp * unitTests/runit.rmath.R: using sourceCpp * unitTests/runit.RObject.R: using sourceCpp * unitTests/runit.stats.R: using sourceCpp * unitTests/runit.XPTr.R: using sourceCpp * unitTests/runit.Vector.R: testing List( int, IntegerVector ) which eventually uses fill__dispatch * include/Rcpp/traits/r_type_traits.h: support for as and as when T is module exposed * include/Rcpp/as.h: as and as when T is module exposed * include/Rcpp/module/Module_generated_CppFunction.h: removed the remove_const_and_reference since as and as is supported * src/attributes.cpp: automatically populating the environment with the content of a module, rather than make the module object available in the environment 2013-07-01 Romain Francois * R/unit.test.R: added helper function Rcpp:::unit_test_setup to avoid some boiler plate code in unit test files. See e.g. runit.Function.R for an example * unitTests/runit.as.R: using sourceCpp * unitTests/runit.Function.R: using sourceCpp * unitTests/runit.DataFrame.R: remove dependency on datasets 2013-06-25 Dirk Eddelbuettel * src/api.cpp: Also test for #defined(__sun) when checking for system lacking a valid backtrace() function for stack traces 2013-06-25 Romain Francois * DESCRIPTION : devel version 0.10.4.1 * src/Module.cpp : bring a simplified version of RCPP_FUNCTION 1 .. 4 * unitTests/runit.macros.R : removed, as RCPP_FUNCTION ... are deprecated * include/Rcpp/macros/preprocessor_generated.h : deprecating RCPP_FUNCTION_... macros 2013-06-24 Dirk Eddelbuettel * inst/include/Rcpp/platform/compiler.h: Note the useful wiki page http://sourceforge.net/p/predef/wiki/Home with #defines for OSs, compilers, libraries and more 2013-06-23 Dirk Eddelbuettel * DESCRIPTION: Release 0.10.4 * inst/NEWS.Rd: Release 0.10.4 * inst/include/Rcpp/config.h: Release 0.10.4 * debian/*: Similarly updated for new release to Debian 2013-06-19 Romain Francois * inst/NEWS.Rd: Document planned depreciation of old RCPP_FUNCION_* macros which are redundant thanks to Rcpp Modules and Rcpp Attributes * include/Rcpp/vector/string_proxy.h : added operator string_proxy::operator==( const string_proxy& ) so that me may compare x[i] and y[i] (x and y being CharacterVector) * include/Rcpp/module/Module_generated_Pointer_CppMethod.h : remove const and reference to OUT type in several places, that was causing problems e.g. on making the Rcpp-modules vignette * include/Rcpp/module/Module_generated_CppMethod.h : idem 2013-06-18 Romain Francois * include/Rcpp/module/Module_generated_CppFunction.h : using BEGIN_RCPP / END_RCPP as suggested by Ben North on Rcpp-devel. This should reduce cross dll exceptions issues on windows. 2013-06-14 Romain Francois * include/Rcpp/stats/random/runif.h : removed unused max variable * include/Rcpp/stats/random/rf.h : removed unused n1 and n2 variables 2013-06-13 Romain Francois * src/Module.cpp: small buglet in macro. Reported on Rcpp-devel 2013-06-12 Dirk Eddelbuettel * inst/doc/Makefile: Force serial build of vignettes in yet another effort to not let R-Forge fail when trying to rebuild them 2013-06-08 Dirk Eddelbuettel * inst/doc/Rcpp.bib: Updated entries * inst/doc/Rcpp-introduction.Rnw: Added pointer to 'Rcpp Attributes' vignette, as well as to 'Rcpp Sugar' and 'Rcpp Modules' vignettes. * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Idem 2013-06-06 Romain Francois * unitTests/cpp/Vector.cpp : more unit tests for erase * unitTests/runit.Vector.R : more unit tests for erase 2013-06-05 Romain Francois * include/Rcpp/api/meat/Vector.h : fixed Vector<>::erase(iterator, iterator) and correct return value of erase * unitTests/cpp/Vector.cpp : added regression test for the above fix * unitTests/runit.Vector.R : added regression test for the above fix * include/Rcpp/module/class.h : removed useless typedef 2013-05-31 Romain Francois * unitTests/runit.sugar.R : new test for is_infinite and is_nan * unitTests/cpp/sugar.cpp : new test for is_infinite and is_nan * include/Rcpp/sugar/functions/is_infinite.h : new function is_infinite * include/Rcpp/traits/is_infinite.h : new function is_infinite * include/Rcpp/sugar/functions/is_nan.h : new function is_nan * include/Rcpp/traits/is_nan.h : new function is_nan 2013-05-30 Romain Francois * include/Rcpp/sugar/functions/all.h : bug fixed for the NA=false case * include/Rcpp/sugar/functions/is_na.h : header * include/Rcpp/sugar/functions/is_finite.h : added sugar is_finite function * include/Rcpp/traits/is_finite.h : added is_finite trait * unitTests/runit.sugar.R : added test for is_finite * unitTests/cpp/S4.cpp : new cpp file to host S4 unit tests * unitTests/runit.S4.R : rework unit tests to use attributes * unitTests/runit.Reference.R : unit tests for Rcpp::Reference * unitTests/cpp/Reference.cpp : unit tests c++ code 2013-05-26 Dirk Eddelbuettel * src/api.cpp: Minor tweak for internal formatting 2013-05-24 J.J. Allaire * R/Attributes.R: Disallow compilation for files that don't have extensions supported by R CMD SHLIB 2013-05-21 J.J. Allaire * R/Attributes.R: Lookup plugins in inline package if they aren't found within the Rcpp package * man/pluginsAttribute.Rd: Documentation updates. 2013-05-17 J.J. Allaire * src/attributes.cpp: prevent gc problems with RNGScope destructor in attributes generated functions; don't include package header file in generated cpp exports file * src/api.cpp: use unsigned long for RNG scope counter 2013-04-28 Dirk Eddelbuettel * src/api.cpp (Rcpp): No longer use Rd_format(Real|Complex) which is a very verboten R internal; formatting to string is now very bare bones 2013-04-27 Dirk Eddelbuettel * src/Makevars: Improved use as well as a new possible overrride of /usr/bin/install_name_tool on OS X, once again contributed by Simon 2013-04-16 Romain Francois * include/Rcpp/sugar/functions/na_omit.h : new function na_omit to remove missing values from a vector. * src/attributes.cpp : portability fix (from Martyn Plummer) * include/Rcpp/api/meat/Vector.h : portability fix (from Martyn Plummer) 2013-04-14 Romain Francois * include/Rcpp/traits/is_na.h: complex version did not work. added default for VECSXP and EXPRSXP versions 2013-04-02 Dirk Eddelbuettel * src/Date.cpp: Corrected operator-() for Date and Datetime objects to behave more inline with C++ standard * inst/include/Rcpp/Date.h: operator-() for Dates now returns a double as the date itself is fractional double since epoch * inst/unitTests/cpp/dates.cpp: New file with C++ portion of tests factored out from R unit test file * inst/unitTests/runit.Date.R: Rewritten for use with new C++ tests 2013-04-02 Romain Francois * include/Rcpp/generated/DataFrame_generated.h : DateFrame::create uses List::create and then feeds to the DataFrame constructor, which seems to work better than the previous approach of calling back to the data.frame function in R * include/Rcpp/DataFrame.h : private function from_list, to help the new implementation of DataFrame::create * src/api.cpp : impl of DataFrame::from_list 2013-03-31 Dirk Eddelbuettel * debian/control (Build-Depends): Modified for Debian-only rebuilds under (rc version of upcoming) R 3.0.0 release * debian/changelog: Entry for Debian build 0.10.3-2 2013-03-29 Dirk Eddelbuettel * src/api.cpp (Rcpp): Re-enable coerce_to_string<>() for real and complex types with Poor Man's Versions (TM) of Rf_EncodeReal and Rf_EncodeComplex which the Powers That Be disallow from being used 2013-03-27 Romain Francois * include/Rcpp/vector/MatrixRow.h : removed unintended printed messaged (reported on Rcpp-devel by Michaeal Love) 2013-03-23 Dirk Eddelbuettel * DESCRIPTION: Release 0.10.3 * inst/NEWS.Rd: Release 0.10.3 * inst/include/Rcpp/config.h: Release 0.10.3 * debian/*: Similarly updated for new release to Debian 2013-03-21 Dirk Eddelbuettel * inst/unitTests/runit.wstring.R (test.as_vector_wstring): replace the "€" symbol with its unicode equivalent "\u20ac" 2013-03-20 Dirk Eddelbuettel * inst/doc/Rcpp.bib: Updated versions for several CRAN packages * inst/CITATION: Add information about forthcoming book 2013-03-20 Romain Francois * include/Rcpp/traits/is_wide_string.h : fixes to re-enable wrap( vector ) and wrap( vector ), needed to support package httpuv * include/Rcpp/internal/wrap.h : same 2013-03-19 Dirk Eddelbuettel * inst/include/Rcpp/config.h: Define RCPP_USE_NEW_PRESERVE_RELEASE with default value of 0 to enable/disable new preserve/release code * src/api.cpp: Bracket the new Rcpp object preserve / release code with the new variable RCPP_USE_NEW_PRESERVE_RELEASE and fall back to R behaviour if not set 2013-03-12 Romain Francois * include/Rcpp/Module.h: added virtual destructor to CppProperty 2013-03-08 Dirk Eddelbuettel * inst/include/Rcpp/platform/compiler.h: Improved g++ version detection with thanks to Yan Zhou 2013-02-28 JJ Allaire * src/attributes.cpp: standalone roxygen chunks (e.g. to document a class) are now transposed into RcppExports.R 2013-02-27 JJ Allaire * R/Rcpp.package.skeleton.R: eliminated spurious empty hello world function definition in Rcpp.package.skeleton 2013-02-24 JJ Allaire * R/Attributes.R: add global package include file to RcppExports.cpp if it exists; handle Rcpp module definitions in sourceCpp * src/attributes.cpp: handle Rcpp module definitions in sourceCpp * man/sourceCpp.Rd: documentation updates 2013-02-20 Dirk Eddelbuettel * inst/include/Rcpp/platform/compiler.h: As deteced by Gong-Yi Liao, we need to test for __LONG_LONG_MAX__ (defined in limits.h) and not LONG_LONG_MAX (defined climits which we do not include) 2013-02-19 Romain Francois * src/api.cpp : more debugging * include/RcppCommon.h : move sexp_to_name here. Used in some debugging * include/Rcpp/vector/MatrixRow.h : fix const version of operator[] * include/Rcpp/vector/Vector.h : more debugging * include/Rcpp/internal/wrap.h : more debugging. more dispatch. 2013-02-18 Romain Francois * include/Rcpp/vector/string_proxy.h : only declare operator+= * include/Rcpp/String.h : define string_proxy::operator+=, now that String is defined. 2013-02-15 JJ Allaire * R/Attributes.R: Merge existing values of build related environment variables for sourceCpp 2013-02-12 Romain Francois * src/api.cpp : More careful about RCPP_PROTECTION_STACK init 2013-02-08 Romain Francois * include/Rcpp/as.h: re-enable as(CharacterVector[int]) 2013-02-07 Dirk Eddelbuettel * inst/THANKS: Adding Ben North for the help / bug report on iterators 2013-02-05 Romain Francois * include/Rcpp/vector/string_proxy.h : more wstring support * include/Rcpp/XPtr.h : more debugging. removed delete_finalizer which is no longer used 2013-02-05 JJ Allaire * src/attributes.cpp : ensure that line comments invalidate block comments when parsing for attributes 2013-02-04 Romain Francois * include/Rcpp/traits/r_type_traits.h : make the r_type_pairstring_string_tag tag more general, handling wstring as well as string * include/Rcpp/internal/wrap.h : using make_charsexp, a more generic version of charsexp_from_wstring. * include/Rcpp/as.h : more support fot wstring * include/Rcpp/internal/wrap.h : rework the support of wstring * include/Rcpp/internal/export.h : added as_string_elt to rework the support of wstring * include/Rcpp/traits/char_type.h : new trait to help the wstring support * include/Rcpp/String.h : added some support for wstring * include/Rcpp/vector/string_proxy.h : adapt to add wstring support * unitTests/runit.wstring.R : unit tests for wstring support * unitTests/cpp/wstring.cpp : unit tests for wstring support 2013-02-03 Romain Francois * include/Rcpp/traits/wrap_type_traits.h : support for wrap( wstring ) * include/Rcpp/internal/export.h : exporting wstring and containers of wstring * include/Rcpp/internal/wrap.h : support for wrap( wstring ) and containers of wstring * include/RcppCommon.h : definition of charsexp_from_wstring * src/api.cpp: implementation of charsexp_from_wstring 2013-02-02 Romain Francois * include/Rcpp/vector/MatrixRow.h: correct operator++(int) and operator--(int) * include/Rcpp/internal/Proxy_Iterator.h: correct operators ++ and -- * include/Rcpp/sugar/Range.h: correct operators ++ and -- * include/Rcpp/sugar/tools/iterator.h: correct operators ++ and -- * include/Rcpp/vector/MatrixBase.h : correct operators ++ and -- * include/Rcpp/vector/VectorBase.h : correct operators ++ and -- * unitTests/cpp/Vector.cpp: new unit tests * unitTests/runit.Vector.R: new unit tests * src/api.cpp: comment dropTrailing0 which is not used anymore * include/Rcpp/as.h: support for as * include/Rcpp/internal/export.h: more support for wstring 2013-01-15 Dirk Eddelbuettel * src/api.cpp (Rcpp): Commented-out coerce_to_string() for real and complex arguments as R-devel (as of today) dislikes use of non-API functions Rf_EncodeComplex’, ‘Rf_EncodeReal’, ‘Rf_formatComplex’ * .Rbuildignore: Added inst/include/Rcpp/preprocessor and sugar/functions/impl which are currently empty directories * src/Timer.cpp (Rcpp): Avoid a 'long long' warning from a const 2014-01-15 JJ Allaire * R/Attributes.R: don't add source directory as an include path for sourceCpp; fix duplicate inclusion of Rcpp directory * R/RcppLdpath.R: don't quote paths on windows 2014-01-14 JJ Allaire * DESCRIPTION: bump version to 0.10.2.3 * R/Attributes.R: handle build paths with spaces on windows * R/RcppLdpath.R: handle build paths with spaces on windows * R/tools.R: handle build paths with spaces on windows * src/Timer.cpp: fix OSX build (remove __MACH__ define check) * R/: set svn eol-style native for source files * src/: set svn eol-style native for source files * inst/include/: set svn eol-style native for source files 2014-01-13 JJ Allaire * R/Attributes.R: use plugin includes in cppFunction; stop with explicit error on Windows then the Rcpl libPath or sourceCpp target file contains spaces in it's path; add source file directory as an include path for sourceCpp; special handling for sourceCpp include paths on windows * man/pluginsAttribute.Rd: clarify which fields of plugin are used by sourceCpp 2014-01-12 JJ Allaire * DESCRIPTION: bump version to 0.10.2.2 * NAMESPACE: add registerPlugin function * R/Attributes.R: add registerPlugin function; add plugins parameter to cppFunction * man/cppFunction.Rd: documentation updates * man/pluginsAttribute.Rd: documentation updates * man/registerPlugin: documentation updates 2014-01-11 JJ Allaire * R/Attributes.R: initial support for Rcpp::plugins attribute; add built-in cpp11 plugin * src/attributes.cpp: initial support for Rcpp::plugins attribute 2014-01-04 JJ Allaire * R/Attributes.R: null check on pkginfo depends field 2013-01-02 Dirk Eddelbuettel * src/Timer.cpp (Rcpp): Applied refinement of previously applied patch re *BSD builds, see http://bugs.debian.org/697032 for more 2012-12-30 Dirk Eddelbuettel * src/Timer.cpp (Rcpp): Added defined() tests for more *BSD family members as the build also failed with the FreeBSD Kernel on Debian 2012-12-27 Dirk Eddelbuettel * src/Timer.cpp (Rcpp): Applied patch kindly supplied by Rainer Hurling to support compilation on FreeBSD 2012-12-26 JJ Allaire * R/Attributes.R: return invisibly from void functions * src/attributes.cpp: return invisibly from void functions 2012-12-21 Romain Francois * NAMESPACE : remove C++ObjectS3 and C++ClassRepresentation classes * R/00_classes.R: remove unused S4 classes * src/internal.h: added Rcpp_PreserveObject, Rcpp_ReleaseObject and Rcpp_ReplaceObject as replacements to R_ versions. The back end of the Rcpp_ version is a list (generic vector) instead of a linked list and is faster * src/Module.cpp: more debugging * src/barrier.cpp: added get_Rcpp_protection_stack used in the new stack system for protecting/releasing objects in Rcpp * src/api.cpp: implemetation of Rcpp_PreserveObject, Rcpp_ReleaseObject and Rcpp_ReplaceObject. RObject::setSEXP now uses the new system. The RObject(SEXP) constructor now directly uses Rcpp_PreserveObject More debugging for the RObject class Changes in api classes to better use the new protection system * unitTests/cpp/language.cpp: hosting unit test in sourceCpp form * unitTests/runit.Language.R: update unit tests * unitTests/runit.Module.client.package.R: remove code that has been commented for ages * include/Rcpp/DottedPair.h: better use of the RObject constructor * include/Rcpp/vector/Vector.h: better use of the RObject constructor * include/Rcpp/vector/Matrix.h: Using update_matrix instead of the virtual update which has been removed. * include/Rcpp/Module.h : more careful about types and constructors * include/Rcpp/XPtr.h: more debugging * include/Rcpp/macros/debug.h: more debugging macros * include/Rcpp/module/class_Base.h: using classes instead of SEXP * include/Rcpp/module/class.h: using classes instead of SEXP * include/Rcpp/generated/Language__ctors.h : using update_language_object instead of the virtual update which has been removed. * include/Rcpp/api/meat/Vector.h : using update_vector instead of the virtual update that has been removed, more debugging * include/Rcpp/api/meat/Matrix.h : more debugging, using update_matrix instead of the virtual update which has been removed * include/Rcpp/Language.h : added update_language_object to replace update which was virtual * include/Rcpp/RObject.h : only keep declarations here 2012-12-21 Dirk Eddelbuettel * DESCRIPTION: Release 0.10.2 * inst/NEWS.Rd: Release 0.10.2 * inst/include/Rcpp/config.h: Release 0.10.2 * debian/*: Similarly updated for new release to Debian * inst/doc/unitTests/Rcpp-unitTests.R: added one more variable so that unitTest vignette can be built against new sourceCpp based files 2012-12-15 Romain Francois * include/Rcpp/exceptions.h: added exception_to_r_condition * exceptions.cpp: new implementation of forward_exception_to_r that directly calls stop rather than a function in Rcpp * R/exceptions.R: remove code rendered useless * src/Rcpp_init.c: less exports * src/api.cpp: less going back to the R side 2012-12-14 Romain Francois * include/Rcpp/sugar/functions/clamp.h: clamp was pretty wrong * unitTests/runit.sugar.R: new unit test for clamp * unitTests/cpp/sugar.cpp: new unit test for clamp 2012-12-12 JJ Allaire * src/Attributes.R: always generate new dynlib file for rebuild=TRUE * src/attributes.cpp: set svn:eol-style to native; always generate new dynlib file for rebuild=TRUE; don't declare attributes constant strings extern 2012-12-12 Romain Francois * include/Rcpp/Symbol.h: c_str becomes const and added Symbol::operator==(const char* ) 2012-12-11 JJ Allaire * R/Attributes.R: always print output when shared library is not created * src/attributes.cpp: consolidate attributes into single file * src/Attributes.cpp: consolidate attributes into single file * src/AttributesGen.h: consolidate attributes into single file * src/AttributesGen.cpp: consolidate attributes into single file * src/AttributesParser.h: consolidate attributes into single file * src/AttributesParser.cpp: consolidate attributes into single file * src/AttributesTypes.h: consolidate attributes into single file * src/AttributesUtil.h: consolidate attributes into single file * inst/NEWS.Rd: additional notes on changes to attributes * inst/doc/Rcpp-attributes/Rcpp-attributes.Rnw: update for changes to attributes in 0.10.2 2012-12-11 Romain Francois * include/Rcpp/String.h: missing operator +=( const StringProxy& ) * include/Rcpp/sugar/functions/strings/strings.h : string sugar functions * include/Rcpp/sugar/functions/strings/collapse.h : collapse function, implementing paste( . , collapse = "" ) * include/Rcpp/complex.h: operator==( Rcomplex, Rcomplex ) * src/api.cpp: implementation of operator==(Rcomplex, Rcomplex) * include/Rcpp/vector/Vector.h: added const version of operator[](string) 2012-12-10 JJ Allaire * R/Attributes.R: warn when depends attribute is not matched with required entries in package description; add Rtools to PATH for duration of sourceCpp * src/Attributes.cpp: warn when depends attribute is not matched with required entries in package description * src/AttributesGen.cpp: prune unnecessary includes from RcppExports * src/Timer.cpp: fix timer build issues on windows 2012-12-10 Romain Francois * src/api.cpp: import r_cast.cpp, coerce.cpp, RcppCommon.cpp and debugging.cpp content * include/platform/compiler.h: put here compiler specific deduction things * src/internal.h: new header to host function declarations for routines that are not exported into Rcpp.h * src/Rcpp_init.c: export capabilities (renamed rcpp_capabilities) * include/Rcpp/traits/traits.h: master file for all traits includes * include/Rcpp/macros/macros.h: master file for all macros includes * include/Rcpp/DataFrame.h: just have declaration for DataFrame * include/Rcpp/Benchmark/Timer.h: move it into the Rcpp:: namespace * include/Rcpp/cache.h: clean * include/Rcpp/Reference.h : field was declared const and should not be. added a ConstFieldProxy class for read only use 2012-12-09 Romain Francois * src/api.cpp: merge many .cpp files here to reduce compile time * src/barrier.cpp: merge with cache.cpp to reduce compile time * include/Rcpp/exceptions.h: drop forward_uncaught_exceptions_to_r * src/exceptions.cpp: drop forward_uncaught_exceptions_to_r * src/Date.cpp: merge all Date related files 2012-12-08 Romain Francois * src/Timer.cpp: implementation of Timer * include/Rcpp/Benchmark/Timer.h: internal performance timer, based on the code from the microbenchmark package * include/Rcpp/api/meat/Matrix.h: move more in Matrix meat * src/Date.cpp: import the code from posixt.cpp 2012-12-07 JJ Allaire * src/AttributesGen.cpp: use __ prefix for variables in generated code; add RNGScope for attribute exported functions. 2012-12-07 Romain Francois * src/random.cpp: instantiations of random generators here * include/Rcpp/stats/random/random.h: only have declarations of random generators here. Rework the Generator template so that it inherits RNGScope to provide automatic calls to GetRNGstate and PutRNGstate 2012-12-06 JJ Allaire * R/Attributes.R: revert DOS newlines; use new shared library name for each rebuild in sourceCpp * src/Attributes.cpp: revert DOS newlines; define RCPP_NO_SUGAR; use new shared library name for each rebuild in sourceCpp * src/AttributesGen.cpp: revert DOS newlines; convert 'try-error' to exception for C++ interfaces * src/AttributesGen.h: 'try-error' to exception for C++ interfaces * src/AttributesParser.cpp: revert DOS newlines; define RCPP_NO_SUGAR * src/RcppCommon.cpp: conversion from exeption to 'try-error' * include/Rcpp/exceptions.h: conversion from exeption to 'try-error' * include/Rcpp/preprocessor.h: add END_RCPP_RETURN_ERROR macro to convert exceptions to 'try-error' objects * include/Rcpp/iostream/Rstreambuf.h: revert DOS newlines * DESCRIPTION: bump version to 0.10.1.5 2012-12-06 Dirk Eddelbuettel * src/exceptions.cpp: Added include of cstdlib to compile 2012-12-06 Romain Francois * include/Rcpp/api/meat/Environment.h: meat for Environment * src/exceptions.cpp: include config so that it knows that Rcpp can demangle * unitTests/runit.environments.R: using sourceCpp * src/Environment.cpp: less includes * src/Evaluator.cpp: less includes 2012-12-05 Romain Francois * src/cache.cpp: added get_cache * include/Rcpp/hash/IndexHash.h: use a cached integer vector for the hash table payload. The cache vector increases as needed. * include/Rcpp/iostream/Rostream.h: make Rostream a template * include/Rcpp/iostream/Rstreambuf.h: make Rstreambuf a template * src/AttributesGen.cpp : include exceptions.h which was included implicitely by Rostream.h before * include/Rcpp/macros/debug.h : factor out the debugging macros * include/Rcpp/api/meat/RObject.h : only declare templates that use as and wrap. they are implemented later in the meat directory * include/Rcpp/api/meat/meat.h: directory containing implementations of templates using as and wrap * include/RcppCommon.h: removed unused test_named * src/RcppCommon.cpp: removed unused test_named * src/r_cast.cpp: less includes * src/posixt.cpp: less includes 2012-12-05 JJ Allaire * src/Attributes.R: direct hookup of external ptr in sourceCpp * src/Attributes.cpp: use code generation for compileAttributes; direct hookup of external ptr in sourceCpp * src/AttributesGen.cpp: use code generation for compileAttributes; direct hookup of external ptr in sourceCpp * src/AttributesGen.h: use code generation for compileAttributes; direct hookup of external ptr in sourceCpp * src/Module.cpp: fix typo in GetCppCallable * include/Rcpp/iostream/Rstreambuf.h: add cstdio include * DESCRIPTION: bump version to 0.10.1.4 2012-12-04 Dirk Eddelbuettel * inst/include/Rcpp/hash/hash.h: Added include inttypes.h for intptr_t 2012-12-04 JJ Allaire * R/Attributes.R: use simple code generation for sourceCpp * src/Attributes.cpp: move generators into their own source file; use simple code generation for sourceCpp * src/AttributesGen.cpp: move generators into their own source file; add C++ default argument parsing * src/AttributesGen.h: move generators into their own source file * src/AttributesParser.cpp: move generators into their own source file * src/AttributesParser.h: move generators into their own source file * src/AttributesTypes.h: new header for attributes types * src/AttributesUtil.h: new header for attributes utilities 2012-12-04 Romain Francois * include/Rcpp/hash/hash.h: new implementation of IndexHash, based on Simon's fastmatch package * include/Rcpp/sugar/functions/match.h: more efficient version of match using new IndexHash * include/Rcpp/sugar/functions/unique.h: more efficient version of unique and in using IndexHash * include/Rcpp/sugar/functions/duplicated.h: more efficient version of duplicated and in using IndexHash * include/Rcpp/sugar/functions/self_match.h: more efficient version of self_match and in using IndexHash * include/Rcpp/vector/Vector.h: more efficiently create Vector from sugar expression that are already vectors, i.e. grab the SEXP 2012-12-03 Dirk Eddelbuettel * inst/include/RcppCommon.h: Applied patch kindly contributed by Yan Zhou which provides a number of more refined definition for support of both the C++11 standard and different compilers * inst/include/Rcpp/internal/wrap.h: Idem * inst/include/Rcpp/sugar/sugar.h: Idem * inst/include/Rcpp/traits/comparator_type.h: Idem * inst/include/Rcpp/vector/Vector.h: Idem * inst/unitTests/runit.wrap.R: Idem * src/RcppCommon.cpp: Idem * DESCRIPTION: Increase minor dev. version once more 2012-12-03 JJ Allaire * R/Attributes.R: added function to check whether R development tools are currently installed 2012-12-03 Romain Francois * src/Module.cpp: move BEGIN_RCPP/END_RCPP to Module__invoke * src/coerce.cpp: added coerce_to_string implementations * include/RcppCommon.h : nicer formatting for RCPP_DEBUG_*, now up to RCPP_DEBUG_5 * include/Rcpp/vector/Vector.h: debugging * include/Rcpp/String.h: The String class * include/Rcpp/as.h: support for String * include/Rcpp/vector/converter.h : support for String * include/Rcpp/vector/string_proxy.h: support for String * include/Rcpp/internal/wrap.h : support for String * include/Rcpp/internal/r_coerce.h: support for String * include/Rcpp/sugar/functions/sapply.h: debugging * include/Rcpp/traits/wrap_type_traits.h: support for String * include/Rcpp/traits/r_type_traits.h: support for String * unitTests/cpp/String.cpp : unit tests for String * unitTests/runit.String.R: unit test for String * include/Rcpp/sugar/sets.h: support for String 2012-12-01 Dirk Eddelbuettel * inst/include/RcppCommon.h: Applied patch by Yan Zhou to add support for clang++ with libc++, and Intel's icpc when std=c++11 2012-11-29 Romain Francois * unitTests/runit.DataFrame.R: using sourceCpp * include/Rcpp/vector/Matrix.h: fix yet another const correctness issue 2012-11-27 Dirk Eddelbuettel * inst/include/Rcpp/iostream/Rostream.h: Check before deleting buf 2012-11-26 Dirk Eddelbuettel * DESCRIPTION: Release 0.10.1 * inst/NEWS.Rd: Release 0.10.1 * inst/include/Rcpp/config.h: Release 0.10.1 * debian/*: Similarly updated for new release to Debian * DESCRIPTION: Added paragraph about Rcpp attributes * debian/control: Idem 2012-11-26 Romain Francois * include/Rcpp/Module.h: comment out the unused and unuseable converter overload. * include/Rcpp/sugar/functions/pmin.h: be consistent about how the pmin_op helper struct is defined (always a struct). * include/Rcpp/sugar/functions/pmax.h: same for pmax * include/Rcpp/stats/random/rbeta.h: fixed constructor issue * unitTests/runit.sugar.R: rework to use sourceCpp instead of inline * include/Rcpp/vector/Vector.h: added ctor to deal with SingleLogicalResult * include/Rcpp/vector/Matrix.h: another const correctness fix 2012-11-25 JJ Allaire * R/Attributes.R: use echo = TRUE for sourceCpp R code chunks * src/Module.cpp: BEGIN_RCPP/END_RCPP in InternalFunction_invoke * inst/doc/Rcpp-attributes/Rcpp-attributes.Rnw: add documentation on correct semantics for signaling error conditions 2012-11-24 JJ Allaire * inst/doc/Rcpp-attributes/Rcpp-attributes.Rnw: expand discussion of binary compatibility issues. 2012-11-23 Romain Francois * src/AttributesParser.cpp : attempt to fix build issue on r-forge * include/Rcpp/DataFrame.h: nrows() method * include/Rcpp/vector/RangeIndexer.h: now derives from VectorBase so that we can use it in sugar. 2012-11-22 JJ Allaire * include/exceptions.h: new exception constructor / stop function * src/exceptions.cpp: new exception constructor / stop function * include/RcppCommon.h: new exception constructor / stop function 2012-11-22 Romain Francois * include/Rcpp/iostream.h: use delete rdbuf() as recommended by Martyn Plummer * include/Rcpp/sugar/functions/self_match.h: self_match, giving a functionality similar to match( x, unique(x) ) * src/coerce.cpp: added coercion to STRSXP * include/Rcpp/internal/r_coerce.h : added r_coerce<.,STRPSXP> * include/Rcpp/sugar/functions/table.h: sugar table * include/Rcpp/sugar/functions/duplicated.h: sugar duplicated 2012-11-21 JJ Allaire * R/Rcpp.package.skeleton.R: add 'attributes' and 'cpp_files' parameters to Rcpp.pacakge.skeleton * inst/skeleton/rcpp_hello_world_attributes.cpp: version of hello world that uses attributes * man/Rcpp.package.skeleton.Rd: doc updates * inst/doc/Rcpp-attributes/Rcpp-attributes.Rnw: doc updates * DESCRIPTION: bump version to 0.10.0.3 2012-11-21 Dirk Eddelbuettel * inst/examples/Misc/piBySimulation.r: New simple example using Rcpp attributes in a 'compute pi by simulation in R and C++' exercise * inst/examples/Misc/piSugar.cpp: Corresponding C++ variant 2012-11-21 Romain Francois * include/Rcpp/iostream/Rostream.h: Fix warning given by -Wreorder * include/Rcpp/sugar/functions/mapply/mapply_3.h: more flexible * include/Rcpp/vector/Vector.h: More efficient assign_object, which is used in the assignment operator * include/Rcpp/sugar/functions/clamp.h: added clamp function 2012-11-20 JJ Allaire * src/Attributes.cpp: ensure dynlib cache state is always updated * inst/doc/Rcpp-attributes/Rcpp-attributes.Rnw: elaborate further on exporting C++ interfaces from packages 2012-11-20 Romain Francois * include/Rcpp/iostream/Rostream.h: change order of initiaization in ctor. was making solaris compiler unhappy * include/Rcpp/stats/random/rnorm.h: not using function pointer generators, as this generates (anachronisms) warning on solaris. Also, this version is more efficient since there is no need to dereference the function pointer 2012-11-19 JJ Allaire * src/AttributesParser.h: support for argument default values * src/AttributesParser.cpp: support for argument default values * src/Attributes.cpp: support for argument default values * man/exportAttribute.Rd: documentation updates * man/compileAttributes.Rd: documentation updates * man/sourceCpp.Rd: documentation updates * inst/doc/Rcpp-attributes/Rcpp-attributes.Rnw: add documentation on changes to attributes in 0.10.1 2012-11-18 JJ Allaire * R/Attributes.R: sourceCpp embedded R code; print warning if no export attributes are found in source file * src/AttributesParser.h: sourceCpp embedded R code * src/AttributesParser.cpp: sourceCpp embedded R code; new scheme for mixing user and generated C++ headers * src/Attributes.cpp: sourceCpp embedded R code; include above generated modules * man/sourceCpp.Rd: documentation updates * man/interfacesAttribute.Rd: documentation updates 2012-11-18 Romain Francois * include/Rcpp/vector/converter.h: allow CharacterVector::create( NA_STRING ) * include/Rcpp/sugar/functions/mapply/mapply_2.h: more cases in mapply 2012-11-17 Dirk Eddelbuettel * inst/doc/Rcpp-modules/Rcpp-modules.Rnw: Change free function name 'range' to 'uniformRange' to protect it from getting clobbered by the new sugar function range. 2012-11-17 Romain Francois * include/Rcpp/internal/wrap_end.h: have calls to wrap as late as possible so that they "see" all (potentially user defined) overloads of wrap. * include/Rcpp/internal/SEXP_Iterator.h: directly iterate over SEXP. const iterator for List and ExpressionVector 2012-11-16 Romain Francois * include/Rcpp/vector/Vector.h : added static methods Vector::is_na and Vector::get_na * include/Rcpp/sugar/functions/setdiff.h: initial version of setdiff and intersect * include/Rcpp/vector/MatrixColumn.h: dealing with const-ness * include/Rcpp/vector/MatrixRow.h: dealing with const-ness * include/Rcpp/vector/traits.h: dealing with const-ness * include/Rcpp/vector/proxy.h: dealing with const-ness * include/Rcpp/vector/MatrixBase.h: dealing with const-ness * include/Rcpp/vector/Vector.h: dealing with const-ness 2012-11-15 Romain Francois * include/Rcpp/sugar/logical/SingleLogicalResult.h : apply patch suggested by Karl Millar * R/Attributes.R: new R function areMacrosDefined * man/evalCpp.Rd: documentation update * include/Rcpp/sugar/functions/match.h : generic version of match * include/Rcpp/sugar/tools/iterator.h: help iterator that helps writing match in terms of stl algorithms. * include/Rcpp/vector/Vector.h: class no_init that can be used to create an uninitialized vector. e.g. IntegerVector out = no_init(10) ; * include/Rcpp/sugar/functions/unique.h: sugar version of %in% using unordered_set * include/Rcpp/sugar/functions/minmax.h: min, max, and range 2012-11-14 JJ Allaire * src/Attributes.cpp: create sourceCpp context list using single statement 2012-11-14 Dirk Eddelbuettel * inst/announce/ANNOUNCE-0.10.0.txt: Fix typo spotted by Martin Morgan in announcement mail 2012-11-14 Romain Francois * include/Rcpp/internal/wrap.h: fix for wrap( std::complex ) * include/Rcpp/module/class_Base.h: factored out from Module.h * R/00_classes.R: the C++Class gains the parents slot to hold information about parent classes of the class * src/Module.cpp : The CppClass constructor fills the parents slot of C++Class 2012-11-13 Dirk Eddelbuettel * DESCRIPTION: Release 0.10.0 * inst/NEWS: Release 0.10.0 * inst/include/Rcpp/config.h: Release 0.10.0 * debian/*: Similarly updated for new release to Debian 2012-11-13 Romain Francois * include/Rcpp/as.h: as * include/Rcpp/internal/wrap.h : wrap( enum ) * include/Rcpp/traits/wrap_type_traits.h: trait to help wrap( enum ) * include/Rcpp/traits/r_type_traits.h: trait to help as * include/Rcpp/module/macros.h: macros RCPP_EXPOSED_ENUM to help as/wrap of enums 2012-11-12 Dirk Eddelbuettel * inst/announce/ANNOUNCE-0.10.0.txt: Announcement draft 2012-11-12 JJ Allaire * inst/doc/Rcpp-attributes/*: New vignette 2012-11-12 Romain Francois * include/Rcpp/vector/Vector.h : adding const_iterator and associated begin() and end() methods * include/Rcpp/vector/Matrix.h : idem 2012-11-11 JJ Allaire * src/Attributes.cpp: fully qualify _ in generated code 2012-11-11 Romain Francois * include/Rcpp/iostream/Rstreambuf.h: implementing sync() so that flush works * src/Rstreambuf.cpp: implementation * src/Rostream.cpp : added Rcerr that forwards to REprintf 2012-11-10 JJ Allaire * R/Attributes.R: ensure function definitions are never stale * src/Attributes.cpp: add optional hook for inclusion of package types * examples/Attributes/Export.cpp: example use of Rcpp::export * examples/Attributes/Depends.cpp: example use of Rcpp::depends * examples/Attributes/sourceCpp.R: example use of sourceCpp() * examples/Attributes/cppFunction.R: example use of cppFunction() 2012-11-09 Romain Francois * R/Attributes.R: Passing verbose from evalCpp to cppFunction * include/RcppCommon.h: include instead of * include/Rcpp/vector/CharacterVectorExtractionIterator.h: iterator class to quickly iterate over the content of a CharacterVector. The content that is iterated over is to be considered read-only. 2012-11-08 JJ Allaire * R/Attributes.R: special sourceCpp handling for file within the src directory of a package; use .h as suffix for generated headers * src/Attributes.cpp: add information on arguments to Rcpp module; use inline rather than static linkage for generated C++ shims; generated headers: add header guard and use .h suffix; * man/cppFunction.Rd: update documentation * man/sourceCpp.Rd: update documentation * man/evalCpp.Rd: update documentation * man/exportAttribute.Rd: update documentation * man/interfacesAttribute.Rd: update documentation 2012-11-08 Romain Francois * R/Module.R: Module functions taking no arguments don't get the ellipsis anymore in their formals * src/Module.cpp: passing up the number of arguments of the function * R/Attributes.R: added evalCpp * man/evalCpp.Rd: documentation for evalCpp 2012-11-07 JJ Allaire * R/Attributes.R: derive depends from package LinkingTo; change sourceCpp plugin parameter to depends and respect Rcpp::interfaces generated include files * src/Attributes.cpp: validate exported C++ functions before calling; use static rather than inline for stubs to avoid call-site bloat; improved error message when package hpp already exists; import Rcpp namespace into package shim namespace * src/AttributesParser.h: add signature and isHidden methods * src/AttributesParser.cpp: add signature and isHidden methods * src/exceptions.cpp: add function_not_exported exception * include/Rcpp/exceptions.h: add function_not_exported exception * man/cppFunction.Rd: update documentation * man/sourceCpp.Rd: update documentation * man/compileAttributes.Rd: update documentation * man/dependsAttribute.Rd: update documentation * man/exportAttribute.Rd: update documentation * man/interfacesAttribute.Rd: update documentation 2012-11-07 Romain Francois * src/Language.cpp: Language gains a fast_eval method, without the whole try/catch * src/barrier.cpp: function char_nocheck to avoid the check in using CHAR * include/Rcpp/sugar/functions/unique.h: sugar unique and sort_unique using unordered_set (perhaps we could use it from c++11). 2012-11-06 JJ Allaire * R/Attributes.R: tweak whitespace in verbose mode * src/AttributesParser.h: support for interfaces attribute * src/AttributesParser.cpp: support for interfaces attribute * src/Attributes.cpp: support for interfaces attribute; refactor code generators; use single module for exports; return list of updated files from compileAttributes * src/Module.cpp: add package parameter to GetCppCallable * include/Rcpp/Module.h: add package parameter to GetCppCallable * man/compileAttributes.Rd: documentation updates 2012-11-05 Romain Francois * include/Rcpp/Module.h: added class CppInheritedProperty to handle inherited properties * include/Rcpp/module/class.h: implemented inheritance of properties 2012-11-05 JJ Allaire * R/Attributes.R: use modules for attribute code generation * src/Attributes.cpp: use modules for attribute code generation * src/AttributesParser.h: use modules for attribute code generation * src/AttributesParser.cpp: use modules for attribute code generation 2012-11-04 Dirk Eddelbuettel * tests/doRUnit.R: In "development releases" (such as 0.9.15.5) we now default to setting the required CRAN-test-workaround-kludge "RunAllRcppTests" to "yes" as a default -- but not for actual releases (with versions such as 0.9.15) 2012-11-04 Romain Francois * include/Rcpp/module/CppFunction.h: fixed module bug (virtual function was not defined) 2012-11-03 JJ Allaire * Use CLINK_CPPFLAGS rather than PKG_CXXFLAGS for LinkingTo include directories (identical behavior to inline) 2012-11-03 Romain Francois * include/Rcpp/sugar/functions/which_min.h : sugar which.min * include/Rcpp/sugar/functions/which_max.h : sugar which.max * include/Rcpp/module/Module.h : added get_function_ptr which returns the pointer of the target function as a DL_FUNC 2012-11-02 Dirk Eddelbuettel * inst/unitTests/runit.rmath.R: More tests added 2012-11-02 Romain Francois * include/Rcpp/module/CppFunction.h : factored CppFunction in its own file and added the get_function_ptr virtual method. added documentation * include/Rcpp/module/Module_generated_CppFunction.h: implementation of get_function_ptr in classes that derive CppFunction * src/Module.cpp: s/get_function_ptr/get_function/ * include/Rcpp/module/Module.h : factored out and documented. s/get_function_ptr/get_function/ 2012-11-01 Dirk Eddelbuettel * inst/unitTests/runit.rmath.R: New unit test file added 2012-11-01 JJ Allaire * R/Attributes.R: change 'envir' param to 'env' for consistency with the interface of loadModule * man/sourceCpp.Rd: documentation updates * man/cppFunction.Rd: documentation updates 2012-11-01 Romain Francois * include/Rcpp/sugar/logical/or.h : implementing x | y where x and y are Logical sugar expressions * include/Rcpp/sugar/logical/and.h : implementing x & y where x and y are Logical sugar expressions 2012-10-31 JJ Allaire * R/Attributes.R: add cppFunction for inline-style definitions; change 'local' param to (more clear and explicit) 'envir' param; change 'show.output' param to 'showOutput'; add parameter to onBuild hook to indicate if the source was from a 'code' parameter * src/Attributes.cpp: factored parser into it's own file * src/AttributesParser.h: attributes parser header * src/AttributesParser.cpp: attributes parser implementation * man/sourceCpp.Rd: documentation updates * man/compileAttributes.Rd: documentation updates * man/cppFunction.Rd: documentation for cppFunction * NAMESPACE: export for cppFunction 2012-10-31 Romain Francois * include/Rcpp/module/class.h: factored out of Module.h which started to be too big. class_ gains a derives( "Parent" ) for so that the class inherits method that were exposed by its parent. * include/Rcpp/Module.h: template class CppInheritedMethod for implementing inherited method * src/Module.cpp: get_class_pointer implementation 2012-10-30 Dirk Eddelbuettel * inst/include/Rcpp/Rmath.h: Finalised adding Rmath functions 2012-10-30 JJ Allaire * R/Attributes.R: new functions sourceCpp and compileAttributes that use C++11 style attributes (embedded in comments) to perform automatic generation of boilerplate marshaling code * src/Attributes.cpp: support functions for attribute handling * include/Rcpp/exceptions.h: file io exception classes * man/sourceCpp.Rd: documentation for sourceCpp * man/compileAttributes.Rd: documentation for compileAttributes * man/exportAttriute.Rd: documentation for export attribute * man/dependsAttribute.Rd: documentation for depends attribute * NAMESPACE: exports for sourceCpp and compileAttributes 2012-10-30 Romain Francois * include/Rcpp/as.h: new bare_as to simplify uses of as * include/Rcpp/module/Module_generated_Factory.h: using bare_as * R/Module.R: promoting the show method * src/Attributes.cpp: remove g++ warning (int != size_t) 2012-10-29 Dirk Eddelbuettel * inst/include/Rcpp/Rmath.h: More Rmath functions 2012-10-29 Romain Francois * R/Module.R: Taking care of a check warning * include/Rcpp/module/macros.h: adding RCPP_EXPOSED_CLASS_NODECL * include/Rcpp/Module.h: introducing converter to facilitate conversion between classes. * R/Module.R: Methods registered internally with converter will generate the appropriate "as" S4 method. 2012-10-28 Dirk Eddelbuettel * inst/include/Rcpp/Rmath.h: Beginnings of a namespave 'R' around Rmath functions so that Rcpp users can call the (scalar) functions R::pnorm() which helps with adapting or integrating programs writting outside of Rcpp 2012-10-27 Dirk Eddelbuettel * inst/include/Rcpp/module/macros.h: Add forward declaration of class to macro 'RCPP_EXPOSED_CLASS' 2012-10-25 Romain Francois * include/Rcpp/internal/wrap.h: wrapping module object with the help of the RCPP_EXPOSED_CLASS * include/Rcpp/module/macros.h: improving the macros so that wrap and as are covered * include/Rcpp/traits/wrap_type_traits.h: wrapping module objects * include/Rcpp/module/Module_generated_class_factory.h : factories are alternatives to constructors. For now, we can expose as factories any free function that returns a pointer to the target class * include/Rcpp/module/Module_generated_Factory.h : factories * include/Rcpp/Module.h: exposing factories 2012-10-24 Romain Francois * include/Rcpp/traits/is_pointer.h: traits to identify if a type is a pointer * include/Rcpp/traits/un_pointer.h: traits to remove a pointer * include/Rcpp/module/Module_generated_get_return_type.h : handle pointer return types * include/Rcpp/config.h: define RCPP_HAS_DEMANGLING for MAC OS <= 10.7 (up to Lion) * include/Rcpp/module/macros.h: new file that contains macro to help with modules * include/Rcpp/traits/r_type_traits.h : new tag to allow as where T is some class exposed in a module * include/Rcpp/as.h : implementation of as in that case 2012-10-23 Romain Francois * include/Rcpp/internal/wrap.h: new function module_wrap used internally by modules * include/Rcpp/module/Module_generated_CppMethod.h: using module_wrap and simplified the code (removing 35% of the generated code now rendered useless) * include/Rcpp/module/Module_generated_PointerCppMethod.h: using module_wrap and simplified the code * include/Rcpp/traits/module_wrap_traits.h : new file. helping implementation of module_wrap * R/00_classes.R: C++OverloadedMethods gets the field "nargs" to capture the number of arguments * R/01_show.R: cleanup * R/Module.R: handle the case where a method has no argument. In that case, the ellipsis does not end up in the formals * include/Rcpp/Module.h: exposing nargs in C++OverloadedMethods 2012-10-22 Romain Francois * include/Rcpp/as.h: support for as<> for module objects * include/Rcpp/Module.h: idem * include/Rcpp/traits/r_type_traits.h: idem * src/Module.cpp: idem 2012-10-21 Romain Francois * include/Rcpp/traits/wrap_type_traits.h: support for wrapping module objects * include/Rcpp/internal/wrap.h : idem * include/Rcpp/Module.h: idem 2012-10-13 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.15 * inst/NEWS: Release 0.9.15 * inst/include/Rcpp/config.h: Release 0.9.15 * debian/*: Similarly updated for new release to Debian 2012-10-08 Dirk Eddelbuettel * src/exceptions.cpp: Additional PROTECT for parsing exception messages before returning them to R, from a suggestion by Ben North 2012-10-07 Dirk Eddelbuettel * inst/unitTests/runit.Date.R: Added a few more tests 2012-10-06 Dirk Eddelbuettel * inst/include/Rcpp/Date.h: Dates are now represented as doubles, also added accessor functions for double and retained int * src/Date.cpp: Convert from SEXP to double, added constructor from double and added checks for 'finite' representation before converting to 'struct tm' adding support for NA, NaN and Inf * src/DateVector.cpp: Instantiate Date types as double * src/Datetime.cpp: Also added support for NA, NaN and Inf values * inst/unitTests/runit.Date.R: A few additional tests 2012-10-05 Dirk Eddelbuettel * src/exceptions.cpp: Applied patch by Martin Morgan which untangles the clang includes driven by version, and uses direct tests for presence of the header file * inst/include/RcppCommon.h: No longer define CLANG version meta variables as we can directly include the relevant header 2012-09-30 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.14 * inst/NEWS: Release 0.9.14 * inst/include/Rcpp/config.h: Release 0.9.14 * debian/*: Similarly updated for new release to Debian 2012-09-08 Dirk Eddelbuettel * inst/unitTests/runit.sugarOps.R: More sugar Ops unit tests 2012-09-07 Dirk Eddelbuettel * inst/unitTests/runit.sugarOps.R: (Incomplete) beginnings of new unit test file for sugar operations on vectors and matrices 2012-09-07 Romain Francois * inst/include/Rcpp/sugar/functions/sign.h: Sign gets a SEXP operator 2012-09-03 Dirk Eddelbuettel * inst/include/Rcpp/sugar/functions/math.h: Added new sugar function trunc(), round() and signif() * inst/unitTests/runit.sugar.R: Added unit tests for these 2012-09-01 Dirk Eddelbuettel * inst/doc/Makefile: The 'all' target is now empty to prevent autobuilders such as R-Forge from falling over 2012-07-23 Dirk Eddelbuettel * R/bib.R: Trim the trailing ".bib" from the generated bibtex filename as Windows adds one anyway leading to two and an error 2012-07-21 Dirk Eddelbuettel * inst/include/Rcpp/Module.h (Rcpp): Corrected typo / incomplete reference in finalizer use 2012-07-06 Dirk Eddelbuettel * inst/include/Rcpp/config.h: In order to not attempt to include exception_defines.h if on OS X (as the clang runtime may not have predictable access to g++ headers providing these), do not define RCPP_HAS_DEMANGLING which is used in src/exceptions.cpp 2012-06-28 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.13 * inst/NEWS: Release 0.9.13 * inst/include/Rcpp/config.h: Release 0.9.13 * debian/*: Similarly updated for new release to Debian * tests/doRUnit.R: Updated, added (by default commented-out) setting to enforce all tests to run, added standard copyright headers noting heritage off work by Martin Maechler and Gregor Gorjanc * inst/unitTests/runTests.R: Only check environment variable to run all tests if it is not already set (to cooperate with doRUnit.R) 2012-06-27 Dirk Eddelbuettel * src/Environment.cpp: Default ctor initializes its RObject with R_GlobalEnv; SEXP constructor does not use a default arg as it tests * inst/include/Rcpp/Environment.h: Corresponding change * inst/include/RcppCommon.h: #define(s) for before/after clang++ 3.0 * src/exceptions.cpp: Added support for clang++ (>= 3.0) which (just like g++ 4.6 or later) needs bits/exceptions_defines * inst/unitTests/runit.modref.R: re-activated * inst/unitTests/runit.Module.client.package.R: re-activated core * inst/unitTests/runit.modref.R: Run only if RunAllCppTests var set * inst/unitTests/runit.Module.client.package.R: Idem * inst/unitTests/runit.support.R: Idem * inst/unitTests/runit.rcout.R: Idem * inst/unitTests/runit.environments.R: Idem * inst/unitTests/runit.Language.R: Idem * inst/unitTests/runit.Function.R: Idem 2012-06-23 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.12 * inst/NEWS: Release 0.9.12 * inst/include/Rcpp/config.h: Release 0.9.12 * debian/*: Similarly updated for new release to Debian * src/Environment.cpp: Remove empty constructor which is redundant since fix in rev3592 with default SEXP value of R_GlobalEnv * inst/include/Rcpp/Environment.h: Idem * inst/unitTests/runTests.R (allTests): Command-line flag --allTests sets an environment variable indicating that all tests should run * inst/unitTests/runit.Module.R: Run only if RunAllCppTests var set * inst/unitTests/runit.Module.client.package.R: Idem * inst/unitTests/runit.client.package.R: Idem * inst/unitTests/runit.XPtr.R: Idem * inst/unitTests/runit.macros.R: Idem * inst/doc/unitTests/Rcpp-unitTests.R: Ensure Rcpp-unitTests vignette is built with RunAllCppTests flag set * cleanup: Also clean in inst/unitTests/testRcppClass/src * DESCRIPTION: Set Maintainer: to edd@debian.org as CRAN prefers to receive upload email from the same address the Maintainer field 2012-06-22 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.11 * inst/NEWS: Release 0.9.11 * inst/include/Rcpp/config.h: Release 0.9.11 * debian/*: Similarly updated for new release to Debian * DESCRIPTION: Increased Depends to R (>= 2.15.1) 2012-06-21 Dirk Eddelbuettel * inst/doc/Rcpp-modules/Rcpp-modules.Rnw: Updated to reflect use under R 2.15.1 * inst/skeleton/zzz.R: Idem 2012-06-20 Dirk Eddelbuettel * R/loadRcppModules.R: Use lib.loc= argument on packageDescription() as suggested by Kurt, and fetch libname from enclosing environment * DESCRIPTION: Typo and grammar fixes with thanks to Kurt and Doug 2012-05-25 Dirk Eddelbuettel * inst/skeleton/zzz.R: Added new 'evalqOnLoad()' call for R-devel, currently commented out 2012-05-24 Dirk Eddelbuettel * inst/skeleton/Num.cpp: Added to Rcpp.package.skeleton(); will be added when module=TRUE in call * inst/skeleton/stdVector.cpp: Idem * inst/unitTests/testRcppModule/src/rcpp_module.cpp: added more comments, added copyright header, corrected output of example functions by not escaping "backslash-n" twice * inst/unitTests/testRcppModule/src/stdVector.cpp: added some comments, added copyright header * inst/unitTests/testRcppModule/src/Num.cpp: Idem * inst/unitTests/runit.Module.client.package.R: Added four simple tests for Rcpp Modules * inst/doc/Rcpp-modules/Rcpp-modules.Rnw: Some extensions and clarifications added 2012-05-13 Dirk Eddelbuettel * inst/include/Rcpp/iostream/Rostream.h: Added Rstreambuf.h include as per rcpp-devel discussion with Alexey Stukalov 2012-05-09 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Expanded R CMD SHLIB discussion after suggested changes from SC8ren HC8jsgaard; also expanded compiler section a little mentioning clang/clang++ and icc. 2012-05-02 Dirk Eddelbuettel * src/Environment.cpp: Move one default argument to Environment.h * src/Function.cpp: Move one default argument to Function.h * inst/THANKS: Thanks to Anirban Mukherjee for these two changes 2012-04-28 John M Chambers * R/RcppClass.R: use globalVariables() from R 2.15.1 (with exists() test to no break older versions) to declare C++ fields and methods * inst/unitTests/testRcppClass/R/load.R: test use 2012-04-22 Dirk Eddelbuettel * src/debugging.cpp: Expanded 'if defined()' test to included Cygwin thanks to a patch submitted by Dario Buttari 2012-04-19 Dirk Eddelbuettel * src/Evaluator.cpp: errorOccuredSym never used and commented out 2012-04-18 John M Chambers * R/RcppClass.R: New version of setRcppClass, allowing R classes to extend C++ classes used via Rcpp modules * R/loadModule.R: New function, replaces uses of .onLoad() * man/*: Added/updated corresponding documentation 2012-04-07 Romain Francois * inst/include/Rcpp/vector/Vector.h: bug fix. reported on Rcpp-devel http://comments.gmane.org/gmane.comp.lang.r.rcpp/3292 2012-03-29 Dirk Eddelbuettel * inst/unitTests/runit.Vector.R: unit test for containsElementNamed 2012-03-29 Romain Francois * inst/include/Rcpp/vector/Vector.h: Vector<> gains the containsElementNamed method to test for presence of named element 2012-03-24 Romain Francois * src/cache.cpp: Using a single Rcpp_cache, stored in the Rcpp namespace * src/Evaluator.cpp: Using tryCatch instead of rcpp_tryCatch, no more using .Internal; but still define rcpp_TryCatch for backwards compat. 2012-03-23 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Added short subsection on how to test a package from the command-line, expanding a patch by Glenn Lawyer in response to an initial rcpp-devel post by Dirk 2012-02-16 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.10 * inst/NEWS: Release 0.9.10 * inst/include/Rcpp/config.h: Release 0.9.10 * debian/*: Similarly updated for new release to Debian 2012-02-16 Douglas Bates * src/Evaluator.cpp: PROTECT the expr argument to Evaluator::Run. Reorganize code. 2011-12-15 Douglas Bates * src/Evaluator.cpp: Avoid Rf_install inside an R API call 2012-02-12 Dirk Eddelbuettel * R/excections.R: Revert to previous use with .Internal * R/tools.R: Add branch for R 2.15.0 which can use assingInMyNamespace; else still use unlockBinding 2012-02-12 Dirk Eddelbuettel * Rcpp-introduction.Rnw: Small wording fix thanks to Pat Burns 2012-02-06 Romain Francois * R/exceptions.R: one less .Internal call * src/Evaluator.cpp: one less .Internal call 2012-02-03 Romain Francois * inst/include/Rcpp/Extractor.h: remove use of Fast in Extractor * inst/include/Rcpp/sugar/functions/mapply/mapply.h: new sugar function, similar to sapply, but with 2 or 3 (for now) input vectors 2012-02-01 Romain Francois * inst/include/Rcpp/iostream/Rostream.h: no need to include Rcpp.h here * inst/include/RcppCommon.h: include Rostream.h here, instead of ... * inst/include/Rcpp.h: ... here (needed for RcppArmadillo) 2012-01-29 Romain Francois * inst/include/Rcpp/sugar/diff.h: custom implementation of diff for the REALSXP case, skipping unnecessary NA tests 2012-01-24 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: New FAQ entry on passing a single option to g++, based on a rcpp-devel question by Whit Armstrong. 2012-01-15 Romain Francois * inst/include/Rcpp/vector/Vector.h: fixing IntegerVector(int,int), reported by Gregor Kastner on rcpp-devel * inst/unitTests/runit.Vector.R: regression test for the above 2011-12-25 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.9 * inst/NEWS: Release 0.9.9 * inst/include/Rcpp/config.h: Release 0.9.9 * debian/*: Similarly updated for new release to Debian 2011-12-24 Dirk Eddelbuettel * Reverting the 'int64' changes listed below (during the period from Oct-31 to Nov-07) which adversely affect packages using Rcpp We will re-apply the 'int64' changes in a way which should cooperate more easily with 'long' and 'unsigned long' This covered svn revisions 3264 to 3308. * DESCRIPTION: Remove (for now) Depends: on int64 * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Ditto for int64_t example * inst/unitTests/runit.Module.client.package.R: On Windows, deactivate 'test.Module.package' * inst/unitTests/runit.client.package.R: On Windows, deactivate 'test.client.packageA' test 2011-12-23 Dirk Eddelbuettel * inst/unitTests/runTests.R: unit tests output 'fallback' directory changed to '..' and files are now in top-level of $pkg.Rcheck/ 2011-12-21 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.8 * inst/NEWS: Release 0.9.8 * inst/include/Rcpp/config.h: Release 0.9.8 * debian/*: Similarly updated for new release to Debian 2011-12-20 Dirk Eddelbuettel * inst/skeleton/zzz.R (.onLoad): correct order of arguments 2011-12-18 Dirk Eddelbuettel * inst/examples/FastLM/lmArmadillo.R: Link with -llapack when using external Armadillo library (but RcppArmadillo makes all this easier) 2011-12-18 Romain Francois * inst/doc/*: Fixes to various vignettes for new version of highlight 2011-12-16 Douglas Bates * inst/unitTests/runit.stats.R: Correct cut+paste typo in qbinom * inst/include/Rcpp/XPtr.h: Check for XPtr type constructing from SEXP 2011-12-12 John M Chambers * R/RcppClass.R: Added setRcppClass for classes extending C++ classes * man/setRcppClass.Rd: Added corresponding documentation * NAMESPACE: Added corresponding exports entry 2011-11-13 Dirk Eddelbuettel * inst/include/Rcpp/stats/f.h: Correct call to not require ncp parameter * inst/unitTests/runit.stats.R: Add unit tests for pf(), pnf(), pchisq(), pnchisq() and pcauchy() 2011-11-07 Romain Francois * include/Rcpp/internal/wrap.h: implemented wrap_dispatch_importer__impl for int64 and uint64, needed for RProtoBuf * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Add int64_t usage example 2011-11-06 Romain Francois * include/Rcpp/modules/Module_generated_Pointer_method.h: added code to deal with const free "methods", e.g. OUT foo( const Class*, ...) in modules Before const_method could only deal with actual const methods of the class, e.g. OUT Class::foo( ... ) const * include/Rcpp/modules/Module_generated_Pointer_CppMethod.h: idem * include/Rcpp/as.h: deal with as and as * include/Rcpp/internal/export.h : deal with as< some_container > and as< some_container > where some_container is some container that has iterators, e.g. std::vector 2011-10-31 Romain Francois * include/Rcpp/int64/int64_lite.h: handling int64_t and uint64_t types, based on the int64 package * include/Rcpp/internal/wrap.h: new dispatch layers to handle int64_t, uint64_t and containers of these * DESCRIPTION: new depending on int64 2011-10-28 Dirk Eddelbuettel * inst/include/Rcpp/iostream/Rostream.h (Rcpp): Added tentative patch for operator<< also contributed by Jelmer Ypma -- but kept commented out for now 2011-10-25 Dirk Eddelbuettel * src/Rostream.cpp: Patch by Jelmer Ypma which adds a new device 'Rcout' not unlike std::cout but uses Rprintf internally * src/Rstreambuf.cpp: Idem * include/include/Rcpp/iostream/Rostream.h: Idem * include/include/Rcpp/iostream/Rstreambuf.h: Idem * include/include/Rcpp.h: Include new headers * inst/unitTests/runit.rcout.R: Added simple unit test 2011-09-29 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.7 * inst/NEWS: Release 0.9.7 * inst/include/Rcpp/config.h: Release 0.9.7 * debian/*: Similarly updated for new release to Debian * inst/include/Rcpp/sugar/block/SugarBlock_1.h: Apply second path by Martyn Plummer to permit compilation on Solaris * inst/include/Rcpp/sugar/block/SugarBlock_2.h: Idem * inst/include/Rcpp/sugar/block/SugarBlock_3.h: Idem * inst/include/Rcpp/sugar/matrix/outer.h: Idem * inst/include/Rcpp/vector/LazyVector.h: Idem * inst/unitTests/testRcppModule/src/stdVector.cpp: Idem 2011-09-24 Dirk Eddelbuettel * inst/include/Rcpp/Extractor.h: Apply patch by Martyn Plummer to help with compilation on Solaris * inst/include/Rcpp/sugar/block/Vectorized_Math.h: Idem * inst/include/Rcpp/sugar/functions/math.h: Idem * inst/include/Rcpp/sugar/block/SugarBlock_2.h: Also applied path by Martyn Plummer, but with additional #ifdef layer for SunPro Compiler * inst/include/Rcpp/vector/LazyVector.h: Idem 2011-08-26 Douglas Bates * inst/examples/OpenMP/OpenMPandInline.r: Added another variant using import_transform for the Rcpp Vector class. 2011-08-26 Dirk Eddelbuettel * inst/include/*h: Removed exception specifiers in function headers * src/*cpp: Corresponding changes in implementations * inst/examples/OpenMP/OpenMPandInline.r: Added two std::transform() variants as suggested in rcpp-devel email by Davor Cubranic 2011-08-25 Dirk Eddelbuettel * inst/examples/OpenMP/OpenMPandInline.r: Added new example for OpenMP via inline, comparing simple loops with plain Rcpp and sugar 2011-08-23 Dirk Eddelbuettel * inst/examples/Misc/ifelseLooped.r: Added new example based on blog post today, and a StackOverflow ansers---and which shows how Rcpp can accelerate loops that may be difficult to vectorise due to dependencies * inst/examples/Misc/: New directory for small examples regrouping the new example as well as the fibonacci example added in Rcpp 0.9.6 2011-08-17 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Added a short section including an example on the issue raised by Murray wherein 64 bit 'long' integer types can be cast with loss to numeric types without error or warning. 2011-07-28 Dirk Eddelbuettel * inst/unitTests/runit.Function.R: new unit test for accessing a non-exported function from a namespace 2011-07-26 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.6 * inst/NEWS: Release 0.9.6 * inst/include/Rcpp/config.h: Release 0.9.6 * debian/*: Similarly updated for new release to Debian 2011-07-24 Dirk Eddelbuettel * inst/examples/Fibonacci/fib.r: New example showing how to compute a Fibonacci sequence using Rcpp and compare it to R and byte-compiled R 2011-07-14 Dirk Eddelbuettel * inst/examples/RcppGibbs/RcppGibbs.R: New example RcppGibbs, extending Sanjog Misra's Rcpp illustration of Darren Wilkinson's comparison of MCMC Gibbs Sampler implementations; * inst/examples/RcppGibbs/timeRNGs.R: added short timing on Normal and Gaussian RNG draws between Rcpp and GSL as R's rgamma() is seen to be significantly slower 2011-07-13 Romain Francois * inst/include/Rcpp/traits/is_eigen_base.h: helper traits to facilitate implementation of the RcppEigen package. The is_eigen_base traits identifies if a class derives from EigenBase using SFINAE * inst/include/Rcpp/internal/wrap.h: new layer of dispatch to help RcppEigen 2011-07-07 Romain Francois * inst/include/Rcpp/XPtr.h: The XPtr class template gains a second template parameter allowing the developper to supply his/her own finalizer instead of the default one that calls delete 2011-07-05 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.5 * inst/NEWS: Release 0.9.5 * inst/include/Rcpp/config.h: Release 0.9.5 * debian/*: Similarly updated for new release to Debian 2011-07-02 Dirk Eddelbuettel * cleanup: Also clean in examples/OpenMP/ 2011-06-09 Dirk Eddelbuettel * inst/skeleton/zzz.R (.onLoad): Force load of methods package before calling loadRcppModules() to make 'R CMD check' happier 2011-06-06 Romain Francois * inst/include/Rcpp/vector/Vector.h : init becomes protected to fix the bug reported by Doug Bates on Rcpp-devel. 2011-05-31 Romain Francois * R/loadRcppModules.R: New argument "direct" in loadRcppModules * R/tools.R: New unexported function forceAssignInNamespace 2011-05-29 Dirk Eddelbuettel * inst/include/Rcpp/stats/random/rlnorm.h: Repaired accidental header guard from 'norm' to 'lnorm' so that the file really gets included, make several calls to standard library 'exp()' explicit as '::exp()' and fixed a cut-and-paste typo 2011-05-24 Dirk Eddelbuettel * inst/include/Rcpp/internal/wrap.h: For arguments of type const char *, wrap now checks for NULL arguments before calling Rf_mkString() * unitTests/runit.wrap.R: Added unit test for this 2011-05-14 Dirk Eddelbuettel * inst/doc/Rcpp-quickref/Rcpp-quickref.Rnw: Corrected an error in STL example and added two more STL examples 2011-04-27 Dirk Eddelbuettel * inst/examples/OpenMP/piWithInterrupts.cpp: Beginnings of new contributed example on OpenMP as well as user interrupt handling 2011-04-26 Romain Francois * inst/include/Rcpp/sugar/functions/mean.h: new sugar function: mean * inst/include/Rcpp/sugar/functions/var.h: new sugar function: var * inst/include/Rcpp/sugar/functions/sd.h: new sugar function: sd 2011-04-19 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: New example setting row and column names for matrices 2011-04-16 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: New example using Rcpp.plugin.maker 2011-04-12 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.4 * inst/NEWS: Release 0.9.4 * inst/include/Rcpp/config.h: Release 0.9.4 * debian/*: Similarly updated for new release to Debian 2011-04-12 Romain Francois * inst/unitTests/testRcppModules/src/stdVector.cpp: compiler disambiguation * src/r_cast.cpp: use a callback to R's "as.character" instead of calling Rf_coerceVector, which did not work as expected for factors 2011-04-11 Romain Francois * R/loadRcppModules.R: New R function "loadRcppModules" that looks for the "RcppModules" field in the DESCRIPTION file, loads and populates the modules into the package NAMESPACE * man/loadRcppModules.Rd: documentation * inst/unitTests/testRcppModule: using loadRcppModules 2011-04-11 Dirk Eddelbuettel * inst/man/Rcpp-package.Rd: Added JSS reference in \references{} * inst/doc/*: Added JSS reference to vignettes 2011-04-09 Dirk Eddelbuettel * inst/CITATION: Finalized using JSS data on volume, number, pages 2011-04-07 Dirk Eddelbuettel * inst/doc/Rcpp-quickref/Rcpp-quickref.Rnw: Add patch by Christian pointing out need for Rcpp:: namespace qualifier, and hint for Rcpp-FAQ 2011-04-05 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Added OS X entry for min. sufficient versions of OS X itself and Xode based on Simon's post to rcpp-devel 2011-04-05 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.3 * inst/NEWS: Release 0.9.3 * inst/include/Rcpp/config.h: Release 0.9.3 * debian/*: Similarly updated for new release to Debian 2011-04-05 Romain Francois * R/01_show.R: set of cosmetic changes to the show method for C++ classes * inst/include/Rcpp/Module.h: fixed module bug by not using singletons of the class_ template 2011-04-03 Dirk Eddelbuettel * inst/doc/Rcpp-introduction.Rnw: Updated to forthcoming JSS paper * inst/CITATION: Added citation() support using forthcoming paper * inst/doc/Makefile: Trying make parallel builds possible by not calling 'clean' in the 'all' target; thanks to Brian Ripley for the heads-up 2011-04-02 Dirk Eddelbuettel * cleanup: Also clean in inst/unitTest/testRcppModule/src/ * inst/include/RcppCommon.h: Define new variable for g++ < 4.6.0 * src/exceptions.cpp: Include up to g++-4.5 only * inst/unitTests/testRcppModule/src/stdVector.cpp: Use #ifdef not #if * inst/include/Rcpp/module/Module_generated_ctor_signature.h: Add a bit of null-op code to suppress a 'unused parameter' warning in the initial (and non-templated) ctor_signature() function 2011-03-21 Dirk Eddelbuettel * inst/unitTests/testRcppModule/src/stdVector.cpp: Protect push_back declaration by #ifdef as it conflicts with -std=c++0x use for g++-4.5 2011-03-17 Dirk Eddelbuettel * inst/include/RcppCommon.h: Condition the typedef for 'long long' of rcpp_long_long_type on the (still experimental) support for C++0x which can be enabled with the non-portable g++ flag '-std=c++0x'; adding a test for C++0x support suppresses a new warning with g++ about long long being part of C++98; thanks to Kurt Hornik for raising this 2011-03-10 Dirk Eddelbuettel * inst/include/Rcpp/grow.h: Applied another patch kindly supplied by Murray which fixes another clang/llvm and C++ conformance issue by re-ordering declarations as unqualified names must be declared before they are used, even when used within templates. 2011-02-28 Dirk Eddelbuettel * inst/doc/Makefile: Call R and Rscript relative to R_HOME/bin 2011-02-23 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.2 * inst/NEWS: Release 0.9.2 * inst/include/Rcpp/config.h: Release 0.9.2 * debian/*: Similarly updated for new release to Debian * inst/include/RcppCommon.h: Apply patch by Alexey Stukalov to enable basic Intel Compiler support without Cxx0x or TR1 features * inst/THANKS: Added some Thank You! to Baptiste, Alexey and Ken * inst/include/Rcpp/Module.h: Minor reworking of module loading macro to get rid of one g++ warning 2011-02-22 Dirk Eddelbuettel * inst/unitTests/runit.Module.client.package.R: Add a test for OS X 10.5.* or older and do not execute the test here as g++ 4.2.1 balks at some of the Rcpp modules code. Thanks to Simon Urbankek for pinning this down and Baptiste Auguie for additonal testing. 2011-02-20 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Added RcppArmadillo example 2011-02-19 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Added three more setup-related questions in the first section following another rcpp-devel question 2011-02-14 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.1 * inst/NEWS: Release 0.9.1 * inst/include/Rcpp/config.h: Release 0.9.1 * debian/*: Similarly updated for new release to Debian 2011-02-13 Dirk Eddelbuettel * inst/include/Rcpp/Module.h: Cache return of Rf_install("Module") in a static helper function used by the LOAD_RCPP_MODULE macro 2011-02-11 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Added two more examples 2011-02-10 Douglas Bates * inst/include/Rcpp/XPtr.h: Replace calls to EXTPTR_PTR with R_ExternalPtrAddr. The distinction is important when R is compiled with PROTECTCHECK enabled. 2011-02-01 Romain Francois * inst/include/Rcpp/vector/Vector.h: extra PROTECT'ion in several places 2011-01-25 Dirk Eddelbuettel * inst/include/Rcpp/DataFrame_generated.h: Assign Rf_install() result to local SEXP (by modifying generator script creating the file) * inst/include/Rcpp/DataFrame.h: Assign Rf_install() result to local SEXP * inst/include/Rcpp/DottedPair.h: idem * inst/include/Rcpp/grow.h: idem * inst/include/Rcpp/Module.h: idem * inst/include/Rcpp/vector/eval_methods.h: idem * inst/include/Rcpp/vector/Vector.h: idem 2011-01-25 Douglas Bates * src/exceptions.cpp: Assign Rf_install() result to local SEXP * src/Evaluator.cpp: idem * src/Reference.cpp: idem * src/S4.cpp: idem * inst/include/Rcpp/Date.h: Use predefined symbol. 2011-01-22 Dirk Eddelbuettel * src/cache.cpp: Assign Rf_install() result to local SEXP * src/Environment.cpp: idem * src/Evaluator.cpp: idem * src/Function.cpp: idem * src/Function.cpp: idem * src/RObject.cpp: idem * src/Symbol.cpp: idem * inst/doc/Rcpp.bib: Added SoDA (some time ago) 2011-01-13 Douglas Bates * src/Reference.cpp: Protect the value being set in Reference::FieldProxy::set 2011-01-11 Romain Francois * inst/include/Rcpp/vector/string_proxy.h: fix implicit conversion to int, reported by Daniel Sabanes Bove on Rcpp-devel * inst/unitTests/runit.vector.R: unit test for the above fix 2011-01-08 Dirk Eddelbuettel * inst/doc/Rcpp.bib: Updated a number of CRAN versions 2011-01-07 Dirk Eddelbuettel * inst/include/Rcpp/config.h (RCPP_VERSION): Set to 0.9.0, at last. 2011-01-06 Douglas Bates * R/zzz.R (.onLoad): Don't call init_Rcpp_cache here. * src/Rcpp_init.c: Don't register init_Rcpp_cache. It should only be called once and it is called in the C function R_init_Rcpp. * NAMESPACE: Use registered symbols instead of relisting them. Registration allows for checking the number of arguments. 2011-01-04 Dirk Eddelbuettel * src/debugging.cpp: Treat the *BSD flavours like Windows and offer file and line number but not stack trace (for lack of execinfo) * src/Makevars: Replace implicit variable $^ with explicit list 2011-01-02 Dirk Eddelbuettel * inst/doc/Rcpp-quickref/Rcpp-quickref.Rnw: Applied patch with additional documentation by Christian Gunning 2010-12-23 Romain Francois * inst/include/Rcpp/RObject.h: New internal class SEXPstack to handle garbage collection. Presumably more efficient than R_PreserveObject and R_ReleaseObject * inst/include/Rcpp/sugar/operators/times.h: More efficient operator* for REALSXP sugar expressions, avoiding unnecessary NA tests. * inst/include/Rcpp/sugar/operators/divides.h: More efficient operator/ for REALSXP sugar expressions, avoiding unnecessary NA tests. * inst/include/Rcpp/sugar/operators/minus.h: More efficient operator- for REALSXP sugar expressions, avoiding unnecessary NA tests. 2010-12-22 Romain Francois * inst/include/Rcpp/sugar/operators/plus.h: More efficient operator+ for REALSXP sugar expressions, avoiding unnecessary NA tests. 2010-12-22 Dirk Eddelbuettel * inst/unitTests/runit.Vector.R: Applied patch by Christian Gunning to add more tests for complex-typed vectors 2010-12-20 Dirk Eddelbuettel * R/inline.R (Rcpp.plugin.maker): Reverse order in PKG_LIBS 2010-12-19 Dirk Eddelbuettel * DESCRIPTION: Release 0.9.0 * debian/*: Similarly updated for new release to Debian 2010-12-18 Dirk Eddelbuettel * inst/announce/ANNOUNCE-0.9.0.txt: Started announcement post * inst/unitTests/runit.Date.R: Added new unit tests for date and datetime from string 2010-12-17 Dirk Eddelbuettel * inst/include/Rcpp/Datetime.h: correct default format to use %OS for fractional seconds and not the popular typo %OS (i.e. ooh, not zero) * src/Datetime.cpp: add missing as.POSIXct() after strptime for constructor from string as we then use the constructor from double * src/Date.cpp: add missing as.Date() after strptime for constructor from string as we then use the constructor from int 2010-12-13 Romain Francois * inst/include/Rcpp/vector/string_proxy.h: List::Proxy did not convert bool correctly, reported on Rcpp-devel by Daniel SabanC)s BovC) 2010-12-12 Romain Francois * R/SHLIB.R: new unexported R function SHLIB, small wrapper around R CMD SHLIB * inst/include/Rcpp/sprintf.h: returning a std::string to avoid leaks 2010-12-10 Dirk Eddelbuettel * inst/include/Rcpp/sprintf.h: Use vsnprintf() instead 2010-12-10 Romain Francois * inst/include/Rcpp/barrier.h: faster versions (crossing the write barrier) for string_elt, etc ...(to be used only internally) * src/barrier.cpp: implementation of the above 2010-12-09 John M Chambers * src/Module.cpp: Rcpp/src/exceptions.cpp, Rcpp/src/Rcpp_init.c, etc. add a not_initialized exception and a dummy_pointer to identify such objects, throw exc. back to R 2010-12-07 Romain Francois * inst/include/Rcpp/vector/matrix.h: Matrix gains a nested ::Sub typedef 2010-12-05 Romain Francois * inst/include/Rcpp/module/Module_generated_class_constructor.h: the default constructor was always considered valid because of the use of &yes instead of &yes_arity<0> * R/Rcpp.package.skeleton.R: Rcpp.package.skeleton( "foo", example_code = FALSE) did not work properly. Rcpp.package.skeleton gains some arguments 2010-12-05 Dirk Eddelbuettel * src/Date.cpp: Add 1900 to tm.year after mktime00() call as we now no longer assume the field is '1900-less' * src/Date.cpp: Define new static const variable baseYear as 1900 and use throughout * inst/unitTests/runit.Date.R (test.Date.getFunctions): Added unit tests for the get* functions of the Date class * R/bib.R (bib): Correct expression for default Rcpp bibtex file 2010-12-04 Dirk Eddelbuettel * inst/include/Rcpp/Date.h: Remove addition of 1900 in getYear() 2010-12-04 Romain Francois * inst/doc/Rcpp-quickref/Rcpp-quickref.Rnw: documentation patch by Christian Gunnning * inst/include/Rcpp/vector/matrix.h: fix SubMatrix. Bug reported by Christian Gunnning on Rcpp-devel * inst/include/Rcpp/vector/SubMatrix.h: factored out of matrix.h * inst/include/Rcpp/sprintf.h: new sprintf template to format strings 2010-12-03 Dirk Eddelbuettel * inst/unitTests/runit.RObject.R: fix 'inherits' test added today * inst/include/Rcpp/module/Module_generated_Constructor.h: Applied patch by Tama Ma for up to seven args in ctor * inst/include/Rcpp/module/Module_generated_class_constructor.h: Idem * inst/include/Rcpp/module/Module_generated_ctor_signature.h: Idem 2010-12-03 Romain Francois * inst/include/Rcpp/RObject.h : new inline method inherits that checks if an object inherits from a given class (wrapper around Rf_inherits) * inst/unitTests/runit.RObject.R: unit test for the above 2010-12-02 Douglas Bates * inst/include/Rcpp/generated/Function__operator.h, inst/include/Rcpp/Function.h: operator() becomes const. 2010-11-29 Romain Francois * inst/include/Rcpp/vector/Vector.h: trying to please suncc after CRAN checks * R/Module.R: protect the module$refClassGenerators <- generators line against the case where there are no classes (triggered a problem with the parser package) 2010-11-27 Dirk Eddelbuettel * DESCRIPTION: Release 0.8.9 * debian/*: Similarly updated for new release to Debian 2010-11-26 Romain Francois * inst/include/Rcpp/vector/Vector.h: List::create( _["foo"] ) sets the SEXP to R_MissingArg, usueful for formal arguments specifications, simpler form than List::create( _["foo"] = R_MissingArg ) * inst/include/Rcpp/macros/unroll.h: helper macro RCPP_UNROLL_LOOP * inst/include/Rcpp/vector/MatrixColumn.h: added MatrixColumn::operator=( MatrixColumn& ) otherwise it gets synthetized by the compiler * inst/include/Rcpp/vector/MatrixRow.h: same for MatrixRow * inst/include/Rcpp/vector/Matrix.h: added Matrix( SubMatrix ) and Matrix::operator=( SubMatrix ) 2010-11-25 Romain Francois * inst/include/Rcpp/module/Module_generated_function.h: new .function with formal argument specification * inst/include/Rcpp/module/Module_generated_CppFunction.h: helper classes for the above * R/Module.R: using the formal argument specification if available * R/populate.R: new R function populate to dump the contents of a module into an environment or a namespace * man/populate.Rd: documentation for populate 2010-11-24 Romain Francois * R/00_classes.R: formals<- method for C++Function that allows to set default arguments, etc .. to a C++ function 2010-11-23 Dirk Eddelbuettel * inst/doc/Makefile: Call Rscript with --vanilla to skip user settings 2010-11-23 Romain Francois * R/00_classes.R: C++Class gains a docstring slot to host self documentation * R/Module.R: calling an exposed C++ more efficiently by using the xp directly rather than traversing the map internally * R/00_classes.R: C++Function gains a docstring slot to host self documentation of the internal function. And a "signature" slot to host the C++ signature of the function * R/01_show.R: updated show( C++Function ) to display the docstring and the signature. updated show( C++Class ) to display the docstring. * inst/include/Rcpp/module/Module_generated_CppFunction.h: self documentation for exposed C++ functions and extraction of the signature * inst/include/Rcpp/module/Module_generated_function.h: idem 2010-11-22 Romain Francois * R/00_classes.R: C++OverloadedMethods gains an "info" class methods, factored out from Module.R * R/01_show.R: more information printed in show( C++Class ) * inst/include/Rcpp/Module/Module_generated_get_signature.h: templates to grab method signatures * inst/include/Rcpp/Module.h: CppMethod gains a signature method that returns the signature of the method. * R/00_classes.R: C++OverloadedMethods gains a "signatures" field that contains the signature of each overload * R/Module.R: registered method gain an automatically generated self description that contains the method(s) signature(s) and the docstring that is declared in .method * inst/include/Rcpp/Module/Module_generated_CppMethod.h: implement signature * inst/include/Rcpp/Module/Module_generated_Pointer_CppMethod.h: idem 2010-11-21 Romain Francois * R/Module.R: internal version of cpp_hasDefaultConstructor * src/Module.cpp: implementation (Class__has_default_constructor) * inst/include/Rcpp/Module.h: support (class_.has_default_constructor) * inst/include/Rcpp/module/Module_generated_class_constructor.h: new interface for exposing constructors, the init_ disappears and the template arguments are directly applied to the .constructor function * inst/include/Rcpp/module/Module_generated_Constructor.h: removed init_* * inst/include/Rcpp/module/Module_generated_method.h: .method gains a docstring argument to allow self documentation of exposed methods * inst/include/Rcpp/module/Module_generated_PointerMethod.h: idem * R/Module.R: grab method docstrings 2010-11-20 John M Chambers * R/Module.R: now checks for the existence of a default constructor for a C++ class and generates a suitable $initialize() method accordingly. 2010-11-20 Romain Francois * inst/include/Rcpp/vector/MatrixRow.h: added missing return *this ; * R/Module.R: dispatch based on void-ness of the methods. For example if all methods are known to be void, etc ... * R/00_classes.R: more information in the C++OverloadedMethods ref class * src/Module.cpp: new .External CppMethod__invoke_void and CppMethod__invoke_notvoid that are used when we know for sure that all overloaded methods are void, or not void * inst/include/Rcpp/Module.h: class_ gains invoke_void and invoke_notvoid to support the changes above 2010-11-18 Douglas Bates * inst/include/Rcpp/module/Module_generated_[class_]Constructor.h: allow up to 6 arguments to .constructor 2010-11-18 Romain Francois * inst/include/Rcpp/Module.h: rework the class_ template to allow overloaded methods * R/00_classes.R: The C++Method class disappears and the C++OverloadedMethods enters. a "C++OverloadedMethods" object points to a set of overloaded C++ methods that all share the same name. * R/Module.R: adapt some of the code to cope with changes above 2010-11-17 Romain Francois * inst/include/Rcpp/sugar/as_vector.h: added the as_vector function that turns a sugar matrix expression into a vector of the appropriate type * inst/include/Rcpp/vector/Matrix.h: new SubMatrix class 2010-11-13 Romain Francois * inst/include/Rcpp/Module.h: expose constructors as the "cpp_constructor" field of "C++ClassRepresentation" and the "constructors" slot of "C++Class" 2010-11-07 Romain Francois * inst/include/Rcpp/sugar/operators/minus.h: fixed Minus_Vector_Primitive * inst/unitTests/runit.sugar.R: new test for the above 2010-11-05 Romain Francois * inst/include/Rcpp/Module.h: exposing multiple constructors in modules * src/Module.cpp: The mangled class name is now "Rcpp_" plus the class name. The previous version used the address of the external pointer to the module, which was not constant. 2010-11-04 Douglas Bates * inst/include/Rcpp/module/Module_generated_Constructor.h: remove redundant 'return's. 2010-11-04 Romain Francois * inst/include/Rcpp/Module.h: experimental way to specify which constructor to use in classes exposed by modules. This is still too restrictive as it only allows one constructor. * inst/include/Rcpp/sugar/block/SugarMath.h: extend the SUGAR_MATH_1 macro so that we can apply functions (e.g. sqrt) directly on SEXP 2010-11-01 Dirk Eddelbuettel * DESCRIPTION (Version): Release 0.8.8 * debian/*: Similarly updated for new release to Debian 2010-10-30 Dirk Eddelbuettel * inst/include/RcppCommon.h: New define IS_GCC_450_OR_LATER * inst/include/Rcpp/Extractor.h: Do not enable Rcpp::Fast if g++ 4.5.0 or later is used -- we need to figure out what upsets it 2010-10-23 Romain Francois * inst/include/Rcpp/vector/MatrixRow.h: Faster row indexing * inst/include/Rcpp/vector/Matrix.h: added use of _ to get columns and rows of a matrix. For example if x is a NumericMatrix, x(_,i) returns the same as x.column(i) and x(i,_) returns the same as x.row(i) * inst/unitTests/runit.Matrix.R: unit tests for the above * inst/include/Rcpp/sugar/functions/sum.h: the sugar version of sum now takes care of missing values correctly * inst/include/Rcpp/sugar/functions/cumsum.h: sugar version of cumsum 2010-10-21 Romain Francois * inst/include/Rcpp/vector/MatrixColumn.h: Fixed indexing bug (mismatch between number of rows and number of columns * inst/unitTests/runit.Matrix.R: test fix above based on the R-help/Rcpp-devel thread: http://article.gmane.org/gmane.comp.lang.r.rcpp/851 * inst/include/Rcpp/vector/MatrixColumn.h: Column gains a operator= taking a sugar expression. Faster indexing (caching the pointer instead of calling nrow many times) * inst/include/Rcpp/vector/Matrix.h: first pass at making matrix indexing faster 2010-10-21 Dirk Eddelbuettel * inst/include/Rcpp/Module.h: Reorder instantiation for class_ 2010-10-20 Dirk Eddelbuettel * include/Rcpp/XPtr.h: Applied patch by Karl Millar * include/Rcpp/vector/Vector.h: Idem 2010-10-19 Dirk Eddelbuettel * src/posixt.cpp: Correct POSIXct, POSIXt ordering for R 2.12.0 2010-10-14 Dirk Eddelbuettel * DESCRIPTION (Version): Release 0.8.7 * debian/*: Similarly updated for new release to Debian 2010-10-10 Romain Francois * tests/doRUnit.R: workaround to disable tests on windows 64 until we can figure out what upsets R CMD check. * R/Module.R: expose the finalizer 2010-10-07 John M Chambers * R/Module.R: modify cpp_refMethods to substitute the .External directly with the method and class pointers. 2010-10-03 Dirk Eddelbuettel * inst/include/Rcpp/stats/random/r*: Added comment reminding users read up on Section 6.3 of "Writing R Extensions" and the need to call GetRNGstate() and PutRNGstate() when using R's RNGs 2010-09-30 Romain Francois * inst/include/Rcpp/vector/MatrixRow.h: Matrix row inherits VectorBase so that it becomes a sugar expression, so that we can do something like this: NumericMatrix x( ... ) ; NumericVector x0 = x.row(0) ; * inst/include/Rcpp/vector/MatrixColumn.h: idem for columns * cleanup: run make clean in the inst/doc directory to install the fake vignettes 2010-09-27 Romain Francois * inst/include/Rcpp/traits/is_sugar_expression.h: new trait class to recognize sugar expressions * inst/include/Rcpp/vector/Vector.h: operator=( sugar expression) no longer allocate unnecessary memory. 2010-09-26 Romain Francois * inst/include/Rpp/Fast.h: new helper class Rcpp::Fast that allows faster indexing of Vector * inst/include/Rcpp/sugar/operators/plus.h: port to operator+ the same improvements than in operator* 2010-09-25 Romain Francois * inst/include/Rcpp/routines.h: declare routines that are registered * src/Rcpp_init.c: register routines * R/*.R: use registration information in many .Call and .External functions to speed things up * inst/include/Rcpp/RangeIndexer.h: experimenting with loop unrolling 2010-09-24 John M Chambers * R/Module.R: modify cpp_fields to substitute the .Call directly with the field and class pointers; supplements the changes entered by Romain on 9-22. (svn rev 2165, 2141) * src/Rcpp_init.c: set up registration of .Call's (rev 2167) 2010-09-24 Romain Francois * inst/include/Rcpp/sugar/Range.h : Range gains some operators (++,--,n etc ...) * inst/examples/ConvolveBenchmarks/convolve3_cpp.cpp: using the new Range operators * inst/include/Rcpp/sugar/operators/times.h: speed improvements. Not using pointer to member functions seems to be beneficial. * inst/include/Rcpp/sugar/nona/nona.h: sugar function that wraps a sugar expression in an object that pretends it does not contain any missing values. This allows many sugar functions and operators to use their fast versions when we know that the object does not contain missing values. 2010-09-22 Romain Francois * R/Module.R: set [[ and [[<- as regular methods too, which restores previous behavior 2010-09-17 Romain Francois * src/Reference.cpp: new objects are created via a callback to R's new function, as R_do_new_object did always return the same environment * R/00_classes.R: new ref class C++Method to represent C++ methods and holding their external pointers directly (same idea as C++Field) * inst/include/Rcpp/Module.h: internal support for C++Method (template class S4_CppMethod) 2010-09-17 John M Chambers * R/00_classes.R, R/02_completion.R, et al.: use of environment underlying the reference classes removes need for slots in C++Object class (svn rev's 2133, 2134) 2010-09-16 Romain Francois * R/00_classes.R: moving classes definition here * inst/Rcpp/Module.h: added C++ class S4_field that builds S4 objects of class C++Field. Build the list of fields as part of the creation of the C++Class objects * src/Module.cpp: .Call functions CppField__get and CppField__set to get/set values of an object's field using external pointers directly (no std::map lookup internally) * R/Module.R: (unexported) functions .getField and .setField that call CppField__get and CppField__set * inst/include/Rcpp/Reference.h: skeleton for a Rcpp::Reference class that will help dealing with reference classes on the C++ side * src/Reference.cpp: implementation (needs update) 2010-09-16 John M Chambers * R/Module.R, tests/modRef.R: un-generic of new(); return a generator object for C++ classes. Use environment as superclass. 2010-09-15 Romain Francois * DESCRIPTION: added the declaration MinimumSvnRev to control which version of R-devel we need so that Rcpp fully works, currently set to 52905 * R/zzz.R: check the svn revision of R against the declared MinimumSvnRev requirement and print a message if necessary (this will only stay for the interim period while we develop 0.8.7 so that we all are on the same page. * inst/include/Rcpp/Module.h: added methods to class_Base : methods_arity and methods_voidness to query the number of arguments of methods of a class and if the method is void * R/Module.R: implement referenceMethods (from methods) for 'C++Class' 2010-09-11 Dirk Eddelbuettel * src/Date.cpp: Add include of unistd.h to make Solaris happy 2010-09-09 Dirk Eddelbuettel * DESCRIPTION: Release 0.8.6 * debian/*: Similarly updated for new release to Debian 2010-09-08 Dirk Eddelbuettel * inst/include/RcppCommon.h: Also include typeinfo header file 2010-09-08 Romain Francois * inst/include/Rcpp/Module.h : added class_Base::property_names method to grab the names of all fields (properties) * src/Module.cpp : added R access (.Call) function CppClass__properties to grab the names of the fields (property) from the XP of a class * inst/include/Rcpp/Module.h : added class_Base::property_is_readonly method to query if a property is read only * src/Module.cpp : added R access (.Call) function CppClass__property_is_readonly to query if a class property is read only * inst/include/Rcpp/Module.h : added class_Base::property_class method to grab the C++ class of a property * src/Module.cpp : added R access (.Call) function CppClass__property_class to grab the C++ class of a property 2010-09-06 Dirk Eddelbuettel * inst/examples/ConvolveBenchmarks/exampleRCode.r: Rewritten / simplified using the rbenchmark::benchmark() function * DESCRIPTION: Added Suggests: on rbenchmark package 2010-09-04 Dirk Eddelbuettel * inst/examples/ConvolveBenchmarks/exampleRCode.r: Some cosmetics * inst/examples/ConvolveBenchmarks/convolve3_cpp.cpp: Remove one unneccessary loop to set values to zero (which the ctor does for us) 2010-09-03 Dirk Eddelbuettel * inst/doc/Rcpp-extending/Rcpp-extending.Rnw: Add highlight definitions * inst/doc/Rcpp-FAQ/Rcpp-FAQ.Rnw: Idem * inst/doc/Rcpp-package/Rcpp-package.Rnw: Idem 2010-09-02 Dirk Eddelbuettel * src/msvcmath.cpp: Undo unmotivated msvc patch * inst/include/Rcpp/msvc/: Idem * inst/include/Rcpp/XPtr.h: Idem * inst/include/RcppCommon.h: Idem * src/Date.cpp: Idem * DESCRIPTION: Added Suggests: on highlight package 2010-08-20 Romain Francois * inst/include/Rcpp/complex.h : binary operators for Rcomplex : +,-,*,/ 2010-08-15 Romain Francois * inst/include/Rcpp/sugar/SugarBlock.h: more control of the NA behavior in SUGAR_BLOCK_2. SUGAR_BLOCK_2 will now propagate the NA, and the new SUGAR_BLOCK_2_NA will use a fixed NA (can be true or false). This can be useful if the function that is sugar'ed never generates NA. * inst/include/Rcpp/sugar/undoRmath.h : undo the macros done by Rmath.h 2010-08-13 Douglas Bates * include/Rcpp.h: undo more defines from Rmath.h 2010-08-13 Romain Francois * inst/include/Rcpp/sugar/complex.h: simplify complex sugar functions Re, Im, Conj, Mod * inst/include/Rcpp/sugar/complex.h: new sugar functions operating on complex expressions: exp, log, sqrt, cos, sin, tan, acos, asin, atan, acosh, asinh, atanh, cosh, sinh, tanh * inst/unitTests/runit.sugar.R: added regression test for complex functions which did not handle NA properly before * DESCRIPTION: no longer requireing GNU make as we dont use it anymore * src/Makevars: removed the use of ifeq (which was the last thing requiring GNU make) 2010-08-12 Romain Francois * inst/include/Rcpp/sugar/math.h: replace previous versions of floor, abs, exp, ceil, ceiling with versions generated by the SUGAR_MATH_1 macro 2010-08-11 Romain Francois * inst/include/Rcpp/vector/vector.h: Vector gains constructor taking size and function pointers, acting as generators : Vector( const int& siz, stored_type (*gen)(void), bool seed = true ) template Vector( const int& siz, stored_type (*gen)(U1), const U1& u1, bool seed = true) template Vector( const int& siz, stored_type (*gen)(U1,U2), const U1& u1, const U2& u2, bool seed = true) so that for example : NumericVector( 10, norm_rand ) generates a N(0,1) vector of size 10 * inst/include/Rcpp/stats/random/rlnorm.h: Added rlnorm and rlnorm_ * inst/include/Rcpp/stats/random/rgamma.h: Added rgamma and rgamma_ * inst/include/Rcpp/stats/random/rt.h: Added rt and rt_ * inst/include/Rcpp/stats/random/rbinom.h: Added rbinom and rbinom_ * inst/include/Rcpp/stats/random/rnchisq.h: Added rnchisq and rnchisq_ * inst/include/Rcpp/stats/random/rgeom.h: Added rgeom and rgeom_ * inst/include/Rcpp/stats/random/rhyper.h: Added rhyper and rhyper_ * inst/include/Rcpp/stats/random/rnbinom_mu.h: Added rnbinom_mu and rnbinom_mu_ * inst/include/Rcpp/stats/random/rnbinom.h: Added rnbinom and rnbinom_ * inst/include/Rcpp/stats/random/rpois.h: Added rpois and rpois_ * inst/include/Rcpp/stats/random/rweibull.h: Added rweibull and rweibull_ * inst/include/Rcpp/stats/random/rlogis.h: Added rlogis and rlogis_ * inst/include/Rcpp/stats/random/rwilcox.h: Added rwilcox and rwilcox_ * inst/include/Rcpp/stats/random/rsignrank.h: Added rsignrank and rsignrank_ * inst/include/Rcpp/stats/random/rnorm.h: some optimization * inst/include/Rcpp/stats/random/rf.h: calculate n2/n1 just once * inst/include/Rcpp/sugar/SugarBlock.h : templates and macros to facilitate generation of sugar functions that take one or two double parameters * inst/include/Rcpp/sugar/math.h: using SugarBlock to generate new sugar functions: (1 parameter) : gamma, lgamma, digamma, trigamma, tetragamma, pentagamma, expm1, log1p, factorial, lfactorial, cos, acosh, atan, cos, cosh, log, log10, sqrt, sin, sinh, tan, tanh (2 parameter) : choose, lchoose, beta, lbeta, psigamma 2010-08-10 Douglas Bates * include/Rcpp/stats/nbinom[_mu].h: Replace conflicting data member name 'size' by 'siz' 2010-08-10 Romain Francois * inst/include/Rcpp/stats/random/rnorm.h: Added rnorm and rnorm_ * inst/include/Rcpp/stats/random/runif.h: Added runif and runif_ * inst/include/Rcpp/stats/random/rbeta.h: Added rbeta and rbeta_ * inst/include/Rcpp/stats/random/rcauchy.h: Added rcauchy and rcauchy_ * inst/include/Rcpp/stats/random/rchisq.h: Added rchisq and rchisq_ * inst/include/Rcpp/stats/random/rexp.h: Added rexp and rexp_ * inst/include/Rcpp/stats/random/rf.h: Added rf and rf_ * inst/include/Rcpp/stats/stats.h : fixed name clash reported on Rcpp-devel http://permalink.gmane.org/gmane.comp.lang.r.rcpp/610 2010-08-09 Romain Francois * inst/include/Rcpp/stats/lnorm.h: Added d-p-q (lnorm|weibull|logis|f) generated by the script * inst/include/Rcpp/vector/Vector.h: further dispatch to allow generators to be passed to constructors of Vector * inst/include/Rcpp/traits/has_iterator.h: new SFINAE detection of generators * inst/include/Rcpp/Generator.h : base template class for generators 2010-08-06 Douglas Bates * unitTests/runit.stats.R: Corrected instances of numeric arguments passed as integers, deleted tests for binomial with fixed parameter values. 2010-08-06 Romain Francois * ../scripts/stats.R: R script to generate the template code for dpq functions * include/Rcpp/stats/unif.h: Added d-p-q unif and tests * include/Rcpp/stats/gamma.h: Added d-p-q gamma and tests * include/Rcpp/stats/chisq.h: Added d-p-q chisq 2010-08-05 Douglas Bates * include/Rcpp/stats/beta.h: Added d-p-q beta and tests * include/Rcpp/stats/binom.h: Added pbinom and qbinom, and tests of same in runit.stats.R * include/Rcpp/stats/pois.h: Added ppois and qpois (plus tests in runit.stats.R). * include/Rcpp/stats/norm.h: Added pnorm and qnorm and corresponding tests in unitTests/runit.stats.R 2010-08-05 Dirk Eddelbuettel * inst/include/Rcpp/stats/norm.h: Added dnorm sugar function * inst/include/Rcpp/stats/t.h: Added dt, pt, qt sugar functions * inst/include/unitTests/runit.stats.R: Added corresponding tests 2010-08-05 Romain Francois * inst/include/Rcpp/sugar/functions/seq_along.h: added seq(int,int) to mimic the R syntax : seq( 0, 5 ) * inst/include/Rcpp/sugar/Range.h: fixed compiler confusion * inst/include/Rcpp/stats: new sugar functions Rcpp::stats::dpois and Rcpp::stats::dbinom inspired by Richard Chandler post on Rcpp-devel: http://lists.r-forge.r-project.org/pipermail/rcpp-devel/2010-August/000940.html * inst/include/Rcpp/sugar/sum.h: preliminary version of Rcpp::sum (does not deal with NA properly yet) 2010-08-04 Romain Francois * inst/include/Rcpp/sugar/: rework sugar matrix so that operator()(int,int) is always used instead of operator[](int) * inst/include/Rcpp/sugar/matrix/outer.h: new implementation based on LazyVector, so that the value from the vector expression is only retrieved once 2010-08-02 Romain Francois * inst/include/Rcpp/XPtr.h: give default values to tag and prot in XPtr ctor 2010-07-30 Romain Francois * inst/doc/Rcpp-quickref/* : new vignette Rcpp-quickref: quick reference guide to Rcpp API 2010-07-28 Romain Francois * inst/include/Rcpp/sugar/exp.h: adapt to stricter standards on solaris/suncc 2010-07-25 Dirk Eddelbuettel * DESCRIPTION: Release 0.8.5 * debian/*: Similarly updated for new release to Debian 2010-07-17 Romain Francois * inst/include/Rcpp/vector/Vector.h: faster lhs use of names, only using callback to R if necessary. (discovered while profiling RProtoBuf) * inst/include/Rcpp/RObject.h : faster lhs and rhs use of RObject::slot, using R API functions R_do_slot and R_do_slot_assign 2010-07-16 Dirk Eddelbuettel * src/Date.cpp: Small fix which may make Solaris/SunStudio happy 2010-07-16 Romain Francois * man/Rcpp-package.Rd : removed old content and point to the Rcpp-package vignette for current guidelines. * DESCRIPTION: Updated to mention sugar and modules 2010-07-10 Romain Francois * src/Makevars: Remove last call to $shell by turning C++0x detection off (and into a switch users can edit) which should make builds more stable * src/Makevars.win: Idem * src/cxx0x/cxx0x.R: Detection script deprecated for now 2010-07-10 Romain Francois * man/CppClass-class.Rd: changed use of \linkS4Class to suppress a warning with the development version of R * man/CppObject-class.Rd: idem 2010-07-09 Dirk Eddelbuettel * DESCRIPTION: Release 0.8.4 * debian/*: Similarly updated for new release to Debian 2010-07-09 Romain Francois * src/RObject.cpp: adapt the SlotProxy class to deal with the special case of the .Data slot (slot<- changes the internal SEXP) * R/Module.R: the C++Class now inherits from "character", to facilitate S4 method dispatch * src/Module.cpp: The CppClass ctor sets the .Data of the C++Class object to an obfuscated name to avoid class names clashes at the R level. 2010-07-08 Romain Francois * inst/include/Rcpp/sugar/functions/head.h: new sugar function : head * inst/include/Rcpp/sugar/functions/tail.h: new sugar function : tail * inst/include/Rcpp/sugar/functions/tail.h: new sugar function : diag 2010-07-07 Dirk Eddelbuettel * inst/README: Updated and now pointing to all the other documentation 2010-07-07 Romain Francois * inst/include/Rcpp/sugar/functions/rep.h: version of rep that takes a primitive as the first argument 2010-07-07 Dirk Eddelbuettel * inst/unitTests/runTests.R: Reverted to running all tests now that tests are reorganised using the one-compile-per-function scheme which significantly speeds up running of the numerous unit tests 2010-07-06 Dirk Eddelbuettel * src/Date.cpp: Imported mktime() from R (which is due to Arthur Olson) 2010-07-06 Romain Francois * inst/include/Rcpp/sugar/functions/ifelse.h: using compile time dispatch based on the NA-ness of the condition type. ifelse handles primitive arguments on the lhs, rhs or both * inst/include/Rcpp/sugar/functions/rev.h: new sugar function: rev 2010-07-05 Romain Francois * inst/include/Rcpp/RcppCommon.h : no more using variadic macros in RCPP_DEBUG * inst/include/Rcpp/vector/Matrix.h: move ncol, nrow, rows and cols in Matrix (used to be in Vector) * inst/include/Rcpp/traits/matrix_interface.h: new SFINAE helper to detect matrix interface (helps matrix sugar expressions) 2010-07-03 Romain Francois * inst/include/Rcpp/traits/result_of.h : also deal with functions taking two arguments (useful for e.g. outer) * inst/include/Rcpp/vector/MatrixBase.h : new CRTP base class for Matrix to facilitate sugar syntax on matrices. * inst/include/Rcpp/sugar/matrix/outer.h : new sugar function: outer * inst/include/Rcpp/sugar/matrix/row.h: new sugar function: row * inst/include/Rcpp/sugar/matrix/col.h: new sugar function: col * inst/include/Rcpp/sugar/matrix/lower_tri.h: new sugar function: lower_tri * inst/include/Rcpp/sugar/matrix/upper_tri.h: new sugar function: upper_tri * inst/include/Rcpp/sugar/functions/rep.h: new sugar function : rep * inst/include/Rcpp/sugar/functions/rep_len.h: new sugar function : rep_len * inst/include/Rcpp/sugar/functions/rep_each.h: new sugar function : rep_each 2010-07-02 Dirk Eddelbuettel * src/RcppStringVector: Now uses std::vector * inst/include/classic/RcppStringVector.h: Idem * inst/unitTests/runit.List.R: Added simple test for RcppStringVector 2010-07-01 Dirk Eddelbuettel * src/RcppDateVector: Index argument is int here as well * src/RcppDatetimeVector: Idem * inst/include/classic/RcppDateVector.h: Idem * inst/include/classic/RcppDatetimeVector.h: Idem * inst/unitTests/runit.List.R: Added simple test for RcppList 2010-06-30 Dirk Eddelbuettel * src/DateVector: Index argument is int; throw declared * src/DatetimeVector: Idem * inst/include/Rcpp/DateVector.h: Idem * inst/include/Rcpp/DatetimeVector.h: Idem 2010-06-28 Romain Francois * inst/include/Rcpp/sugar/Im.h: * inst/include/Rcpp/sugar/Re.h: * inst/include/Rcpp/sugar/Conj.h: * inst/include/Rcpp/sugar/Mod.h: added sugar functions for complex vectors: Re, Im, Conj, Mod 2010-06-27 Dirk Eddelbuettel * DESCRIPTION: Release 0.8.3 * debian/*: Similarly updated for new release to Debian * inst/unitTests/runTests.R: Stop-gap measure to reduce the number of tests run on Windows as we now have so many tests that the build exceeds the time limit granted by the win-builder service. The forced reduction of tests can be overcome by adding --allTests as a command-line argument on Windows, or by running on another platform. 2010-06-25 Romain Francois * inst/include/Rcpp/posix.h: anticipate R 2.12.0 switch of classes POSIXt and POSIXct * inst/include/classic: New home for the 'classic' API headers. Also some refactoring of the internals so that they can interoperate better withuse the new API. 2010-06-24 Romain Francois * inst/include/Rcpp/vector/RangeIndexer.h: factored the RangeIndexer class out of Vector, so that we can at a later time specialize it for character vectors, lists, etc ... 2010-06-24 Dirk Eddelbuettel * inst/include/Rcpp/Date.h: add struct tm member variable and sensible (ie non-intra-day) accessor functions; add SEXP ctor * src/Date.cpp: Implementation of the above * inst/unitTests/runit.Date.R: tests for the above * inst/include/Rcpp/Datetime.h: New Datetime class * src/Datetime.cpp: Implementation for new Datetime class * inst/unitTests/runit.Datetime.R: first tests for Rcpp::Datetime * inst/include/Rcpp/Datetime_forward.h: API Integration * inst/include/Rcpp/DatetimeVector.h: New DatetimeVector class * src/Datetime.cpp: Implementation for new DatetimeVector class 2010-06-23 Dirk Eddelbuettel * src/Date.cpp: Import mktime00() from R's src/main/datetime.c, completed class implementation * inst/include/Rcpp/Date.h: Add mktime00() declaration * inst/include/Rcpp/DateVector.h: New DateVector class * src/Date.cpp: Implementation for new DateVector class 2010-06-23 Romain Francois * inst/include/Rcpp/Date_forward.h: forward declaration of Rcpp::Date and support for wrap( container of Rcpp::Date ), e.g. wrap( vector ) * inst/include/Rcpp/sugar/Range.h: added the concept of range to allow modification of several elements of a vector. * inst/examples/ConvolveBenchmarks: version of the convolution function using sugar indexing. 2010-06-22 Dirk Eddelbuettel * inst/include/Rcpp/Date.h: New Date class (not yet complete) * src/Date.cpp: Implementation for new Date class (not yet complete) * inst/unitTests/runit.Date.R: first tests for Rcpp::Date 2010-06-21 Dirk Eddelbuettel * inst/examples/SugarPerformance/: New example to benchmark the new syntactic 'sugar' classes 2010-06-19 Dirk Eddelbuettel * inst/include/RcppDoxygenExamples.h: Correct three wrong paths for ConvolveBenchmak example files, and add missing FastLM/ examples 2010-06-18 Romain Francois * inst/include/Rcpp/sugar/*: implementation of Rcpp sugar, covering binary operators (<,>,<=,>=,!=,==) for logical vectors or logical expressions, arithmetic operators (+,-,*,/) for vectors and expressions, and several functions similar to the R functions of the same name, currently: abs, all, any, ceiling, diff, exp, ifelse, is_na, lapply, pmin, pmax, pow, sapply, seq_along, seq_len, sign * inst/doc/Rcpp-sugar/Rcpp-sugar.Rnw: vignette documenting Rcpp sugar 2010-06-17 Romain Francois * inst/include/Rcpp/Vector.h: split into more manageable files * inst/include/Rcpp/vector/VectorBase.h: simplify the VectorBase class so that it is just implementing CRTP. It does not inherit from RObject anymore. This will help implementation of sugar. 2010-06-16 Dirk Eddelbuettel * src/RcppDateVector.cpp: Also provide non-const operator()(int i) * inst/include/RcppDateVector.h: Idem 2010-06-16 Romain Francois * inst/include/Rcpp/InternalFunction.h: new class Rcpp::InternalFunction * R/Module.R: R support for Rcpp::InternalFunction * inst/include/Rcpp/Module.h: added the LOAD_RCPP_MODULE macro to allow loading a module from C++ * R/Module.R: if the first argument is an external pointer already, Module assumes it is a module pointer. (R support for the item above) 2010-06-15 Dirk Eddelbuettel * src/RcppDatetimeVector.cpp: Use std::vector internally * inst/include/RcppDatetimeVector.h: Idem * src/RcppDateVector.cpp: Use std::vector internally * inst/include/RcppDateVector.h: Idem 2010-06-14 Dirk Eddelbuettel * src/RcppDatetimeVector.cpp: Add constructor from int * inst/include/RcppDatetimeVector.h: Idem * src/RcppDateVector.cpp: Add constructor from int * inst/include/RcppDateVector.h: Idem 2010-06-13 Dirk Eddelbuettel * src/RcppResultSet.cpp: Proper template specialisation for wrap * inst/include/RcppResultSet.h: Idem * src/RcppDateVector.cpp: Add const qualifier to operator()(int i) * inst/include/RcppDateVector.h: Idem 2010-06-13 Romain Francois * inst/include/Rcpp/Vector.h: added new factory functions for Vector: Vector::import and Vector::import_transform 2010-06-12 Dirk Eddelbuettel * src/RcppDate.cpp: Simple RcppDate(SEXP) ctor added * inst/include/RcppDate.h: Idem * src/RcppResultSet.cpp: carved out four new wrap() functions by splitting the existing code in add() methods off 2010-06-11 Romain Francois * R/help.R: workaround to allow the syntax "Rcpp ? something" to bring Rcpp documentation * inst/include/Rcpp/Module.h: support for exposing public data members * inst/doc/Rcpp-modules/Rcpp-modules.Rnw: a section to mention fields as a way to expose data members * inst/Rcpp/traits/is_na.h : new helper class Rcpp::traits::is_na 2010-06-09 Dirk Eddelbuettel * DESCRIPTION: Release 0.8.2 * debian/*: Similarly updated for new release to Debian 2010-06-08 Romain Francois * src/RcppCommon.cpp: track if demangling is available (currently only available with gcc) 2010-06-08 Dirk Eddelbuettel * DESCRIPTION: Release 0.8.1 * debian/*: Similarly updated for new release to Debian 2010-06-07 Dirk Eddelbuettel * inst/doc/Rcpp-extending*: Extended mini vignette "Rcpp-extending" 2010-06-07 Romain Francois * inst/doc/Rcpp-extending*: Added new mini vignette "Rcpp-extending" 2010-06-05 Dirk Eddelbuettel * inst/doc/Rcpp-FAQ*: Extended mini vignette "Rcpp-FAQ" 2010-06-05 Romain Francois * inst/doc/Rcpp-FAQ*: Added new mini vignette "Rcpp-FAQ" 2010-06-04 Romain Francois * inst/include/Rcpp/Module.h: * R/Module.R: support for properties of C++ objects 2010-06-03 Romain Francois * src/RcppCommn.cpp: added show method for C++Object and C++Class * inst/include/Rcpp/XPtr.h: getTag and getProtected are deprecated, will be removed in Rcpp 0.8.2. methods tag and prot should be used instead. The new methods support both lhs and rhs use. 2010-06-02 Romain Francois * inst/include/Rcpp/traits/r_type_traits.h: added missing support for std::complex, needed by RcppArmadillo * src/RcppCommon.cpp: added internal .Call function as_character_externalptr to extract the address of the pointer wrapped by an external pointer 2010-06-01 Romain Francois * inst/doc/Rcpp-package*: new mini vignette "Rcpp-package" to improve the documentation of Rcpp.package.skeleton and details the steps involved in making a package that uses Rcpp * inst/doc/Rcpp-modules/Rcpp-modules.Rnw: document how to use modules in other packages (namespace, etc ...) * R/Rcpp.package.skeleton: added the module argument * R/Module.R: prompt method for Module objects to generate skeleton of an Rd file with the list of functions and classes defined by the module. 2010-05-30 Romain Francois * R/Module.R: completion for C++ modules. 2010-05-29 Romain Francois * R/Module.R: when a Module is loaded, it creates extensions of the class C++Object for each internal class to enable S4 dispatch * R/Module.R: support for completion of methods of C++ objects 2010-05-28 Romain Francois * R/cppfunction.R: withdrawn, we now use inline::cxxfunction which is more flexible and we no longer need to depend on inline * man/cppfunction.Rd: * * inst/unitTests/runTests.R: The tests now require a recent version of inline (>= 0.3.4.2) 2010-05-27 Romain Francois * inst/include/Rcpp/Module.h: adding support for registering a free function that takes a pointer to the class of the wrapped object as first argument in class_ 2010-05-26 Romain Francois * inst/include/Rcpp/Module.h: * src/Module.cpp : limited support for exposing c++ classes in Rcpp modules * R/Module.R : classes "C++Class", "C++Object" holding external pointers and $ method dispatching internally 2010-05-24 Dirk Eddelbuettel * src/Rcpp*.cpp: Moved template code from the older API to headers headers in inst/include/*.h; removed empty source files 2010-05-21 Romain Francois * R/exceptions.R: rework rcpp_tryCatch to prevent evaluating the expression too early (reported by Doug Bates on Rcpp-devel) * src/Evaluator.cpp: rework Evaluator::run() so that it correctly evaluates inside an environment (reported by Doug Bates on Rcpp-devel) 2010-05-20 Romain Francois * inst/include/Rcpp/Vector.h : correct throw specs for vector_from_string (reported by Brian Ripley from solaris) * inst/include/Rcpp/internal/Proxy_Iterator.h: fixed constness of several operators in Proxy_Iterator to try to suite suncc/solaris * inst/include/Rcpp/config.h: define RCPP_ENABLE_MODULES to hide the experimental module features from the official api * R/getDLL.R: removed and promoted to getDynLib in inline 2010-05-19 Romain Francois * inst/include/Rcpp/as.h: add throw specification to as specialization, reported by suncc compiler on CRAN checks * inst/include/Rcpp/Module.h : adding the concept of Rcpp modules, inspired from boost.python * R/Module.R: R side support for modules * R/getDLL.R: generic (s4) function to get the DLL based on either its name e.g. getDLL( "Rcpp" ) or an object of class CFunc (from the inline package) 2010-05-17 Dirk Eddelbuettel * DESCRIPTION: Release 0.8.0 * debian/*: Similarly updated for new release to Debian 2010-05-11 Romain Francois * inst/include/Rcpp/traits/*.h: added support for long long int and unsigned long long int, which is size_t on win64 2010-05-10 Romain Francois * inst/include/Rcpp/Dimension.h: added a const operator[], requested in the Rcpp-devel thread : http://article.gmane.org/gmane.comp.lang.r.rcpp/327 * inst/include/Rcpp/preprocessor.h: added __rcpp_info__ pseudo reflection information to RCPP_XP_FIELD * inst/unitTests/runit.macros.R: testing RCPP_XP_FIELD 2010-05-06 Romain Francois * inst/include/Rcpp/DataFrame.h: DataFrame( RObject::SlotProxy ) and DataFrame( RObject::AttributeProxy ) constructors * inst/include/Rcpp/DataFrame.h: DataFrame::create now uses the R function data.frame and not as.data.frame, which respects the stringsAsFactors argument. * inst/include/Rcpp/preprocessor.h: added RCPP_XP_FIELD_SET and RCPP_XP_FIELD_SET macros to generate getter and setter for a field of a class handled by an external pointer. RCPP_XP_FIELD is modified to generate both getter and setter 2010-05-05 Romain Francois * inst/include/Rcpp/S4.h: S4 gains a "is" method to identify if an object is of a given S4 class, following Doug's advice in lme4a * inst/include/Rcpp/algo.h: new STL-like algorithms Rcpp::any and Rcpp::any_if * inst/include/Rcpp/Vector.h: Vector gains a constructor taking an RObject::SlotProxy and a constructor taking an RObject::AttributeProxy, allowing this construct NumericVector x( y.slot( "foo" ) ) 2010-05-04 Romain Francois * inst/include/Rcpp/preprocessor_generated.h: new macros to hide most of the boiler plate code RCPP_FUNCTION_0, ..., RCPP_FUNCTION_1 RCPP_FUNCTION_VOID_0, ... RCPP_XP_METHOD_0, ... RCPP_XP_METHOD_CAST_0, ... RCPP_XP_METHOD_VOID_0, ... 2010-05-03 Dirk Eddelbuettel * inst/unitTests/runit.DataFrame.R: unit tests for Rcpp::DataFrame 2010-05-03 Romain Francois * inst/include/Rcpp/exceptions.h : move the what methods of exception classes so that the symbol is defined for sure in the shared library. This seems to make a difference due to vague linkage issues. Decrypted from http://gcc.gnu.org/wiki/Visibility 2010-05-02 Romain Francois * inst/include/Rcpp/as.h: add throw(not_compatible) in Rcpp::as * inst/include/Rcpp/clone.h: the clone(SEXP) moves to the headers 2010-04-28 Romain Francois * inst/include/Rcpp/Vector.h: changed Vector( size_t ) to Vector( int ) to allow Vector( 0 ) and Vector::create() 2010-04-27 Romain Francois * inst/include/Rcpp/preprocessor.h: new macro RCPP_ENUM_TRAITS to generate traits needed to support wrap for an enum type (used in RProtoBuf) * R/Rcpp.package.skeleton.R: correctly handle the example_code argument 2010-04-26 Romain Francois * inst/include/Rcpp/DataFrame_*.h: new class Rcpp::DataFrame * inst/include/Rcpp/preprocessor.h: added RCPP_XP_FIELD macro * inst/include/Rcpp/preprocessor_generated.h: added the set of macros RCPP_WRAPPER_0, ..., RCPP_WRAPPER_65 to help wrapping existing C functions into .Call callables functions 2010-04-16 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.12 * debian/*: Similarly updated for new release to Debian * RcppLdpath.R: Remove shQuote() from trying to protect spaces in Windows pathnames as it breaks backticks expansion usage 2010-04-06 Romain Francois * inst/include/Rcpp/traits/*.h: added support for long 2010-04-04 Romain Francois * inst/include/* : headers are moved to inst/include so that they are are not duplicated on multi arch platforms * R/RcppLdPath.R: RcppCxxFlags is updated to reflect the above change * src/Makevars: simplified as the headers don't need to be copied to each arch lib directory anymore * src/Makevars.win: same * inst/include/Rcpp/Vector.h : Vector<> gains a templated assignment operator 2010-04-02 Romain Francois * src/Rcpp/Formula.h: new Rcpp::Formula class * inst/unitTests/runit.Formula.R: unit test for Rcpp::Formula 2010-03-26 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.11 * debian/*: Similarly updated for new release to Debian * inst/examples/FastLM: Updated to use new create() method * inst/unitTests/runit.Matrix.R: New unit test new Matrix constructors 2010-03-26 Romain Francois * src/Rcpp/Vector.h: Fixed bug in diag() 2010-03-23 Dirk Eddelbuettel * inst/unitTests/runit.CharacterVector.R: New unit test for bug found by Doug 2010-03-23 Romain Francois * src/Rcpp/Vector.h: fixed critical bug. Vector did not have copy constructor and assignement operators * src/exceptions.cpp: added the demangle helper function to help debugging * src/RcppCommon.h: added the DEMANGLE macro and the RCPP_DEBUG macro to help debugging. 2010-03-20 Romain Francois * src/Rcpp/Vector.h : Vector gains a templated fill method to fill all elements of a vector with the same value 2010-03-19 Romain Francois * src/Rcpp/Vector.h : Matrix gains a diag method to create diagonal matrices * src/Rcpp/Named.h: Named is no longer a class, but a templated function. This preserves all the existing interface, but also allows Named to be used in making simple vectors, e.g through the Vector::create factory functions * src/Rcpp/Vector.h: Vector gains the "create" factory methods taking up to 20 arguments that can be named (using the Argument class or the _ placeholder) * src/Rcpp/make_list.h: removed since Vector::create does the job more generically and more efficently 2010-03-19 Dirk Eddelbuettel * src/Rcpp/Vector.h: Matrix now also accepts a single int in the constructor to create matrices of square sizes * src/RcppFrame.h: Patch by Alistair Gee to make ColDatum more robust src/RcppFrame.h: Idem * inst/unitTests/runit.RcppFrame.R: New unit test for RcppFrame 2010-03-16 Romain Francois * src/Rcpp/make_list.h: set of helper factories make_list to facilitate production of named generic vectors. * src/Rcpp/Named.h: new class Rcpp::Argument similar to Named but does not contain the object, just the name. The templated Argument::operator= makes a Named. This allows an application to define a set of arguments that it uses in order to have a nicer construct. see the runit.Argument.R file for an example 2010-03-15 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.10 * debian/*: Similarly updated for new release to Debian * RcppLdpath.R: Use shQuote() to protect spaces in Windows pathnames 2010-03-15 Romain Francois * inst/codebloat/codebloat.R: script to generate code (creating a pairlist with up to n arguments). * src/Rcpp/Function.h : Function gains a body method to retrieve the body of the function (using the BODY macro from Rinternals.h) 2010-03-14 Romain Francois * src/Rcpp/S4.h : Rcpp::S4 gains a new constructor taking a string reference and building a new S4 object of that type. This throws an exception if the object is not successfully created (e.g the class is not a known S4 class) 2010-03-13 Romain Francois * src/Rcpp/S4.h : new class Rcpp::S4 2010-03-12 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.9 * debian/*: Similarly updated for new release to Debian 2010-03-12 Romain Francois * inst/unitTests/runit.environments.R: mac os has a different locale * src/Rcpp/traits/is_convertible.h: the detection is now performed without the help of cxx0x or tr1 which makes it compatible with gcc 4.2 * src/Rcpp/traits/is_same.h: new traits is_same to help detect if two types are the same (not currently used) * src/Rcpp/traits/wrap_type_traits.h: use "unsigned int" instead of "size_t" in the template specializations (64 bit compatibility) 2010-03-10 Dirk Eddelbuettel * R/RcppLdPath.R: More specific about quote-protection of path on Windows * inst/doc/Rcpp-introduction.Rnw: Applied several fixes kindly suggested by Matt Kraai 2010-03-09 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.8 * debian/*: Similarly updated for new release to Debian 2010-03-09 Romain Francois * man/Rcpp.package.skeleton.Rd: some more documentation 2010-03-07 Dirk Eddelbuettel * inst/doc/Rcpp-introduction.Rnw: Added vignette based on a recent paper 2010-03-07 Romain Francois * src/Rcpp/StringTransformer.h: new class template StringTransformer that allows using a character by character function to modify elements of a string vector (example available in package RcppExamples) * src/Rcpp/Vector.h: string_proxy::iterator is made const char* because R uses a global cache for the CHARSXP 2010-03-05 Romain Francois * src/Rcpp/Vector.h: string_proxy gains begin(), end(), size(), and operator[] for iterating over characters of the CHARSXP 2010-03-02 Romain Francois * src/Rcpp/Vector.h: Vector gains a nested r_type type that is an integral_constant to facilitate TMP * src/RcppCommon.{h,cpp}: added RCPP_CALL_VECTOR and RCPP_CALL_MATRIX macros to facilitate calling a function templated by T = Vector the macro hides the boiler-plate switch( TYPEOF(x) ){ case INTSXP : ... } 2010-03-01 Romain Francois * src/Rcpp/Vector.h: more typedef : CharacterMatrix, StringMatrix, GenericMatrix, ExpressionMatrix, ListMatrix * src/ExpressionVector.cpp : replaced by templates in Vector.h * src/Rcpp/Vector.h: use templates to cover ExpressionVector additional methods : eval() and eval(const Environment& ) 2010-02-28 Romain Francois * src/Rcpp/Vector.h : more generic code for vectors. All vector types are now generated from the template Rcpp::Vector where RTYPE is one of INTSXP, LGLSXP, REALSXP, RAWSXP, STRSXP, VECSXP or EXPRSXP. 2010-02-24 Romain Francois * src/Rcpp/exceptions.h: some exception classes factored out * src/Rcpp/VectorBase.h: now a template, using the Curiously recurring template pattern (the type parameter is the derived class) * src/Rcpp/SEXP_Vector.h: the intermediate class SEXP_Vector_Base is removed, reverting the change on 2010-02-09. This will facilitate the introduction of the Curiously recurring template pattern on vectors * src/Rcpp/MatrixRow.h : Row has been factored out of SimpleVector into a separate template class Rcpp::MatrixRow * src/Rcpp/SimpleVector.h: gains a row method that returns a SimpleVector::Row, aka MatrixRow * src/Rcpp/CharacterVector.h : gains a row method that returns a CharacterVector::Row, aka MatrixRow * src/Rcpp/SEXP_Vector.h : gains a row method that returns a SEXP_Vector::Row aka MatrixRow * src/Rcpp/MatrixColumn.h : Column class to access elements of a matrix column 2010-02-23 Romain Francois * src/Rcpp/SimpleVector.h: added the class SimpleVector::Row to support STL algorithms working on a row of a matrix. * src/Rcpp/internal/ListInitialization.h: new class that supports use of operator, (inspired from blitz) giving this notation: IntegerVector x(3); x = 0, 1, 2 ; 2010-02-21 Romain Francois * src/Rcpp/as.h: more generic as implementation. primitive types are handled through templates which for example makes it possible to as in RProtoBuf. std::deque and std::list become as'able when T is a primitive type as indicated by the Rcpp::traits::r_type_traits * src/as.cpp: removed since as is now fully implemented via templates 2010-02-19 Romain Francois * src/Rcpp/as.h: as now delegates to a template class Exporter since partial specialization was not possible with the interface of as. It is possible to partially specialize Exporter. std::vector when T is a primitive type is now handled through Exporter. Some support Exporter have been added and used in RcppArmadillo * src/Rcpp/internal/wrap.h: support for std::complex and std::complex (needed for RcppArmadillo) * src/Rcpp/traits/wrap_type_traits.h : The Importer concept has been introduced to support wrap() of more types. If a class has a typedef "r_import_type" then the following interface is assumed and used. The corresponding class must have methods int size() and r_import_type get(int). As usual further dispatch is performed based on r_import_type (primitive, etc ...). RcppArmadillo has an example of this for wrapping arma::field objects using the FieldImporter class. 2010-02-18 Romain Francois * src/Rcpp/Language.h: added fixed_call to support STL algorithms similar to generate. * inst/unitTests/runit.Language.R: unit test for fixed_call * src/Rcpp/Environment.h: Environment gains a find method which searches for a binding in the associated environment but also in all its parents, as opposed to get which just looks in the environment. 2010-02-17 Dirk Eddelbuettel * src/Makevars: Simplified as RcppExample.cpp is shipped off * src/Makevars.win: Simplified as RcppExample.cpp is shipped off 2010-02-17 Romain Francois * src/Rcpp/SEXP_Vector.h : The lhs use of operator[](string) has been improved so that if the name does not exist in the vector, the vector grows. * inst/unitTests/runit.GenericVector.R: new unit test test.List.implicit.push.back about the new operator[](string) * src/Rcpp/SimpleVector.h : new template class SimpleMatrix that derives from SimpleVector, with typedefs NumericMatrix IntegerMatrix, LogicalMatrix, RawMatrix, ComplexMatrix. The actual functionality comes from SimpleVector but SimpleMatrix has constructors and assignment operators that behave slighlty differently : they check that their input is a matrix * src/Rcpp/traits/wrap_type_traits: added support for float * src/Rcpp/Rcpp.h: now including RObject here instead of in RcppCommon.h because RObject is a client of implicit converters (attr) and so we need to leave a hook for third party code, e.g. RcppArmadillo 2010-02-16 Dirk Eddelbuettel * src/Makevars.wim: Applied improved version kindly supplied by Brian Ripley * R/RcppExample.R, man/RcppExample.Rd: Moved to RcppExamples package * man/RcppDate.Rd, man/RcppParams.Rd, man/RcppResultSet.Rd, RcppVector.Rd, src/RcppExample.cpp: Idem * inst/examples/FastLM: Slightly reworked, actual code factored out and used in a per-library demo/test script and a joint benchmark.r 2010-02-15 Dirk Eddelbuettel * inst/examples/FastLM: New example directory with two 'fast lm' implementations using, respectively, GNU GSL (in C) and Armadillo (in C++); Armadillo is seen as faster for lack of extra copying 2010-02-14 Romain Francois * src/Rcpp/Language.h: accepting Function in unary_call and binary_call to support STL algorithms using R functions. 2010-02-14 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.7 * debian/*: Similarly updated for new release to Debian 2010-02-14 Romain Francois * src/Rcpp/Language.h: fixing serious bug. The 'code bloat' constructors taking a std::string did not explicitely create a symbol, so the created calls were wrong. * src/Rcpp/Language.h: new template classes Rcpp::unary_call and Rcpp::binary_call to allow use of Language objects in STL algorithms. * inst/unitTests/runit.Language.R: unit test and example of using unary_call and binary_call 2010-02-12 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.6 * NEWS: Updated * debian/*: Similarly updated for new release to Debian 2010-02-12 Romain Francois * src/Rcpp/Environment.h: Environment gains a default constructor. This is needed for RInside. 2010-02-10 Romain Francois * src/Rcpp/SEXP_Vector.h: SEXP_Vector (and therefore ExpressionVector and GenericVector, a.k.a List) gain methods push_front, push_back and insert that are templated and use the 'implicit wrap idiom' to add an element to the front or, the back or an arbitrary (valid) position of the list, pushing other elements. Internally the SEXP is actually copied. * src/Rcpp/SEXP_Vector.h: SEXP_Vector gains an erase method modelled after std::vector<>::erase to remove elements from a list. erase has a single iterator (or int) form that removes one element, and a range based version erase(iterator first, iterator last) that erases all elements between first and last. * src/Rcpp/VectorBase.h: VectorBase gains a version of offset to support retrieving the offset of a given name of a vector: offset( const std::string& name) * src/Rcpp/SimpleVector.h : uses the new offset to perform names based indexing (FR #808) * src/Rcpp/SEXP_Vector.h: same * src/Rcpp/CharacterVector.h: same * inst/unitTests/runit.GenericVector.R: unit tests for names based indexing * inst/unitTests/runit.IntegerVector.R: same * inst/unitTests/runit.CharacterVector.R: same 2010-02-09 Dirk Eddelbuettel * inst/skeleton/Makevars: Use $R_HOME/bin indirection * inst/skeleton/Makevars.win: Idem 2010-02-09 Romain Francois * src/Rcpp/SEXP_Vector.h: The functionality of SEXP_Vector that was independent of the template parameter was factored out into a new base class SEXP_Vector_Base. This follows the advice of item 44 of Effective C++. * src/Rcpp/SEXP_Vector.h: SEXP_Vector_Base::iterator is introduced as well as methods begin() and end() to support use of stl algorithms on lists. * inst/unitTests/runit.GenericVector.R: new unit test for testing SEXP_Vector_Base::iterator and illustrating a c++ version of lapply using std::transform * src/Rcpp/CharacterVector.h: CharacterVector gains a random access iterator, begin() and end() to support STL algorithms. The iterator dereferences to a StringProxy * src/Rcpp/RObject.h: remove RObject::asFoo methods which were deprecated in Rcpp 0.7.5. The alternative is to use Rcpp::as 2010-02-08 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.5 * debian/*: Similarly updated for new release to Debian 2010-02-07 Romain Francois * src/RcppSexp.h: class RcppSexp removed (was deprecated) * src/Rcpp/*.h: defaults copy constructors and assignment operators have been added for all classes extending RObject. Otherwise the compiler generates default versions that circumvent the garbage collection management 2010-02-06 Dirk Eddelbuettel * inst/examples/functionCallback/newApiExamples.r: Added simpler version using the new API * inst/examples/functionCallback/newApiExamples.r: Updated * inst/unitTests/runit.RcppVector.R: added test for NA/NaN * inst/unitTests/runit.RcppMatrix.R: idem 2010-02-06 Romain Francois * src/Rcpp/RObject.h : asFoo methods are deprecated. * src/Rcpp/DottedPair.h : using R_len_t instead of int to anticipate future changes in R * src/Rcpp/VectorBase.h: idem * src/DottedPair.cpp: idem * src/VectorBase.cpp: idem * src/as.cpp: idem * src/Rcpp/SimpleVector.h: SimpleVector is now only parameterized by the SEXP type. The c type is automatically retrieved using the storage_type trait class. 2010-02-05 Dirk Eddelbuettel * inst/THANKS: Added in order to show our appreciation 2010-02-04 Romain Francois * src/Rcpp/DottedPair.h: code bloat to allow creation of DottedPair containing up to 5 objects without variadic templates RInside for example needs this. * src/Rcpp/Language.h: same * src/Rcpp/Pairlist.h: same * src/Rcpp/grow.h: same * src/Rcpp/internal/wrap.h : one more level of dispatch to identify if there needs a cast between the primitive iterated over and the target storage type. For example size_t needs a cast to be stored in an integer vector. This will be useful for the RProtoBuf package with e.g. types like google::protobuf::int64 which needs to be cast to double. Consequently the special handling of bool has been withdrawn as bool can now be assimilated to a primitive type that does require casting (to int) 2010-02-03 Romain Francois * src/Rcpp/VectorBase.h: VectorBase gains a names method that uses the proxy pattern to get or set the names of a vector * src/Rcpp/DottedPair.h: DottedPair gains a << operator to add an object to the queue of the list. this is much useful when variadic templates are not available * src/Rcpp/RObject.h: support for slot assignment. The slot method now uses the proxy pattern. * inst/unitTests/runit.S4.R: unit test for slot assignment 2010-02-02 Romain Francois * src/internal/r_coerce.h : coercion is now handled by a templated function r_coerce, for example r_coerce takes an int, performs coercion and returns a double * src/traits/has_iterator.h : introduce a trait that uses the SFINAE idiom to check if a class T has a nested type called "iterator". This helps wrap dispatch which now uses the range based wrap implementation in that case * src/Rcpp/wrap.h: The range based wrap function is exposed at the Rcpp:: level. The interface is wrap( InputIterator first, InputIterator last ) and dispatch is performed internally using iterator traits 2010-02-01 Romain Francois * src/traits/wrap_type_traits.h: new namespace Rcpp::traits:: to host Rcpp type traits used by the template meta programming dispatching of wrap 2010-01-31 Dirk Eddelbuettel * doxyfile: several updates plus improvements related to examples/ * src/RcppDoxygenExamples.h: A phony empty file needed mainly to define a few \example tags for Doxygen 2010-01-31 Romain Francois * src/Rcpp/internal/wrap.h: more wrap for stl templates are candidate for wrap (when T can be wrapped) std::list -> vector or list std::multiset -> vector or list std::map -> named vector or named list std::multimap -> named vector or named list std::tr1::unordered_map -> named vector or named list std::tr1::unordered_set -> vector or list std::tr1::unordered_multiset -> vector or list * inst/unitTests/runit.wrap.R : unit tests for the new wrappable types 2010-01-30 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.4 * debian/*: Similarly updated for new release to Debian * inst/unitTests/runit.RcppMatrix.R: also test STL return * inst/unitTests/runit.RcppVector.R: added 2010-01-30 Romain Francois * src/Rcpp/internal/wrap.h: rework wrap using traits and template meta programming. wrap is now really a template and has many generated specializations. This file is a private header and should only be included by RcppCommon.h * src/Rcpp/Language.h: Language gains Function aware constructors and eval methods 2010-01-28 Romain Francois * src/Rcpp/DottedPair.h: DottedPair::Proxy are no more lazy, i.e traversal of the pair list happens at construction time, so that the proxy can be created once and used many times more efficiently. * src/Rcpp/DottedPair.h: Pairlist and Language are now derived from the new virtual class DottedPair since both class were almost identical * src/Rcpp/SimpleVector.h: simple vectors gain a range based assign method and a range based assign constructor * inst/unitTests/runit.IntegerVector.R: new unit test test.IntegerVector.range.constructors * src/Rcpp/Dimension.h: new class Rcpp::Dimension to support creation of vectors with dimensions * src/Rcpp/*Vector.h: using Rcpp::Dimension * src/Rcpp/SimpleVector.h: data is initialized with 0 when the object is constructed from size or Dimension constructor * inst/unitTestsrunit.CharacterVector.R: new unit test to test constructors using Dimension * inst/unitTests/runit.IntegerVector.R: idem * inst/unitTests/runit.GenericVector.R: idem * R/unit.tests.R: new unexported function "test" to trigger unit tests using installed test cases * src/Rcpp/CharacterVector.h: minor bug fix in assign * inst/unitTest/runit.RcppResultSet.R: compare time using as.numeric to avoid timezone problems 2010-01-27 Dirk Eddelbuettel * inst/unitTests/runit.RcppMatrix.R: added * inst/unitTests/runit.RcppMatrixView.R: added * inst/unitTests/runit.RcppVector.R: added * inst/unitTests/runit.RcppVectorView.R: added 2010-01-27 Romain Francois * src/Rcpp/CharacterVector.h: CharacterVector gains a default constructor * src/Rcpp/CharacterVector.h: CharacterVector gains range constructors and range based assign methods facilitating construction from iterators * inst/unitTests/runit.CharacterVector.R: unit tests for assign and range based constructors * src/Rcpp/CharacterVector.h: CharacterVector::StringProxy gets a printing operator <<(std::ostream& ) * src/Rcpp/Environment.h: removed the static Environment::RCPP_NAMESPACE which caused problems when embedding R * src/Rcpp/RObject.h: RObject::AttributeProxy::operator RObject replaced by templated implicit conversion operator, delegating the actual work to as<>. * src/Environment.h: Binding::operator RObject is removed since it can be automatically generated by the templated implicit conversion operator * man/RcpUnitTests.Rd: fix html rendering * inst/doc/Makefile: clean the index.html file before copying it 2010-01-26 Dirk Eddelbuettel * src/RcppDatetime.cpp: New SEXP-based constructor * src/RcppDatetime.h: idem, bug fix for operator- * src/RcppDate.h: new accessor getJulian() [relative to epoch just like R's julian()] to complement getJDN() * inst/unitTests/runit.RcppDatetime.R: added 2010-01-26 Romain Francois * src/Rcpp/clone.h: explicit cloning of RObjects. The clone template function creates a new object of the same class as the object it is passed in, encapsulating a duplicate of the SEXP contained by the input RObject. * src/Rcpp/r_cast.h: new template function to handle casts from one SEXP to another. This is mostly useful internally * src/Rcpp/VectorBase.h: VectorBase gains a offset method that is responsible to calculate the correct offset based on variable number of size_t arguments. currently the number of arguments can be 1 (vector indexing) and 2 (matrix indexing) but arbitrary number of arguments will be added later for arbitrary array-like indexing. * src/Rcpp/SimpleVector.h: outsourcing offset calculation to VectorBase::offset * src/Rcpp/CharacterVector.h: use offset to implement matrix-like indexing for matrices of strings * inst/unitTests/runit.CharacterVector.R: unit test for matrix indexing (test.CharacterVector.matrix.indexing) * inst/Rcpp/SEXP_Vector.h: use offset to implement matrix like indexing on lists * inst/unitTests/runit.GenericVector.R: unit test for matrix indexing (test.List.matrix.indexing) 2010-01-26 Dirk Eddelbuettel * inst/unitTests/runit.RcppDate.R: added 2010-01-25 Romain Francois * src/Rcpp/wrap.h: wrap is back at being a template. The template parameter T is first converted to SEXP implicitely and the wrap(SEXP) method is used. This allows clients to only have to implement an implicit conversion to SEXP operator for their class and have wrap for free. * src/Rcpp/SEXP_Vector.h: factored out ExpressionVector and GenericVector into a templated SEXP_Vector class parameterized by the SEXP type (VECSXP or EXPRSXP). GenericVector and ExpressionVector now are generated from the template. This will ease adding features to both classes. * src/as.cpp: also use coercion for as, as, as as (FR #768) * src/Rcpp/as.h: smarter template as, now the template attempts to create an object by passing the SEXP as the first parameter, so any class that has a constructor taking a SEXP can be as<>'ed. see item below for how this can be useful * src/Rcpp/Environment.h: lhs use of Environment::Binding is now a bit smarter and uses as<> to implicitely convert the SEXP to the requested type, so that if as makes sense, this works: Foo foo = env["x"] ; * src/Rcpp/Environment.h: Environment::assign gains a templated form so that we can assign anything that can be wrapped to a name in an environment. * inst/unitTests/runit.environments.R: new unit test 'test.environment.assign.templated' to test the templated assign * src/Makevars(.win?): listen to the RCPP_CXX0X environment variable and if set to "yes" attempt to add c++0x support if possible 2010-01-24 Dirk Eddelbuettel * configure.in: Withdrawn as OS X universal binaries are only built when there is src/Makevars and neither src/Makefile nor configure * configure: idem * src/Makevars: Again a static file, content copied from Makevars.in, -std=c++0x selection back to simply unabling a comment 2010-01-24 Romain Francois * src/SimpleVector.h : new template to replace simple vector classes. now NumericVector, IntegerVector, LogicalVector, ComplexVector and RawVector are all generated from the same template class. A first attempt at matrix indexing is added as part of this. * inst/unitTests/runit.NumericVector.R: new unit tests about matrix indexing * src/Rcpp/VectorBase.h: added the exception not_a_matrix that is thrown when attempting to perform matrix indexing on a vector that is not a matrix. 2010-01-23 Dirk Eddelbuettel * inst/unitTests/runit.RcppParams.R: added * inst/unitTests/runit.RcppResultSet.R: added 2010-01-23 Romain Francois * src/wrap.cpp: s/copy/std::copy/ * src/RcppDateTime.h: explicitely include (win64 warning) 2010-01-22 Romain Francois * src/Makevars.win: disable c++0x entirely (for now) * src/Rcpp/Environment.h: make sure what() is const. (suncc finding) * src/RcppCommon.h: pre declare classes, as an attempt to deal with the suncc warning "RObject may not have a type qualifier." * src/Rcpp/*.h: make sure RcppCommon.h is the first included header * src/*cpp: make sure foo.cpp only include Rcpp/foo.h * src/Environment.cpp: use Evaluator instead of R_ToplevelExec * src/RcppFunction.{h,cpp}: listen to some suncc warnings * src/RcppFrame.cpp: listen to some suncc warnings * src/as.cpp: use transform instead of assign, which should make the code more portable (particularly suncc) and also deal with coercion 2010-01-21 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.3 * debian/*: Similarly updated for new release to Debian * INDEX: updated * configure.in: Some more small cleanups * inst/skeleton/Makevars.win: Add missing default file 2010-01-21 Romain Francois * configure.in: Some small cleanups, add RCPP_CXX0X env var 2010-01-20 Romain Francois * src/*: make update private virtual in RObject and couple it with setSEXP so that it gets called automatically, instead of manually * src/*: move more code depending on c++0x from cpp files to header files 2010-01-20 Dirk Eddelbuettel * configure.in: Detect C++ capabilties (via g++ major/minor) via small C++ program embedded in autoconf macro 2010-01-19 Romain Francois * configure.in: use the cxx0x.R script to discover if the compiler being used is c++0x capable * configure: regenerated from updated configure.in * src/Makevars.in: using CLINK_CPPFLAGS variable * src/Makevars.win: using CLINK_CPPFLAGS variable with the cxx0x.R discovery script 2010-01-18 Dirk Eddelbuettel * R/RcppLdpath.R: Rewrote logic for LdFlags() to decide when linking is static: default now is everywhere but Linux, and choices can be overriden as before 2010-01-18 Romain Francois * inst/discovery/cxx0x.R: replaces the cxx0x.c file to take care of compiling, etc... 2010-01-17 Romain Francois * src/exceptions.cpp: slightly less dumb exception logic on non GCC compilers. exceptions will now trigger an R error with a default message (we don't attempt to get the exception class or message because we don't know how to) * src/Rcpp/Pairlist.h: Pairlist lacked a default constructor which is needed when the variadic templates are not available * inst/unitTests/*: add -std=c++0x in inline when necessary * R/RcppLdPath.R : new script RcppCxx0xFlags() and Cxx0xFlags() that compile, load and call a simple C file in order to check the compiler version and add the -std=c++0x flag * inst/discovery/cxx0x.c: discovery script. simple C script that returns "-std=c++0x" if it is compiled with GCC >= 4.3 and "" otherwise 2010-01-16 Dirk Eddelbuettel * src/Rcpp/*h: call Rf_length() etc as ::Rf_length() to ensure we get the one from the top-level namespace 2010-01-16 Romain Francois * src/Rcpp/Environment.h: Environment gains a new_child method to create an environment enclosed by this * inst/unitTests/runit.environments.R: unit test for new_child * src/Rcpp/ExpressionVector.h: ExpressionVector gains a convenience methods eval to evaluate itself * inst/unitTests/runit.ExpressionVector.R: added unit tests for ExpressionVector::eval * src/Rcpp/ExpressionVector.h: ExpressionVector gains a constructor ExpressionVector( const std::string& ) that parses the string as R code * inst/unitTests/runit.ExpressionVector.R: added unit tests to cover the new constructor * src/Rcpp/Environment.h : the Rcpp namespace is cached because we use it in many places and retrieving it is an "expensive" operation that requires a round trip to the R side * src/Evaluator.cpp: use the cached Rcpp namespace * R/Rcpp.package.skeleton: now generating example C++ and R code that uses Rcpp, also the generated Makevars contains a hack so that the generated package can pass check (after edition of Rd files, NAMESPACE, etc ...) * inst/skeleton: added example code used by the skeleton generator 2010-01-15 Romain Francois * src/Rcpp/NumericVector.h: cache the start of the array to improve performance of operator[] * src/NumericVector.cpp: idem * src/Rcpp/IntegerVector.h: * src/Rcpp/RawVector.h: * src/Rcpp/ComplexVector.h: * src/Rcpp/LogicalVector.h: idem * src/IntegerVector.cpp: * src/RawVector.cpp: * src/ComplexVector.cpp: * src/LogicalVector.cpp: idem 2010-01-13 Romain Francois * R/cpp.package.skeleton.R: new function cpp.package.skeleton to extend the code generation performed by package.skeleton to Rcpp features * man/cpp.package.skeleton.Rd: documentation for cpp.package.skeleton * src/Rcpp/VectorBase.h: new virtual class Rcpp::VectorBase to manage common things of all vectors (length, names, etc ...) all Vector classes now derive from VectorBase * src/Rcpp/Environment.h: Environment::Binding gains a templated conversion operator, to facilitate distance 2 implicit conversion making this possible: Environment env("package:stats") ; Function f = env["rnorm"] ; * src/Rcpp/GenericVector.h: GenericVector::Proxy gains an assignement operator to deal with Environment::Binding. This is to work around distance 1 implicit conversion restrictions * src/Rcpp/NumericVector.h: operator[], begin and end are promoted to inline member functions * src/Rcpp/IntegerVector.h: idem * src/Rcpp/RawVector.h: idem * src/Rcpp/LogicalVector.h: idem 2010-01-12 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.2 * debian/*: Similarly updated for new release to Debian * .Rbuildignore: Add 'inst/doc/{html,latex,man} as we no longer ship the voluminous doxygen-generated content * inst/doc/examples/ConvolveBenchmarks/convolve2*: Added simple benchmark on the well-known vector convolution example from 'Writing R Extensions' to compare C and C++ implementations * inst/doc/examples/ConvolveBenchmarks/buildAndRun.sh: idem inst/doc/examples/ConvolveBenchmarks/exampleRCode.r: idem 2010-01-12 Romain Francois * inst/doc/examples/ConvolveBenchmarks/convolve2*: Added additional C++ examples to convolution benchmark highlighting performance gains 2010-01-11 Romain Francois * src/Rcpp/CharacterVector.h: StringProxy gains operator+= * src/CharacterVector.cpp: implementation * src/Rcpp/*Vector.h: operator[] now throws index out of bounds exception when needed (FR#770) * src/*Vector.cpp: same * src/Rcpp/Environment.h: operator[](string) for environment allowing to get/set values of a binding in this environment. The Environment::Binding class has been created to act as a proxy. * src/Environment.cpp: idem * inst/unitTests/runit.environments.R: unit tests for the above 2010-01-10 Romain Francois * src/Rcpp/Pairlist.h: operator[] for pairlist using proxies * src/Pairlist.cpp : idem * inst/unitTests/runit.Pairlist.R: new unit tests * src/Rcpp/Language.h: same for Language * src/Language.cpp : idem * inst/unitTests/runit.Language.R: new unit tests * inst/unitTests/runit.Function.R: added unit test for function throwing exceptions * src/Function.cpp: grab the condition message and not the call 2010-01-09 Romain Francois * src/Rcpp/RObject.h: attr can now be used to get or set the attribute (used to be read only). This is another manifestation of the proxy pattern. The rhs can be anything wrap can handle * inst/unitTests/runit.RObject.R: added test.RObject.attr.set unit test (setting attribute). * src/Rcpp/Function.h: Function::operator() now throws an exception if an R error occurs. 2010-01-08 Dirk Eddelbuettel * configure.in: provide basic support for c++ compiler version detection at build-time so that we can add -std=c++0x when applicable; provide defaults in case we do not use g++ * src/Makevars.in: copied from Makevars, set C++ flags from configure * configure.win: simply log what g++ version is being used 2010-01-08 Romain Francois * src/Rcpp/wrap.h: added wrap( size_t ) to disambiguate it * int/unitTests/runit.XPTr.R: forgot to set the finalizer on the external pointer * src/Rcpp/Pairlist.h: Pairlist gains a push_back, replace, length, size, remove and insert methods * src/Rcpp/Language.h: idem for Language 2010-01-07 Romain Francois * src/Rcpp/Pairlist.h: gains a push_front method * src/Rcpp/wrap.h : now the result type of the various wrap functions depends on the parameters. wrap( bool ) makes a LogicalVector, etc ... wrap(SEXP) dispatches to the appropriate Rcpp:: class depending on TYPEOF * src/Rcpp/RObject.h: added methods "isS4", "slot" and "hasSlot" to deal with S4 objects * inst/unitTests/runit.S4.R: unit tests * src/Rcpp/ComplexVector.h: new class Rcpp::ComplexVector to manage ... complex vectors (CPLXSXP) * src/ComplexVector.cpp: implementation * inst/unitTests/runit.ComplexVector.R: unit tests * src/Rcpp/Promise.h: new class Rcpp::Promise to manage promises (PROMSXP). only read access so far (no way to force the promise) * src/Promise.cpp: implementation * src/Rcpp/RObject.h: the result of attr is now an RObject rather than a SEXP. This does not change previous behavior because of the implicit conversion * src/Rcpp/ExpressionVector.h: new class Rcpp::ExpressionVector which shares a lot with GenericVector. * src/ExpressionVector.cpp: implementation * inst/unitTests/runit.ExpressionVector.R: unit tests * src/Rcpp/CharacterVector.h: new class Rcpp::CharacterVector to manage character vectors (STRSXP). StringVector is a convenience typedef equivalent to CharacterVector * src/CharacterVector.cpp: implementation * inst/unitTests/runit.CharacterVector.R: unit tests * src/Rcpp/WeakReference.h: new class Rcpp::WeakReference to wrap WEAKREFSXP with accessors to the key and value * src/WeakReference.cpp: implementation * src/Rcpp/Rcpp_Rinternals.h: borrowed from Rinternals so that we can use VECTOR_PTR (which R forbids unless we define USE_RINTERNALS, but defining it disables NO_R_REMAP) * src/Rcpp/GenericVector.h : added begin and end to allow stl type iteration over generic vectors. Now using the Proxy pattern (from Item 30 of More Effective C++) to allow getting and setting the elements of the list through the operator[]. * int/unitTests/runit.GenericVector.R: examples are reworked using [] where set and get were used. 2010-01-06 Dirk Eddelbuettel * src/RcppCommon.h: Protect definition of logTxt by #ifndef * inst/doc/Rcpp-unitTests.Rnw: Minor LaTeX tweak 2010-01-06 Romain Francois * src/Rcpp/wrap.h : wrap can now use initializer lists (available on on GCC >= 4.4). * src/wrap.cpp: implementation * int/unitTests/runit.wrap.R: unit tests * src/RObject.cpp : make methods RObject::asFoo calling Rcpp::as to avoid code duplication 2010-01-05 Romain Francois * src/Rcpp/GenericVector.h : new class Rcpp::GenericVector and an alias Rcpp::List to handle lists (VECSXP), aka generic vectors * src/GenericVector.cpp : implementation * inst/unitTests/runit.GenericVector.R: unit tests * src/Rcpp/IntegerVector.h : new class Rcpp::IntegerVector to manage integer vector (INTSXP). IntegerVector can be constructed from SEXP of appropriate type, from an int which simply allocates a vector that big, or using an initialization list (the last is GCC >= 4.4 only). Additionally IntegerVector defines begin() and end() so that they can be used in STL algorithms * src/IntegerVector.cpp : implementation * inst/unitTests/runit.IntegerVector.R: unit tests * src/Rcpp/NumericVector.h : same as above, but for numeric vectors (REALSXP) * src/NumericVector.cpp : implementation * inst/unitTests/runit.NumericVector.R: unit tests * src/Rcpp/RawVector.h : same as above, but for numeric vectors (RAWSXP) * src/RawVector.cpp : implementation * inst/unitTests/runit.RawVector.R: unit tests * src/Rcpp/LogicalVector.h : same as above, but for numeric vectors (RAWSXP) * src/LogicalVector.cpp : implementation * inst/unitTests/runit.LogicalVector.R: unit tests * src/RcppCommon.h: improve the conditional compiling logic with macros HAS_VARIADIC_TEMPLATES and HAS_INIT_LISTS instead of CXX0X. This ensures the package can be compiled with older GCC, with lower functionality * src/RcppCommon.{h,cpp}: added a capabilities function that can be used to bring the result of the two above macros to R * R/RcppLdPaths.R: added unexported function RcppCapabilities to call the internal capabilities. capabilities is an alias to RcppCapabilities so that we can call Rcpp::capabilities() 2010-01-04 Romain Francois * src/Rcpp/Function.h: new class Rcpp::Function to manage functions (closures, primitives and builtins) all share the Function class (at least for now). This is implemented as a functor taking variable number of arguments, so it looks pretty similar to the R function * src/Function.cpp: implementation * inst/unitTests/runit.Function.R: unit tests * src/Rcpp/Pairlist.h: new class Rcpp::Pairlist to manage dotted pair lists (LISTSXP). unsurprisingly this shares a lot of similarities with Language class * src/Pairlist.cpp: implementation * inst/unitTests/runit.Pairlist.R: unit tests for Rcpp::Pairlist * src/Rcpp/wrap.h: wrap no more a template. this was not a good idea as it prevented implicit conversion to SEXP behavior when wrap'ing a RObject. * src/Rcpp/Environment.h: added the remove method * src/unitTests/runit.environments.R: remove unit test * src/unitTests/runit.Language.R: remove verbose=TRUE in cfunction call (generated noise) * src/wrap.cpp: added a few missing PROTECT 2010-01-04 Dirk Eddelbuettel * src/excections.cpp: Get rid of another unused variable * src/RcppCommon.cpp: Idem 2010-01-03 Romain Francois * src/Rcpp/Environment.h: Environment gains the parent method that returns the parent environment * src/Rcpp/as.h: template as<> to convert SEXP to classic C++ types, factored out of RObject * src/as.cpp: specific implementations. as, as as, ... * inst/unitTests/runit.as.R: unit tests * src/Rcpp/wrap.h : factored out from RObject. there is now a template wrap in addition to the specific implementations. The template generates a warning and return NULL * src/wrap.cpp: specific implementations of the wrap template (factored out of RObject) * src/Rcpp/pairlist.h : variadic templates to recursively generate a pairlist (CAR and CDR) from any number of "wrap("'able objects. (factored out of Language) * src/pairlist.cpp: end of recursion for the above * src/Rcpp/grow.h : grow a pairlist with any wrappable object. Used in pairlist * src/grow.cpp : specific implementation for Named object to allow tagging the head of the pairlist. * src/Rcpp/Named.h : new class Named that is used to specify named elements in a pairlist. * src/Named.cpp: implementation * src/Rcpp/RObject.h: added wrap(const char* const) RObject factory method * src/Rcpp/RObject.h: rework the garbage collection mechanism so that it is automatic and hidden. methods preserve and release are now private to the RObject class and the SEXP may only be changed using the protected setSEXP member function. isPreserved and forgetPreserve are defunct. * src/Rcpp/RObject.h: RObject gains assignment operators and copy constructors * src/RcppCommon.h: added the CXX0X define that controls whether we can use C++0x features offered by the gcc. currently the define is hardcoded, but this will eventually be a configure guess. The canUseCXX0X function can be called to bring this back to R * R/RcppLdPath.R: added the canUseCXX0X R function to query the internal canUseCXX0X function, use this in RcppCxxFlags so that code linking against Rcpp (inline code or packages) can take advantage of it * src/Rcpp/Language.h : new class Rcpp::Language to manage calls (LANGSXP SEXP) * src/Language.cpp : implementation * inst/unitTests/runit.Language.R: unit tests * src/Rcpp/Environment.h : added constructors and made the SEXP based constructor smarter (using as.environment) * inst/unitTests/runit.environments.R: more unit tests * src/Rcpp/Symbol.h: new class Rcpp::Symbol to encapsulate symbols. This allows to use Symbol("rnorm") instead of the most cryptic Rf_install("rnorm") * src/Symbol.cpp: implementation * inst/unitTests/runit.Symbol.R: unit tests 2010-01-03 Dirk Eddelbuettel * doxyfile: updated to current doxygen standard using -u 2010-01-02 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.1 * debian/*: Similarly updated for new release to Debian 2010-01-02 Romain Francois * pkg/src/RcppSexp.h: Added to preserve existing interface, implementation use the redesigned class src/RObject.h 2010-01-01 Romain Francois * pkg/src/Rcpp/RObject.h: RObject::RObject constructors are replaced by the Rcpp::wrap set of functions. Currently the wrap functions make a RObject object but it is likely that as new classes become available in the new API, wrap will return instances of classes that extend RObject. * pkg/src/Rcpp/RObject.h: s/protect/preserve/, added methods isPreserved and forgetPreserve * ** : adapted examples, code, and unit tests to reflect both above items 2009-12-31 Romain Francois * src/Rcpp/Evaluator.h : new class Rcpp::Evaluator that eases evaluation of R expression with error capture. so that we can for example throw C++ exceptions * src/Evaluator.cpp : implementation of Rcpp::Evaluator * inst/unitTests/runit.evaluator: unit tests of Rcpp::Evaluator * inst/Rcpp/RObject.h: RObject::RObject(SEXP) now initializes isProtected * inst/src/Environment.cpp: use of exceptions 2009-12-30 Romain Francois * src/Rcpp/Environment.h : added support for environment through the Rcpp::Environment class * src/Environment.cpp: idem * inst/unitTests/runit.environments.R: testing the above * src/RcppCommon.h: now includes , needed for the environment support 2009-12-30 Romain Francois * src/Makevars* : adapt for allowong copy of the Rcpp directory * src/Rcpp_RObject.h: replace by src/Rcpp/RObject.h * src/Rcpp_XPtr.h: replaced by src/Rcpp/XPtr.h * src/*.cpp: adapt to the Rcpp directory * cleanup: idem 2009-12-30 Romain Francois * inst/unitTests/runit.RObject.R: new unit tests * inst/unitTests/runit.exceptions.R: idem * inst/unitTests/runit.XPtr.R: idem * man/RcppUnitTests.Rd: shows and link unit test reports generated at build time 2009-12-29 Romain Francois * src/Rcpp_RObject.{h,cpp}: new namespace Rcpp and new class Rcpp::RObject to replace RcppSexp with the same functionality. * src/Rcpp_XPtr.h: replaces RcppXPtr.h and the class is now Rcpp::XPtr<> and extends Rcpp::RObject * inst/examples/RcppInline/external_pointer.r: use the new namespace * inst/examples/RcppInline/RcppInlineWithLibsExamples.r: idem * inst/examples/RcppInline/RcppSexpTests.r: idem * DESCRIPTION: marked as version 0.7.0.5 * inst/doc/*: fake (empty) vignette and unit test trigger * inst/unitTests/*: prepare the space for unit tests * tests/doRUnit.R : added the usual RUnit tests trigger 2009-12-29 Romain Francois * src/RcppXPtr.h: now RcppXPtr extends RcppSexp and RcppSexp manages garbarge collection, attributes, etc ... * src/exceptions.cpp: replaces src/exception_handling.cpp * DESCRIPTION: now suggesting RUnit. 2009-12-29 Romain Francois * src/RcppXPtr.h: added operator SEXP() to class RcppXPtr to ease implicit conversion from RcppXPtr to SEXP. This means we can directly return the RcppXPtr object to R when the return type of the function is SEXP. (no need to explicitely call asSexp anymore) * src/RcppSexp.{h,cpp} : idem 2009-12-29 Romain Francois * src/RcppXPtr.h: new smart external pointer wrapper. The RcppXPtr template can be used to wrap a external pointer (SEXP) so that it looks like the dumb pointer it is wrapping (as far as the * and -> operator are concerned). The template parameter controls the type of object that is wrapped by the pointer. * src/Rcpp.h: importing the RcppXPtr.h header * src/RcppExample.cpp: added an example of RcppXPtr usage * inst/examples/RcppInline/external_pointer.r: added example using the RcppXPtr template * DESCRIPTION: marking this as 0.7.0.4 2009-12-28 Romain Francois * R/exceptions.R: s/uncaught_cpp_exception/cpp_exception/ and added a 'class' argument to hold the class name of the C++ exception (range_error, etc ...) * inst/examples/RcppInline/UncaughtExceptions.r: extend examples to show how to grab details of the C++ exception * src/exception_handling.cpp: factored out from RcppCommon.cpp, now able to grab the class name of the exception and its message. 2009-12-27 Dirk Eddelbuettel * R/RcppInline.R: Removed as we now use cfunction() from inline (>= 0.3.4) * man/{RcppInline,internals}.Rd: idem * NAMESPACE: removed entries related to cfunction and methods * DESCRIPTION: Added 'Suggests: inline (>= 0.3.4) * inst/examples/RcppInline/*R: Add library(inline) or require(inline) 2009-12-27 Romain Francois * src/RcppCommon.{h,cpp} : added experimental uncaught exception management * R/zzz.R : added .onAttach, used to register the uncaught exception management on package attach * R/exceptions.R : added R side of the exception management, unexported as it is only used by internal C++ code * inst/examples/RcppInline/UncaughtExceptions.r: demo of the uncaught exception system * src/RcppSexp.{h,cpp} : added method isNULL to test if the underlying SEXP is NULL * src/RcppSexp.{h,cpp} : added some methods to deal with attributes attributeNames : the names of the attributes as a vector hasAttribute : test whether the SEXP has the given attribute attr : extract the attribute (might return NULL) * src/RcppSexp.{h,cpp} : added RcppSexp(bool), RcppSexp(vector) constructors and RcppSexp.asBool(), RcppSexp.asStdVectorBool() methods * inst/examples/RcppInline/RcppSexpTests.r: examples/tests of the above items 2009-12-26 Romain Francois * src/RcppSexp.{h,cpp} : added std::set<{int,double,Rbyte,string}> as accepted input type for the RcppSexp class (needed by RProtoBuf) * inst/examples/RcppInline/RcppSexpTests.r: examples/tests of the above 2009-12-21 Romain Francois * src/RcppSexp.{h,cpp} : support for raw vector added into RcppSexp * inst/examples/RcppInline/RcppSexpTests.r: examples of raw vector support 2009-12-20 Dirk Eddelbuettel * inst/examples/RcppInline/RcppInlineWithLibsExamples.r: Minor simplifications using new RcppSexp types, added third example 2009-12-19 Dirk Eddelbuettel * DESCRIPTION: Release 0.7.0 * DESCRIPTION: Descrition fields reworded and expanded to explicitly mention 'inlining' ability as well as simple SEXP support. * src/RcppSexp.{h,cpp}: Switch to R_PreserveObject and R_ReleaseObject with a big thanks to Romain for the most appropriate suggestion * src/RcppSexp.{h,cpp}: Added converters for vectors of int, double, and std::string vectors * src/RcppResultsSetp.{h,cpp}: Added simple single SEXP return * src/RcppCommon.{h,cpp}: Adding simple logging facility * inst/examples/RcppInline/RcppSexpTests.r: expanded for new types 2009-12-18 Dirk Eddelbuettel * R/RcppInline.R: Another improvement for Rcpp use * inst/examples/RcppInline/RcppSimpleExamples.r: Another simple case 2009-12-17 Dirk Eddelbuettel * R/RcppInline.R: Improved / simplified in light of getting it to work on Windoze too so switched to setting env var explicitly; also split into three args for CPPFLAGS, CXXFLAGS and LIBS * man/RcppInline.Rd: Updated accordingly to reflect new args * inst/examples/RcppInline/RcppInlineWithLibsExamples.r: Idem 2009-12-16 Dirk Eddelbuettel * src/RcppSexp.{h,cpp}: Added simple RcppSexp class for simple conversion from and to single-element SEXPs -- currently limited to int, double, std::string * inst/examples/RcppInline/RcppSexpTests.r: Simple tests for this 2009-12-15 Dirk Eddelbuettel * DESCRIPTION: License changed to 'GPL (>= 2)' * COPYING: Changed from LGPL 2.1 to GPL 2 (or later) * src/*.{h,cpp}: Relicensed under GPL 2 (or later) 2009-12-13 Dirk Eddelbuettel * R/RcppInline.R: Extended to for additional header and library arguments so that we can work with arbitrary other projects * man/RcppInline.Rd: Added documentation for these arguments * inst/examples/RcppInline/RcppInlineWithLibsExamples.r: New examples using GNU GSL to show how to compile + link via inline 2009-12-11 Dirk Eddelbuettel * R/RcppInline.R: Imported function 'cfunction' from the inline package, along with small patch to directly support Rcpp. The inclusion may be temporary -- if our patch is integrated into inline we may just depend on that package * man/RcppInline.Rd: Imported from inline, plus change for Rcpp * inst/examples/RcppInline/RcppInlineExample.r: Small example taken from the 'Intro to HPC with R' tutorials * R/RcppVersion.R: Removed as unused as redundant given read.dcf() in R * man/RcppVersion.R: idem * NAMESPACE: updated accordingly * INDEX: idem 2009-11-18 Dirk Eddelbuettel * DESCRIPTION: Add Dominick back into Authors per his new request reversing his requests to be removed from last December 2009-11-17 Dirk Eddelbuettel * man/RcppParams.Rd: applied patch by Frank S. Thomas to fix example 2009-11-15 Dirk Eddelbuettel * src/RcppDateVector.{cpp,h}: Moved out of Rcpp.{h,cpp} * src/RcppDatetimeVector.{cpp,h}: idem * src/RcppFunction.{cpp,h}: idem * src/RcppMatrix.{cpp,h}: idem * src/RcppMatrixView.{cpp,h}: idem * src/RcppNumList.{cpp,h}: idem * src/RcppResultSet.{cpp,h}: idem * src/RcppStringVector.{cpp,h}: idem * src/RcppStringVectorView.{cpp,h}: idem * src/RcppVector.{cpp,h}: idem * src/RcppVectorView.{cpp,h}: idem * src/RcppCommon.cpp: takes remaining utility function from Rcpp.cpp 2009-11-09 Dirk Eddelbuettel * DESCRIPTION: Release 0.6.8 * src/RcppParams.{cpp,h}: Code reorginsation, moved out of Rcpp.{h,cpp} * src/RcppDate.{cpp,h}: idem * src/RcppDatetime.{cpp,h}: idem * src/RcppCommon.h: New header file for common defines and includes * src/Makevars{,.win}: Updated and generalised to reflect new files 2009-11-08 Dirk Eddelbuettel * DESCRIPTION: Release 0.6.7 * man/RcppVector.Rd: Remove erraneous use of \R in \title{} section noticed by the Rd parser in R-devel (with thanks to Kurt Hornik) 2009-11-06 Dirk Eddelbuettel * src/RcppList.{h,cpp}: Added a simple class to accept list() objects in order to cope with non-rectangular data-types -- this comes from the RProtoBuf code currently only on r-forge where we need accept lists that are potentially nested. The API for RcppList is not fully fleshed out and needs a few more append() member functions. Also length is currently fixed. * cleanup: Change header file removal to Rcpp*.h * inst/README: Added short README about history and status * inst/doc/: Updated doxygen documentation 2009-09-29 Dirk Eddelbuettel * inst/examples/functionCallback/*: Added simple C++ / R example of defining an R function that is passed to and called from C++ 2009-08-03 Dirk Eddelbuettel * DESCRIPTION: Release 0.6.6 * src/Rcpp.{h,cpp}: Added exists() method for RcppParams to test for existence of a named parameter. * inst/doc/: Updated doxygen documentation 2009-04-01 Dirk Eddelbuettel * DESCRIPTION: Release 0.6.5 * COPYING: Added 2009-03-30 Dirk Eddelbuettel * src/Makevars: Add $(R_ARCH) to target directory path when copying the header file as an OS X user reported not finding it with default settings. 2009-03-01 Dirk Eddelbuettel * DESCRIPTION: Release 0.6.4 * .Rbuildignore: Added to exclude debian/ from source tarball 2009-02-25 Dirk Eddelbuettel * src/Makevars.win: Renamed from Makefile.win, added missing mkdir * cleanup: Remove a few more Windows files 2009-02-24 Dirk Eddelbuettel * inst/doc/{html,latex,man}: Added new documentation of the C++ classes * doxyfile: Added Doxygen configuration file for doc generation 2009-02-22 Dirk Eddelbuettel * src/Rcpp.{h,cpp}: cleaner use of namespace 'std' by formal prefix rather than via 'using namespace std' * src/Rcpp.h: define R_NO_MAP and use Rf_* form of R API functions 2009-02-18 Dirk Eddelbuettel * src/Rcpp.{h,cpp}: Added a few explicit casts, and removed unused loop variable; all to make 'g++ -Wall' happy 2009-02-10 Dirk Eddelbuettel * src/Rcpp.{cpp,h}: Expanded a few of the throw() messages 2009-01-09 Dirk Eddelbuettel * DESCRIPTION: Release 0.6.3 * R/RcppLdpath.R: Also defined shorter functions CxxFlags() and LdFlags() which cat() the longer forms RcppCxxFlags() and RcppLdFlags() to further simplify use via litter or Rscript in Makefile or Makevars * man/Rcpp-package.Rd: Mention short form CxxFlags() and LdFlags() * src/Makevars: Applied another build correction for OS X suggested by Simon Urbanek * src/Rcpp.{cpp,h}: Added 'view-only' classes RcppVectorView, RcppMatrixView and RcppStringVectorView contributed by David Reiss 2008-12-02 Dirk Eddelbuettel * DESCRIPTION: Release 0.6.2 * R/RcppLdPath.R: Correct output for the default Linux case 2008-11-30 Dirk Eddelbuettel * DESCRIPTION: Release 0.6.1 * src/Makevars: Added, replacing src/Makefile: thanks to Simon for a rewrite that provides OS X support * src/Makefile: Retired * src/Makefile.win: Now build libRcpp.a instead of Rcpp.a * src/Rcpp.{cpp,h}: Removed #ifdef statements related to QuantLib and Date ops as we no longer need to split this off -- one build for all uses; also added another date offset for the difference between the Unix epoch of Jan 1, 1970 and what certain spreadsheets use (which is what QuantLib) follows. With this change, Rcpp is completely decoupled from QuantLib headers, yet can be used from QuantLib 0.2.10 or later. However, this also removes data conversion from R/Rcpp to QL as Rcpp no longer 'knows' QL. * R/RcppLdPath.R: Adds new functions RcppLdPath() to return lib/ directory path, and RcppLdFlags() to return arguments, including the optional rpath settings on Linux * R/RcppExample.R: Added new example 'RcppVectorExample()', extended default print method for examples * man/Rcpp-package.Rd: Expanded / updated documentation of package use when building other packages * cleanup: Removing static libraries too but do not remove src/Makevars 2008-11-05 Dirk Eddelbuettel * Release 0.6.0 * New maintainer * src/Makefile{,.win}: New files, including functionality from both configure and RcppSrc/Makefile; we now build two libraries, one for use by the package which also runs the example, and one for users to link against * src/Makevars.in: Removed * src/Rcpp.{cpp,h}: moved in from ../RcppSrc * src/Rcpp.{cpp,h}: Add new type RcppDatetime corresponding to POSIXct in with full support for microsecond time resolution between R and C++ * man/*: Several new manual pages added * configure{,.in,.win}: Removed as src/Makefile* can handle this more easily * DESCRIPTION: Minor cleanup and reformatting, Date: now uses svn:keyword Date property * NAMESPACE: Renamed RcppTemplateVersion to RcppVersion, deleted RcppDemo * demo/ directory removed as vignette("RcppAPI") is easier and more reliable to show vignette documentation * R/zzz.R: RcppTemplateDemo() removed, vignette("RcppAPI") is easier * man/RcppTemplateDemo.Rd removed as well * R/RcppExample.R: reindented, rewritten to set default arguments * R/RcppTemplateVersion.R: renamed to RcppVersion.R * man/RcppTemplateVersion.Rd: renamed to RcppVersion.Rd * RcppSrc/Rcpp.{cpp,h}: moved to src/ directory * RcppSrc/Makefile{,.win}: removed * inst/doc/RcppAPI.{Rnw,pdf}: Added footnote onto titlepage about how this document has not (yet) been updated along with the channges made Rcpp/NAMESPACE0000644000176200001440000000233613461066244012407 0ustar liggesusersuseDynLib(Rcpp, .registration = TRUE) import(methods) importFrom(utils, capture.output, assignInNamespace, .DollarNames, prompt, packageDescription, package.skeleton, glob2rx) exportClasses(Module, "C++Field", "C++OverloadedMethods", "C++Constructor", "C++Class", "C++Object", "C++Function") S3method(.DollarNames, "C++Object") S3method(.DollarNames, "Module") exportMethods(prompt, show, .DollarNames, initialize, "formals<-") export(Module, Rcpp.package.skeleton, populate, loadRcppModules, # deprecated since Rcpp 0.12.5 released May 2016 setRcppClass, loadRcppClass, loadModule, cppFunction, exposeClass, evalCpp, sourceCpp, compileAttributes, registerPlugin, RcppLdFlags, # deprecated since Rcpp 0.12.19 released Sep 2018 LdFlags, # deprecated since Rcpp 0.12.19 released Sep 2018 demangle, sizeof, cpp_object_initializer, cpp_object_dummy, Rcpp.plugin.maker, getRcppVersion ) S3method(print, bytes) S3method(format, Rcpp_stack_trace) S3method(str, Rcpp_stack_trace) S3method(print, Rcpp_stack_trace) exportClass(RcppClass) Rcpp/TODO0000644000176200001440000000466212471457623011671 0ustar liggesusers Current active misfeatures o Rcpp.package.skeleton() does not work with supplied functions, eg Rcpp.package.skeleton("foo", list=c("funA", "funB")) ends in error. o Sugar ops unit tests on +, -, ... need double, fail with int o DataFrame::create(Named("a")=b, Named("b")=b) fails with NumericVectors Documentation o Finish the quickref vignette o Maybe a vignette about stats functions o Add a vignette about the API API o Rcpp::Factor and Rcpp::Ordered o Fast indexing and g++ 4.5.0 or later: open issue of why this compiler gets upset when the previous version(s) coped just fine o Vector::resize Modules o Class inheritance. Reflect C++ inheritance at the R level. Syntactic sugar o logical indexing, ie NumericVector( LogicalVector ) o recycling : binary operators and math functions of 2 or more arguments need to recycle their arguments. o not sure rep should be lazy, i.e. rep( x, 4 ) fetches x[i] 4 times, maybe we should use LazyVector like in outer to somehow cache the result when it is judged expensive to calculate o crossprod o Vector * Matrix, Matrix * Matrix o operator% o operator/ needs to handle the case of division by 0 o matrix functions : apply o for character vectors: nchar, grepl, sub, gsub o Compound operators: ++,--,+=, -=, ... o other statistical distribution functions : multinom : this only has dmultinom which is handled in R, so maybe we can skip it signrank : has the weird call to .C( "signrank_free" ), need to understand that wilcox : has the weird call to .C( "wilcox_free" ), need to understand that tukey : only has p and q, no r or d o other random generators: rmultinom : tricky because it generates a matrix rnbeta : the R version is implemented in R (not in C), should we still have it in Rcpp in compile code ? rnf : idem rnt : idem Testing o all r* functions : rnorm, etc ... o many dpq functions have not been tested yet o new autogenerated sugar functions: cos, acosh, atan, cos, cosh, log, log10, sqrt, sin, sinh, tan, tanh o attributes (although our tests currently use attributes extensively so it's not clear what else we'd add here) Rcpp/inst/0000755000176200001440000000000014740551303012135 5ustar liggesusersRcpp/inst/prompt/0000755000176200001440000000000012253723677013472 5ustar liggesusersRcpp/inst/prompt/module.Rd0000644000176200001440000000103412253723677015244 0ustar liggesusers\name{NAME} \alias{NAME} \title{ Rcpp module: %% ~~ Name of the module ~~ } \description{ Rcpp module %% ~~ A concise description of the module ~~ } \details{ The module contains the following items: FUNCTIONS CLASSES } \source{ %% ~~ reference to a publication or URL ~~ %% ~~ perhaps a reference to the project page of the c++ code being exposed ~~ } \references{ %% ~~ possibly secondary sources and usages ~~ %% ~~ perhaps references to the C++ code that the module exposes ~~ } \examples{ show( NAME ) } \keyword{datasets} Rcpp/inst/include/0000755000176200001440000000000014707152221013557 5ustar liggesusersRcpp/inst/include/Rcpp/0000755000176200001440000000000014740764532014476 5ustar liggesusersRcpp/inst/include/Rcpp/Light0000644000176200001440000000164414154713250015463 0ustar liggesusers// Rcpp/Light: R/C++ interface class library -- without Rcpp Modules // // Copyright (C) 2008 - 2021 Dirk Eddelbuettel // Copyright (C) 2009 - 2021 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . // no Modules #define RCPP_NO_MODULES // include Rcpp as usual #include Rcpp/inst/include/Rcpp/longlong.h0000644000176200001440000000377513250227470016470 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // longlong.h: Rcpp R/C++ interface class library -- long long support // // Copyright (C) 2013 - 2017 Dirk Eddelbuettel and Romain Francois // Copyright (C) 2018 Dirk Eddelbuettel, Romain Francois and Kevin Ushey // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_LONG_LONG_H #define RCPP_LONG_LONG_H // long long is explicitly available to C++11 (and above) compilers #if __cplusplus >= 201103L typedef long long int rcpp_long_long_type; typedef unsigned long long int rcpp_ulong_long_type; # define RCPP_HAS_LONG_LONG_TYPES // GNU compilers may make 'long long' available as an extension // (note that __GNUC__ also implies clang, MinGW) #elif defined(__GNUC__) // check to see if 'long long' is an alias for 'int64_t' # if defined(_GLIBCXX_HAVE_INT64_T) && defined(_GLIBCXX_HAVE_INT64_T_LONG_LONG) # include typedef int64_t rcpp_long_long_type; typedef uint64_t rcpp_ulong_long_type; # define RCPP_HAS_LONG_LONG_TYPES // check to see if this is an older C++ compiler, but extensions are enabled # elif defined(__GXX_EXPERIMENTAL_CXX0X__) || (defined(__clang__) && defined(__LP64__)) # if defined(__LONG_LONG_MAX__) __extension__ typedef long long int rcpp_long_long_type; __extension__ typedef unsigned long long int rcpp_ulong_long_type; # define RCPP_HAS_LONG_LONG_TYPES # endif # endif #endif #endif Rcpp/inst/include/Rcpp/Module.h0000644000176200001440000005754214711515066016103 0ustar liggesusers // Module.h: Rcpp R/C++ interface class library -- Rcpp modules // // Copyright (C) 2010 - 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_Module_h #define Rcpp_Module_h #include #include namespace Rcpp{ namespace internal{ template std::string get_converter_name(const char* from, const char* to){ std::string method_name( ".___converter___" ) ; typedef typename Rcpp::traits::r_type_traits< typename Rcpp::traits::remove_const_and_reference::type >::r_category FROM_CATEGORY ; if( Rcpp::traits::same_type< FROM_CATEGORY, ::Rcpp::traits::r_type_module_object_tag >::value ){ method_name += "Rcpp_" ; } method_name += from ; method_name += "___" ; typedef typename Rcpp::traits::r_type_traits< typename Rcpp::traits::remove_const_and_reference::type >::r_category TO_CATEGORY ; if( Rcpp::traits::same_type< TO_CATEGORY, ::Rcpp::traits::r_type_module_object_tag >::value ){ method_name += "Rcpp_" ; } method_name += to ; return method_name ; } } class CppClass ; class CppObject ; template class result { public: result( T* ptr_ ) : ptr(ptr_){} operator T*(){ return ptr ; } private: T* ptr; } ; template class object { public: typedef T object_type ; object( T* ptr_ ) : ptr(ptr_){} operator T*(){ return ptr ; } T* operator->(){ return ptr ; } T& operator&(){ return *ptr ; } T* ptr ; } ; namespace internal { template SEXP make_new_object( Class* ptr ){ Rcpp::XPtr xp( ptr, true ) ; Function maker = Environment::Rcpp_namespace()[ "cpp_object_maker"] ; return maker( typeid(Class).name() , xp ) ; } } } #include #include #if defined(HAS_VARIADIC_TEMPLATES) namespace Rcpp { template inline void signature(std::string& s, const char* name) { s.clear(); s += get_return_type() + " " + name + "("; int n = sizeof...(T); int i = 0; // Using initializer list as c++11 implementation of a fold expression (void)std::initializer_list{ (s += get_return_type(), s += (++i == n ? "" : ", "), 0)... }; s += ")"; } template class CppFunctionN : public CppFunction { public: CppFunctionN(RESULT_TYPE (*fun)(T...), const char* docstring = 0) : CppFunction(docstring), ptr_fun(fun) {} SEXP operator()(SEXP* args) { BEGIN_RCPP return call(ptr_fun, args); END_RCPP } inline int nargs() { return sizeof...(T); } inline bool is_void() { return std::is_void::value; } inline void signature(std::string& s, const char* name) { Rcpp::signature(s, name); } inline DL_FUNC get_function_ptr() { return (DL_FUNC)ptr_fun; } private: RESULT_TYPE (*ptr_fun)(T...); }; template class CppFunction_WithFormalsN : public CppFunctionN { public: CppFunction_WithFormalsN(RESULT_TYPE (*fun)(T...), Rcpp::List formals_, const char* docstring = 0) : CppFunctionN(fun, docstring), formals(formals_) {} SEXP get_formals() { return formals; } private: Rcpp::List formals; }; } #else #include // templates CppFunction0, ..., CppFunction65 #include #endif #include #include namespace Rcpp{ template class CppMethod { public: typedef Rcpp::XPtr XP ; CppMethod() {} virtual SEXP operator()(Class* /*object*/, SEXP* /*args*/) { return R_NilValue ; } virtual ~CppMethod(){} virtual int nargs(){ return 0 ; } virtual bool is_void(){ return false ; } virtual bool is_const(){ return false ; } virtual void signature(std::string& s, const char* name ){ s = name ; } } ; template class CppInheritedMethod : public CppMethod { public: typedef Rcpp::XPtr XP ; typedef CppMethod ParentMethod ; CppInheritedMethod( ParentMethod* parent_method_pointer_ ) : parent_method_pointer(parent_method_pointer_) {} SEXP operator()( Class* object, SEXP* args){ return (*parent_method_pointer)( (Parent*)object, args ) ; } inline int nargs(){ return parent_method_pointer->nargs() ; } inline bool is_void(){ return parent_method_pointer->is_void() ; } inline bool is_const(){ return parent_method_pointer->is_const() ; } inline void signature(std::string& s, const char* name){ return parent_method_pointer->signature(s, name) ; } private: ParentMethod* parent_method_pointer ; } ; #if defined(HAS_VARIADIC_TEMPLATES) template inline void ctor_signature(std::string& s, const std::string& classname) { s.assign(classname); s += "("; int n = sizeof...(T); int i = 0; // Using initializer list as c++11 implementation of a fold expression (void)std::initializer_list{ (s += get_return_type(), s += (++i == n ? "" : ", "), 0)... }; s += ")"; } template class Constructor_Base { public: virtual Class* get_new( SEXP* args, int nargs ) = 0 ; virtual int nargs() = 0 ; virtual void signature(std::string& s, const std::string& class_name) = 0 ; } ; template class Constructor: public Constructor_Base { public: virtual Class* get_new( SEXP* args, int nargs ){ return get_new_impl(args, nargs, traits::make_index_sequence()); } virtual int nargs(){ return sizeof...(T) ; } virtual void signature(std::string& s, const std::string& class_name ){ ctor_signature(s, class_name) ; } private: template Class* get_new_impl(SEXP* args, int nargs, traits::index_sequence) { return new Class( as(args[Is])... ) ; } }; template class Factory_Base { public: virtual Class* get_new( SEXP* args, int nargs ) = 0 ; virtual int nargs() = 0 ; virtual void signature(std::string& s, const std::string& class_name) = 0 ; } ; template class Factory : public Factory_Base { public: Factory( Class* (*fun)(T...) ) : ptr_fun(fun){} virtual Class* get_new( SEXP* args, int nargs ){ return get_new( args, traits::make_index_sequence() ) ; } virtual int nargs(){ return sizeof...(T) ; } virtual void signature(std::string& s, const std::string& class_name ){ ctor_signature(s, class_name) ; } private: template Class* get_new( SEXP* args, traits::index_sequence ){ return ptr_fun( bare_as(args[I])... ) ; } Class* (*ptr_fun)(T...) ; } ; inline bool yes( SEXP* /*args*/, int /* nargs */ ){ return true ; } template bool yes_arity( SEXP* /* args */ , int nargs){ return nargs == n ; } #else #include #include #include #include #endif typedef bool (*ValidConstructor)(SEXP*,int) ; typedef bool (*ValidMethod)(SEXP*,int) ; template class SignedConstructor { public: SignedConstructor( Constructor_Base* ctor_, ValidConstructor valid_, const char* doc ) : ctor(ctor_), valid(valid_), docstring(doc == 0 ? "" : doc){} Constructor_Base* ctor ; ValidConstructor valid ; std::string docstring ; inline int nargs(){ return ctor->nargs() ; } inline void signature(std::string& buffer, const std::string& class_name){ ctor->signature(buffer, class_name) ; } } ; template class SignedFactory { public: SignedFactory( Factory_Base* fact_, ValidConstructor valid_, const char* doc ) : fact(fact_), valid(valid_), docstring(doc == 0 ? "" : doc){} Factory_Base* fact ; ValidConstructor valid ; std::string docstring ; inline int nargs(){ return fact->nargs() ; } inline void signature(std::string& buffer, const std::string& class_name){ fact->signature(buffer, class_name) ; } } ; template class SignedMethod { public: typedef CppMethod METHOD ; SignedMethod( METHOD* m, ValidMethod valid_, const char* doc ) : method(m), valid(valid_), docstring(doc == 0 ? "" : doc) {} METHOD* method ; ValidMethod valid ; std::string docstring ; inline int nargs(){ return method->nargs() ; } inline bool is_void(){ return method->is_void() ; } inline bool is_const(){ return method->is_const() ; } inline void signature(std::string& s, const char* name){ method->signature(s, name); } } ; template class S4_CppConstructor : public Reference { typedef Reference Base; public: typedef XPtr XP_Class ; typedef Reference::Storage Storage ; S4_CppConstructor( SignedConstructor* m, const XP_Class& class_xp, const std::string& class_name, std::string& buffer ) : Reference( "C++Constructor" ){ RCPP_DEBUG( "S4_CppConstructor( SignedConstructor* m, SEXP class_xp, const std::string& class_name, std::string& buffer" ) ; field( "pointer" ) = Rcpp::XPtr< SignedConstructor >( m, false ) ; field( "class_pointer" ) = class_xp ; field( "nargs" ) = m->nargs() ; m->signature( buffer, class_name ) ; field( "signature" ) = buffer ; field( "docstring" ) = m->docstring ; } RCPP_CTOR_ASSIGN_WITH_BASE(S4_CppConstructor) } ; template class S4_CppOverloadedMethods : public Rcpp::Reference { typedef Rcpp::Reference Base; public: typedef Rcpp::XPtr XP_Class ; typedef SignedMethod signed_method_class ; typedef std::vector vec_signed_method ; S4_CppOverloadedMethods( vec_signed_method* m, const XP_Class& class_xp, const char* name, std::string& buffer ) : Reference( "C++OverloadedMethods" ){ int n = static_cast(m->size()) ; Rcpp::LogicalVector voidness(n), constness(n) ; Rcpp::CharacterVector docstrings(n), signatures(n) ; Rcpp::IntegerVector nargs(n) ; signed_method_class* met ; for( int i=0; iat(i) ; nargs[i] = met->nargs() ; voidness[i] = met->is_void() ; constness[i] = met->is_const() ; docstrings[i] = met->docstring ; met->signature(buffer, name) ; signatures[i] = buffer ; } field( "pointer" ) = Rcpp::XPtr< vec_signed_method >( m, false ) ; field( "class_pointer" ) = class_xp ; field( "size" ) = n ; field( "void" ) = voidness ; field( "const" ) = constness ; field( "docstrings" ) = docstrings ; field( "signatures" ) = signatures ; field( "nargs" ) = nargs ; } RCPP_CTOR_ASSIGN_WITH_BASE(S4_CppOverloadedMethods) } ; #if defined(HAS_VARIADIC_TEMPLATES) template class CppMethodImplN : public CppMethod { public: typedef typename std::conditional::type Method; typedef CppMethod method_class; typedef typename Rcpp::traits::remove_const_and_reference::type CLEANED_RESULT_TYPE; CppMethodImplN(Method m) : method_class(), met(m) {} SEXP operator()(Class* object, SEXP* args) { // Can't pass pointer to member function directly to `call()`, so wrap it in a lambda auto f = [&object, this](T... cpp_args) -> CLEANED_RESULT_TYPE { return (object->*met)(cpp_args...); }; return call(f, args); } inline int nargs() { return sizeof...(T); } inline bool is_void() { return std::is_void::value; } inline bool is_const() { return IsConst; } inline void signature(std::string& s, const char* name) { Rcpp::signature(s, name); } private: Method met; }; template using CppMethodN = CppMethodImplN; template using const_CppMethodN = CppMethodImplN; template class Pointer_CppMethodImplN : public CppMethod { public: typedef typename std::conditional::type Method; typedef CppMethod method_class; typedef typename Rcpp::traits::remove_const_and_reference::type CLEANED_RESULT_TYPE; Pointer_CppMethodImplN(Method m) : method_class(), met(m) {} SEXP operator()(Class* object, SEXP* args) { // Need to have `object` as the first argument to the function, so wrap it in a lambda auto f = [&object, this](T... cpp_args) -> CLEANED_RESULT_TYPE { return met(object, cpp_args...); }; return call(f, args); } inline int nargs() { return sizeof...(T); } inline bool is_void() { return std::is_void::value; } inline bool is_const() { return IsConst; } inline void signature(std::string& s, const char* name) { Rcpp::signature(s, name); } private: Method met; }; template using Pointer_CppMethodN = Pointer_CppMethodImplN; template using Const_Pointer_CppMethodN = Pointer_CppMethodImplN; #else #include #include #endif template class CppProperty { public: typedef Rcpp::XPtr XP ; CppProperty(const char* doc = 0) : docstring( doc == 0 ? "" : doc ) {} ; virtual ~CppProperty(){} ; virtual SEXP get(Class* ) { throw std::range_error("cannot retrieve property"); } virtual void set(Class*, SEXP) { throw std::range_error("cannot set property"); } virtual bool is_readonly(){ return false; } virtual std::string get_class(){ return ""; } std::string docstring ; } ; template class CppInheritedProperty : public CppProperty { public: typedef CppProperty Base ; CppInheritedProperty( CppProperty* parent_property_ ) : Base( parent_property_->docstring.c_str() ), parent_property(parent_property_) {} SEXP get( Class* obj ){ return parent_property->get( (Parent*)obj ) ; } void set( Class* obj, SEXP s) { parent_property->set( (Parent*)obj, s ) ; } bool is_readonly(){ return parent_property->is_readonly() ; } std::string get_class(){ return parent_property->get_class() ; } private: CppProperty* parent_property ; } ; template class CppFinalizer{ public: CppFinalizer(){} ; virtual void run(Class* ){} ; } ; template class FunctionFinalizer : public CppFinalizer { public: typedef void (*Pointer)(Class*) ; FunctionFinalizer( Pointer p ) : finalizer(p){} ; virtual void run(Class* object){ finalizer( object ) ; } private: Pointer finalizer ; } ; template class S4_field : public Rcpp::Reference { typedef Rcpp::Reference Base; public: typedef XPtr XP_Class ; S4_field( CppProperty* p, const XP_Class& class_xp ) : Reference( "C++Field" ){ RCPP_DEBUG( "S4_field( CppProperty* p, const XP_Class& class_xp )" ) field( "read_only" ) = p->is_readonly() ; field( "cpp_class" ) = p->get_class(); field( "pointer" ) = Rcpp::XPtr< CppProperty >( p, false ) ; field( "class_pointer" ) = class_xp ; field( "docstring" ) = p->docstring ; } RCPP_CTOR_ASSIGN_WITH_BASE(S4_field) } ; #include #include template class enum_ { public: typedef enum_ self ; enum_( const char* name_ ) : name(name_), values(), parent_typeinfo_name( typeid(Parent).name() ){ } ~enum_(){ Rcpp::Module* module = getCurrentScope() ; module->add_enum( parent_typeinfo_name, name, values ) ; } self& value( const char* name_, Enum value_ ){ values.insert( PAIR( name_, static_cast( value_ ) ) ) ; return *this ; } private: std::string name ; typedef std::map< std::string, int > MAP ; typedef MAP::value_type PAIR ; MAP values ; std::string parent_typeinfo_name ; } ; } #if defined(HAS_VARIADIC_TEMPLATES) namespace Rcpp { template void function(const char* name_, RESULT_TYPE (*fun)(T... t), const char* docstring = 0) { Rcpp::Module* scope = ::getCurrentScope(); if (scope) { scope->Add(name_, new CppFunctionN(fun, docstring)); } } template void function(const char* name_, RESULT_TYPE (*fun)(T... t), Rcpp::List formals, const char* docstring = 0) { Rcpp::Module* scope = ::getCurrentScope(); if (scope) { scope->Add(name_, new CppFunction_WithFormalsN(fun, formals, docstring)); } } } #else // function factories #include #endif namespace Rcpp { template void converter( const char* from, const char* to, TO (*fun)(FROM), const char* docstring = 0 ){ std::string fun_name = internal::get_converter_name( from, to ) ; function( fun_name.c_str(), fun, docstring ) ; } class CppClass : public S4{ typedef S4 Base; public: typedef XPtr XP_Class ; typedef Rcpp::XPtr XP ; CppClass( SEXP x) : S4(x){}; CppClass( Module* p, class_Base* cl, std::string& buffer ) : S4("C++Class") { XP_Class clxp( cl, false, R_NilValue, R_NilValue ) ; slot( "module" ) = XP( p, false ) ; slot( "pointer" ) = clxp ; buffer = "Rcpp_" ; buffer += cl->name ; slot( ".Data" ) = buffer ; slot( "fields" ) = cl->fields( clxp ) ; slot( "methods" ) = cl->getMethods( clxp, buffer ) ; slot( "constructors") = cl->getConstructors( clxp, buffer ) ; slot( "docstring" ) = cl->docstring ; slot( "typeid" ) = cl->get_typeinfo_name() ; slot( "enums" ) = cl->enums ; slot( "parents" ) = cl->parents ; } RCPP_CTOR_ASSIGN_WITH_BASE(CppClass) } ; class CppObject : public S4{ typedef S4 Base; public: typedef Rcpp::XPtr XP ; CppObject( Module* p, class_Base* clazz, SEXP xp ) : S4("C++Object") { slot( "module" ) = XP( p, false ) ; slot( "cppclass" ) = Rcpp::XPtr( clazz, false ) ; slot( "pointer" ) = xp ; } RCPP_CTOR_ASSIGN_WITH_BASE(CppObject) } ; } #define RCPP_MODULE_BOOT(name) _rcpp_module_boot_##name #define RCPP_MODULE(name) \ void _rcpp_module_##name##_init() ; \ static Rcpp::Module _rcpp_module_##name( # name ) ; \ extern "C" SEXP _rcpp_module_boot_##name(){ \ ::setCurrentScope( & _rcpp_module_##name ) ; \ _rcpp_module_##name##_init( ) ; \ Rcpp::XPtr mod_xp(& _rcpp_module_##name , false); \ ::setCurrentScope( 0 ) ; \ return mod_xp ; \ } \ void _rcpp_module_##name##_init() // silly little dance to suppress a 'defined but not used variable' warning #ifdef __GNUC__ #define VARIABLE_IS_NOT_USED __attribute__ ((unused)) #else #define VARIABLE_IS_NOT_USED #endif // static variable to hold Rf_install symbol to prevent it from being gc'ed static VARIABLE_IS_NOT_USED SEXP moduleSym = NULL; // helper macro to cache the result of Rf_install("Module"): once // it is allocated and in the symbol table it is safe from gc #define GET_MODULE_SYM ( moduleSym == NULL ? moduleSym = Rf_install("Module") : moduleSym ) // this macro is called by code wanting to load a module -- see RInside's rinside_module_sample0.cpp #define LOAD_RCPP_MODULE(NAME) \ Shield __load_module_call__( Rf_lang2( GET_MODULE_SYM, _rcpp_module_boot_##NAME() ) ); \ Rcpp_fast_eval( __load_module_call__, R_GlobalEnv ); #endif Rcpp/inst/include/Rcpp/complex.h0000644000176200001440000000452312621416426016312 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 4 -*- // // complex.h: Rcpp R/C++ interface class library -- binary operators for Rcomplex // // Copyright (C) 2010 - 2015 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP__complex_H #define RCPP__complex_H inline Rcomplex operator*( const Rcomplex& lhs, const Rcomplex& rhs) { Rcomplex y ; y.r = lhs.r * rhs.r - lhs.i * rhs.i ; y.i = lhs.r * rhs.i + rhs.r * lhs.i ; return y ; } inline Rcomplex operator+( const Rcomplex& lhs, const Rcomplex& rhs) { Rcomplex y ; y.r = lhs.r + rhs.r ; y.i = lhs.i + rhs.i ; return y ; } inline Rcomplex operator-( const Rcomplex& lhs, const Rcomplex& rhs) { Rcomplex y ; y.r = lhs.r - rhs.r ; y.i = lhs.i - rhs.i ; return y ; } inline Rcomplex operator/( const Rcomplex& a, const Rcomplex& b) { Rcomplex c ; double ratio, den; double abr, abi; if( (abr = b.r) < 0) abr = - abr; if( (abi = b.i) < 0) abi = - abi; if( abr <= abi ) { ratio = b.r / b.i ; den = b.i * (1 + ratio*ratio); c.r = (a.r*ratio + a.i) / den; c.i = (a.i*ratio - a.r) / den; } else { ratio = b.i / b.r ; den = b.r * (1 + ratio*ratio); c.r = (a.r + a.i*ratio) / den; c.i = (a.i - a.r*ratio) / den; } return c ; } inline bool operator==( const Rcomplex& a, const Rcomplex& b) { return a.r == b.r && a.i == b.i ; } // to prevent a redefinition error in dplyr (<= 0.4.3) which has the _same_ // definition of operator<<() for Rcomplex #define dplyr_tools_complex_H inline std::ostream & operator<<(std::ostream &os, const Rcomplex& cplx) { return os << cplx.r << "+" << cplx.i << "i" ; } #endif Rcpp/inst/include/Rcpp/Lighter0000644000176200001440000000174514154713250016014 0ustar liggesusers// Rcpp/Lighter: R/C++ interface class library -- without Rcpp Modules + RTTI // // Copyright (C) 2008 - 2021 Dirk Eddelbuettel // Copyright (C) 2009 - 2021 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . // no RTTI (actually implies no Modules) -- solid gain #define RCPP_NO_RTTI // include Rcpp/Light which includes Rcpp #include Rcpp/inst/include/Rcpp/generated/0000755000176200001440000000000013745701154016427 5ustar liggesusersRcpp/inst/include/Rcpp/generated/DataFrame_generated.h0000644000176200001440000002321412316773510022442 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // DataFrame_generated.h: Rcpp R/C++ interface class library -- data frames // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__DataFrame_generated_h #define Rcpp__DataFrame_generated_h template static DataFrame_Impl create( const T1& t1 ) { return DataFrame_Impl::from_list( Parent::create( t1 ) ) ; } template static DataFrame_Impl create( const T1& t1, const T2& t2 ) { return DataFrame_Impl::from_list( Parent::create( t1, t2 ) ) ; } template static DataFrame_Impl create( const T1& t1, const T2& t2, const T3& t3 ) { return DataFrame_Impl::from_list( Parent::create( t1, t2, t3 ) ) ; } template static DataFrame_Impl create( const T1& t1, const T2& t2, const T3& t3, const T4& t4 ) { return DataFrame_Impl::from_list( Parent::create( t1, t2, t3, t4 ) ) ; } template static DataFrame_Impl create( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5 ) { return DataFrame_Impl::from_list( Parent::create( t1, t2, t3, t4, t5 ) ) ; } template static DataFrame_Impl create( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6 ) { return DataFrame_Impl::from_list( Parent::create( t1, t2, t3, t4, t5, t6 ) ) ; } template static DataFrame_Impl create( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7 ) { return DataFrame_Impl::from_list( Parent::create( t1, t2, t3, t4, t5, t6, t7 ) ) ; } template static DataFrame_Impl create( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8 ) { return DataFrame_Impl::from_list( Parent::create( t1, t2, t3, t4, t5, t6, t7, t8 ) ) ; } template static DataFrame_Impl create( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9 ) { return DataFrame_Impl::from_list( Parent::create( t1, t2, t3, t4, t5, t6, t7, t8, t9 ) ) ; } template static DataFrame_Impl create( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10 ) { return DataFrame_Impl::from_list( Parent::create( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10 ) ) ; } template static DataFrame_Impl create( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11 ) { return DataFrame_Impl::from_list( Parent::create( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11 ) ) ; } template static DataFrame_Impl create( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12 ) { return DataFrame_Impl::from_list( Parent::create( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12 ) ) ; } template static DataFrame_Impl create( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13 ) { return DataFrame_Impl::from_list( Parent::create( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13 ) ) ; } template static DataFrame_Impl create( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14 ) { return DataFrame_Impl::from_list( Parent::create( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14 ) ) ; } template static DataFrame_Impl create( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15 ) { return DataFrame_Impl::from_list( Parent::create( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15 ) ) ; } template static DataFrame_Impl create( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16 ) { return DataFrame_Impl::from_list( Parent::create( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16 ) ) ; } template static DataFrame_Impl create( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17 ) { return DataFrame_Impl::from_list( Parent::create( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17 ) ) ; } template static DataFrame_Impl create( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18 ) { return DataFrame_Impl::from_list( Parent::create( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18 ) ) ; } template static DataFrame_Impl create( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19 ) { return DataFrame_Impl::from_list( Parent::create( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19 ) ) ; } template static DataFrame_Impl create( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20 ) { return DataFrame_Impl::from_list( Parent::create( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20 ) ) ; } #endif Rcpp/inst/include/Rcpp/generated/DottedPair__ctors.h0000644000176200001440000002170412253723677022223 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // DottedPair_Impl__ctors.h: Rcpp R/C++ interface class library -- generated helper code for DottedPair_Impl.h // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__generated__DottedPair_Impl_ctors_h #define Rcpp__generated__DottedPair_Impl_ctors_h template DottedPair_Impl( const T1& t1 ){ Storage::set__( pairlist( t1 ) ) ; } template DottedPair_Impl( const T1& t1, const T2& t2 ){ Storage::set__( pairlist( t1, t2 ) ) ; } template DottedPair_Impl( const T1& t1, const T2& t2, const T3& t3 ){ Storage::set__( pairlist( t1, t2, t3 ) ) ; } template DottedPair_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4 ){ Storage::set__( pairlist( t1, t2, t3, t4 ) ) ; } template DottedPair_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5 ) ) ; } template DottedPair_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6 ) ) ; } template DottedPair_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7 ) ) ; } template DottedPair_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8 ) ) ; } template DottedPair_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9 ) ) ; } template DottedPair_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10 ) ) ; } template DottedPair_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11 ) ) ; } template DottedPair_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12 ) ) ; } template DottedPair_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13 ) ) ; } template DottedPair_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14 ) ) ; } template DottedPair_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15 ) ) ; } template DottedPair_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16 ) ) ; } template DottedPair_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17 ) ) ; } template DottedPair_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18 ) ) ; } template DottedPair_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19 ) ) ; } template DottedPair_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20 ) ) ; } #endif Rcpp/inst/include/Rcpp/generated/Language__ctors.h0000644000176200001440000004541512316773510021703 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // Language__ctors.h: Rcpp R/C++ interface class library -- generated helper code for Language.h // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__generated__Language_ctors_h #define Rcpp__generated__Language_ctors_h /* template Language_Impl( const std::string& symbol, ARGUMENTS) { Storage::set__( pairlist(Rf_install( symbol.c_str() ), PARAMETERS) ) ; } template Language_Impl( const Function& function, ARGUMENTS) { Storage::set__( pairlist( function, PARAMETERS) ); } */ template Language_Impl( const std::string& symbol, const T1& t1) { Storage::set__( pairlist(Rf_install( symbol.c_str() ), t1) ); } template Language_Impl( const Function& function, const T1& t1) { Storage::set__( pairlist( function, t1) ) ; } template Language_Impl( const std::string& symbol, const T1& t1, const T2& t2) { Storage::set__( pairlist(Rf_install( symbol.c_str() ), t1, t2)); } template Language_Impl( const Function& function, const T1& t1, const T2& t2) { Storage::set__( pairlist( function, t1, t2)) ; } template Language_Impl( const std::string& symbol, const T1& t1, const T2& t2, const T3& t3) { Storage::set__( pairlist(Rf_install( symbol.c_str() ), t1, t2, t3) ); } template Language_Impl( const Function& function, const T1& t1, const T2& t2, const T3& t3) { Storage::set__( pairlist( function, t1, t2, t3) ); } template Language_Impl( const std::string& symbol, const T1& t1, const T2& t2, const T3& t3, const T4& t4) { Storage::set__( pairlist(Rf_install( symbol.c_str() ), t1, t2, t3, t4) ); } template Language_Impl( const Function& function, const T1& t1, const T2& t2, const T3& t3, const T4& t4) { Storage::set__( pairlist( function, t1, t2, t3, t4) ); } template Language_Impl( const std::string& symbol, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5) { Storage::set__( pairlist(Rf_install( symbol.c_str() ), t1, t2, t3, t4, t5) ); } template Language_Impl( const Function& function, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5) { Storage::set__( pairlist( function, t1, t2, t3, t4, t5) ); } template Language_Impl( const std::string& symbol, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6) { Storage::set__( pairlist(Rf_install( symbol.c_str() ), t1, t2, t3, t4, t5, t6) ); } template Language_Impl( const Function& function, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6) { Storage::set__( pairlist( function, t1, t2, t3, t4, t5, t6) ); } template Language_Impl( const std::string& symbol, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7) { Storage::set__( pairlist(Rf_install( symbol.c_str() ), t1, t2, t3, t4, t5, t6, t7) ); } template Language_Impl( const Function& function, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7) { Storage::set__( pairlist( function, t1, t2, t3, t4, t5, t6, t7) ); } template Language_Impl( const std::string& symbol, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8) { Storage::set__( pairlist(Rf_install( symbol.c_str() ), t1, t2, t3, t4, t5, t6, t7, t8) ); } template Language_Impl( const Function& function, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8) { Storage::set__( pairlist( function, t1, t2, t3, t4, t5, t6, t7, t8) ); } template Language_Impl( const std::string& symbol, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9) { Storage::set__( pairlist(Rf_install( symbol.c_str() ), t1, t2, t3, t4, t5, t6, t7, t8, t9) ); } template Language_Impl( const Function& function, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9) { Storage::set__( pairlist( function, t1, t2, t3, t4, t5, t6, t7, t8, t9) ); } template Language_Impl( const std::string& symbol, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10) { Storage::set__( pairlist(Rf_install( symbol.c_str() ), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10) ); } template Language_Impl( const Function& function, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10) { Storage::set__( pairlist( function, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10) ); } template Language_Impl( const std::string& symbol, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11) { Storage::set__( pairlist(Rf_install( symbol.c_str() ), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11) ); } template Language_Impl( const Function& function, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11) { Storage::set__( pairlist( function, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11) ); } template Language_Impl( const std::string& symbol, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12) { Storage::set__( pairlist(Rf_install( symbol.c_str() ), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12) ); } template Language_Impl( const Function& function, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12) { Storage::set__( pairlist( function, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12) ); } template Language_Impl( const std::string& symbol, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13) { Storage::set__( pairlist(Rf_install( symbol.c_str() ), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13) ); } template Language_Impl( const Function& function, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13) { Storage::set__( pairlist( function, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13) ); } template Language_Impl( const std::string& symbol, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14) { Storage::set__( pairlist(Rf_install( symbol.c_str() ), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14) ); } template Language_Impl( const Function& function, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14) { Storage::set__( pairlist( function, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14) ); } template Language_Impl( const std::string& symbol, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15) { Storage::set__( pairlist(Rf_install( symbol.c_str() ), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15) ); } template Language_Impl( const Function& function, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15) { Storage::set__( pairlist( function, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15) ); } template Language_Impl( const std::string& symbol, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16) { Storage::set__( pairlist(Rf_install( symbol.c_str() ), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16) ); } template Language_Impl( const Function& function, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16) { Storage::set__( pairlist( function, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16) ); } template Language_Impl( const std::string& symbol, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17) { Storage::set__( pairlist(Rf_install( symbol.c_str() ), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17) ); } template Language_Impl( const Function& function, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17) { Storage::set__( pairlist( function, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17) ); } template Language_Impl( const std::string& symbol, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18) { Storage::set__( pairlist(Rf_install( symbol.c_str() ), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18) ); } template Language_Impl( const Function& function, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18) { Storage::set__( pairlist( function, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18) ); } template Language_Impl( const std::string& symbol, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19) { Storage::set__( pairlist(Rf_install( symbol.c_str() ), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19) ); } template Language_Impl( const Function& function, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19) { Storage::set__( pairlist( function, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19) ); } template Language_Impl( const std::string& symbol, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20) { Storage::set__( pairlist(Rf_install( symbol.c_str() ), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20) ); } template Language_Impl( const Function& function, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20) { Storage::set__( pairlist( function, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20) ); } #endif Rcpp/inst/include/Rcpp/generated/InternalFunction__ctors.h0000644000176200001440000023562413745701154023447 0ustar liggesusers // InternalFunction_Impl_ctors.h -- generated helper code for InternalFunction__ctors.h // see rcpp-scripts repo for generator script // also hand-edited so check generator state // // Copyright (C) 2010 - 2020 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__generated__InternalFunction_Impl_ctors_h #define Rcpp__generated__InternalFunction_Impl_ctors_h template InternalFunction_Impl(RESULT_TYPE (*fun)(void)) { set(XPtr >(new CppFunction0(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0)) { set(XPtr >(new CppFunction1(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1)) { set(XPtr >(new CppFunction2(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2)) { set(XPtr >(new CppFunction3(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3)) { set(XPtr >(new CppFunction4(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4)) { set(XPtr >(new CppFunction5(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5)) { set(XPtr >(new CppFunction6(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6)) { set(XPtr >(new CppFunction7(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7)) { set(XPtr >(new CppFunction8(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8)) { set(XPtr >(new CppFunction9(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9)) { set(XPtr >(new CppFunction10(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10)) { set(XPtr >(new CppFunction11(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11)) { set(XPtr >(new CppFunction12(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12)) { set(XPtr >(new CppFunction13(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13)) { set(XPtr >(new CppFunction14(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14)) { set(XPtr >(new CppFunction15(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15)) { set(XPtr >(new CppFunction16(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16)) { set(XPtr >(new CppFunction17(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17)) { set(XPtr >(new CppFunction18(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18)) { set(XPtr >(new CppFunction19(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19)) { set(XPtr >(new CppFunction20(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20)) { set(XPtr >(new CppFunction21(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21)) { set(XPtr >(new CppFunction22(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22)) { set(XPtr >(new CppFunction23(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23)) { set(XPtr >(new CppFunction24(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24)) { set(XPtr >(new CppFunction25(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25)) { set(XPtr >(new CppFunction26(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26)) { set(XPtr >(new CppFunction27(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27)) { set(XPtr >(new CppFunction28(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28)) { set(XPtr >(new CppFunction29(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29)) { set(XPtr >(new CppFunction30(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30)) { set(XPtr >(new CppFunction31(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31)) { set(XPtr >(new CppFunction32(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32)) { set(XPtr >(new CppFunction33(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33)) { set(XPtr >(new CppFunction34(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34)) { set(XPtr >(new CppFunction35(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35)) { set(XPtr >(new CppFunction36(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36)) { set(XPtr >(new CppFunction37(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37)) { set(XPtr >(new CppFunction38(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38)) { set(XPtr >(new CppFunction39(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39)) { set(XPtr >(new CppFunction40(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40)) { set(XPtr >(new CppFunction41(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41)) { set(XPtr >(new CppFunction42(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42)) { set(XPtr >(new CppFunction43(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43)) { set(XPtr >(new CppFunction44(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43, U44 u44)) { set(XPtr >(new CppFunction45(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43, U44 u44, U45 u45)) { set(XPtr >(new CppFunction46(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43, U44 u44, U45 u45, U46 u46)) { set(XPtr >(new CppFunction47(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43, U44 u44, U45 u45, U46 u46, U47 u47)) { set(XPtr >(new CppFunction48(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43, U44 u44, U45 u45, U46 u46, U47 u47, U48 u48)) { set(XPtr >(new CppFunction49(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43, U44 u44, U45 u45, U46 u46, U47 u47, U48 u48, U49 u49)) { set(XPtr >(new CppFunction50(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43, U44 u44, U45 u45, U46 u46, U47 u47, U48 u48, U49 u49, U50 u50)) { set(XPtr >(new CppFunction51(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43, U44 u44, U45 u45, U46 u46, U47 u47, U48 u48, U49 u49, U50 u50, U51 u51)) { set(XPtr >(new CppFunction52(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43, U44 u44, U45 u45, U46 u46, U47 u47, U48 u48, U49 u49, U50 u50, U51 u51, U52 u52)) { set(XPtr >(new CppFunction53(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43, U44 u44, U45 u45, U46 u46, U47 u47, U48 u48, U49 u49, U50 u50, U51 u51, U52 u52, U53 u53)) { set(XPtr >(new CppFunction54(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43, U44 u44, U45 u45, U46 u46, U47 u47, U48 u48, U49 u49, U50 u50, U51 u51, U52 u52, U53 u53, U54 u54)) { set(XPtr >(new CppFunction55(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43, U44 u44, U45 u45, U46 u46, U47 u47, U48 u48, U49 u49, U50 u50, U51 u51, U52 u52, U53 u53, U54 u54, U55 u55)) { set(XPtr >(new CppFunction56(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43, U44 u44, U45 u45, U46 u46, U47 u47, U48 u48, U49 u49, U50 u50, U51 u51, U52 u52, U53 u53, U54 u54, U55 u55, U56 u56)) { set(XPtr >(new CppFunction57(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43, U44 u44, U45 u45, U46 u46, U47 u47, U48 u48, U49 u49, U50 u50, U51 u51, U52 u52, U53 u53, U54 u54, U55 u55, U56 u56, U57 u57)) { set(XPtr >(new CppFunction58(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43, U44 u44, U45 u45, U46 u46, U47 u47, U48 u48, U49 u49, U50 u50, U51 u51, U52 u52, U53 u53, U54 u54, U55 u55, U56 u56, U57 u57, U58 u58)) { set(XPtr >(new CppFunction59(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43, U44 u44, U45 u45, U46 u46, U47 u47, U48 u48, U49 u49, U50 u50, U51 u51, U52 u52, U53 u53, U54 u54, U55 u55, U56 u56, U57 u57, U58 u58, U59 u59)) { set(XPtr >(new CppFunction60(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43, U44 u44, U45 u45, U46 u46, U47 u47, U48 u48, U49 u49, U50 u50, U51 u51, U52 u52, U53 u53, U54 u54, U55 u55, U56 u56, U57 u57, U58 u58, U59 u59, U60 u60)) { set(XPtr >(new CppFunction61(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43, U44 u44, U45 u45, U46 u46, U47 u47, U48 u48, U49 u49, U50 u50, U51 u51, U52 u52, U53 u53, U54 u54, U55 u55, U56 u56, U57 u57, U58 u58, U59 u59, U60 u60, U61 u61)) { set(XPtr >(new CppFunction62(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43, U44 u44, U45 u45, U46 u46, U47 u47, U48 u48, U49 u49, U50 u50, U51 u51, U52 u52, U53 u53, U54 u54, U55 u55, U56 u56, U57 u57, U58 u58, U59 u59, U60 u60, U61 u61, U62 u62)) { set(XPtr >(new CppFunction63(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43, U44 u44, U45 u45, U46 u46, U47 u47, U48 u48, U49 u49, U50 u50, U51 u51, U52 u52, U53 u53, U54 u54, U55 u55, U56 u56, U57 u57, U58 u58, U59 u59, U60 u60, U61 u61, U62 u62, U63 u63)) { set(XPtr >(new CppFunction64(fun), true)); } template InternalFunction_Impl(RESULT_TYPE (*fun)(U0 u0, U1 u1, U2 u2, U3 u3, U4 u4, U5 u5, U6 u6, U7 u7, U8 u8, U9 u9, U10 u10, U11 u11, U12 u12, U13 u13, U14 u14, U15 u15, U16 u16, U17 u17, U18 u18, U19 u19, U20 u20, U21 u21, U22 u22, U23 u23, U24 u24, U25 u25, U26 u26, U27 u27, U28 u28, U29 u29, U30 u30, U31 u31, U32 u32, U33 u33, U34 u34, U35 u35, U36 u36, U37 u37, U38 u38, U39 u39, U40 u40, U41 u41, U42 u42, U43 u43, U44 u44, U45 u45, U46 u46, U47 u47, U48 u48, U49 u49, U50 u50, U51 u51, U52 u52, U53 u53, U54 u54, U55 u55, U56 u56, U57 u57, U58 u58, U59 u59, U60 u60, U61 u61, U62 u62, U63 u63, U64 u64)) { set(XPtr >(new CppFunction65(fun), true)); } #endif Rcpp/inst/include/Rcpp/generated/InternalFunctionWithStdFunction_call.h0000644000176200001440000060177412370460263026105 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // InternalFunctionWithStdFunction_call.h -- generated helper code for // InternalFunctionWithStdFunction.h // see rcpp-scripts repo for generator script // // Copyright (C) 2010 - 2014 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__generated__InternalFunctionWithStdFunction_calls_h #define Rcpp__generated__InternalFunctionWithStdFunction_calls_h template RESULT_TYPE call(const std::function &fun, SEXP* args) { return fun(); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); return fun(x0); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); return fun(x0,x1); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); return fun(x0,x1,x2); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); return fun(x0,x1,x2,x3); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); return fun(x0,x1,x2,x3,x4); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); return fun(x0,x1,x2,x3,x4,x5); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); return fun(x0,x1,x2,x3,x4,x5,x6); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); return fun(x0,x1,x2,x3,x4,x5,x6,x7); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); typename traits::input_parameter::type x44(args[44]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); typename traits::input_parameter::type x44(args[44]); typename traits::input_parameter::type x45(args[45]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); typename traits::input_parameter::type x44(args[44]); typename traits::input_parameter::type x45(args[45]); typename traits::input_parameter::type x46(args[46]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); typename traits::input_parameter::type x44(args[44]); typename traits::input_parameter::type x45(args[45]); typename traits::input_parameter::type x46(args[46]); typename traits::input_parameter::type x47(args[47]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); typename traits::input_parameter::type x44(args[44]); typename traits::input_parameter::type x45(args[45]); typename traits::input_parameter::type x46(args[46]); typename traits::input_parameter::type x47(args[47]); typename traits::input_parameter::type x48(args[48]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); typename traits::input_parameter::type x44(args[44]); typename traits::input_parameter::type x45(args[45]); typename traits::input_parameter::type x46(args[46]); typename traits::input_parameter::type x47(args[47]); typename traits::input_parameter::type x48(args[48]); typename traits::input_parameter::type x49(args[49]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); typename traits::input_parameter::type x44(args[44]); typename traits::input_parameter::type x45(args[45]); typename traits::input_parameter::type x46(args[46]); typename traits::input_parameter::type x47(args[47]); typename traits::input_parameter::type x48(args[48]); typename traits::input_parameter::type x49(args[49]); typename traits::input_parameter::type x50(args[50]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); typename traits::input_parameter::type x44(args[44]); typename traits::input_parameter::type x45(args[45]); typename traits::input_parameter::type x46(args[46]); typename traits::input_parameter::type x47(args[47]); typename traits::input_parameter::type x48(args[48]); typename traits::input_parameter::type x49(args[49]); typename traits::input_parameter::type x50(args[50]); typename traits::input_parameter::type x51(args[51]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); typename traits::input_parameter::type x44(args[44]); typename traits::input_parameter::type x45(args[45]); typename traits::input_parameter::type x46(args[46]); typename traits::input_parameter::type x47(args[47]); typename traits::input_parameter::type x48(args[48]); typename traits::input_parameter::type x49(args[49]); typename traits::input_parameter::type x50(args[50]); typename traits::input_parameter::type x51(args[51]); typename traits::input_parameter::type x52(args[52]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); typename traits::input_parameter::type x44(args[44]); typename traits::input_parameter::type x45(args[45]); typename traits::input_parameter::type x46(args[46]); typename traits::input_parameter::type x47(args[47]); typename traits::input_parameter::type x48(args[48]); typename traits::input_parameter::type x49(args[49]); typename traits::input_parameter::type x50(args[50]); typename traits::input_parameter::type x51(args[51]); typename traits::input_parameter::type x52(args[52]); typename traits::input_parameter::type x53(args[53]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); typename traits::input_parameter::type x44(args[44]); typename traits::input_parameter::type x45(args[45]); typename traits::input_parameter::type x46(args[46]); typename traits::input_parameter::type x47(args[47]); typename traits::input_parameter::type x48(args[48]); typename traits::input_parameter::type x49(args[49]); typename traits::input_parameter::type x50(args[50]); typename traits::input_parameter::type x51(args[51]); typename traits::input_parameter::type x52(args[52]); typename traits::input_parameter::type x53(args[53]); typename traits::input_parameter::type x54(args[54]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); typename traits::input_parameter::type x44(args[44]); typename traits::input_parameter::type x45(args[45]); typename traits::input_parameter::type x46(args[46]); typename traits::input_parameter::type x47(args[47]); typename traits::input_parameter::type x48(args[48]); typename traits::input_parameter::type x49(args[49]); typename traits::input_parameter::type x50(args[50]); typename traits::input_parameter::type x51(args[51]); typename traits::input_parameter::type x52(args[52]); typename traits::input_parameter::type x53(args[53]); typename traits::input_parameter::type x54(args[54]); typename traits::input_parameter::type x55(args[55]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); typename traits::input_parameter::type x44(args[44]); typename traits::input_parameter::type x45(args[45]); typename traits::input_parameter::type x46(args[46]); typename traits::input_parameter::type x47(args[47]); typename traits::input_parameter::type x48(args[48]); typename traits::input_parameter::type x49(args[49]); typename traits::input_parameter::type x50(args[50]); typename traits::input_parameter::type x51(args[51]); typename traits::input_parameter::type x52(args[52]); typename traits::input_parameter::type x53(args[53]); typename traits::input_parameter::type x54(args[54]); typename traits::input_parameter::type x55(args[55]); typename traits::input_parameter::type x56(args[56]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); typename traits::input_parameter::type x44(args[44]); typename traits::input_parameter::type x45(args[45]); typename traits::input_parameter::type x46(args[46]); typename traits::input_parameter::type x47(args[47]); typename traits::input_parameter::type x48(args[48]); typename traits::input_parameter::type x49(args[49]); typename traits::input_parameter::type x50(args[50]); typename traits::input_parameter::type x51(args[51]); typename traits::input_parameter::type x52(args[52]); typename traits::input_parameter::type x53(args[53]); typename traits::input_parameter::type x54(args[54]); typename traits::input_parameter::type x55(args[55]); typename traits::input_parameter::type x56(args[56]); typename traits::input_parameter::type x57(args[57]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56,x57); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); typename traits::input_parameter::type x44(args[44]); typename traits::input_parameter::type x45(args[45]); typename traits::input_parameter::type x46(args[46]); typename traits::input_parameter::type x47(args[47]); typename traits::input_parameter::type x48(args[48]); typename traits::input_parameter::type x49(args[49]); typename traits::input_parameter::type x50(args[50]); typename traits::input_parameter::type x51(args[51]); typename traits::input_parameter::type x52(args[52]); typename traits::input_parameter::type x53(args[53]); typename traits::input_parameter::type x54(args[54]); typename traits::input_parameter::type x55(args[55]); typename traits::input_parameter::type x56(args[56]); typename traits::input_parameter::type x57(args[57]); typename traits::input_parameter::type x58(args[58]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56,x57,x58); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); typename traits::input_parameter::type x44(args[44]); typename traits::input_parameter::type x45(args[45]); typename traits::input_parameter::type x46(args[46]); typename traits::input_parameter::type x47(args[47]); typename traits::input_parameter::type x48(args[48]); typename traits::input_parameter::type x49(args[49]); typename traits::input_parameter::type x50(args[50]); typename traits::input_parameter::type x51(args[51]); typename traits::input_parameter::type x52(args[52]); typename traits::input_parameter::type x53(args[53]); typename traits::input_parameter::type x54(args[54]); typename traits::input_parameter::type x55(args[55]); typename traits::input_parameter::type x56(args[56]); typename traits::input_parameter::type x57(args[57]); typename traits::input_parameter::type x58(args[58]); typename traits::input_parameter::type x59(args[59]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56,x57,x58,x59); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); typename traits::input_parameter::type x44(args[44]); typename traits::input_parameter::type x45(args[45]); typename traits::input_parameter::type x46(args[46]); typename traits::input_parameter::type x47(args[47]); typename traits::input_parameter::type x48(args[48]); typename traits::input_parameter::type x49(args[49]); typename traits::input_parameter::type x50(args[50]); typename traits::input_parameter::type x51(args[51]); typename traits::input_parameter::type x52(args[52]); typename traits::input_parameter::type x53(args[53]); typename traits::input_parameter::type x54(args[54]); typename traits::input_parameter::type x55(args[55]); typename traits::input_parameter::type x56(args[56]); typename traits::input_parameter::type x57(args[57]); typename traits::input_parameter::type x58(args[58]); typename traits::input_parameter::type x59(args[59]); typename traits::input_parameter::type x60(args[60]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56,x57,x58,x59,x60); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); typename traits::input_parameter::type x44(args[44]); typename traits::input_parameter::type x45(args[45]); typename traits::input_parameter::type x46(args[46]); typename traits::input_parameter::type x47(args[47]); typename traits::input_parameter::type x48(args[48]); typename traits::input_parameter::type x49(args[49]); typename traits::input_parameter::type x50(args[50]); typename traits::input_parameter::type x51(args[51]); typename traits::input_parameter::type x52(args[52]); typename traits::input_parameter::type x53(args[53]); typename traits::input_parameter::type x54(args[54]); typename traits::input_parameter::type x55(args[55]); typename traits::input_parameter::type x56(args[56]); typename traits::input_parameter::type x57(args[57]); typename traits::input_parameter::type x58(args[58]); typename traits::input_parameter::type x59(args[59]); typename traits::input_parameter::type x60(args[60]); typename traits::input_parameter::type x61(args[61]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56,x57,x58,x59,x60,x61); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); typename traits::input_parameter::type x44(args[44]); typename traits::input_parameter::type x45(args[45]); typename traits::input_parameter::type x46(args[46]); typename traits::input_parameter::type x47(args[47]); typename traits::input_parameter::type x48(args[48]); typename traits::input_parameter::type x49(args[49]); typename traits::input_parameter::type x50(args[50]); typename traits::input_parameter::type x51(args[51]); typename traits::input_parameter::type x52(args[52]); typename traits::input_parameter::type x53(args[53]); typename traits::input_parameter::type x54(args[54]); typename traits::input_parameter::type x55(args[55]); typename traits::input_parameter::type x56(args[56]); typename traits::input_parameter::type x57(args[57]); typename traits::input_parameter::type x58(args[58]); typename traits::input_parameter::type x59(args[59]); typename traits::input_parameter::type x60(args[60]); typename traits::input_parameter::type x61(args[61]); typename traits::input_parameter::type x62(args[62]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56,x57,x58,x59,x60,x61,x62); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); typename traits::input_parameter::type x44(args[44]); typename traits::input_parameter::type x45(args[45]); typename traits::input_parameter::type x46(args[46]); typename traits::input_parameter::type x47(args[47]); typename traits::input_parameter::type x48(args[48]); typename traits::input_parameter::type x49(args[49]); typename traits::input_parameter::type x50(args[50]); typename traits::input_parameter::type x51(args[51]); typename traits::input_parameter::type x52(args[52]); typename traits::input_parameter::type x53(args[53]); typename traits::input_parameter::type x54(args[54]); typename traits::input_parameter::type x55(args[55]); typename traits::input_parameter::type x56(args[56]); typename traits::input_parameter::type x57(args[57]); typename traits::input_parameter::type x58(args[58]); typename traits::input_parameter::type x59(args[59]); typename traits::input_parameter::type x60(args[60]); typename traits::input_parameter::type x61(args[61]); typename traits::input_parameter::type x62(args[62]); typename traits::input_parameter::type x63(args[63]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56,x57,x58,x59,x60,x61,x62,x63); } template RESULT_TYPE call(const std::function &fun, SEXP* args) { typename traits::input_parameter::type x0(args[0]); typename traits::input_parameter::type x1(args[1]); typename traits::input_parameter::type x2(args[2]); typename traits::input_parameter::type x3(args[3]); typename traits::input_parameter::type x4(args[4]); typename traits::input_parameter::type x5(args[5]); typename traits::input_parameter::type x6(args[6]); typename traits::input_parameter::type x7(args[7]); typename traits::input_parameter::type x8(args[8]); typename traits::input_parameter::type x9(args[9]); typename traits::input_parameter::type x10(args[10]); typename traits::input_parameter::type x11(args[11]); typename traits::input_parameter::type x12(args[12]); typename traits::input_parameter::type x13(args[13]); typename traits::input_parameter::type x14(args[14]); typename traits::input_parameter::type x15(args[15]); typename traits::input_parameter::type x16(args[16]); typename traits::input_parameter::type x17(args[17]); typename traits::input_parameter::type x18(args[18]); typename traits::input_parameter::type x19(args[19]); typename traits::input_parameter::type x20(args[20]); typename traits::input_parameter::type x21(args[21]); typename traits::input_parameter::type x22(args[22]); typename traits::input_parameter::type x23(args[23]); typename traits::input_parameter::type x24(args[24]); typename traits::input_parameter::type x25(args[25]); typename traits::input_parameter::type x26(args[26]); typename traits::input_parameter::type x27(args[27]); typename traits::input_parameter::type x28(args[28]); typename traits::input_parameter::type x29(args[29]); typename traits::input_parameter::type x30(args[30]); typename traits::input_parameter::type x31(args[31]); typename traits::input_parameter::type x32(args[32]); typename traits::input_parameter::type x33(args[33]); typename traits::input_parameter::type x34(args[34]); typename traits::input_parameter::type x35(args[35]); typename traits::input_parameter::type x36(args[36]); typename traits::input_parameter::type x37(args[37]); typename traits::input_parameter::type x38(args[38]); typename traits::input_parameter::type x39(args[39]); typename traits::input_parameter::type x40(args[40]); typename traits::input_parameter::type x41(args[41]); typename traits::input_parameter::type x42(args[42]); typename traits::input_parameter::type x43(args[43]); typename traits::input_parameter::type x44(args[44]); typename traits::input_parameter::type x45(args[45]); typename traits::input_parameter::type x46(args[46]); typename traits::input_parameter::type x47(args[47]); typename traits::input_parameter::type x48(args[48]); typename traits::input_parameter::type x49(args[49]); typename traits::input_parameter::type x50(args[50]); typename traits::input_parameter::type x51(args[51]); typename traits::input_parameter::type x52(args[52]); typename traits::input_parameter::type x53(args[53]); typename traits::input_parameter::type x54(args[54]); typename traits::input_parameter::type x55(args[55]); typename traits::input_parameter::type x56(args[56]); typename traits::input_parameter::type x57(args[57]); typename traits::input_parameter::type x58(args[58]); typename traits::input_parameter::type x59(args[59]); typename traits::input_parameter::type x60(args[60]); typename traits::input_parameter::type x61(args[61]); typename traits::input_parameter::type x62(args[62]); typename traits::input_parameter::type x63(args[63]); typename traits::input_parameter::type x64(args[64]); return fun(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36,x37,x38,x39,x40,x41,x42,x43,x44,x45,x46,x47,x48,x49,x50,x51,x52,x53,x54,x55,x56,x57,x58,x59,x60,x61,x62,x63,x64); } #endif Rcpp/inst/include/Rcpp/generated/grow__pairlist.h0000644000176200001440000002451112253723677021636 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // grow__pairlist.h: Rcpp R/C++ interface class library -- generated helper code for grow.h // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__generated__grow_pairlist_h #define Rcpp__generated__grow_pairlist_h /* template SEXP pairlist( ARGUMENTS ){ return GROW ; } */ template SEXP pairlist( const T1& t1 ){ return grow( t1, R_NilValue ) ; } template SEXP pairlist( const T1& t1, const T2& t2 ){ return grow( t1, grow( t2, R_NilValue ) ) ; } template SEXP pairlist( const T1& t1, const T2& t2, const T3& t3 ){ return grow( t1, grow( t2, grow( t3, R_NilValue ) ) ) ; } template SEXP pairlist( const T1& t1, const T2& t2, const T3& t3, const T4& t4 ){ return grow( t1, grow( t2, grow( t3, grow( t4, R_NilValue ) ) ) ) ; } template SEXP pairlist( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5 ){ return grow( t1, grow( t2, grow( t3, grow( t4, grow( t5, R_NilValue ) ) ) ) ) ; } template SEXP pairlist( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6 ){ return grow( t1, grow( t2, grow( t3, grow( t4, grow( t5, grow( t6, R_NilValue ) ) ) ) ) ) ; } template SEXP pairlist( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7 ){ return grow( t1, grow( t2, grow( t3, grow( t4, grow( t5, grow( t6, grow( t7, R_NilValue ) ) ) ) ) ) ) ; } template SEXP pairlist( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8 ){ return grow( t1, grow( t2, grow( t3, grow( t4, grow( t5, grow( t6, grow( t7, grow( t8, R_NilValue ) ) ) ) ) ) ) ) ; } template SEXP pairlist( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9 ){ return grow( t1, grow( t2, grow( t3, grow( t4, grow( t5, grow( t6, grow( t7, grow( t8, grow( t9, R_NilValue ) ) ) ) ) ) ) ) ) ; } template SEXP pairlist( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10 ){ return grow( t1, grow( t2, grow( t3, grow( t4, grow( t5, grow( t6, grow( t7, grow( t8, grow( t9, grow( t10, R_NilValue ) ) ) ) ) ) ) ) ) ) ; } template SEXP pairlist( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11 ){ return grow( t1, grow( t2, grow( t3, grow( t4, grow( t5, grow( t6, grow( t7, grow( t8, grow( t9, grow( t10, grow( t11, R_NilValue ) ) ) ) ) ) ) ) ) ) ) ; } template SEXP pairlist( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12 ){ return grow( t1, grow( t2, grow( t3, grow( t4, grow( t5, grow( t6, grow( t7, grow( t8, grow( t9, grow( t10, grow( t11, grow( t12, R_NilValue ) ) ) ) ) ) ) ) ) ) ) ) ; } template SEXP pairlist( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13 ){ return grow( t1, grow( t2, grow( t3, grow( t4, grow( t5, grow( t6, grow( t7, grow( t8, grow( t9, grow( t10, grow( t11, grow( t12, grow( t13, R_NilValue ) ) ) ) ) ) ) ) ) ) ) ) ) ; } template SEXP pairlist( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14 ){ return grow( t1, grow( t2, grow( t3, grow( t4, grow( t5, grow( t6, grow( t7, grow( t8, grow( t9, grow( t10, grow( t11, grow( t12, grow( t13, grow( t14, R_NilValue ) ) ) ) ) ) ) ) ) ) ) ) ) ) ; } template SEXP pairlist( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15 ){ return grow( t1, grow( t2, grow( t3, grow( t4, grow( t5, grow( t6, grow( t7, grow( t8, grow( t9, grow( t10, grow( t11, grow( t12, grow( t13, grow( t14, grow( t15, R_NilValue ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ; } template SEXP pairlist( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16 ){ return grow( t1, grow( t2, grow( t3, grow( t4, grow( t5, grow( t6, grow( t7, grow( t8, grow( t9, grow( t10, grow( t11, grow( t12, grow( t13, grow( t14, grow( t15, grow( t16, R_NilValue ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ; } template SEXP pairlist( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17 ){ return grow( t1, grow( t2, grow( t3, grow( t4, grow( t5, grow( t6, grow( t7, grow( t8, grow( t9, grow( t10, grow( t11, grow( t12, grow( t13, grow( t14, grow( t15, grow( t16, grow( t17, R_NilValue ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ; } template SEXP pairlist( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18 ){ return grow( t1, grow( t2, grow( t3, grow( t4, grow( t5, grow( t6, grow( t7, grow( t8, grow( t9, grow( t10, grow( t11, grow( t12, grow( t13, grow( t14, grow( t15, grow( t16, grow( t17, grow( t18, R_NilValue ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ; } template SEXP pairlist( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19 ){ return grow( t1, grow( t2, grow( t3, grow( t4, grow( t5, grow( t6, grow( t7, grow( t8, grow( t9, grow( t10, grow( t11, grow( t12, grow( t13, grow( t14, grow( t15, grow( t16, grow( t17, grow( t18, grow( t19, R_NilValue ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ; } template SEXP pairlist( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20 ){ return grow( t1, grow( t2, grow( t3, grow( t4, grow( t5, grow( t6, grow( t7, grow( t8, grow( t9, grow( t10, grow( t11, grow( t12, grow( t13, grow( t14, grow( t15, grow( t16, grow( t17, grow( t18, grow( t19, grow( t20, R_NilValue ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ; } /* */ #endif Rcpp/inst/include/Rcpp/generated/Function__operator.h0000644000176200001440000002256713562023530022443 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // Function__operator.h: Rcpp R/C++ interface class library -- generated helper code for Function.h // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__generated__Function_operator_h #define Rcpp__generated__Function_operator_h /* template SEXP operator()(ARGUMENTS){ return invoke(pairlist(PARAMETERS), R_GlobalEnv); } */ template SEXP operator()(const T1& t1) const { return invoke(pairlist(t1), R_GlobalEnv); } template SEXP operator()(const T1& t1, const T2& t2) const { return invoke(pairlist(t1, t2), R_GlobalEnv); } template SEXP operator()(const T1& t1, const T2& t2, const T3& t3) const { return invoke(pairlist(t1, t2, t3), R_GlobalEnv); } template SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4) const { return invoke(pairlist(t1, t2, t3, t4), R_GlobalEnv); } template SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5) const { return invoke(pairlist(t1, t2, t3, t4, t5), R_GlobalEnv); } template SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6) const { return invoke(pairlist(t1, t2, t3, t4, t5, t6), R_GlobalEnv); } template SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7) const { return invoke(pairlist(t1, t2, t3, t4, t5, t6, t7), R_GlobalEnv); } template SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8) const { return invoke(pairlist(t1, t2, t3, t4, t5, t6, t7, t8), R_GlobalEnv); } template SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9) const { return invoke(pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9), R_GlobalEnv); } template SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10) const { return invoke(pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10), R_GlobalEnv); } template SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11) const { return invoke(pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11), R_GlobalEnv); } template SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12) const { return invoke(pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12), R_GlobalEnv); } template SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13) const { return invoke(pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13), R_GlobalEnv); } template SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14) const { return invoke(pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14), R_GlobalEnv); } template SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15) const { return invoke(pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15), R_GlobalEnv); } template SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16) const { return invoke(pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16), R_GlobalEnv); } template SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17) const { return invoke(pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17), R_GlobalEnv); } template SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18) const { return invoke(pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18), R_GlobalEnv); } template SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19) const { return invoke(pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19), R_GlobalEnv); } template SEXP operator()(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20) const { return invoke(pairlist(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20), R_GlobalEnv); } /* */ #endif Rcpp/inst/include/Rcpp/generated/Pairlist__ctors.h0000644000176200001440000002160012253723677021746 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // Pairlist__ctors.h: Rcpp R/C++ interface class library -- generated helper code for Pairlist.h // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__generated__Pairlist_ctors_h #define Rcpp__generated__Pairlist_ctors_h template Pairlist_Impl( const T1& t1 ){ Storage::set__( pairlist( t1 ) ) ; } template Pairlist_Impl( const T1& t1, const T2& t2 ){ Storage::set__( pairlist( t1, t2 ) ) ; } template Pairlist_Impl( const T1& t1, const T2& t2, const T3& t3 ){ Storage::set__( pairlist( t1, t2, t3 ) ) ; } template Pairlist_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4 ){ Storage::set__( pairlist( t1, t2, t3, t4 ) ) ; } template Pairlist_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5 ) ) ; } template Pairlist_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6 ) ) ; } template Pairlist_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7 ) ) ; } template Pairlist_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8 ) ) ; } template Pairlist_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9 ) ) ; } template Pairlist_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10 ) ) ; } template Pairlist_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11 ) ) ; } template Pairlist_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12 ) ) ; } template Pairlist_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13 ) ) ; } template Pairlist_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14 ) ) ; } template Pairlist_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15 ) ) ; } template Pairlist_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16 ) ) ; } template Pairlist_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17 ) ) ; } template Pairlist_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18 ) ) ; } template Pairlist_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19 ) ) ; } template Pairlist_Impl( const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20 ){ Storage::set__( pairlist( t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20 ) ) ; } #endif Rcpp/inst/include/Rcpp/generated/Vector__create.h0000644000176200001440000017222413624642566021543 0ustar liggesusers // // Vector__create.h: Rcpp R/C++ interface class library -- generated helper code for Vector.h // // Copyright (C) 2010 - 2020 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__generated__Vector_create_h #define Rcpp__generated__Vector_create_h /* public: template static Vector create(ARGUMENTS){ return create__dispatch( typename traits::integral_constant::value }} >::type(), PARAMETERS ) ; } private: template static Vector create__dispatch( traits::false_type, ARGUMENTS ){ Vector res(___N___) ; iterator it( res.begin() ); //// __FOR_EACH__{{ *it = converter_type::get(___X___) ; ++it ; }} //// return res ; } template static Vector create__dispatch( traits::true_type, ARGUMENTS){ Vector res( ___N___ ) ; Shield names( ::Rf_allocVector( STRSXP, ___N___ ) ) ; int index = 0 ; iterator it( res.begin() ); //// __FOR_EACH__{{ replace_element( it, names, index, ___X___ ) ; ++it; ++index ; }} //// res.attr("names") = names ; return res ; } */ public: template static Vector create(const T1& t1){ return create__dispatch( typename traits::integral_constant::value >::type(), t1 ) ; } private: template static Vector create__dispatch( traits::false_type, const T1& t1 ){ Vector res(1) ; iterator it( res.begin() ); //// *it = converter_type::get(t1) ; ++it ; //// return res ; } template static Vector create__dispatch( traits::true_type, const T1& t1){ Vector res( 1 ) ; Shield names( ::Rf_allocVector( STRSXP, 1 ) ) ; int index = 0 ; iterator it( res.begin() ); //// replace_element( it, names, index, t1 ) ; ++it; ++index ; //// res.attr("names") = names ; return res ; } public: template static Vector create(const T1& t1, const T2& t2){ // #nocov start return create__dispatch( typename traits::integral_constant::value || traits::is_named::value >::type(), t1, t2 ) ; // #nocov end } private: template static Vector create__dispatch( traits::false_type, const T1& t1, const T2& t2 ){ Vector res(2) ; iterator it( res.begin() ); //// *it = converter_type::get(t1) ; ++it ; *it = converter_type::get(t2) ; ++it ; //// return res ; } template // #nocov start static Vector create__dispatch( traits::true_type, const T1& t1, const T2& t2){ Vector res( 2 ) ; Shield names( ::Rf_allocVector( STRSXP, 2 ) ) ; int index = 0 ; iterator it( res.begin() ); //// replace_element( it, names, index, t1 ) ; ++it; ++index ; replace_element( it, names, index, t2 ) ; ++it; ++index ; //// res.attr("names") = names ; return res ; // #nocov end } public: template static Vector create(const T1& t1, const T2& t2, const T3& t3){ return create__dispatch( typename traits::integral_constant::value || traits::is_named::value || traits::is_named::value >::type(), t1, t2, t3 ) ; } private: template static Vector create__dispatch( traits::false_type, const T1& t1, const T2& t2, const T3& t3 ){ Vector res(3) ; iterator it( res.begin() ); //// *it = converter_type::get(t1) ; ++it ; *it = converter_type::get(t2) ; ++it ; *it = converter_type::get(t3) ; ++it ; //// return res ; } template static Vector create__dispatch( traits::true_type, const T1& t1, const T2& t2, const T3& t3){ // #nocov start Vector res( 3 ) ; Shield names( ::Rf_allocVector( STRSXP, 3 ) ) ; int index = 0 ; iterator it( res.begin() ); //// replace_element( it, names, index, t1 ) ; ++it; ++index ; replace_element( it, names, index, t2 ) ; ++it; ++index ; replace_element( it, names, index, t3 ) ; ++it; ++index ; //// res.attr("names") = names ; return res ; // #nocov end } public: template static Vector create(const T1& t1, const T2& t2, const T3& t3, const T4& t4){ return create__dispatch( typename traits::integral_constant::value || traits::is_named::value || traits::is_named::value || traits::is_named::value >::type(), t1, t2, t3, t4 ) ; } private: template static Vector create__dispatch( traits::false_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4 ){ Vector res(4) ; iterator it( res.begin() ); //// *it = converter_type::get(t1) ; ++it ; *it = converter_type::get(t2) ; ++it ; *it = converter_type::get(t3) ; ++it ; *it = converter_type::get(t4) ; ++it ; //// return res ; } template static Vector create__dispatch( traits::true_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4){ Vector res( 4 ) ; Shield names( ::Rf_allocVector( STRSXP, 4 ) ) ; int index = 0 ; iterator it( res.begin() ); //// replace_element( it, names, index, t1 ) ; ++it; ++index ; replace_element( it, names, index, t2 ) ; ++it; ++index ; replace_element( it, names, index, t3 ) ; ++it; ++index ; replace_element( it, names, index, t4 ) ; ++it; ++index ; //// res.attr("names") = names ; return res ; } public: template static Vector create(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5){ return create__dispatch( typename traits::integral_constant::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value >::type(), t1, t2, t3, t4, t5 ) ; } private: template static Vector create__dispatch( traits::false_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5 ){ Vector res(5) ; iterator it( res.begin() ); //// *it = converter_type::get(t1) ; ++it ; *it = converter_type::get(t2) ; ++it ; *it = converter_type::get(t3) ; ++it ; *it = converter_type::get(t4) ; ++it ; *it = converter_type::get(t5) ; ++it ; //// return res ; } template static Vector create__dispatch( traits::true_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5){ Vector res( 5 ) ; Shield names( ::Rf_allocVector( STRSXP, 5 ) ) ; int index = 0 ; iterator it( res.begin() ); //// replace_element( it, names, index, t1 ) ; ++it; ++index ; replace_element( it, names, index, t2 ) ; ++it; ++index ; replace_element( it, names, index, t3 ) ; ++it; ++index ; replace_element( it, names, index, t4 ) ; ++it; ++index ; replace_element( it, names, index, t5 ) ; ++it; ++index ; //// res.attr("names") = names ; return res ; } public: template static Vector create(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6){ return create__dispatch( typename traits::integral_constant::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value >::type(), t1, t2, t3, t4, t5, t6 ) ; } private: template static Vector create__dispatch( traits::false_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6 ){ Vector res(6) ; iterator it( res.begin() ); //// *it = converter_type::get(t1) ; ++it ; *it = converter_type::get(t2) ; ++it ; *it = converter_type::get(t3) ; ++it ; *it = converter_type::get(t4) ; ++it ; *it = converter_type::get(t5) ; ++it ; *it = converter_type::get(t6) ; ++it ; //// return res ; } template static Vector create__dispatch( traits::true_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6){ Vector res( 6 ) ; Shield names( ::Rf_allocVector( STRSXP, 6 ) ) ; int index = 0 ; iterator it( res.begin() ); //// replace_element( it, names, index, t1 ) ; ++it; ++index ; replace_element( it, names, index, t2 ) ; ++it; ++index ; replace_element( it, names, index, t3 ) ; ++it; ++index ; replace_element( it, names, index, t4 ) ; ++it; ++index ; replace_element( it, names, index, t5 ) ; ++it; ++index ; replace_element( it, names, index, t6 ) ; ++it; ++index ; //// res.attr("names") = names ; return res ; } public: template static Vector create(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7){ return create__dispatch( typename traits::integral_constant::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value >::type(), t1, t2, t3, t4, t5, t6, t7 ) ; } private: template static Vector create__dispatch( traits::false_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7 ){ Vector res(7) ; iterator it( res.begin() ); //// *it = converter_type::get(t1) ; ++it ; *it = converter_type::get(t2) ; ++it ; *it = converter_type::get(t3) ; ++it ; *it = converter_type::get(t4) ; ++it ; *it = converter_type::get(t5) ; ++it ; *it = converter_type::get(t6) ; ++it ; *it = converter_type::get(t7) ; ++it ; //// return res ; } template static Vector create__dispatch( traits::true_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7){ Vector res( 7 ) ; Shield names( ::Rf_allocVector( STRSXP, 7 ) ) ; int index = 0 ; iterator it( res.begin() ); //// replace_element( it, names, index, t1 ) ; ++it; ++index ; replace_element( it, names, index, t2 ) ; ++it; ++index ; replace_element( it, names, index, t3 ) ; ++it; ++index ; replace_element( it, names, index, t4 ) ; ++it; ++index ; replace_element( it, names, index, t5 ) ; ++it; ++index ; replace_element( it, names, index, t6 ) ; ++it; ++index ; replace_element( it, names, index, t7 ) ; ++it; ++index ; //// res.attr("names") = names ; return res ; } public: template static Vector create(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8){ return create__dispatch( typename traits::integral_constant::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value >::type(), t1, t2, t3, t4, t5, t6, t7, t8 ) ; } private: template static Vector create__dispatch( traits::false_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8 ){ Vector res(8) ; iterator it( res.begin() ); //// *it = converter_type::get(t1) ; ++it ; *it = converter_type::get(t2) ; ++it ; *it = converter_type::get(t3) ; ++it ; *it = converter_type::get(t4) ; ++it ; *it = converter_type::get(t5) ; ++it ; *it = converter_type::get(t6) ; ++it ; *it = converter_type::get(t7) ; ++it ; *it = converter_type::get(t8) ; ++it ; //// return res ; } template static Vector create__dispatch( traits::true_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8){ Vector res( 8 ) ; Shield names( ::Rf_allocVector( STRSXP, 8 ) ) ; int index = 0 ; iterator it( res.begin() ); //// replace_element( it, names, index, t1 ) ; ++it; ++index ; replace_element( it, names, index, t2 ) ; ++it; ++index ; replace_element( it, names, index, t3 ) ; ++it; ++index ; replace_element( it, names, index, t4 ) ; ++it; ++index ; replace_element( it, names, index, t5 ) ; ++it; ++index ; replace_element( it, names, index, t6 ) ; ++it; ++index ; replace_element( it, names, index, t7 ) ; ++it; ++index ; replace_element( it, names, index, t8 ) ; ++it; ++index ; //// res.attr("names") = names ; return res ; } public: template static Vector create(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9){ return create__dispatch( typename traits::integral_constant::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value >::type(), t1, t2, t3, t4, t5, t6, t7, t8, t9 ) ; } private: template static Vector create__dispatch( traits::false_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9 ){ Vector res(9) ; iterator it( res.begin() ); //// *it = converter_type::get(t1) ; ++it ; *it = converter_type::get(t2) ; ++it ; *it = converter_type::get(t3) ; ++it ; *it = converter_type::get(t4) ; ++it ; *it = converter_type::get(t5) ; ++it ; *it = converter_type::get(t6) ; ++it ; *it = converter_type::get(t7) ; ++it ; *it = converter_type::get(t8) ; ++it ; *it = converter_type::get(t9) ; ++it ; //// return res ; } template static Vector create__dispatch( traits::true_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9){ Vector res( 9 ) ; Shield names( ::Rf_allocVector( STRSXP, 9 ) ) ; int index = 0 ; iterator it( res.begin() ); //// replace_element( it, names, index, t1 ) ; ++it; ++index ; replace_element( it, names, index, t2 ) ; ++it; ++index ; replace_element( it, names, index, t3 ) ; ++it; ++index ; replace_element( it, names, index, t4 ) ; ++it; ++index ; replace_element( it, names, index, t5 ) ; ++it; ++index ; replace_element( it, names, index, t6 ) ; ++it; ++index ; replace_element( it, names, index, t7 ) ; ++it; ++index ; replace_element( it, names, index, t8 ) ; ++it; ++index ; replace_element( it, names, index, t9 ) ; ++it; ++index ; //// res.attr("names") = names ; return res ; } public: template static Vector create(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10){ return create__dispatch( typename traits::integral_constant::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value >::type(), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10 ) ; } private: template static Vector create__dispatch( traits::false_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10 ){ Vector res(10) ; iterator it( res.begin() ); //// *it = converter_type::get(t1) ; ++it ; *it = converter_type::get(t2) ; ++it ; *it = converter_type::get(t3) ; ++it ; *it = converter_type::get(t4) ; ++it ; *it = converter_type::get(t5) ; ++it ; *it = converter_type::get(t6) ; ++it ; *it = converter_type::get(t7) ; ++it ; *it = converter_type::get(t8) ; ++it ; *it = converter_type::get(t9) ; ++it ; *it = converter_type::get(t10) ; ++it ; //// return res ; } template static Vector create__dispatch( traits::true_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10){ Vector res( 10 ) ; Shield names( ::Rf_allocVector( STRSXP, 10 ) ) ; int index = 0 ; iterator it( res.begin() ); //// replace_element( it, names, index, t1 ) ; ++it; ++index ; replace_element( it, names, index, t2 ) ; ++it; ++index ; replace_element( it, names, index, t3 ) ; ++it; ++index ; replace_element( it, names, index, t4 ) ; ++it; ++index ; replace_element( it, names, index, t5 ) ; ++it; ++index ; replace_element( it, names, index, t6 ) ; ++it; ++index ; replace_element( it, names, index, t7 ) ; ++it; ++index ; replace_element( it, names, index, t8 ) ; ++it; ++index ; replace_element( it, names, index, t9 ) ; ++it; ++index ; replace_element( it, names, index, t10 ) ; ++it; ++index ; //// res.attr("names") = names ; return res ; } public: template static Vector create(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11){ return create__dispatch( typename traits::integral_constant::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value >::type(), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11 ) ; } private: template static Vector create__dispatch( traits::false_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11 ){ Vector res(11) ; iterator it( res.begin() ); //// *it = converter_type::get(t1) ; ++it ; *it = converter_type::get(t2) ; ++it ; *it = converter_type::get(t3) ; ++it ; *it = converter_type::get(t4) ; ++it ; *it = converter_type::get(t5) ; ++it ; *it = converter_type::get(t6) ; ++it ; *it = converter_type::get(t7) ; ++it ; *it = converter_type::get(t8) ; ++it ; *it = converter_type::get(t9) ; ++it ; *it = converter_type::get(t10) ; ++it ; *it = converter_type::get(t11) ; ++it ; //// return res ; } template static Vector create__dispatch( traits::true_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11){ Vector res( 11 ) ; Shield names( ::Rf_allocVector( STRSXP, 11 ) ) ; int index = 0 ; iterator it( res.begin() ); //// replace_element( it, names, index, t1 ) ; ++it; ++index ; replace_element( it, names, index, t2 ) ; ++it; ++index ; replace_element( it, names, index, t3 ) ; ++it; ++index ; replace_element( it, names, index, t4 ) ; ++it; ++index ; replace_element( it, names, index, t5 ) ; ++it; ++index ; replace_element( it, names, index, t6 ) ; ++it; ++index ; replace_element( it, names, index, t7 ) ; ++it; ++index ; replace_element( it, names, index, t8 ) ; ++it; ++index ; replace_element( it, names, index, t9 ) ; ++it; ++index ; replace_element( it, names, index, t10 ) ; ++it; ++index ; replace_element( it, names, index, t11 ) ; ++it; ++index ; //// res.attr("names") = names ; return res ; } public: template static Vector create(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12){ return create__dispatch( typename traits::integral_constant::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value >::type(), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12 ) ; } private: template static Vector create__dispatch( traits::false_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12 ){ Vector res(12) ; iterator it( res.begin() ); //// *it = converter_type::get(t1) ; ++it ; *it = converter_type::get(t2) ; ++it ; *it = converter_type::get(t3) ; ++it ; *it = converter_type::get(t4) ; ++it ; *it = converter_type::get(t5) ; ++it ; *it = converter_type::get(t6) ; ++it ; *it = converter_type::get(t7) ; ++it ; *it = converter_type::get(t8) ; ++it ; *it = converter_type::get(t9) ; ++it ; *it = converter_type::get(t10) ; ++it ; *it = converter_type::get(t11) ; ++it ; *it = converter_type::get(t12) ; ++it ; //// return res ; } template static Vector create__dispatch( traits::true_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12){ Vector res( 12 ) ; Shield names( ::Rf_allocVector( STRSXP, 12 ) ) ; int index = 0 ; iterator it( res.begin() ); //// replace_element( it, names, index, t1 ) ; ++it; ++index ; replace_element( it, names, index, t2 ) ; ++it; ++index ; replace_element( it, names, index, t3 ) ; ++it; ++index ; replace_element( it, names, index, t4 ) ; ++it; ++index ; replace_element( it, names, index, t5 ) ; ++it; ++index ; replace_element( it, names, index, t6 ) ; ++it; ++index ; replace_element( it, names, index, t7 ) ; ++it; ++index ; replace_element( it, names, index, t8 ) ; ++it; ++index ; replace_element( it, names, index, t9 ) ; ++it; ++index ; replace_element( it, names, index, t10 ) ; ++it; ++index ; replace_element( it, names, index, t11 ) ; ++it; ++index ; replace_element( it, names, index, t12 ) ; ++it; ++index ; //// res.attr("names") = names ; return res ; } public: template static Vector create(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13){ return create__dispatch( typename traits::integral_constant::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value >::type(), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13 ) ; } private: template static Vector create__dispatch( traits::false_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13 ){ Vector res(13) ; iterator it( res.begin() ); //// *it = converter_type::get(t1) ; ++it ; *it = converter_type::get(t2) ; ++it ; *it = converter_type::get(t3) ; ++it ; *it = converter_type::get(t4) ; ++it ; *it = converter_type::get(t5) ; ++it ; *it = converter_type::get(t6) ; ++it ; *it = converter_type::get(t7) ; ++it ; *it = converter_type::get(t8) ; ++it ; *it = converter_type::get(t9) ; ++it ; *it = converter_type::get(t10) ; ++it ; *it = converter_type::get(t11) ; ++it ; *it = converter_type::get(t12) ; ++it ; *it = converter_type::get(t13) ; ++it ; //// return res ; } template static Vector create__dispatch( traits::true_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13){ Vector res( 13 ) ; Shield names( ::Rf_allocVector( STRSXP, 13 ) ) ; int index = 0 ; iterator it( res.begin() ); //// replace_element( it, names, index, t1 ) ; ++it; ++index ; replace_element( it, names, index, t2 ) ; ++it; ++index ; replace_element( it, names, index, t3 ) ; ++it; ++index ; replace_element( it, names, index, t4 ) ; ++it; ++index ; replace_element( it, names, index, t5 ) ; ++it; ++index ; replace_element( it, names, index, t6 ) ; ++it; ++index ; replace_element( it, names, index, t7 ) ; ++it; ++index ; replace_element( it, names, index, t8 ) ; ++it; ++index ; replace_element( it, names, index, t9 ) ; ++it; ++index ; replace_element( it, names, index, t10 ) ; ++it; ++index ; replace_element( it, names, index, t11 ) ; ++it; ++index ; replace_element( it, names, index, t12 ) ; ++it; ++index ; replace_element( it, names, index, t13 ) ; ++it; ++index ; //// res.attr("names") = names ; return res ; } public: template static Vector create(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14){ return create__dispatch( typename traits::integral_constant::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value >::type(), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14 ) ; } private: template static Vector create__dispatch( traits::false_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14 ){ Vector res(14) ; iterator it( res.begin() ); //// *it = converter_type::get(t1) ; ++it ; *it = converter_type::get(t2) ; ++it ; *it = converter_type::get(t3) ; ++it ; *it = converter_type::get(t4) ; ++it ; *it = converter_type::get(t5) ; ++it ; *it = converter_type::get(t6) ; ++it ; *it = converter_type::get(t7) ; ++it ; *it = converter_type::get(t8) ; ++it ; *it = converter_type::get(t9) ; ++it ; *it = converter_type::get(t10) ; ++it ; *it = converter_type::get(t11) ; ++it ; *it = converter_type::get(t12) ; ++it ; *it = converter_type::get(t13) ; ++it ; *it = converter_type::get(t14) ; ++it ; //// return res ; } template static Vector create__dispatch( traits::true_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14){ Vector res( 14 ) ; Shield names( ::Rf_allocVector( STRSXP, 14 ) ) ; int index = 0 ; iterator it( res.begin() ); //// replace_element( it, names, index, t1 ) ; ++it; ++index ; replace_element( it, names, index, t2 ) ; ++it; ++index ; replace_element( it, names, index, t3 ) ; ++it; ++index ; replace_element( it, names, index, t4 ) ; ++it; ++index ; replace_element( it, names, index, t5 ) ; ++it; ++index ; replace_element( it, names, index, t6 ) ; ++it; ++index ; replace_element( it, names, index, t7 ) ; ++it; ++index ; replace_element( it, names, index, t8 ) ; ++it; ++index ; replace_element( it, names, index, t9 ) ; ++it; ++index ; replace_element( it, names, index, t10 ) ; ++it; ++index ; replace_element( it, names, index, t11 ) ; ++it; ++index ; replace_element( it, names, index, t12 ) ; ++it; ++index ; replace_element( it, names, index, t13 ) ; ++it; ++index ; replace_element( it, names, index, t14 ) ; ++it; ++index ; //// res.attr("names") = names ; return res ; } public: template static Vector create(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15){ return create__dispatch( typename traits::integral_constant::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value >::type(), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15 ) ; } private: template static Vector create__dispatch( traits::false_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15 ){ Vector res(15) ; iterator it( res.begin() ); //// *it = converter_type::get(t1) ; ++it ; *it = converter_type::get(t2) ; ++it ; *it = converter_type::get(t3) ; ++it ; *it = converter_type::get(t4) ; ++it ; *it = converter_type::get(t5) ; ++it ; *it = converter_type::get(t6) ; ++it ; *it = converter_type::get(t7) ; ++it ; *it = converter_type::get(t8) ; ++it ; *it = converter_type::get(t9) ; ++it ; *it = converter_type::get(t10) ; ++it ; *it = converter_type::get(t11) ; ++it ; *it = converter_type::get(t12) ; ++it ; *it = converter_type::get(t13) ; ++it ; *it = converter_type::get(t14) ; ++it ; *it = converter_type::get(t15) ; ++it ; //// return res ; } template static Vector create__dispatch( traits::true_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15){ Vector res( 15 ) ; Shield names( ::Rf_allocVector( STRSXP, 15 ) ) ; int index = 0 ; iterator it( res.begin() ); //// replace_element( it, names, index, t1 ) ; ++it; ++index ; replace_element( it, names, index, t2 ) ; ++it; ++index ; replace_element( it, names, index, t3 ) ; ++it; ++index ; replace_element( it, names, index, t4 ) ; ++it; ++index ; replace_element( it, names, index, t5 ) ; ++it; ++index ; replace_element( it, names, index, t6 ) ; ++it; ++index ; replace_element( it, names, index, t7 ) ; ++it; ++index ; replace_element( it, names, index, t8 ) ; ++it; ++index ; replace_element( it, names, index, t9 ) ; ++it; ++index ; replace_element( it, names, index, t10 ) ; ++it; ++index ; replace_element( it, names, index, t11 ) ; ++it; ++index ; replace_element( it, names, index, t12 ) ; ++it; ++index ; replace_element( it, names, index, t13 ) ; ++it; ++index ; replace_element( it, names, index, t14 ) ; ++it; ++index ; replace_element( it, names, index, t15 ) ; ++it; ++index ; //// res.attr("names") = names ; return res ; } public: template static Vector create(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16){ return create__dispatch( typename traits::integral_constant::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value >::type(), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16 ) ; } private: template static Vector create__dispatch( traits::false_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16 ){ Vector res(16) ; iterator it( res.begin() ); //// *it = converter_type::get(t1) ; ++it ; *it = converter_type::get(t2) ; ++it ; *it = converter_type::get(t3) ; ++it ; *it = converter_type::get(t4) ; ++it ; *it = converter_type::get(t5) ; ++it ; *it = converter_type::get(t6) ; ++it ; *it = converter_type::get(t7) ; ++it ; *it = converter_type::get(t8) ; ++it ; *it = converter_type::get(t9) ; ++it ; *it = converter_type::get(t10) ; ++it ; *it = converter_type::get(t11) ; ++it ; *it = converter_type::get(t12) ; ++it ; *it = converter_type::get(t13) ; ++it ; *it = converter_type::get(t14) ; ++it ; *it = converter_type::get(t15) ; ++it ; *it = converter_type::get(t16) ; ++it ; //// return res ; } template static Vector create__dispatch( traits::true_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16){ Vector res( 16 ) ; Shield names( ::Rf_allocVector( STRSXP, 16 ) ) ; int index = 0 ; iterator it( res.begin() ); //// replace_element( it, names, index, t1 ) ; ++it; ++index ; replace_element( it, names, index, t2 ) ; ++it; ++index ; replace_element( it, names, index, t3 ) ; ++it; ++index ; replace_element( it, names, index, t4 ) ; ++it; ++index ; replace_element( it, names, index, t5 ) ; ++it; ++index ; replace_element( it, names, index, t6 ) ; ++it; ++index ; replace_element( it, names, index, t7 ) ; ++it; ++index ; replace_element( it, names, index, t8 ) ; ++it; ++index ; replace_element( it, names, index, t9 ) ; ++it; ++index ; replace_element( it, names, index, t10 ) ; ++it; ++index ; replace_element( it, names, index, t11 ) ; ++it; ++index ; replace_element( it, names, index, t12 ) ; ++it; ++index ; replace_element( it, names, index, t13 ) ; ++it; ++index ; replace_element( it, names, index, t14 ) ; ++it; ++index ; replace_element( it, names, index, t15 ) ; ++it; ++index ; replace_element( it, names, index, t16 ) ; ++it; ++index ; //// res.attr("names") = names ; return res ; } public: template static Vector create(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17){ return create__dispatch( typename traits::integral_constant::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value >::type(), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17 ) ; } private: template static Vector create__dispatch( traits::false_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17 ){ Vector res(17) ; iterator it( res.begin() ); //// *it = converter_type::get(t1) ; ++it ; *it = converter_type::get(t2) ; ++it ; *it = converter_type::get(t3) ; ++it ; *it = converter_type::get(t4) ; ++it ; *it = converter_type::get(t5) ; ++it ; *it = converter_type::get(t6) ; ++it ; *it = converter_type::get(t7) ; ++it ; *it = converter_type::get(t8) ; ++it ; *it = converter_type::get(t9) ; ++it ; *it = converter_type::get(t10) ; ++it ; *it = converter_type::get(t11) ; ++it ; *it = converter_type::get(t12) ; ++it ; *it = converter_type::get(t13) ; ++it ; *it = converter_type::get(t14) ; ++it ; *it = converter_type::get(t15) ; ++it ; *it = converter_type::get(t16) ; ++it ; *it = converter_type::get(t17) ; ++it ; //// return res ; } template static Vector create__dispatch( traits::true_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17){ Vector res( 17 ) ; Shield names( ::Rf_allocVector( STRSXP, 17 ) ) ; int index = 0 ; iterator it( res.begin() ); //// replace_element( it, names, index, t1 ) ; ++it; ++index ; replace_element( it, names, index, t2 ) ; ++it; ++index ; replace_element( it, names, index, t3 ) ; ++it; ++index ; replace_element( it, names, index, t4 ) ; ++it; ++index ; replace_element( it, names, index, t5 ) ; ++it; ++index ; replace_element( it, names, index, t6 ) ; ++it; ++index ; replace_element( it, names, index, t7 ) ; ++it; ++index ; replace_element( it, names, index, t8 ) ; ++it; ++index ; replace_element( it, names, index, t9 ) ; ++it; ++index ; replace_element( it, names, index, t10 ) ; ++it; ++index ; replace_element( it, names, index, t11 ) ; ++it; ++index ; replace_element( it, names, index, t12 ) ; ++it; ++index ; replace_element( it, names, index, t13 ) ; ++it; ++index ; replace_element( it, names, index, t14 ) ; ++it; ++index ; replace_element( it, names, index, t15 ) ; ++it; ++index ; replace_element( it, names, index, t16 ) ; ++it; ++index ; replace_element( it, names, index, t17 ) ; ++it; ++index ; //// res.attr("names") = names ; return res ; } public: template static Vector create(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18){ return create__dispatch( typename traits::integral_constant::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value >::type(), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18 ) ; } private: template static Vector create__dispatch( traits::false_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18 ){ Vector res(18) ; iterator it( res.begin() ); //// *it = converter_type::get(t1) ; ++it ; *it = converter_type::get(t2) ; ++it ; *it = converter_type::get(t3) ; ++it ; *it = converter_type::get(t4) ; ++it ; *it = converter_type::get(t5) ; ++it ; *it = converter_type::get(t6) ; ++it ; *it = converter_type::get(t7) ; ++it ; *it = converter_type::get(t8) ; ++it ; *it = converter_type::get(t9) ; ++it ; *it = converter_type::get(t10) ; ++it ; *it = converter_type::get(t11) ; ++it ; *it = converter_type::get(t12) ; ++it ; *it = converter_type::get(t13) ; ++it ; *it = converter_type::get(t14) ; ++it ; *it = converter_type::get(t15) ; ++it ; *it = converter_type::get(t16) ; ++it ; *it = converter_type::get(t17) ; ++it ; *it = converter_type::get(t18) ; ++it ; //// return res ; } template static Vector create__dispatch( traits::true_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18){ Vector res( 18 ) ; Shield names( ::Rf_allocVector( STRSXP, 18 ) ) ; int index = 0 ; iterator it( res.begin() ); //// replace_element( it, names, index, t1 ) ; ++it; ++index ; replace_element( it, names, index, t2 ) ; ++it; ++index ; replace_element( it, names, index, t3 ) ; ++it; ++index ; replace_element( it, names, index, t4 ) ; ++it; ++index ; replace_element( it, names, index, t5 ) ; ++it; ++index ; replace_element( it, names, index, t6 ) ; ++it; ++index ; replace_element( it, names, index, t7 ) ; ++it; ++index ; replace_element( it, names, index, t8 ) ; ++it; ++index ; replace_element( it, names, index, t9 ) ; ++it; ++index ; replace_element( it, names, index, t10 ) ; ++it; ++index ; replace_element( it, names, index, t11 ) ; ++it; ++index ; replace_element( it, names, index, t12 ) ; ++it; ++index ; replace_element( it, names, index, t13 ) ; ++it; ++index ; replace_element( it, names, index, t14 ) ; ++it; ++index ; replace_element( it, names, index, t15 ) ; ++it; ++index ; replace_element( it, names, index, t16 ) ; ++it; ++index ; replace_element( it, names, index, t17 ) ; ++it; ++index ; replace_element( it, names, index, t18 ) ; ++it; ++index ; //// res.attr("names") = names ; return res ; } public: template static Vector create(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19){ return create__dispatch( typename traits::integral_constant::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value >::type(), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19 ) ; } private: template static Vector create__dispatch( traits::false_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19 ){ Vector res(19) ; iterator it( res.begin() ); //// *it = converter_type::get(t1) ; ++it ; *it = converter_type::get(t2) ; ++it ; *it = converter_type::get(t3) ; ++it ; *it = converter_type::get(t4) ; ++it ; *it = converter_type::get(t5) ; ++it ; *it = converter_type::get(t6) ; ++it ; *it = converter_type::get(t7) ; ++it ; *it = converter_type::get(t8) ; ++it ; *it = converter_type::get(t9) ; ++it ; *it = converter_type::get(t10) ; ++it ; *it = converter_type::get(t11) ; ++it ; *it = converter_type::get(t12) ; ++it ; *it = converter_type::get(t13) ; ++it ; *it = converter_type::get(t14) ; ++it ; *it = converter_type::get(t15) ; ++it ; *it = converter_type::get(t16) ; ++it ; *it = converter_type::get(t17) ; ++it ; *it = converter_type::get(t18) ; ++it ; *it = converter_type::get(t19) ; ++it ; //// return res ; } template static Vector create__dispatch( traits::true_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19){ Vector res( 19 ) ; Shield names( ::Rf_allocVector( STRSXP, 19 ) ) ; int index = 0 ; iterator it( res.begin() ); //// replace_element( it, names, index, t1 ) ; ++it; ++index ; replace_element( it, names, index, t2 ) ; ++it; ++index ; replace_element( it, names, index, t3 ) ; ++it; ++index ; replace_element( it, names, index, t4 ) ; ++it; ++index ; replace_element( it, names, index, t5 ) ; ++it; ++index ; replace_element( it, names, index, t6 ) ; ++it; ++index ; replace_element( it, names, index, t7 ) ; ++it; ++index ; replace_element( it, names, index, t8 ) ; ++it; ++index ; replace_element( it, names, index, t9 ) ; ++it; ++index ; replace_element( it, names, index, t10 ) ; ++it; ++index ; replace_element( it, names, index, t11 ) ; ++it; ++index ; replace_element( it, names, index, t12 ) ; ++it; ++index ; replace_element( it, names, index, t13 ) ; ++it; ++index ; replace_element( it, names, index, t14 ) ; ++it; ++index ; replace_element( it, names, index, t15 ) ; ++it; ++index ; replace_element( it, names, index, t16 ) ; ++it; ++index ; replace_element( it, names, index, t17 ) ; ++it; ++index ; replace_element( it, names, index, t18 ) ; ++it; ++index ; replace_element( it, names, index, t19 ) ; ++it; ++index ; //// res.attr("names") = names ; return res ; } public: template static Vector create(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20){ return create__dispatch( typename traits::integral_constant::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value || traits::is_named::value >::type(), t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20 ) ; } private: template static Vector create__dispatch( traits::false_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20 ){ Vector res(20) ; iterator it( res.begin() ); //// *it = converter_type::get(t1) ; ++it ; *it = converter_type::get(t2) ; ++it ; *it = converter_type::get(t3) ; ++it ; *it = converter_type::get(t4) ; ++it ; *it = converter_type::get(t5) ; ++it ; *it = converter_type::get(t6) ; ++it ; *it = converter_type::get(t7) ; ++it ; *it = converter_type::get(t8) ; ++it ; *it = converter_type::get(t9) ; ++it ; *it = converter_type::get(t10) ; ++it ; *it = converter_type::get(t11) ; ++it ; *it = converter_type::get(t12) ; ++it ; *it = converter_type::get(t13) ; ++it ; *it = converter_type::get(t14) ; ++it ; *it = converter_type::get(t15) ; ++it ; *it = converter_type::get(t16) ; ++it ; *it = converter_type::get(t17) ; ++it ; *it = converter_type::get(t18) ; ++it ; *it = converter_type::get(t19) ; ++it ; *it = converter_type::get(t20) ; ++it ; //// return res ; } template static Vector create__dispatch( traits::true_type, const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20){ Vector res( 20 ) ; Shield names( ::Rf_allocVector( STRSXP, 20 ) ) ; int index = 0 ; iterator it( res.begin() ); //// replace_element( it, names, index, t1 ) ; ++it; ++index ; replace_element( it, names, index, t2 ) ; ++it; ++index ; replace_element( it, names, index, t3 ) ; ++it; ++index ; replace_element( it, names, index, t4 ) ; ++it; ++index ; replace_element( it, names, index, t5 ) ; ++it; ++index ; replace_element( it, names, index, t6 ) ; ++it; ++index ; replace_element( it, names, index, t7 ) ; ++it; ++index ; replace_element( it, names, index, t8 ) ; ++it; ++index ; replace_element( it, names, index, t9 ) ; ++it; ++index ; replace_element( it, names, index, t10 ) ; ++it; ++index ; replace_element( it, names, index, t11 ) ; ++it; ++index ; replace_element( it, names, index, t12 ) ; ++it; ++index ; replace_element( it, names, index, t13 ) ; ++it; ++index ; replace_element( it, names, index, t14 ) ; ++it; ++index ; replace_element( it, names, index, t15 ) ; ++it; ++index ; replace_element( it, names, index, t16 ) ; ++it; ++index ; replace_element( it, names, index, t17 ) ; ++it; ++index ; replace_element( it, names, index, t18 ) ; ++it; ++index ; replace_element( it, names, index, t19 ) ; ++it; ++index ; replace_element( it, names, index, t20 ) ; ++it; ++index ; //// res.attr("names") = names ; return res ; } /* */ #endif Rcpp/inst/include/Rcpp/lang.h0000644000176200001440000002367113744301365015573 0ustar liggesusers // lang.h: Rcpp R/C++ interface class library -- extra lang_* functions // // Copyright (C) 2011 - 2020 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__lang_h #define Rcpp__lang_h #define Rcpp_list1 Rf_list1 #define Rcpp_lang1 Rf_lang1 #define Rcpp_lang2 Rf_lang2 #define Rcpp_lang3 Rf_lang3 #define Rcpp_lang4 Rf_lang4 #define Rcpp_lang5 Rf_lang5 #define Rcpp_lang6 Rf_lang6 #define Rcpp_lcons Rf_lcons namespace Rcpp { inline SEXP Rcpp_list2(SEXP x0, SEXP x1) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list1(x1)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list3(SEXP x0, SEXP x1, SEXP x2) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list2(x1, x2)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list4(SEXP x0, SEXP x1, SEXP x2, SEXP x3) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list3(x1, x2, x3)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list5(SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list4(x1, x2, x3, x4)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list6(SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list5(x1, x2, x3, x4, x5)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list7( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list6(x1, x2, x3, x4, x5, x6)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang7( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list6(x1, x2, x3, x4, x5, x6)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list8( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list7(x1, x2, x3, x4, x5, x6, x7)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang8( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list7(x1, x2, x3, x4, x5, x6, x7)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list9( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list8(x1, x2, x3, x4, x5, x6, x7, x8)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang9( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list8(x1, x2, x3, x4, x5, x6, x7, x8)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list10( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list9(x1, x2, x3, x4, x5, x6, x7, x8, x9)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang10( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list9(x1, x2, x3, x4, x5, x6, x7, x8, x9)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list11( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list10(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang11( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list10(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list12( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list11(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang12( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list11(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list13( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list12(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang13( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list12(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list14( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list13(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang14( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list13(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list15( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list14(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang15( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list14(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list16( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14, SEXP x15 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list15(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang16( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14, SEXP x15 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list15(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list17( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14, SEXP x15, SEXP x16 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list16(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang17( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14, SEXP x15, SEXP x16 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list16(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list18( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14, SEXP x15, SEXP x16, SEXP x17 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list17(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang18( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14, SEXP x15, SEXP x16, SEXP x17 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list17(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list19( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14, SEXP x15, SEXP x16, SEXP x17, SEXP x18 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list18(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang19( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14, SEXP x15, SEXP x16, SEXP x17, SEXP x18 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list18(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18)); UNPROTECT(1); return x0; } inline SEXP Rcpp_list20( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14, SEXP x15, SEXP x16, SEXP x17, SEXP x18, SEXP x19 ) { PROTECT(x0); x0 = Rf_cons(x0, Rcpp_list19(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19)); UNPROTECT(1); return x0; } inline SEXP Rcpp_lang20( SEXP x0, SEXP x1, SEXP x2, SEXP x3, SEXP x4, SEXP x5, SEXP x6, SEXP x7, SEXP x8, SEXP x9, SEXP x10, SEXP x11, SEXP x12, SEXP x13, SEXP x14, SEXP x15, SEXP x16, SEXP x17, SEXP x18, SEXP x19 ) { PROTECT(x0); x0 = Rf_lcons(x0, Rcpp_list19(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19)); UNPROTECT(1); return x0; } } #endif Rcpp/inst/include/Rcpp/algo.h0000644000176200001440000000761512336231761015572 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // algo.h: Rcpp R/C++ interface class library -- STL-style algorithms // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__algo_h #define Rcpp__algo_h #include #include namespace Rcpp{ /* generic implementation for the input iterator case */ template inline bool __any( InputIterator first, InputIterator last, const T& value, std::input_iterator_tag ){ for ( ;first!=last; first++) if ( *first==value ) return true; return false; } /* RAI case */ template inline bool __any( RandomAccessIterator __first, RandomAccessIterator __last, const T& __val, std::random_access_iterator_tag ){ typename std::iterator_traits::difference_type __trip_count = (__last - __first) >> 2; for ( ; __trip_count > 0 ; --__trip_count) { if (*__first == __val) return true; ++__first; if (*__first == __val) return true; ++__first; if (*__first == __val) return true; ++__first; if (*__first == __val) return true; ++__first; } switch (__last - __first) { case 3: if (*__first == __val) return true; ++__first; case 2: if (*__first == __val) return true; ++__first; case 1: if (*__first == __val) return true; ++__first; case 0: default: return false; } } /** * stl like algorithm to identify if any of the objects in the range * is equal to the value */ template inline bool any( InputIterator first, InputIterator last, const T& value){ return __any( first, last, value, typename std::iterator_traits::iterator_category() ) ; } /* generic implementation for the input iterator case */ template inline bool __any_if( InputIterator first, InputIterator last, Predicate pred, std::input_iterator_tag ){ for ( ; first!=last ; first++ ) if ( pred(*first) ) return true ; return false; } /* RAI case */ template inline bool __any_if( RandomAccessIterator __first, RandomAccessIterator __last, Predicate __pred, std::random_access_iterator_tag ){ typename std::iterator_traits::difference_type __trip_count = (__last - __first) >> 2; for ( ; __trip_count > 0 ; --__trip_count) { if (__pred(*__first)) return true; ++__first; if (__pred(*__first)) return true; ++__first; if (__pred(*__first)) return true; ++__first; if (__pred(*__first)) return true; ++__first; } switch (__last - __first) { case 3: if (__pred(*__first)) return true; ++__first; case 2: if (__pred(*__first)) return true; ++__first; case 1: if (__pred(*__first)) return true; ++__first; case 0: default: return false; } } /** * stl-like algorithm to identify if the predicate is true for any * of the objects in the range */ template inline bool any_if( InputIterator first, InputIterator last, Predicate pred){ return __any_if( first, last, pred, typename std::iterator_traits::iterator_category() ) ; } } #endif Rcpp/inst/include/Rcpp/S4.h0000644000176200001440000000441213076203131015116 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // S4.h: Rcpp R/C++ interface class library -- S4 objects // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_S4_h #define Rcpp_S4_h namespace Rcpp{ /** * S4 object */ RCPP_API_CLASS(S4_Impl) { public: RCPP_GENERATE_CTOR_ASSIGN(S4_Impl) S4_Impl(){} ; /** * checks that x is an S4 object and wrap it. * * @param x must be an S4 object */ S4_Impl(SEXP x) { if( ! ::Rf_isS4(x) ) throw not_s4() ; Storage::set__(x) ; } S4_Impl& operator=( SEXP other ){ Storage::set__( other ) ; return *this ; } /** * Creates an S4 object of the requested class. * * @param klass name of the target S4 class * @throw S4_creation_error if klass does not map to a known S4 class */ S4_Impl( const std::string& klass ){ Shield x( R_do_new_object(R_do_MAKE_CLASS(klass.c_str())) ); if (!Rf_inherits(x, klass.c_str())) throw S4_creation_error( klass ) ; Storage::set__(x) ; } /** * Indicates if this object is an instance of the given S4 class */ bool is( const std::string& clazz) const ; /** * @throw not_s4 if x is not an S4 class */ void update(SEXP x){ if( ! ::Rf_isS4(x) ) throw not_s4() ; } } ; typedef S4_Impl S4 ; } // namespace Rcpp #endif Rcpp/inst/include/Rcpp/InternalFunction.h0000644000176200001440000000451414625104621020122 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // InternalFunction.h: Rcpp R/C++ interface class library -- exposing C++ functions // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_InternalFunction_h #define Rcpp_InternalFunction_h #include #include #ifdef RCPP_USING_CXX11 #include #endif namespace Rcpp{ RCPP_API_CLASS(InternalFunction_Impl) { public: RCPP_GENERATE_CTOR_ASSIGN(InternalFunction_Impl) #ifdef RCPP_USING_CXX11 template InternalFunction_Impl(const std::function &fun) { set( XPtr >( new Rcpp::InternalFunctionWithStdFunction::CppFunctionBaseFromStdFunction(fun), false ) ); } template InternalFunction_Impl(RESULT_TYPE (*fun)(T...)) { set(XPtr >(new CppFunctionN(fun), true)); } #else #include #endif void update(SEXP){} private: inline void set( SEXP xp){ Environment RCPP = Environment::Rcpp_namespace() ; Function intf = RCPP["internal_function"] ; Storage::set__( intf( xp ) ) ; } }; typedef InternalFunction_Impl InternalFunction ; } // namespace Rcpp #endif Rcpp/inst/include/Rcpp/Symbol.h0000644000176200001440000000577413076203131016111 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // Symbol.h: Rcpp R/C++ interface class library -- access R environments // // Copyright (C) 2013 - 2015 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_Symbol_h #define Rcpp_Symbol_h namespace Rcpp{ RCPP_API_CLASS(Symbol_Impl) { public: RCPP_GENERATE_CTOR_ASSIGN(Symbol_Impl) /** * wraps the SEXP into a Symbol object. * * @param x Accepted SEXP types are SYMSXP, CHARSXP and STRSXP * in the last case, the first element of the character vector * is silently used */ Symbol_Impl(SEXP x){ int type = TYPEOF(x) ; switch( type ){ case SYMSXP: Storage::set__( x ) ; break; /* nothing to do */ case CHARSXP: { #if R_VERSION >= R_Version(3,2,0) SEXP charSym = Rf_installChar(x); // R 3.2.0 or later have Rf_installChar #else SEXP charSym = Rf_install(CHAR(x)); // cannot be gc()'ed once in symbol table #endif Storage::set__( charSym ) ; break ; } case STRSXP: { /* FIXME: check that there is at least one element */ #if R_VERSION >= R_Version(3,2,0) SEXP charSym = Rf_installChar(STRING_ELT(x, 0 )); // R 3.2.0 or later have Rf_installChar #else SEXP charSym = Rf_install( CHAR(STRING_ELT(x, 0 )) ); // cannot be gc()'ed once in symbol table #endif Storage::set__( charSym ); break ; } default: const char* fmt = "Cannot convert object to a symbol: " "[type=%s; target=SYMSXP]."; throw not_compatible(fmt, Rf_type2char(TYPEOF(x))); } } Symbol_Impl(const std::string& symbol){ Storage::set__( Rf_install(symbol.c_str()) ); } inline const char* c_str() const { return CHAR(PRINTNAME(Storage::get__())) ; } inline bool operator==(const char* other) const { return ! strcmp(other, c_str() ); } void update(SEXP){} }; typedef Symbol_Impl Symbol; } // namespace Rcpp #endif Rcpp/inst/include/Rcpp/exceptions/0000755000176200001440000000000014740764532016657 5ustar liggesusersRcpp/inst/include/Rcpp/exceptions/cpp98/0000755000176200001440000000000013247400270017605 5ustar liggesusersRcpp/inst/include/Rcpp/exceptions/cpp98/exceptions.h0000644000176200001440000003650513247400270022150 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // exceptions.h: Rcpp R/C++ interface class library -- exceptions // // Copyright (C) 2010 - 2017 Dirk Eddelbuettel and Romain Francois // Copyright (C) 2017 Dirk Eddelbuettel, Romain Francois, and James J Balamuta // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__exceptionscpp98__h #define Rcpp__exceptionscpp98__h namespace Rcpp { #define RCPP_ADVANCED_EXCEPTION_CLASS(__CLASS__, __WHAT__) \ class __CLASS__ : public std::exception{ \ public: \ __CLASS__( ) throw() : message( std::string(__WHAT__) + "." ){} \ __CLASS__( const std::string& message ) throw() : message( std::string(__WHAT__) + ": " + message + "." ){} \ template \ __CLASS__(const char* fmt, const T1& arg1) throw() : \ message( tfm::format(fmt, arg1 ) ){} \ template \ __CLASS__(const char* fmt, const T1& arg1, const T2& arg2) throw() : \ message( tfm::format(fmt, arg1, arg2 ) ){} \ template \ __CLASS__(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3) throw() : \ message( tfm::format(fmt, arg1, arg2, arg3 ) ){} \ template \ __CLASS__(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3, const T4& arg4) throw() : \ message( tfm::format(fmt, arg1, arg2, arg3, arg4 ) ){} \ template \ __CLASS__(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3, const T4& arg4, const T5& arg5) throw() : \ message( tfm::format(fmt, arg1, arg2, arg3, arg4, arg5 ) ){} \ template \ __CLASS__(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3, const T4& arg4, const T5& arg5, const T6& arg6) throw() : \ message( tfm::format(fmt, arg1, arg2, arg3, arg4, arg5, arg6 ) ){} \ template \ __CLASS__(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3, const T4& arg4, const T5& arg5, const T6& arg6, const T7& arg7) throw() : \ message( tfm::format(fmt, arg1, arg2, arg3, arg4, arg5, arg6, arg7 ) ){} \ template \ __CLASS__(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3, const T4& arg4, const T5& arg5, const T6& arg6, const T7& arg7, const T8& arg8) throw() : \ message( tfm::format(fmt, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8 ) ){} \ template \ __CLASS__(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3, const T4& arg4, const T5& arg5, const T6& arg6, const T7& arg7, const T8& arg8, const T9& arg9) throw() : \ message( tfm::format(fmt, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9 ) ){} \ template \ __CLASS__(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3, const T4& arg4, const T5& arg5, const T6& arg6, const T7& arg7, const T8& arg8, const T9& arg9, const T10& arg10) throw() : \ message( tfm::format(fmt, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10 ) ){} \ virtual ~__CLASS__() throw(){} \ virtual const char* what() const throw() { return message.c_str() ; } \ private: \ std::string message ; \ } ; \ // -- Start Rcpp::warning declaration template inline void warning(const char* fmt, const T1& arg1) { Rf_warning("%s", tfm::format(fmt, arg1).c_str()); } template inline void warning(const char* fmt, const T1& arg1, const T2& arg2) { Rf_warning("%s", tfm::format(fmt, arg1, arg2).c_str()); } template inline void warning(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3) { Rf_warning("%s", tfm::format(fmt, arg1, arg2, arg3).c_str()); } template inline void warning(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3, const T4& arg4) { Rf_warning("%s", tfm::format(fmt, arg1, arg2, arg3, arg4).c_str()); } template inline void warning(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3, const T4& arg4, const T5& arg5) { Rf_warning("%s", tfm::format(fmt, arg1, arg2, arg3, arg4, arg5).c_str()); } template inline void warning(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3, const T4& arg4, const T5& arg5, const T6& arg6) { Rf_warning("%s", tfm::format(fmt, arg1, arg2, arg3, arg4, arg5, arg6).c_str()); } template inline void warning(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3, const T4& arg4, const T5& arg5, const T6& arg6, const T7& arg7) { Rf_warning("%s", tfm::format(fmt, arg1, arg2, arg3, arg4, arg5, arg6, arg7).c_str()); } template inline void warning(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3, const T4& arg4, const T5& arg5, const T6& arg6, const T7& arg7, const T8& arg8) { Rf_warning("%s", tfm::format(fmt, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8).c_str()); } template inline void warning(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3, const T4& arg4, const T5& arg5, const T6& arg6, const T7& arg7, const T8& arg8, const T9& arg9) { Rf_warning("%s", tfm::format(fmt, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9).c_str()); } template inline void warning(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3, const T4& arg4, const T5& arg5, const T6& arg6, const T7& arg7, const T8& arg8, const T9& arg9, const T10& arg10) { Rf_warning("%s", tfm::format(fmt, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10).c_str()); } // -- End Rcpp::warning declaration // -- Start Rcpp::stop declaration template inline void NORET stop(const char* fmt, const T1& arg1) { throw Rcpp::exception(tfm::format(fmt, arg1).c_str()); } template inline void NORET stop(const char* fmt, const T1& arg1, const T2& arg2) { throw Rcpp::exception(tfm::format(fmt, arg1, arg2).c_str()); } template inline void NORET stop(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3) { throw Rcpp::exception(tfm::format(fmt, arg1, arg2, arg3).c_str()); } template inline void NORET stop(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3, const T4& arg4) { throw Rcpp::exception(tfm::format(fmt, arg1, arg2, arg3, arg4).c_str()); } template inline void NORET stop(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3, const T4& arg4, const T5& arg5) { throw Rcpp::exception(tfm::format(fmt, arg1, arg2, arg3, arg4, arg5).c_str()); } template inline void NORET stop(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3, const T4& arg4, const T5& arg5, const T6& arg6) { throw Rcpp::exception(tfm::format(fmt, arg1, arg2, arg3, arg4, arg5, arg6).c_str()); } template inline void NORET stop(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3, const T4& arg4, const T5& arg5, const T6& arg6, const T7& arg7) { throw Rcpp::exception(tfm::format(fmt, arg1, arg2, arg3, arg4, arg5, arg6, arg7).c_str()); } template inline void NORET stop(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3, const T4& arg4, const T5& arg5, const T6& arg6, const T7& arg7, const T8& arg8) { throw Rcpp::exception(tfm::format(fmt, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8).c_str()); } template inline void NORET stop(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3, const T4& arg4, const T5& arg5, const T6& arg6, const T7& arg7, const T8& arg8, const T9& arg9) { throw Rcpp::exception(tfm::format(fmt, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9).c_str()); } template inline void NORET stop(const char* fmt, const T1& arg1, const T2& arg2, const T3& arg3, const T4& arg4, const T5& arg5, const T6& arg6, const T7& arg7, const T8& arg8, const T9& arg9, const T10& arg10) { throw Rcpp::exception(tfm::format(fmt, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10).c_str()); } // -- End Rcpp::stop declaration } // namespace Rcpp #endif Rcpp/inst/include/Rcpp/exceptions/cpp11/0000755000176200001440000000000014020027111017553 5ustar liggesusersRcpp/inst/include/Rcpp/exceptions/cpp11/exceptions.h0000644000176200001440000000461313247400270022124 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // exceptions.h: Rcpp R/C++ interface class library -- exceptions // // Copyright (C) 2017 James J Balamuta // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__exceptionscpp11__h #define Rcpp__exceptionscpp11__h // Required for std::forward #include namespace Rcpp { #define RCPP_ADVANCED_EXCEPTION_CLASS(__CLASS__, __WHAT__) \ class __CLASS__ : public std::exception { \ public: \ __CLASS__( ) throw() : message( std::string(__WHAT__) + "." ){} \ __CLASS__( const std::string& message ) throw() : \ message( std::string(__WHAT__) + ": " + message + "."){} \ template \ __CLASS__( const char* fmt, Args&&... args ) throw() : \ message( tfm::format(fmt, std::forward(args)... ) ){} \ virtual ~__CLASS__() throw(){} \ virtual const char* what() const throw() { return message.c_str(); } \ private: \ std::string message; \ }; template inline void warning(const char* fmt, Args&&... args ) { Rf_warning("%s", tfm::format(fmt, std::forward(args)... ).c_str()); } template inline void NORET stop(const char* fmt, Args&&... args) { throw Rcpp::exception( tfm::format(fmt, std::forward(args)... ).c_str() ); } } // namespace Rcpp #endif Rcpp/inst/include/Rcpp/StretchyList.h0000644000176200001440000000542012316773510017302 0ustar liggesusers// StretchyList.h: Rcpp R/C++ interface class library -- stretchy lists // // Copyright (C) 2013 Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_StretchyList_h #define Rcpp_StretchyList_h namespace Rcpp{ /** * StretchyList uses a special pairlist to provide efficient insertion * at the front and the end of a pairlist. * * This is a C++ abstraction of the functions NewList, GrowList and Insert * that are found in places where a pair list has to grow efficiently, e.g. * in the R parser (gram.y) */ RCPP_API_CLASS(StretchyList_Impl), public DottedPairProxyPolicy > { public: RCPP_GENERATE_CTOR_ASSIGN(StretchyList_Impl) typedef typename DottedPairProxyPolicy::DottedPairProxy Proxy ; typedef typename DottedPairProxyPolicy::const_DottedPairProxy const_Proxy ; StretchyList_Impl(){ SEXP s = Rf_cons(R_NilValue, R_NilValue); SETCAR(s, s); Storage::set__(s) ; } StretchyList_Impl(SEXP x){ Storage::set__(r_cast(x)) ; } void update(SEXP x){} inline operator SEXP() const{ return CDR(Storage::get__() ); } template inline StretchyList_Impl& push_back(const T& obj ){ return push_back__impl( obj, typename traits::is_named::type() ) ; } template inline StretchyList_Impl& push_front(const T& obj ){ return push_front__impl( obj, typename traits::is_named::type() ) ; } private: template StretchyList_Impl& push_back__impl(const T& obj, traits::true_type ) ; template StretchyList_Impl& push_back__impl(const T& obj, traits::false_type ) ; template StretchyList_Impl& push_front__impl(const T& obj, traits::true_type ) ; template StretchyList_Impl& push_front__impl(const T& obj, traits::false_type ) ; } ; typedef StretchyList_Impl StretchyList ; } #endif Rcpp/inst/include/Rcpp/sugar/0000755000176200001440000000000014734567034015620 5ustar liggesusersRcpp/inst/include/Rcpp/sugar/functions/0000755000176200001440000000000014574051600017615 5ustar liggesusersRcpp/inst/include/Rcpp/sugar/functions/is_infinite.h0000644000176200001440000000307112535036334022271 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // is_infinite.h: Rcpp R/C++ interface class library -- is_infinite // // Copyright (C) 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__is_infinite_h #define Rcpp__sugar__is_infinite_h namespace Rcpp{ namespace sugar{ template class IsInfinite : public ::Rcpp::VectorBase< LGLSXP, false, IsInfinite > { public: IsInfinite( const VEC_TYPE& obj_) : obj(obj_){} inline int operator[]( R_xlen_t i ) const { return ::Rcpp::traits::is_infinite( obj[i] ) ; } inline R_xlen_t size() const { return obj.size() ; } private: const VEC_TYPE& obj ; } ; } // sugar template inline sugar::IsInfinite is_infinite( const Rcpp::VectorBase& t){ return sugar::IsInfinite( t.get_ref() ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/is_na.h0000644000176200001440000000641313216720243021061 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // is_na.h: Rcpp R/C++ interface class library -- is_na // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__is_na_h #define Rcpp__sugar__is_na_h namespace Rcpp{ namespace sugar{ template class IsNa : public ::Rcpp::VectorBase< LGLSXP, false, IsNa > { public: typedef typename traits::storage_type::type STORAGE ; typedef Rcpp::VectorBase BASE ; IsNa( const BASE& obj_) : obj(obj_){} inline int operator[]( R_xlen_t i ) const { return ::Rcpp::traits::is_na( obj[i] ) ; } inline R_xlen_t size() const { return obj.size() ; } private: const BASE& obj ; } ; // specialization for the case where we already know // the result (FALSE) because it is embedded in the type // (the second template parameter of VectorBase) template class IsNa : public ::Rcpp::VectorBase< LGLSXP, false, IsNa > { public: typedef typename traits::storage_type::type STORAGE ; typedef Rcpp::VectorBase BASE ; IsNa( const BASE& obj_) : obj(obj_){} inline int operator[]( R_xlen_t i ) const { return FALSE ; } inline R_xlen_t size() const { return obj.size() ; } private: const BASE& obj ; } ; template class IsNa_Vector_is_na : public Rcpp::VectorBase >{ public: IsNa_Vector_is_na( const T& x) : ref(x){} inline int operator[]( R_xlen_t i) const { #if defined(RCPP_NEW_DATE_DATETIME_VECTORS) return ::Rcpp::traits::is_na(ref[i]); #else return ref[i].is_na() ; #endif } inline R_xlen_t size() const { return ref.size() ; } private: const T& ref ; } ; } // sugar template inline sugar::IsNa is_na( const Rcpp::VectorBase& t) { return sugar::IsNa(t); } inline sugar::IsNa_Vector_is_na is_na(const oldDatetimeVector& x) { return sugar::IsNa_Vector_is_na( x ) ; } inline sugar::IsNa_Vector_is_na is_na(const oldDateVector& x) { return sugar::IsNa_Vector_is_na(x); } inline sugar::IsNa_Vector_is_na is_na(newDatetimeVector& x) { return sugar::IsNa_Vector_is_na(x); } inline sugar::IsNa_Vector_is_na is_na(newDateVector& x) { return sugar::IsNa_Vector_is_na(x); } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/sign.h0000644000176200001440000000453712535036334020741 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // sign.h: Rcpp R/C++ interface class library -- sign // // Copyright (C) 2010 - 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__sign_h #define Rcpp__sugar__sign_h namespace Rcpp{ namespace sugar{ template class sign__impl{ public: typedef typename Rcpp::traits::storage_type::type STORAGE ; static inline int get( STORAGE x){ return Rcpp::traits::is_na(x) ? NA_INTEGER : ( x > 0 ? 1 : (x==0 ? 0 : -1) ) ; } } ; template class sign__impl{ public: typedef typename Rcpp::traits::storage_type::type STORAGE ; static inline int get( STORAGE x){ return ( x > 0 ? 1 : (x==0 ? 0 : -1) ) ; } } ; template class Sign : public Rcpp::VectorBase< INTSXP,NA, Sign > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef int r_import_type ; Sign( const VEC_TYPE& object_ ) : object(object_){} inline int operator[]( R_xlen_t i ) const { return get(i) ; } inline R_xlen_t size() const { return object.size() ; } operator SEXP() const { return wrap( *this ); } inline int get(R_xlen_t i) const { return sign__impl::get( object[i] ); } private: const VEC_TYPE& object ; } ; } // sugar template inline sugar::Sign sign( const VectorBase& t){ return sugar::Sign( t ) ; } template inline sugar::Sign sign( const VectorBase& t){ return sugar::Sign( t ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/complex.h0000644000176200001440000001557613247357554021470 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // complex.h: Rcpp R/C++ interface class library -- complex // // Copyright (C) 2010 - 2018 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__complex_h #define Rcpp__sugar__complex_h namespace Rcpp{ namespace sugar{ template class SugarComplex : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , NA, SugarComplex > { public: typedef Rcpp::VectorBase VEC_TYPE ; SugarComplex( FunPtr ptr_, const VEC_TYPE & vec_) : ptr(ptr_), vec(vec_){} inline RESULT_TYPE operator[]( R_xlen_t i) const { Rcomplex x = vec[i] ; if( Rcpp::traits::is_na( x ) ) return Rcpp::traits::get_na< Rcpp::traits::r_sexptype_traits::rtype >() ; return ptr( x ); } inline R_xlen_t size() const { return vec.size() ; } private: FunPtr ptr ; const VEC_TYPE& vec ; }; } // sugar namespace internal{ inline double complex__Re( Rcomplex x){ return x.r ; } inline double complex__Im( Rcomplex x){ return x.i ; } inline double complex__Mod( Rcomplex x){ return ::sqrt( x.i * x.i + x.r * x.r) ; } inline Rcomplex complex__Conj( Rcomplex x){ Rcomplex y ; y.r = x.r; y.i = -x.i ; return y ; } inline double complex__Arg( Rcomplex x ){ return ::atan2(x.i, x.r); } // TODO: this does not use HAVE_C99_COMPLEX as in R, perhaps it should inline Rcomplex complex__exp( Rcomplex x){ Rcomplex y ; double expx = ::exp(x.r); y.r = expx * ::cos(x.i); y.i = expx * ::sin(x.i); return y ; } inline Rcomplex complex__log( Rcomplex x){ Rcomplex y ; y.i = ::atan2(x.i, x.r); y.r = ::log(::hypot(x.r, x.i)); return y ; } inline Rcomplex complex__sqrt(Rcomplex z){ Rcomplex r ; double mag; if( (mag = ::hypot(z.r, z.i)) == 0.0) r.r = r.i = 0.0; else if(z.r > 0) { r.r = ::sqrt(0.5 * (mag + z.r) ); r.i = z.i / r.r / 2; } else { r.i = ::sqrt(0.5 * (mag - z.r) ); if(z.i < 0) r.i = - r.i; r.r = z.i / r.i / 2; } return r ; } inline Rcomplex complex__cos(Rcomplex z){ Rcomplex r ; r.r = ::cos(z.r) * ::cosh(z.i); r.i = - ::sin(z.r) * ::sinh(z.i); return r ; } inline Rcomplex complex__cosh(Rcomplex z){ Rcomplex r; r.r = ::cos(-z.i) * ::cosh( z.r); r.i = - ::sin(-z.i) * ::sinh(z.r); return r ; } inline Rcomplex complex__sin(Rcomplex z){ Rcomplex r ; r.r = ::sin(z.r) * ::cosh(z.i); r.i = ::cos(z.r) * ::sinh(z.i); return r; } inline Rcomplex complex__tan(Rcomplex z){ Rcomplex r ; double x2, y2, den; x2 = 2.0 * z.r; y2 = 2.0 * z.i; den = ::cos(x2) + ::cosh(y2); r.r = ::sin(x2)/den; /* any threshold between -log(DBL_EPSILON) and log(DBL_XMAX) will do*/ if (ISNAN(y2) || ::fabs(y2) < 50.0) r.i = ::sinh(y2)/den; else r.i = (y2 <0 ? -1.0 : 1.0); return r ; } inline Rcomplex complex__asin(Rcomplex z) { Rcomplex r ; double alpha, bet, t1, t2, x, y; x = z.r; y = z.i; t1 = 0.5 * ::hypot(x + 1, y); t2 = 0.5 * ::hypot(x - 1, y); alpha = t1 + t2; bet = t1 - t2; r.r = ::asin(bet); r.i = ::log(alpha + ::sqrt(alpha*alpha - 1)); if(y < 0 || (y == 0 && x > 1)) r.i *= -1; return r ; } inline Rcomplex complex__acos(Rcomplex z) { Rcomplex r, Asin = complex__asin(z); r.r = M_PI_2 - Asin.r; r.i = - Asin.i; return r ; } /* Complex Arctangent Function */ /* Equation (4.4.39) Abramowitz and Stegun */ /* with additional terms to force the branch cuts */ /* to agree with figure 4.4, p79. Continuity */ /* on the branch cuts (pure imaginary axis; x==0, |y|>1) */ /* is standard: z_asin() is continuous from the right */ /* if y >= 1, and continuous from the left if y <= -1. */ inline Rcomplex complex__atan(Rcomplex z) { Rcomplex r; double x, y; x = z.r; y = z.i; r.r = 0.5 * ::atan(2 * x / ( 1 - x * x - y * y)); r.i = 0.25 * ::log((x * x + (y + 1) * (y + 1)) / (x * x + (y - 1) * (y - 1))); if(x*x + y*y > 1) { r.r += M_PI_2; if(x < 0 || (x == 0 && y < 0)) r.r -= M_PI; } return r ; } inline Rcomplex complex__acosh(Rcomplex z){ Rcomplex r, a = complex__acos(z); r.r = -a.i; r.i = a.r; return r ; } inline Rcomplex complex__asinh(Rcomplex z){ Rcomplex r, b; b.r = -z.i; b.i = z.r; Rcomplex a = complex__asin(b); r.r = a.i; r.i = -a.r; return r ; } inline Rcomplex complex__atanh(Rcomplex z){ Rcomplex r, b; b.r = -z.i; b.i = z.r; Rcomplex a = complex__atan(b); r.r = a.i; r.i = -a.r; return r ; } inline Rcomplex complex__sinh(Rcomplex z) { Rcomplex r, b; b.r = -z.i; b.i = z.r; Rcomplex a = complex__sin(b); r.r = a.i; r.i = -a.r; return r ; } inline Rcomplex complex__tanh(Rcomplex z) { Rcomplex r, b; b.r = -z.i; b.i = z.r; Rcomplex a = complex__tan(b); r.r = a.i; r.i = -a.r; return r ; } } // internal #define RCPP_SUGAR_COMPLEX(__NAME__,__OUT__) \ template \ inline sugar::SugarComplex \ __NAME__(const VectorBase& t) { \ return sugar::SugarComplex( \ internal::complex__##__NAME__, t); \ } RCPP_SUGAR_COMPLEX( Re, double ) RCPP_SUGAR_COMPLEX( Im, double ) RCPP_SUGAR_COMPLEX( Mod, double ) RCPP_SUGAR_COMPLEX( Arg, double ) RCPP_SUGAR_COMPLEX( Conj, Rcomplex ) RCPP_SUGAR_COMPLEX( exp, Rcomplex ) RCPP_SUGAR_COMPLEX( log, Rcomplex ) RCPP_SUGAR_COMPLEX( sqrt, Rcomplex ) RCPP_SUGAR_COMPLEX( cos, Rcomplex ) RCPP_SUGAR_COMPLEX( sin, Rcomplex ) RCPP_SUGAR_COMPLEX( tan, Rcomplex ) RCPP_SUGAR_COMPLEX( acos, Rcomplex ) RCPP_SUGAR_COMPLEX( asin, Rcomplex ) RCPP_SUGAR_COMPLEX( atan, Rcomplex ) RCPP_SUGAR_COMPLEX( acosh, Rcomplex ) RCPP_SUGAR_COMPLEX( asinh, Rcomplex ) RCPP_SUGAR_COMPLEX( atanh, Rcomplex ) RCPP_SUGAR_COMPLEX( cosh, Rcomplex ) RCPP_SUGAR_COMPLEX( sinh, Rcomplex ) RCPP_SUGAR_COMPLEX( tanh, Rcomplex ) #undef RCPP_SUGAR_COMPLEX } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/sample.h0000644000176200001440000002653714574051400021262 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // sample.h: Rcpp R/C++ interface class library -- sample // // Copyright (C) 2016 Nathan Russell // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . // The sample() in RcppArmadillo came first, but is opt-in. In case someone did // in fact load it, we need to skip the declarations here to avoid a conflict #ifndef RCPPARMADILLO__EXTENSIONS__SAMPLE_H #ifndef Rcpp__sugar__sample_h #define Rcpp__sugar__sample_h #include // In order to mirror the behavior of `base::sample` // as closely as possible, this file contains adaptations // of several functions in R/src/main/random.c: // // * do_sample - general logic as well as the empirical sampling routine. // // * FixupProb - an auxiliary function. // // * walker_ProbSampleReplace, ProbSampleReplace, and ProbSampleNoReplace - // algorithms for sampling according to a supplied probability vector. // // For each of the sampling routines, two signatures are provided: // // * A version that returns an integer vector, which can be used to // generate 0-based indices (one_based = false) or 1-based indices // (one_based = true) -- where the latter corresponds to the // bahavior of `base::sample.int`. // // * A version which takes an input Vector<> (rather than an integer 'n'), // and samples its elements -- this corresponds to `base::sample`. namespace Rcpp { namespace sugar { // Adapted from `FixupProb` // Normalizes a probability vector 'p' S.T. sum(p) == 1 inline void Normalize(Vector& p, int require_k, bool replace) { double sum = 0.0; R_xlen_t npos = 0, i = 0, n = p.size(); for ( ; i < n; i++) { if (!R_FINITE(p[i]) || (p[i] < 0)) { stop("Probabilities must be finite and non-negative!"); } npos += (p[i] > 0.0); sum += p[i]; } if ((!npos) || (!replace && (require_k > npos))) { stop("Too few positive probabilities!"); } for (i = 0; i < n; i++) { p[i] /= sum; } } // Adapted from `ProbSampleReplace` // Index version inline Vector SampleReplace(Vector& p, int n, int k, bool one_based) { Vector perm = no_init(n), ans = no_init(k); double rU = 0.0; int i = 0, j = 0, nm1 = n - 1; int adj = one_based ? 0 : 1; for ( ; i < n; i++) { perm[i] = i + 1; } Rf_revsort(p.begin(), perm.begin(), n); for (i = 1; i < n; i++) { p[i] += p[i - 1]; } for (i = 0; i < k; i++) { rU = unif_rand(); for (j = 0; j < nm1; j++) { if (rU <= p[j]) { break; } } ans[i] = perm[j] - adj; } return ans; } // Element version template inline Vector SampleReplace(Vector& p, int k, const Vector& ref) { int n = ref.size(); Vector perm = no_init(n); Vector ans = no_init(k); double rU = 0.0; int i = 0, j = 0, nm1 = n - 1; for ( ; i < n; i++) { perm[i] = i + 1; } Rf_revsort(p.begin(), perm.begin(), n); for (i = 1; i < n; i++) { p[i] += p[i - 1]; } for (i = 0; i < k; i++) { rU = unif_rand(); for (j = 0; j < nm1; j++) { if (rU <= p[j]) { break; } } ans[i] = ref[perm[j] - 1]; } return ans; } // Adapted from `walker_ProbSampleReplace` // Index version inline Vector WalkerSample(const Vector& p, int n, int nans, bool one_based) { Vector a = no_init(n), ans = no_init(nans); int i, j, k; std::vector q(n); double rU; std::vector HL(n); std::vector::iterator H, L; int adj = one_based ? 1 : 0; H = HL.begin() - 1; L = HL.begin() + n; for (i = 0; i < n; i++) { q[i] = p[i] * n; if (q[i] < 1.0) { *++H = i; } else { *--L = i; } } if (H >= HL.begin() && L < HL.begin() + n) { for (k = 0; k < n - 1; k++) { i = HL[k]; j = *L; a[i] = j; q[j] += q[i] - 1; L += (q[j] < 1.0); if (L >= HL.begin() + n) { break; } } } for (i = 0; i < n; i++) { q[i] += i; } for (i = 0; i < nans; i++) { rU = unif_rand() * n; k = static_cast(rU); ans[i] = (rU < q[k]) ? k + adj : a[k] + adj; } return ans; } // Element version template inline Vector WalkerSample(const Vector& p, int nans, const Vector& ref) { int n = ref.size(); Vector a = no_init(n); Vector ans = no_init(nans); int i, j, k; std::vector q(n); double rU; std::vector HL(n); std::vector::iterator H, L; H = HL.begin() - 1; L = HL.begin() + n; for (i = 0; i < n; i++) { q[i] = p[i] * n; if (q[i] < 1.0) { *++H = i; } else { *--L = i; } } if (H >= HL.begin() && L < HL.begin() + n) { for (k = 0; k < n - 1; k++) { i = HL[k]; j = *L; a[i] = j; q[j] += q[i] - 1; L += (q[j] < 1.0); if (L >= HL.begin() + n) { break; } } } for (i = 0; i < n; i++) { q[i] += i; } for (i = 0; i < nans; i++) { rU = unif_rand() * n; k = static_cast(rU); ans[i] = (rU < q[k]) ? ref[k] : ref[a[k]]; } return ans; } // Adapted from `ProbSampleNoReplace` // Index version inline Vector SampleNoReplace(Vector& p, int n, int nans, bool one_based) { Vector perm = no_init(n), ans = no_init(nans); double rT, mass, totalmass; int i, j, k, n1; int adj = one_based ? 0 : 1; for (i = 0; i < n; i++) { perm[i] = i + 1; } Rf_revsort(p.begin(), perm.begin(), n); totalmass = 1.0; for (i = 0, n1 = n - 1; i < nans; i++, n1--) { rT = totalmass * unif_rand(); mass = 0.0; for (j = 0; j < n1; j++) { mass += p[j]; if (rT <= mass) { break; } } ans[i] = perm[j] - adj; totalmass -= p[j]; for (k = j; k < n1; k++) { p[k] = p[k + 1]; perm[k] = perm[k + 1]; } } return ans; } // Element version template inline Vector SampleNoReplace(Vector& p, int nans, const Vector& ref) { int n = ref.size(); Vector perm = no_init(n); Vector ans = no_init(nans); double rT, mass, totalmass; int i, j, k, n1; for (i = 0; i < n; i++) { perm[i] = i + 1; } Rf_revsort(p.begin(), perm.begin(), n); totalmass = 1.0; for (i = 0, n1 = n - 1; i < nans; i++, n1--) { rT = totalmass * unif_rand(); mass = 0.0; for (j = 0; j < n1; j++) { mass += p[j]; if (rT <= mass) { break; } } ans[i] = ref[perm[j] - 1]; totalmass -= p[j]; for (k = j; k < n1; k++) { p[k] = p[k + 1]; perm[k] = perm[k + 1]; } } return ans; } // Adapted from segment of `do_sample` // Index version inline Vector EmpiricalSample(int n, int size, bool replace, bool one_based) { Vector ans = no_init(size); Vector::iterator ians = ans.begin(), eans = ans.end(); int adj = one_based ? 1 : 0; if (replace || size < 2) { for ( ; ians != eans; ++ians) { *ians = static_cast(n * unif_rand() + adj); } return ans; } IntegerVector x = no_init(n); for (int i = 0; i < n; i++) { x[i] = i; } for ( ; ians != eans; ++ians) { int j = static_cast(n * unif_rand()); *ians = x[j] + adj; x[j] = x[--n]; } return ans; } // Element version template inline Vector EmpiricalSample(int size, bool replace, const Vector& ref) { int n = ref.size(); Vector ans = no_init(size); typename Vector::iterator ians = ans.begin(), eans = ans.end(); if (replace || size < 2) { for ( ; ians != eans; ++ians) { *ians = ref[static_cast(n * unif_rand())]; } return ans; } IntegerVector x = no_init(n); for (int i = 0; i < n; i++) { x[i] = i; } for ( ; ians != eans; ++ians) { int j = static_cast(n * unif_rand()); *ians = ref[x[j]]; x[j] = x[--n]; } return ans; } typedef Nullable< Vector > probs_t; } // sugar // Adapted from `do_sample` inline Vector sample(int n, int size, bool replace = false, sugar::probs_t probs = R_NilValue, bool one_based = true) { if (probs.isNotNull()) { Vector p = clone(probs.get()); if (static_cast(p.size()) != n) { stop("probs.size() != n!"); } sugar::Normalize(p, size, replace); if (replace) { int i = 0, nc = 0; for ( ; i < n; i++) { nc += (n * p[i] > 0.1); } return nc > 200 ? sugar::WalkerSample(p, n, size, one_based) : sugar::SampleReplace(p, n, size, one_based); } if (size > n) { stop("Sample size must be <= n when not using replacement!"); } return sugar::SampleNoReplace(p, n, size, one_based); } if (!replace && size > n) { stop("Sample size must be <= n when not using replacement!"); } return sugar::EmpiricalSample(n, size, replace, one_based); } template inline Vector sample(const Vector& x, int size, bool replace = false, sugar::probs_t probs = R_NilValue) { int n = x.size(); if (probs.isNotNull()) { Vector p = clone(probs.get()); if (static_cast(p.size()) != n) { stop("probs.size() != n!"); } sugar::Normalize(p, size, replace); if (replace) { int i = 0, nc = 0; for ( ; i < n; i++) { nc += (n * p[i] > 0.1); } return nc > 200 ? sugar::WalkerSample(p, size, x) : sugar::SampleReplace(p, size, x); } if (size > n) { stop("Sample size must be <= n when not using replacement!"); } return sugar::SampleNoReplace(p, size, x); } if (!replace && size > n) { stop("Sample size must be <= n when not using replacement!"); } return sugar::EmpiricalSample(size, replace, x); } } // Rcpp #endif // Rcpp__sugar__sample_h #endif // RCPPARMADILLO__EXTENSIONS__SAMPLE_H Rcpp/inst/include/Rcpp/sugar/functions/clamp.h0000644000176200001440000000507112535036334021067 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // clamp.h: Rcpp R/C++ interface class library -- clamp // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__clamp_h #define Rcpp__sugar__clamp_h namespace Rcpp{ namespace sugar{ template struct clamp_operator{ typedef typename Rcpp::traits::storage_type::type STORAGE ; clamp_operator(STORAGE lhs_, STORAGE rhs_ ) : lhs(lhs_), rhs(rhs_){} inline STORAGE operator()(STORAGE x) const { return x < lhs ? lhs : (x > rhs ? rhs : x ) ; } STORAGE lhs, rhs ; } ; // need to write this special version template <> struct clamp_operator { clamp_operator(double lhs_, double rhs_ ) : lhs(lhs_), rhs(rhs_){} inline double operator()(double x) const { if( Rcpp::traits::is_na(x) ) return x ; return x < lhs ? lhs : (x > rhs ? rhs : x ) ; } double lhs, rhs ; } ; template < int RTYPE, bool NA, typename T > class Clamp_Primitive_Vector_Primitive : public VectorBase< RTYPE , NA , Clamp_Primitive_Vector_Primitive > { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef clamp_operator OPERATOR ; Clamp_Primitive_Vector_Primitive( STORAGE lhs_, const T& vec_, STORAGE rhs_) : vec(vec_), op(lhs_,rhs_) {} inline STORAGE operator[]( R_xlen_t i ) const { return op( vec[i] ) ; } inline R_xlen_t size() const { return vec.size() ; } private: const T& vec ; OPERATOR op ; } ; } // sugar template inline sugar::Clamp_Primitive_Vector_Primitive clamp( typename Rcpp::traits::storage_type::type lhs, const Rcpp::VectorBase& vec, typename Rcpp::traits::storage_type::type rhs ){ return sugar::Clamp_Primitive_Vector_Primitive( lhs, vec.get_ref(), rhs ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/cumprod.h0000644000176200001440000000454612615210414021442 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // cumsum.h: Rcpp R/C++ interface class library -- cumsum // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__cumprod_h #define Rcpp__sugar__cumprod_h namespace Rcpp{ namespace sugar{ template class Cumprod : public Lazy< Rcpp::Vector, Cumprod > { public: typedef typename Rcpp::VectorBase VEC_TYPE; typedef typename Rcpp::traits::storage_type::type STORAGE; typedef Rcpp::Vector VECTOR; Cumprod(const VEC_TYPE& object_) : object(object_) {} VECTOR get() const { R_xlen_t n = object.size(); VECTOR result(n, Rcpp::traits::get_na()); STORAGE current = object[0]; if (Rcpp::traits::is_na(current)) return result; result[0] = current; for (R_xlen_t i = 1; i < n; i++) { current = object[i]; if (Rcpp::traits::is_na(current)) return result; result[i] = result[i-1] * current; } return result ; } private: const VEC_TYPE& object; }; } // sugar template inline sugar::Cumprod cumprod(const VectorBase& t) { return sugar::Cumprod(t); } template inline sugar::Cumprod cumprod(const VectorBase& t) { return sugar::Cumprod(t); } template inline sugar::Cumprod cumprod(const VectorBase& t) { return sugar::Cumprod(t); } } // Rcpp #endif // Rcpp__sugar__cumprod_h Rcpp/inst/include/Rcpp/sugar/functions/mapply/0000755000176200001440000000000014740764532021131 5ustar liggesusersRcpp/inst/include/Rcpp/sugar/functions/mapply/mapply_2.h0000644000176200001440000001030212535036334023011 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // mapply_2.h: Rcpp R/C++ interface class library -- mapply_2 // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__mapply_2_h #define Rcpp__sugar__mapply_2_h namespace Rcpp{ namespace sugar{ template class Mapply_2 : public VectorBase< Rcpp::traits::r_sexptype_traits< typename ::Rcpp::traits::result_of::type >::rtype , true , Mapply_2 > { public: typedef typename ::Rcpp::traits::result_of::type result_type ; Mapply_2( const T_1& vec_1_, const T_2& vec_2_, Function fun_ ) : vec_1(vec_1_), vec_2(vec_2_), fun(fun_){} inline result_type operator[]( R_xlen_t i ) const { return fun( vec_1[i], vec_2[i] ); } inline R_xlen_t size() const { return vec_1.size() ; } private: const T_1& vec_1 ; const T_2& vec_2 ; Function fun ; } ; template class Mapply_2_Vector_Primitive : public VectorBase< Rcpp::traits::r_sexptype_traits< typename ::Rcpp::traits::result_of::type >::rtype , true , Mapply_2_Vector_Primitive > { public: typedef typename ::Rcpp::traits::result_of::type result_type ; Mapply_2_Vector_Primitive( const T_1& vec_1_, PRIM_2 prim_2_, Function fun_ ) : vec_1(vec_1_), prim_2(prim_2_), fun(fun_){} inline result_type operator[]( R_xlen_t i ) const { return fun( vec_1[i], prim_2 ); } inline R_xlen_t size() const { return vec_1.size() ; } private: const T_1& vec_1 ; PRIM_2 prim_2 ; Function fun ; } ; template class Mapply_2_Primitive_Vector : public VectorBase< Rcpp::traits::r_sexptype_traits< typename ::Rcpp::traits::result_of::type >::rtype , true , Mapply_2_Primitive_Vector > { public: typedef typename ::Rcpp::traits::result_of::type result_type ; Mapply_2_Primitive_Vector( PRIM_1 prim_1_, const T_2& vec_2_, Function fun_ ) : prim_1(prim_1_), vec_2(vec_2_), fun(fun_){} inline result_type operator[]( R_xlen_t i ) const { return fun( prim_1, vec_2[i] ); } inline R_xlen_t size() const { return vec_2.size() ; } private: PRIM_1 prim_1 ; const T_2& vec_2 ; Function fun ; } ; } // sugar template inline sugar::Mapply_2 mapply( const Rcpp::VectorBase& t1, const Rcpp::VectorBase& t2, Function fun ){ return sugar::Mapply_2( t1.get_ref(), t2.get_ref(), fun ) ; } template inline sugar::Mapply_2_Vector_Primitive mapply( const Rcpp::VectorBase& t1, double t2, Function fun ){ return sugar::Mapply_2_Vector_Primitive( t1.get_ref(), t2, fun ) ; } template inline sugar::Mapply_2_Primitive_Vector mapply( double t1, const Rcpp::VectorBase& t2, Function fun ){ return sugar::Mapply_2_Primitive_Vector( t1, t2.get_ref(), fun ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/mapply/mapply_3.h0000644000176200001440000000540612535036334023023 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // mapply_3.h: Rcpp R/C++ interface class library -- mapply_3 // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__mapply_3_h #define Rcpp__sugar__mapply_3_h namespace Rcpp{ namespace sugar{ template < int RTYPE_1, bool NA_1, typename T_1, int RTYPE_2, bool NA_2, typename T_2, int RTYPE_3, bool NA_3, typename T_3, typename Function > class Mapply_3 : public VectorBase< Rcpp::traits::r_sexptype_traits< typename ::Rcpp::traits::result_of::type >::rtype , true , Mapply_3 > { public: typedef typename ::Rcpp::traits::result_of::type result_type ; typedef Rcpp::VectorBase VEC_1 ; typedef Rcpp::VectorBase VEC_2 ; typedef Rcpp::VectorBase VEC_3 ; typedef typename Rcpp::traits::Extractor::type EXT_1 ; typedef typename Rcpp::traits::Extractor::type EXT_2 ; typedef typename Rcpp::traits::Extractor::type EXT_3 ; Mapply_3( const VEC_1& vec_1_, const VEC_2& vec_2_, const VEC_3& vec_3_, Function fun_ ) : vec_1(vec_1_.get_ref()), vec_2(vec_2_.get_ref()), vec_3(vec_3_.get_ref()), fun(fun_){} inline result_type operator[]( R_xlen_t i ) const { return fun( vec_1[i], vec_2[i], vec_3[i] ); } inline R_xlen_t size() const { return vec_1.size() ; } private: const EXT_1& vec_1 ; const EXT_2& vec_2 ; const EXT_3& vec_3 ; Function fun ; } ; } // sugar template < int RTYPE_1, bool NA_1, typename T_1, int RTYPE_2, bool NA_2, typename T_2, int RTYPE_3, bool NA_3, typename T_3, typename Function > inline sugar::Mapply_3 mapply( const Rcpp::VectorBase& t1, const Rcpp::VectorBase& t2, const Rcpp::VectorBase& t3, Function fun ){ return sugar::Mapply_3( t1, t2, t3, fun ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/cummin.h0000644000176200001440000000432112615210414021250 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // cumsum.h: Rcpp R/C++ interface class library -- cumsum // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__cummin_h #define Rcpp__sugar__cummin_h namespace Rcpp{ namespace sugar{ template class Cummin : public Lazy< Rcpp::Vector, Cummin > { public: typedef typename Rcpp::VectorBase VEC_TYPE; typedef typename Rcpp::traits::storage_type::type STORAGE; typedef Rcpp::Vector VECTOR; Cummin(const VEC_TYPE& object_) : object(object_) {} VECTOR get() const { R_xlen_t n = object.size(); VECTOR result(n, Rcpp::traits::get_na()); STORAGE current = object[0]; if (Rcpp::traits::is_na(current)) return result; result[0] = current; for (R_xlen_t i = 1; i < n; i++) { current = object[i]; if (Rcpp::traits::is_na(current)) return result; result[i] = result[i-1] < current ? result[i-1] : current; } return result ; } private: const VEC_TYPE& object; }; } // sugar template inline sugar::Cummin cummin(const VectorBase& t) { return sugar::Cummin(t); } template inline sugar::Cummin cummin(const VectorBase& t) { return sugar::Cummin(t); } } // Rcpp #endif // Rcpp__sugar__cummin_h Rcpp/inst/include/Rcpp/sugar/functions/mean.h0000644000176200001440000001110214357035450020705 0ustar liggesusers// mean.h: Rcpp R/C++ interface class library -- mean // // Copyright (C) 2011 - 2023 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__mean_h #define Rcpp__sugar__mean_h namespace Rcpp{ namespace sugar{ template class Mean : public Lazy > { public: typedef typename Rcpp::VectorBase VEC_TYPE; typedef Rcpp::Vector VECTOR; Mean(const VEC_TYPE& object_) : object(object_) {} double get() const { VECTOR input = object; R_xlen_t n = input.size(); // double pass (as in summary.c) long double s = std::accumulate(input.begin(), input.end(), 0.0L); s /= n; if (R_FINITE((double)s)) { long double t = 0.0; for (R_xlen_t i = 0; i < n; i++) { t += input[i] - s; } s += t/n; } return (double)s ; } private: const VEC_TYPE& object ; }; template class Mean : public Lazy > { public: typedef typename Rcpp::VectorBase VEC_TYPE; Mean(const VEC_TYPE& object_) : object(object_) {} Rcomplex get() const { ComplexVector input = object; R_xlen_t n = input.size(); // double pass (as in summary.c) long double s = 0.0, si = 0.0; for (R_xlen_t i=0; i(s); z.i = static_cast(si); return z; } private: const VEC_TYPE& object ; }; template class Mean : public Lazy > { public: typedef typename Rcpp::VectorBase VEC_TYPE; Mean(const VEC_TYPE& object_) : object(object_) {} double get() const { LogicalVector input = object; R_xlen_t n = input.size(); long double s = 0.0; for (R_xlen_t i=0; i class Mean : public Lazy > { public: typedef typename Rcpp::VectorBase VEC_TYPE; Mean(const VEC_TYPE& object_) : object(object_) {} double get() const { IntegerVector input = object; R_xlen_t n = input.size(); // double pass (as in summary.c) long double s = std::accumulate(input.begin(), input.end(), 0.0L); s /= n; long double t = 0.0; for (R_xlen_t i = 0; i < n; i++) { if (input[i] == NA_INTEGER) return NA_REAL; t += input[i] - s; } s += t/n; return (double)s ; } private: const VEC_TYPE& object ; }; } // sugar template inline sugar::Mean mean(const VectorBase& t) { return sugar::Mean(t); } template inline sugar::Mean mean(const VectorBase& t) { return sugar::Mean(t); } template inline sugar::Mean mean(const VectorBase& t) { return sugar::Mean(t); } template inline sugar::Mean mean(const VectorBase& t) { return sugar::Mean(t); } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/cbind.h0000644000176200001440000023237513432127317021062 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // cbind.h: Rcpp R/C++ interface class library -- cbind // // Copyright (C) 2016 Nathan Russell // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__cbind_h #define Rcpp__sugar__cbind_h namespace Rcpp { namespace sugar { namespace cbind_impl { // override r_sexptype_traits for STRSXP template struct cbind_sexptype_traits : public Rcpp::traits::r_sexptype_traits {}; template <> struct cbind_sexptype_traits { enum { rtype = STRSXP }; }; // override storage_type (int) template struct cbind_storage_type : public Rcpp::traits::storage_type {}; template <> struct cbind_storage_type { typedef bool type; }; // CRTP base template class BindableExpression { public: typedef typename cbind_storage_type::type stored_type; inline stored_type operator[](R_xlen_t i) const { return static_cast(*this)[i]; } inline stored_type operator()(R_xlen_t i, R_xlen_t j) const { return static_cast(*this)(i, j); } inline R_xlen_t size() const { return static_cast(*this).size(); } inline R_xlen_t nrow() const { return static_cast(*this).nrow(); } inline R_xlen_t ncol() const { return static_cast(*this).ncol(); } operator E&() { return static_cast(*this); } operator const E&() const { return static_cast(*this); } }; // Matrix, Vector interface to BindableExpression template class ContainerBindable : public BindableExpression > { public: typedef typename cbind_storage_type::type stored_type; private: T vec; R_xlen_t len, nr, nc; public: ContainerBindable(const Rcpp::Matrix& vec_) : vec(vec_), len(vec.ncol() * vec.nrow()), nr(vec.nrow()), nc(vec.ncol()) {} ContainerBindable(const Rcpp::Vector& vec_) : vec(vec_), len(vec.size()), nr(vec.size()), nc(1) {} template ContainerBindable(const BindableExpression& e) : vec(e.size()), len(e.size()), nr(e.nrow()), nc(e.ncol()) { for (R_xlen_t i = 0; i < len; i++) { vec[i] = e[i]; } } inline R_xlen_t size() const { return len; } inline R_xlen_t nrow() const { return nr; } inline R_xlen_t ncol() const { return nc; } inline stored_type operator[](R_xlen_t i) const { return vec[i]; } inline stored_type operator()(R_xlen_t i, R_xlen_t j) const { return vec[i + nr * j]; } }; template struct scalar { typedef typename cbind_storage_type::type type; }; // scalar interface to BindableExpression template class ScalarBindable : public BindableExpression< cbind_sexptype_traits::rtype, ScalarBindable > { public: typedef T stored_type; enum { RTYPE = cbind_sexptype_traits::rtype }; private: T t; public: ScalarBindable(const T& t_) : t(t_) {} inline R_xlen_t size() const { return 1; } inline R_xlen_t nrow() const { return 1; } inline R_xlen_t ncol() const { return 1; } inline stored_type operator[](R_xlen_t i) const { return t; } inline stored_type operator()(R_xlen_t i, R_xlen_t j) const { return t; } }; // binding logic; non-scalar operands template class JoinOp : public BindableExpression >, public Rcpp::MatrixBase > { public: typedef typename cbind_storage_type::type stored_type; private: const E1& e1; const E2& e2; public: JoinOp(const BindableExpression& e1_, const BindableExpression& e2_) : e1(e1_), e2(e2_) { if (e1.nrow() != e2.nrow()) { std::string msg = "Error in cbind: " "Matrix and Vector operands " "must have equal " "number of rows (length)."; Rcpp::stop(msg); } } inline R_xlen_t size() const { return e1.size() + e2.size(); } inline R_xlen_t nrow() const { return e1.nrow(); } inline R_xlen_t ncol() const { return e1.ncol() + e2.ncol(); } inline stored_type operator[](R_xlen_t i) const { return (i < e1.size()) ? e1[i] : e2[i - e1.size()]; } inline stored_type operator()(R_xlen_t i, R_xlen_t j) const { R_xlen_t index = i + nrow() * j; return (*this)[index]; } }; // binding logic; rhs scalar template class JoinOp::type> > : public BindableExpression::type> > >, public Rcpp::MatrixBase::type> > > { public: typedef typename cbind_storage_type::type stored_type; typedef ScalarBindable::type> E2; private: const E1& e1; const E2& e2; public: JoinOp(const BindableExpression& e1_, const BindableExpression& e2_) : e1(e1_), e2(e2_) {} inline R_xlen_t size() const { return e1.size() + e1.nrow(); } inline R_xlen_t nrow() const { return e1.nrow(); } inline R_xlen_t ncol() const { return e1.ncol() + 1; } inline stored_type operator[](R_xlen_t i) const { return (i < e1.size()) ? e1[i] : e2[i]; } inline stored_type operator()(R_xlen_t i, R_xlen_t j) const { R_xlen_t index = i + nrow() * j; return (*this)[index]; } }; // binding logic; lhs scalar template class JoinOp::type>, E2> : public BindableExpression::type>, E2> >, public Rcpp::MatrixBase::type>, E2> > { public: typedef typename cbind_storage_type::type stored_type; typedef ScalarBindable::type> E1; private: const E1& e1; const E2& e2; public: JoinOp(const BindableExpression& e1_, const BindableExpression& e2_) : e1(e1_), e2(e2_) {} inline R_xlen_t size() const { return e2.size() + e2.nrow(); } inline R_xlen_t nrow() const { return e2.nrow(); } inline R_xlen_t ncol() const { return e2.ncol() + 1; } inline stored_type operator[](R_xlen_t i) const { return (i < e2.nrow()) ? e1[i] : e2[i - e2.nrow()]; } inline stored_type operator()(R_xlen_t i, R_xlen_t j) const { R_xlen_t index = i + nrow() * j; return (*this)[index]; } }; // binding logic; both scalar template class JoinOp::type>, ScalarBindable::type> > : public BindableExpression::type>, ScalarBindable::type> > >, public Rcpp::MatrixBase::type>, ScalarBindable::type> > > { public: typedef typename cbind_storage_type::type stored_type; typedef ScalarBindable::type> E1; typedef ScalarBindable::type> E2; private: const E1& e1; const E2& e2; public: JoinOp(const BindableExpression& e1_, const BindableExpression& e2_) : e1(e1_), e2(e2_) {} inline R_xlen_t size() const { return e2.size() + e2.nrow(); } inline R_xlen_t nrow() const { return e2.nrow(); } inline R_xlen_t ncol() const { return e2.ncol() + 1; } inline stored_type operator[](R_xlen_t i) const { return (i < e2.nrow()) ? e1[i] : e2[i]; } inline stored_type operator()(R_xlen_t i, R_xlen_t j) const { R_xlen_t index = i + nrow() * j; return (*this)[index]; } }; // for template argument deduction template inline ContainerBindable > MakeContainerBindable(const Rcpp::Matrix& x) { return ContainerBindable >(x); } template inline ContainerBindable > MakeContainerBindable(const Rcpp::Vector& x) { return ContainerBindable >(x); } template <> inline ContainerBindable > MakeContainerBindable(const Rcpp::Matrix& x) { return ContainerBindable >(x); } template <> inline ContainerBindable > MakeContainerBindable(const Rcpp::Vector& x) { return ContainerBindable >(x); } template inline ScalarBindable MakeScalarBindable(const T& t) { return ScalarBindable(t); } // for expressions of arbitrary length template inline JoinOp operator,( const BindableExpression& e1, const BindableExpression& e2) { return JoinOp(e1, e2); } // helpers namespace detail { // distinguish Matrix/Vector from scalar template class has_stored_type { private: typedef char yes; typedef struct { char array[2]; } no; template static yes test(typename C::stored_type*); template static no test(...); public: static const bool value = sizeof(test(0)) == sizeof(yes); }; // functor to dispatch appropriate Make*Bindable() call template ::value> struct MakeBindableCall {}; template struct MakeBindableCall { typedef typename cbind_storage_type< cbind_sexptype_traits::rtype >::type stored_type; enum { RTYPE = cbind_sexptype_traits::rtype }; ContainerBindable operator()(const T& t) const { return MakeContainerBindable(t); } }; // specialize for LGLSXP template <> struct MakeBindableCall, true> { typedef Rcpp::Matrix T; typedef bool stored_type; enum { RTYPE = cbind_sexptype_traits::rtype }; ContainerBindable operator()(const T& t) const { return MakeContainerBindable(t); } }; template <> struct MakeBindableCall, true> { typedef Rcpp::Vector T; typedef bool stored_type; enum { RTYPE = cbind_sexptype_traits::rtype }; ContainerBindable operator()(const T& t) const { return MakeContainerBindable(t); } }; template struct MakeBindableCall { enum { RTYPE = cbind_sexptype_traits::rtype }; ScalarBindable operator()(const T& t) const { return MakeScalarBindable(t); } }; template inline typename Rcpp::traits::enable_if< has_stored_type::value, MakeBindableCall >::type MakeBindable(const T& t) { return MakeBindableCall(); } template inline typename Rcpp::traits::enable_if< !has_stored_type::value, MakeBindableCall >::type MakeBindable(const T& t) { return MakeBindableCall(); } // determine cbind return type from first template // parameter, agnostic of Matrix/Vector/scalar template ::value> struct matrix_return {}; template struct matrix_return { typedef typename cbind_storage_type< cbind_sexptype_traits::rtype >::type stored_type; enum { RTYPE = cbind_sexptype_traits::rtype }; typedef Rcpp::Matrix type; }; // specialize for LGLSXP // normally would default to IntegerMatrix template <> struct matrix_return, true> { typedef Rcpp::Matrix type; }; template <> struct matrix_return, true> { typedef Rcpp::Matrix type; }; template <> struct matrix_return { typedef Rcpp::Matrix type; }; template struct matrix_return { enum { RTYPE = cbind_sexptype_traits::rtype }; typedef Rcpp::Matrix type; }; } // detail template ::value> struct matrix_return : public detail::matrix_return {}; template struct matrix_return : public detail::matrix_return {}; } // cbind_impl #define MakeBindable(x) (cbind_impl::detail::MakeBindable(x)(x)) // begin cbind overloads template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2) { return (MakeBindable(t1), MakeBindable(t2)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4)); } // 5 template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9)); } // 10 template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14)); } // 15 template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19)); } // 20 template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24)); } // 25 template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29)); } // 30 template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34)); } // 35 template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39)); } // 40 template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40), MakeBindable(t41)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40), MakeBindable(t41), MakeBindable(t42)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40), MakeBindable(t41), MakeBindable(t42), MakeBindable(t43)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43, const T44& t44) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40), MakeBindable(t41), MakeBindable(t42), MakeBindable(t43), MakeBindable(t44)); } // 45 template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43, const T44& t44, const T45& t45) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40), MakeBindable(t41), MakeBindable(t42), MakeBindable(t43), MakeBindable(t44), MakeBindable(t45)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43, const T44& t44, const T45& t45, const T46& t46) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40), MakeBindable(t41), MakeBindable(t42), MakeBindable(t43), MakeBindable(t44), MakeBindable(t45), MakeBindable(t46)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43, const T44& t44, const T45& t45, const T46& t46, const T47& t47) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40), MakeBindable(t41), MakeBindable(t42), MakeBindable(t43), MakeBindable(t44), MakeBindable(t45), MakeBindable(t46), MakeBindable(t47)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43, const T44& t44, const T45& t45, const T46& t46, const T47& t47, const T48& t48) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40), MakeBindable(t41), MakeBindable(t42), MakeBindable(t43), MakeBindable(t44), MakeBindable(t45), MakeBindable(t46), MakeBindable(t47), MakeBindable(t48)); } template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43, const T44& t44, const T45& t45, const T46& t46, const T47& t47, const T48& t48, const T49& t49) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40), MakeBindable(t41), MakeBindable(t42), MakeBindable(t43), MakeBindable(t44), MakeBindable(t45), MakeBindable(t46), MakeBindable(t47), MakeBindable(t48), MakeBindable(t49)); } // 50 template inline typename cbind_impl::matrix_return::type cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43, const T44& t44, const T45& t45, const T46& t46, const T47& t47, const T48& t48, const T49& t49, const T50& t50) { return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7), MakeBindable(t8), MakeBindable(t9), MakeBindable(t10), MakeBindable(t11), MakeBindable(t12), MakeBindable(t13), MakeBindable(t14), MakeBindable(t15), MakeBindable(t16), MakeBindable(t17), MakeBindable(t18), MakeBindable(t19), MakeBindable(t20), MakeBindable(t21), MakeBindable(t22), MakeBindable(t23), MakeBindable(t24), MakeBindable(t25), MakeBindable(t26), MakeBindable(t27), MakeBindable(t28), MakeBindable(t29), MakeBindable(t30), MakeBindable(t31), MakeBindable(t32), MakeBindable(t33), MakeBindable(t34), MakeBindable(t35), MakeBindable(t36), MakeBindable(t37), MakeBindable(t38), MakeBindable(t39), MakeBindable(t40), MakeBindable(t41), MakeBindable(t42), MakeBindable(t43), MakeBindable(t44), MakeBindable(t45), MakeBindable(t46), MakeBindable(t47), MakeBindable(t48), MakeBindable(t49), MakeBindable(t50)); } // end cbind overloads #undef MakeBindable } // sugar namespace { using sugar::cbind; } } // Rcpp #endif // Rcpp__sugar__cbind_h Rcpp/inst/include/Rcpp/sugar/functions/is_nan.h0000644000176200001440000000302012535036334021232 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // is_nan.h: Rcpp R/C++ interface class library -- is_nan // // Copyright (C) 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__is_nan_h #define Rcpp__sugar__is_nan_h namespace Rcpp{ namespace sugar{ template class IsNaN : public ::Rcpp::VectorBase< LGLSXP, false, IsNaN > { public: IsNaN( const VEC_TYPE& obj_) : obj(obj_){} inline int operator[]( R_xlen_t i ) const { return ::Rcpp::traits::is_nan( obj[i] ) ; } inline R_xlen_t size() const { return obj.size() ; } private: const VEC_TYPE& obj ; } ; } // sugar template inline sugar::IsNaN is_nan( const Rcpp::VectorBase& t){ return sugar::IsNaN( t.get_ref() ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/ifelse.h0000644000176200001440000002622112535036334021242 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // ifelse.h: Rcpp R/C++ interface class library -- ifelse // // Copyright (C) 2010 - 2014 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__ifelse_h #define Rcpp__sugar__ifelse_h namespace Rcpp{ namespace sugar{ template < int RTYPE, bool COND_NA, typename COND_T, bool LHS_NA , typename LHS_T, bool RHS_NA , typename RHS_T > class IfElse : public VectorBase< RTYPE, ( COND_NA || LHS_NA || RHS_NA ) , IfElse > { public: typedef Rcpp::VectorBase COND_TYPE ; typedef Rcpp::VectorBase LHS_TYPE ; typedef Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; // typedef typename Rcpp::traits::Extractor::type LHS_EXT ; // typedef typename Rcpp::traits::Extractor::type RHS_EXT ; IfElse( const COND_TYPE& cond_, const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : cond(cond_), lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) { /* FIXME : cond, lhs and rhs must all have the same size */ RCPP_DEBUG( DEMANGLE(IfElse) ) ; } inline STORAGE operator[]( R_xlen_t i ) const { int x = cond[i] ; if( Rcpp::traits::is_na(x) ) return Rcpp::traits::get_na() ; if( x ) return lhs[i] ; return rhs[i] ; } inline R_xlen_t size() const { return cond.size() ; } private: const COND_TYPE& cond ; const LHS_T& lhs ; const RHS_T& rhs ; } ; template < int RTYPE, typename COND_T, bool LHS_NA , typename LHS_T, bool RHS_NA , typename RHS_T > class IfElse : public VectorBase< RTYPE, ( LHS_NA || RHS_NA ) , IfElse > { public: typedef Rcpp::VectorBase COND_TYPE ; typedef Rcpp::VectorBase LHS_TYPE ; typedef Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; IfElse( const COND_TYPE& cond_, const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : cond(cond_), lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) { /* FIXME : cond, lhs and rhs must all have the same size */ } inline STORAGE operator[]( R_xlen_t i ) const { if( cond[i] ) return lhs[i] ; return rhs[i] ; } inline R_xlen_t size() const { return cond.size() ; } private: const COND_TYPE& cond ; const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; /* ifelse( cond, primitive, Vector ) */ template < int RTYPE, bool COND_NA, typename COND_T, bool RHS_NA , typename RHS_T > class IfElse_Primitive_Vector : public VectorBase< RTYPE, true , IfElse_Primitive_Vector > { public: typedef Rcpp::VectorBase COND_TYPE ; typedef Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; IfElse_Primitive_Vector( const COND_TYPE& cond_, STORAGE lhs_, const RHS_TYPE& rhs_ ) : cond(cond_), lhs(lhs_), rhs(rhs_.get_ref()) { /* FIXME : cond, lhs and rhs must all have the sale size */ } inline STORAGE operator[]( R_xlen_t i ) const { int x = cond[i] ; if( Rcpp::traits::is_na(x) ) return x ; if( x ) return lhs ; return rhs[i] ; } inline R_xlen_t size() const { return cond.size() ; } private: const COND_TYPE& cond ; STORAGE lhs ; const RHS_EXT& rhs ; } ; template < int RTYPE, typename COND_T, bool RHS_NA , typename RHS_T > class IfElse_Primitive_Vector : public VectorBase< RTYPE, true, IfElse_Primitive_Vector > { public: typedef Rcpp::VectorBase COND_TYPE ; typedef Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; IfElse_Primitive_Vector( const COND_TYPE& cond_, STORAGE lhs_, const RHS_TYPE& rhs_ ) : cond(cond_), lhs(lhs_), rhs(rhs_.get_ref()) { /* FIXME : cond, lhs and rhs must all have the same size */ } inline STORAGE operator[]( R_xlen_t i ) const { if( cond[i] ) return lhs ; return rhs[i] ; } inline R_xlen_t size() const { return cond.size() ; } private: const COND_TYPE& cond ; STORAGE lhs ; const RHS_EXT& rhs ; } ; /* ifelse( cond, Vector, primitive ) */ template < int RTYPE, bool COND_NA, typename COND_T, bool LHS_NA , typename LHS_T > class IfElse_Vector_Primitive : public VectorBase< RTYPE, true , IfElse_Vector_Primitive > { public: typedef Rcpp::VectorBase COND_TYPE ; typedef Rcpp::VectorBase LHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; IfElse_Vector_Primitive( const COND_TYPE& cond_, const LHS_TYPE& lhs_, STORAGE rhs_ ) : cond(cond_), lhs(lhs_.get_ref()), rhs(rhs_) { /* FIXME : cond, lhs and rhs must all have the same size */ } inline STORAGE operator[]( R_xlen_t i ) const { int x = cond[i] ; if( Rcpp::traits::is_na(x) ) return Rcpp::traits::get_na() ; if( x ) return lhs[i] ; return rhs ; } inline R_xlen_t size() const { return cond.size() ; } private: const COND_TYPE& cond ; const LHS_EXT& lhs ; const STORAGE rhs ; } ; template < int RTYPE, typename COND_T, bool LHS_NA , typename LHS_T > class IfElse_Vector_Primitive : public VectorBase< RTYPE, true , IfElse_Vector_Primitive > { public: typedef Rcpp::VectorBase COND_TYPE ; typedef Rcpp::VectorBase LHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; IfElse_Vector_Primitive( const COND_TYPE& cond_, const LHS_TYPE& lhs_, STORAGE rhs_ ) : cond(cond_), lhs(lhs_.get_ref()), rhs(rhs_) { /* FIXME : cond, lhs and rhs must all have the sale size */ } inline STORAGE operator[]( R_xlen_t i ) const { if( cond[i] ) return lhs[i] ; return rhs ; } inline R_xlen_t size() const { return cond.size() ; } private: const COND_TYPE& cond ; const LHS_EXT& lhs ; const STORAGE rhs ; } ; /* ifelse( cond, primitive, primitive ) */ template < int RTYPE, bool COND_NA, typename COND_T > class IfElse_Primitive_Primitive : public VectorBase< RTYPE, true , IfElse_Primitive_Primitive > { public: typedef Rcpp::VectorBase COND_TYPE ; typedef typename traits::storage_type::type STORAGE ; IfElse_Primitive_Primitive( const COND_TYPE& cond_, STORAGE lhs_, STORAGE rhs_ ) : cond(cond_), lhs(lhs_), rhs(rhs_) { /* FIXME : cond, lhs and rhs must all have the same size */ } inline STORAGE operator[]( R_xlen_t i ) const { int x = cond[i] ; if( Rcpp::traits::is_na(x) ) return Rcpp::traits::get_na() ; return x ? lhs : rhs ; } inline R_xlen_t size() const { return cond.size() ; } private: const COND_TYPE& cond ; STORAGE lhs ; STORAGE rhs ; STORAGE na ; } ; template < int RTYPE, typename COND_T > class IfElse_Primitive_Primitive : public VectorBase< RTYPE, true , IfElse_Primitive_Primitive > { public: typedef Rcpp::VectorBase COND_TYPE ; typedef typename traits::storage_type::type STORAGE ; IfElse_Primitive_Primitive( const COND_TYPE& cond_, STORAGE lhs_, STORAGE rhs_ ) : cond(cond_), lhs(lhs_), rhs(rhs_) { /* FIXME : cond, lhs and rhs must all have the same size */ } inline STORAGE operator[]( R_xlen_t i ) const { return cond[i] ? lhs : rhs ; } inline R_xlen_t size() const { return cond.size() ; } private: const COND_TYPE& cond ; STORAGE lhs ; STORAGE rhs ; } ; } // sugar template < int RTYPE, bool COND_NA, typename COND_T, bool LHS_NA , typename LHS_T, bool RHS_NA , typename RHS_T > inline sugar::IfElse< RTYPE,COND_NA,COND_T,LHS_NA,LHS_T,RHS_NA,RHS_T > ifelse( const Rcpp::VectorBase& cond, const Rcpp::VectorBase& lhs, const Rcpp::VectorBase& rhs ){ return sugar::IfElse( cond, lhs, rhs ) ; } template < int RTYPE, bool COND_NA, typename COND_T, bool RHS_NA , typename RHS_T > inline sugar::IfElse_Primitive_Vector< RTYPE,COND_NA,COND_T,RHS_NA,RHS_T > ifelse( const Rcpp::VectorBase& cond, typename traits::storage_type::type lhs, const Rcpp::VectorBase& rhs ){ return sugar::IfElse_Primitive_Vector( cond, lhs, rhs ) ; } template < int RTYPE, bool COND_NA, typename COND_T, bool RHS_NA , typename RHS_T > inline sugar::IfElse_Vector_Primitive< RTYPE,COND_NA,COND_T,RHS_NA,RHS_T > ifelse( const Rcpp::VectorBase& cond, const Rcpp::VectorBase& lhs, typename traits::storage_type::type rhs ){ return sugar::IfElse_Vector_Primitive( cond, lhs, rhs ) ; } template< bool COND_NA, typename COND_T > inline sugar::IfElse_Primitive_Primitive< REALSXP,COND_NA,COND_T > ifelse( const Rcpp::VectorBase& cond, double lhs, double rhs ){ return sugar::IfElse_Primitive_Primitive( cond, lhs, rhs ) ; } template< bool COND_NA, typename COND_T > inline sugar::IfElse_Primitive_Primitive< INTSXP,COND_NA,COND_T > ifelse( const Rcpp::VectorBase& cond, int lhs, int rhs ){ return sugar::IfElse_Primitive_Primitive( cond, lhs, rhs ) ; } template< bool COND_NA, typename COND_T > inline sugar::IfElse_Primitive_Primitive< CPLXSXP,COND_NA,COND_T > ifelse( const Rcpp::VectorBase& cond, Rcomplex lhs, Rcomplex rhs ){ return sugar::IfElse_Primitive_Primitive( cond, lhs, rhs ) ; } template< bool COND_NA, typename COND_T > inline sugar::IfElse_Primitive_Primitive< LGLSXP,COND_NA,COND_T > ifelse( const Rcpp::VectorBase& cond, bool lhs, bool rhs ){ return sugar::IfElse_Primitive_Primitive( cond, lhs, rhs ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/min.h0000644000176200001440000000461613324633757020573 0ustar liggesusers // Min.h: Rcpp R/C++ interface class library -- min // // Copyright (C) 2012 - 2018 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__min_h #define Rcpp__sugar__min_h namespace Rcpp{ namespace sugar{ template class Min { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; Min( const T& obj_) : obj(obj_) {} operator STORAGE() const { R_xlen_t n = obj.size(); if (n == 0) return(static_cast(R_PosInf)); STORAGE min, current ; min = obj[0] ; if( Rcpp::traits::is_na( min ) ) return min ; for( R_xlen_t i=1; i( current ) ) return current; if( current < min ) min = current ; } return min ; } const T& obj ; } ; // version for NA = false template class Min { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; Min( const T& obj_) : obj(obj_) {} operator STORAGE() const { R_xlen_t n = obj.size(); if (n == 0) return(static_cast(R_PosInf)); STORAGE min, current ; min = obj[0] ; for( R_xlen_t i=1; i sugar::Min min( const VectorBase& x){ return sugar::Min(x.get_ref()) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/head.h0000644000176200001440000000323412535036334020673 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // head.h: Rcpp R/C++ interface class library -- head // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__head_h #define Rcpp__sugar__head_h namespace Rcpp{ namespace sugar{ template class Head : public Rcpp::VectorBase< RTYPE ,NA, Head > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Head( const VEC_TYPE& object_, R_xlen_t n_ ) : object(object_), n(n_) { if( n < 0 ){ n = object.size() + n ; } } inline STORAGE operator[]( R_xlen_t i ) const { return object[ i ] ; } inline R_xlen_t size() const { return n; } private: const VEC_TYPE& object ; int n ; } ; } // sugar template inline sugar::Head head( const VectorBase& t, R_xlen_t n ){ return sugar::Head( t, n ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/sum.h0000644000176200001440000000636212535036334020603 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // sum.h: Rcpp R/C++ interface class library -- sum // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__sum_h #define Rcpp__sugar__sum_h namespace Rcpp{ namespace sugar{ template class Sum : public Lazy< typename Rcpp::traits::storage_type::type , Sum > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, NA, T>::type VEC_EXT ; Sum( const VEC_TYPE& object_ ) : object(object_.get_ref()){} STORAGE get() const { STORAGE result = 0 ; R_xlen_t n = object.size() ; STORAGE current ; for( R_xlen_t i=0; i(current) ) return Rcpp::traits::get_na() ; result += current ; } return result ; } private: const VEC_EXT& object ; } ; // RTYPE = REALSXP template class Sum : public Lazy< double , Sum > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor< REALSXP, NA, T>::type VEC_EXT ; Sum( const VEC_TYPE& object_ ) : object(object_.get_ref()){} double get() const { double result = 0 ; R_xlen_t n = object.size() ; for( R_xlen_t i=0; i class Sum : public Lazy< typename Rcpp::traits::storage_type::type , Sum > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, false, T>::type VEC_EXT ; Sum( const VEC_TYPE& object_ ) : object(object_.get_ref()){} STORAGE get() const { STORAGE result = 0 ; R_xlen_t n = object.size() ; for( R_xlen_t i=0; i inline sugar::Sum sum( const VectorBase& t){ return sugar::Sum( t ) ; } template inline sugar::Sum sum( const VectorBase& t){ return sugar::Sum( t ) ; } template inline sugar::Sum sum( const VectorBase& t){ return sugar::Sum( t ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/sd.h0000644000176200001440000000301112336231761020371 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // mean.h: Rcpp R/C++ interface class library -- mean // // Copyright (C) 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__sd_h #define Rcpp__sugar__sd_h namespace Rcpp{ namespace sugar{ template class Sd : public Lazy< typename Rcpp::traits::storage_type::type , Sd > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Sd( const VEC_TYPE& object_ ) : object(object_){} STORAGE get() const { return ::sqrt( var(object).get() ) ; } private: const VEC_TYPE& object ; } ; } // sugar template inline sugar::Sd sd( const VectorBase& t){ return sugar::Sd( t ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/match.h0000644000176200001440000000233312316773510021066 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // match.h: Rcpp R/C++ interface class library -- match // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__match_h #define Rcpp__sugar__match_h namespace Rcpp{ template inline IntegerVector match( const VectorBase& x, const VectorBase& table_ ){ Vector table = table_ ; return sugar::IndexHash( table ).fill().lookup( x.get_ref() ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/pmax.h0000644000176200001440000001165312535036334020743 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // pmax.h: Rcpp R/C++ interface class library -- pmax // // Copyright (C) 2010 - 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__pmax_h #define Rcpp__sugar__pmax_h namespace Rcpp{ namespace sugar{ template struct pmax_op ; // specializations for double. // we use the fact that NA < x is false template <> struct pmax_op{ inline double operator()( double left, double right ) const { return ( Rcpp::traits::is_na( left ) || (left > right) ) ? left : right ; } } ; template <> struct pmax_op { inline double operator()( double left, double right ) const { return right > left ? right : left ; } } ; template <> struct pmax_op { inline double operator()( double left, double right ) const { return right > left ? right : left ; } } ; template <> struct pmax_op { inline double operator()( double left, double right ) const { return left > right ? left : right ; } } ; // specializations for INTSXP. Since NA is represented as the smallest // int, NA is always the smallest, so it is safe to return NA template struct pmax_op { inline int operator()(int left, int right) const { return left > right ? left : right ; } } ; // general case template class pmax_op_Vector_Primitive { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; pmax_op_Vector_Primitive( STORAGE right_ ) : right(right_) {} inline STORAGE operator()( STORAGE left ) const { return left > right ? left : right ; } private: STORAGE right ; } ; // only special case we need to take care of template <> class pmax_op_Vector_Primitive { public: pmax_op_Vector_Primitive( double right_ ) : right(right_) {} inline double operator()( double left ) const { return ( Rcpp::traits::is_na( left ) || (left > right) ) ? left : right ; } private: double right ; } ; template < int RTYPE, bool LHS_NA, typename LHS_T, bool RHS_NA, typename RHS_T > class Pmax_Vector_Vector : public VectorBase< RTYPE , ( LHS_NA || RHS_NA ) , Pmax_Vector_Vector > { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef pmax_op OPERATOR ; Pmax_Vector_Vector( const LHS_T& lhs_, const RHS_T& rhs_ ) : lhs(lhs_), rhs(rhs_), op() {} inline STORAGE operator[]( R_xlen_t i ) const { return op( lhs[i], rhs[i] ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_T& lhs ; const RHS_T& rhs ; OPERATOR op ; } ; template < int RTYPE, bool LHS_NA, typename LHS_T > class Pmax_Vector_Primitive : public VectorBase< RTYPE , true , Pmax_Vector_Primitive > { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef pmax_op_Vector_Primitive OPERATOR ; Pmax_Vector_Primitive( const LHS_T& lhs_, STORAGE rhs_ ) : lhs(lhs_), op(rhs_) {} inline STORAGE operator[]( R_xlen_t i ) const { return op( lhs[i] ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_T& lhs ; OPERATOR op ; } ; } // sugar template < int RTYPE, bool LHS_NA, typename LHS_T, bool RHS_NA, typename RHS_T > inline sugar::Pmax_Vector_Vector pmax( const Rcpp::VectorBase& lhs, const Rcpp::VectorBase& rhs ){ return sugar::Pmax_Vector_Vector( lhs.get_ref(), rhs.get_ref() ) ; } template < int RTYPE, bool LHS_NA, typename LHS_T > inline sugar::Pmax_Vector_Primitive pmax( const Rcpp::VectorBase& lhs, typename Rcpp::traits::storage_type::type rhs ){ return sugar::Pmax_Vector_Primitive( lhs.get_ref(), rhs ) ; } template < int RTYPE, bool RHS_NA, typename RHS_T > inline sugar::Pmax_Vector_Primitive pmax( typename Rcpp::traits::storage_type::type lhs, const Rcpp::VectorBase& rhs ){ return sugar::Pmax_Vector_Primitive( rhs.get_ref(), lhs ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/pow.h0000644000176200001440000000526612535036334020606 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // pow.h: Rcpp R/C++ interface class library -- pow // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__pow_h #define Rcpp__sugar__pow_h namespace Rcpp{ namespace sugar{ template class Pow : public Rcpp::VectorBase< REALSXP ,NA, Pow > { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; Pow( const T& object_, EXPONENT_TYPE exponent ) : object(object_), op(exponent) {} inline double operator[]( R_xlen_t i ) const { return ::pow( object[i], op ); } inline R_xlen_t size() const { return object.size() ; } private: const T& object ; EXPONENT_TYPE op ; } ; template class Pow : public Rcpp::VectorBase< REALSXP ,NA, Pow > { public: Pow( const T& object_, EXPONENT_TYPE exponent ) : object(object_), op(exponent) {} inline double operator[]( R_xlen_t i ) const { int x = object[i] ; return x == NA_INTEGER ? NA_INTEGER : ::pow( x, op ); } inline R_xlen_t size() const { return object.size() ; } private: const T& object ; EXPONENT_TYPE op ; } ; template class Pow : public Rcpp::VectorBase< REALSXP ,false, Pow > { public: Pow( const T& object_, EXPONENT_TYPE exponent ) : object(object_), op(exponent) {} inline double operator[]( R_xlen_t i ) const { return ::pow( object[i], op ); } inline R_xlen_t size() const { return object.size() ; } private: const T& object ; EXPONENT_TYPE op ; } ; } // sugar template inline sugar::Pow pow( const VectorBase& t, EXPONENT_TYPE exponent ){ return sugar::Pow( t.get_ref() , exponent ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/var.h0000644000176200001440000000565012550266611020566 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // var.h: Rcpp R/C++ interface class library -- var // // Copyright (C) 2011 Dirk Eddelbuettel and Romain Francois // Copyright (C) 2015 Wush Wu // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__var_h #define Rcpp__sugar__var_h namespace Rcpp{ namespace sugar{ template class Var : public Lazy< double , Var > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; Var( const VEC_TYPE& object_ ) : object(object_){} double get() const{ const double average = mean(object).get(); const R_xlen_t sample_size = object.size(); double sum_squared_deviations = 0.0; for (R_xlen_t i = 0; i != sample_size; ++i) sum_squared_deviations += std::pow(object[i] - average, 2.0); return sum_squared_deviations / (sample_size - 1); } private: const VEC_TYPE& object ; } ; template class Var : public Lazy< double , Var > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; Var( const VEC_TYPE& object_ ) : object(object_){} double get() const{ const Rcomplex average = mean(object).get(); const R_xlen_t sample_size = object.size(); double sum_squared_deviations_magnitudes = 0.0; for (R_xlen_t i = 0; i != sample_size; ++i) { const Rcomplex deviation = object[i] - average; sum_squared_deviations_magnitudes += deviation.r * deviation.r + deviation.i * deviation.i; } return sum_squared_deviations_magnitudes / (sample_size - 1); } private: const VEC_TYPE& object ; } ; } // sugar template inline sugar::Var var( const VectorBase& t){ return sugar::Var( t ) ; } template inline sugar::Var var( const VectorBase& t){ return sugar::Var( t ) ; } template inline sugar::Var var( const VectorBase& t){ return sugar::Var( t ) ; } template inline sugar::Var var( const VectorBase& t){ return sugar::Var( t ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/mapply.h0000644000176200001440000000200112253723677021275 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // mapply.h: Rcpp R/C++ interface class library -- mapply // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__mapply_h #define Rcpp__sugar__mapply_h #include #include #endif Rcpp/inst/include/Rcpp/sugar/functions/table.h0000644000176200001440000000714412535036334021065 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // table.h: Rcpp R/C++ interface class library -- table match // // Copyright (C) 2012 - 2013 Dirk Eddelbuettel, Romain Francois, and Kevin Ushey // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__table_h #define Rcpp__sugar__table_h namespace Rcpp{ namespace sugar{ template class CountInserter { public: CountInserter( HASH& hash_ ) : hash(hash_) {} inline void operator()( STORAGE value ){ hash[value]++ ; } private: HASH& hash ; } ; template class Grabber{ public: Grabber( IntegerVector& res_, CharacterVector& names_ ) : res(res_), names(names_), index(0){} template inline void operator()( T pair){ res[index] = pair.second ; names[index++] = internal::r_coerce(pair.first) ; } private: IntegerVector& res ; CharacterVector& names ; R_xlen_t index ; } ; // we define a different Table class depending on whether we are using // std::map or not #ifdef RCPP_USING_MAP template class Table { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; Table( const TABLE_T& table ): hash() { std::for_each( table.begin(), table.end(), Inserter(hash) ) ; } inline operator IntegerVector() const { R_xlen_t n = hash.size() ; IntegerVector result = no_init(n) ; CharacterVector names = no_init(n) ; std::for_each( hash.begin(), hash.end(), Grabber(result, names) ) ; result.names() = names ; return result ; } private: typedef RCPP_UNORDERED_MAP >HASH ; typedef CountInserter Inserter ; HASH hash ; }; #else template class Table { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; Table( const TABLE_T& table ): hash(), map() { // populate the initial hash std::for_each( table.begin(), table.end(), Inserter(hash) ) ; // populate the map, sorted by keys map.insert( hash.begin(), hash.end() ) ; } inline operator IntegerVector() const { // fill the result R_xlen_t n = map.size() ; IntegerVector result = no_init(n) ; CharacterVector names = no_init(n) ; std::for_each( map.begin(), map.end(), Grabber(result, names) ) ; result.names() = names ; return result ; } private: typedef RCPP_UNORDERED_MAP HASH ; typedef CountInserter Inserter ; HASH hash ; typedef std::map > SORTED_MAP ; SORTED_MAP map ; }; #endif // USING_RCPP_MAP } // sugar template inline IntegerVector table( const VectorBase& x ){ return sugar::Table(x.get_ref()) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/rep_len.h0000644000176200001440000000332412535036334021416 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // rep_len.h: Rcpp R/C++ interface class library -- rep_len // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__rep_len_h #define Rcpp__sugar__rep_len_h namespace Rcpp{ namespace sugar{ template class Rep_len : public Rcpp::VectorBase< RTYPE ,NA, Rep_len > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Rep_len( const VEC_TYPE& object_, R_xlen_t len_ ) : object(object_), len(len_), n(object_.size()){} inline STORAGE operator[]( R_xlen_t i ) const { return object[ i % n ] ; } inline R_xlen_t size() const { return len ; } private: const VEC_TYPE& object ; R_xlen_t len, n ; } ; } // sugar template inline sugar::Rep_len rep_len( const VectorBase& t, R_xlen_t len ){ return sugar::Rep_len( t, len ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/rowSums.h0000644000176200001440000014641713103613705021457 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // rowSums.h: Rcpp R/C++ interface class library -- rowSums, colSums, rowMeans, colMeans // // Copyright (C) 2016 Nathan Russell // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__rowSums_h #define Rcpp__sugar__rowSums_h namespace Rcpp { namespace sugar { namespace detail { inline bool check_na(double x) { return ISNAN(x); } inline bool check_na(int x) { return x == NA_INTEGER; } inline bool check_na(Rboolean x) { return x == NA_LOGICAL; } inline bool check_na(SEXP x) { return x == NA_STRING; } inline bool check_na(Rcomplex x) { return ISNAN(x.r) || ISNAN(x.i); } inline void incr(double* lhs, double rhs) { *lhs += rhs; } inline void incr(int* lhs, int rhs) { *lhs += rhs; } inline void incr(Rcomplex* lhs, const Rcomplex& rhs) { lhs->r += rhs.r; lhs->i += rhs.i; } inline void div(double* lhs, R_xlen_t rhs) { *lhs /= static_cast(rhs); } inline void div(Rcomplex* lhs, R_xlen_t rhs) { lhs->r /= static_cast(rhs); lhs->i /= static_cast(rhs); } inline void set_nan(double* x) { *x = R_NaN; } inline void set_nan(Rcomplex* x) { x->r = R_NaN; x->i = R_NaN; } template struct RowSumsReturn { typedef Vector type; enum { rtype = RTYPE }; }; template <> struct RowSumsReturn { typedef Vector type; enum { rtype = INTSXP }; }; template struct ColSumsReturn : public RowSumsReturn {}; template struct RowMeansReturn { typedef Vector type; enum { rtype = REALSXP }; }; template <> struct RowMeansReturn { typedef Vector type; enum { rtype = CPLXSXP }; }; template struct ColMeansReturn : public RowMeansReturn {}; } // detail // RowSums // na.rm = FALSE // default input // default output // template class RowSumsImpl : public Lazy::type, RowSumsImpl > { private: const MatrixBase& ref; typedef detail::RowSumsReturn return_traits; typedef typename return_traits::type return_vector; typedef typename traits::storage_type::type stored_type; public: RowSumsImpl(const MatrixBase& ref_) : ref(ref_) {} return_vector get() const { R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); return_vector res(nr); for (j = 0; j < nc; j++) { for (i = 0; i < nr; i++) { detail::incr(&res[i], ref(i, j)); } } return res; } }; // RowSums // na.rm = FALSE // LGLSXP / INTSXP input // INTSXP output // // int + NA_LOGICAL (NA_INTEGER) != NA_INTEGER, as is the // case with NA_REAL, so we specialize for these two SEXPTYPES // and do explicit accounting of NAs. // // The two specializations, while necessary, are redundant, hence // the macro. The same applies to the 'na.rm = TRUE' variant, and // likewise for colSums, rowMeans, and colMeans. // #define ROW_SUMS_IMPL_KEEPNA(__RTYPE__) \ \ template \ class RowSumsImpl<__RTYPE__, NA, T, NA_RM> : \ public Lazy::type, RowSumsImpl<__RTYPE__, NA, T, NA_RM> > { \ private: \ const MatrixBase<__RTYPE__, NA, T>& ref; \ \ typedef detail::RowSumsReturn<__RTYPE__> return_traits; \ typedef typename return_traits::type return_vector; \ typedef typename traits::storage_type::type stored_type; \ \ struct bit { \ unsigned char x : 1; \ }; \ \ public: \ RowSumsImpl(const MatrixBase<__RTYPE__, NA, T>& ref_) \ : ref(ref_) \ {} \ \ return_vector get() const { \ R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); \ return_vector res(nr); \ \ std::vector na_flags(nr); \ \ for (j = 0; j < nc; j++) { \ for (i = 0; i < nr; i++) { \ if (detail::check_na(ref(i, j))) { \ na_flags[i].x |= 0x1; \ } \ detail::incr(&res[i], ref(i, j)); \ } \ } \ \ for (i = 0; i < nr; i++) { \ if (na_flags[i].x) { \ res[i] = NA_INTEGER; \ } \ } \ \ return res; \ } \ }; ROW_SUMS_IMPL_KEEPNA(LGLSXP) ROW_SUMS_IMPL_KEEPNA(INTSXP) #undef ROW_SUMS_IMPL_KEEPNA // RowSums // na.rm = TRUE // default input // default output // template class RowSumsImpl : public Lazy::type, RowSumsImpl > { private: const MatrixBase& ref; typedef detail::RowSumsReturn return_traits; typedef typename return_traits::type return_vector; typedef typename traits::storage_type::type stored_type; public: RowSumsImpl(const MatrixBase& ref_) : ref(ref_) {} return_vector get() const { R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); return_vector res(nr); stored_type current = stored_type(); for (j = 0; j < nc; j++) { for (i = 0; i < nr; i++) { current = ref(i, j); if (!detail::check_na(current)) { detail::incr(&res[i], current); } } } return res; } }; // RowSums // na.rm = TRUE // LGLSXP / INTSXP input // INTSXP output // #define ROW_SUMS_IMPL_RMNA(__RTYPE__) \ \ template \ class RowSumsImpl<__RTYPE__, NA, T, true> : \ public Lazy::type, RowSumsImpl<__RTYPE__, NA, T, true> > { \ private: \ const MatrixBase<__RTYPE__, NA, T>& ref; \ \ typedef detail::RowSumsReturn<__RTYPE__> return_traits; \ typedef typename return_traits::type return_vector; \ typedef typename traits::storage_type::type stored_type; \ \ public: \ RowSumsImpl(const MatrixBase<__RTYPE__, NA, T>& ref_) \ : ref(ref_) \ {} \ \ return_vector get() const { \ R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); \ return_vector res(nr); \ \ stored_type current = stored_type(); \ \ for (j = 0; j < nc; j++) { \ for (i = 0; i < nr; i++) { \ current = ref(i, j); \ if (!detail::check_na(current)) { \ detail::incr(&res[i], current); \ } \ } \ } \ \ return res; \ } \ }; ROW_SUMS_IMPL_RMNA(LGLSXP) ROW_SUMS_IMPL_RMNA(INTSXP) #undef ROW_SUMS_IMPL_RMNA // RowSums // Input with template parameter NA = false // RowSumsImpl<..., NA_RM = false> // template class RowSumsImpl : public RowSumsImpl {}; // ColSums // na.rm = FALSE // default input // default output // template class ColSumsImpl : public Lazy::type, ColSumsImpl > { private: const MatrixBase& ref; typedef detail::ColSumsReturn return_traits; typedef typename return_traits::type return_vector; typedef typename traits::storage_type::type stored_type; public: ColSumsImpl(const MatrixBase& ref_) : ref(ref_) {} return_vector get() const { R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); return_vector res(nc); for (j = 0; j < nc; j++) { for (i = 0; i < nr; i++) { detail::incr(&res[j], ref(i, j)); } } return res; } }; // ColSums // na.rm = FALSE // LGLSXP / INTSXP input // INTSXP output // #define COL_SUMS_IMPL_KEEPNA(__RTYPE__) \ \ template \ class ColSumsImpl<__RTYPE__, NA, T, NA_RM> : \ public Lazy::type, ColSumsImpl<__RTYPE__, NA, T, NA_RM> > { \ private: \ const MatrixBase<__RTYPE__, NA, T>& ref; \ \ typedef detail::ColSumsReturn<__RTYPE__> return_traits; \ typedef typename return_traits::type return_vector; \ typedef typename traits::storage_type::type stored_type; \ \ struct bit { \ unsigned char x : 1; \ }; \ \ public: \ ColSumsImpl(const MatrixBase<__RTYPE__, NA, T>& ref_) \ : ref(ref_) \ {} \ \ return_vector get() const { \ R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); \ return_vector res(nc); \ \ std::vector na_flags(nc); \ \ for (j = 0; j < nc; j++) { \ for (i = 0; i < nr; i++) { \ if (detail::check_na(ref(i, j))) { \ na_flags[j].x |= 0x1; \ } \ detail::incr(&res[j], ref(i, j)); \ } \ } \ \ for (j = 0; j < nc; j++) { \ if (na_flags[j].x) { \ res[j] = NA_INTEGER; \ } \ } \ \ return res; \ } \ }; COL_SUMS_IMPL_KEEPNA(LGLSXP) COL_SUMS_IMPL_KEEPNA(INTSXP) #undef COL_SUMS_IMPL_KEEPNA // ColSums // na.rm = TRUE // default input // default output // template class ColSumsImpl : public Lazy::type, ColSumsImpl > { private: const MatrixBase& ref; typedef detail::ColSumsReturn return_traits; typedef typename return_traits::type return_vector; typedef typename traits::storage_type::type stored_type; public: ColSumsImpl(const MatrixBase& ref_) : ref(ref_) {} return_vector get() const { R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); return_vector res(nc); stored_type current = stored_type(); for (j = 0; j < nc; j++) { for (i = 0; i < nr; i++) { current = ref(i, j); if (!detail::check_na(current)) { detail::incr(&res[j], current); } } } return res; } }; // ColSums // na.rm = TRUE // LGLSXP / INTSXP input // INTSXP output // #define COL_SUMS_IMPL_RMNA(__RTYPE__) \ \ template \ class ColSumsImpl<__RTYPE__, NA, T, true> : \ public Lazy::type, ColSumsImpl<__RTYPE__, NA, T, true> > { \ private: \ const MatrixBase<__RTYPE__, NA, T>& ref; \ \ typedef detail::ColSumsReturn<__RTYPE__> return_traits; \ typedef typename return_traits::type return_vector; \ typedef typename traits::storage_type::type stored_type; \ \ public: \ ColSumsImpl(const MatrixBase<__RTYPE__, NA, T>& ref_) \ : ref(ref_) \ {} \ \ return_vector get() const { \ R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); \ return_vector res(nc); \ \ stored_type current = stored_type(); \ \ for (j = 0; j < nc; j++) { \ for (i = 0; i < nr; i++) { \ current = ref(i, j); \ if (!detail::check_na(current)) { \ detail::incr(&res[j], current); \ } \ } \ } \ \ return res; \ } \ }; COL_SUMS_IMPL_RMNA(LGLSXP) COL_SUMS_IMPL_RMNA(INTSXP) #undef COL_SUMS_IMPL_RMNA // ColSums // Input with template parameter NA = false // ColSumsImpl<..., NA_RM = false> // template class ColSumsImpl : public ColSumsImpl {}; // RowMeans // na.rm = FALSE // default input // default output // // All RowMeans and ColMeans variants use a single-pass // mean calculation as in array.c // template class RowMeansImpl : public Lazy::type, RowMeansImpl > { private: const MatrixBase& ref; typedef detail::RowMeansReturn return_traits; typedef typename return_traits::type return_vector; typedef typename traits::storage_type::type stored_type; public: RowMeansImpl(const MatrixBase& ref_) : ref(ref_) {} return_vector get() const { R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); return_vector res(nr); for (j = 0; j < nc; j++) { for (i = 0; i < nr; i++) { detail::incr(&res[i], ref(i, j)); } } for (i = 0; i < nr; i++) { detail::div(&res[i], nc); } return res; } }; // RowMeans // na.rm = FALSE // LGLSXP / INTSXP input // REALSXP output // #define ROW_MEANS_IMPL_KEEPNA(__RTYPE__) \ \ template \ class RowMeansImpl<__RTYPE__, NA, T, NA_RM> : \ public Lazy::type, RowMeansImpl<__RTYPE__, NA, T, NA_RM> > { \ private: \ const MatrixBase<__RTYPE__, NA, T>& ref; \ \ typedef detail::RowMeansReturn<__RTYPE__> return_traits; \ typedef typename return_traits::type return_vector; \ typedef typename traits::storage_type::type stored_type; \ \ struct bit { \ unsigned char x : 1; \ }; \ \ public: \ RowMeansImpl(const MatrixBase<__RTYPE__, NA, T>& ref_) \ : ref(ref_) \ {} \ \ return_vector get() const { \ R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); \ return_vector res(nr); \ \ std::vector na_flags(nc); \ \ for (j = 0; j < nc; j++) { \ for (i = 0; i < nr; i++) { \ if (detail::check_na(ref(i, j))) { \ na_flags[i].x |= 0x1; \ } \ detail::incr(&res[i], ref(i, j)); \ } \ } \ \ for (i = 0; i < nr; i++) { \ if (!na_flags[i].x) { \ detail::div(&res[i], nc); \ } else { \ res[i] = NA_REAL; \ } \ } \ \ return res; \ } \ }; ROW_MEANS_IMPL_KEEPNA(LGLSXP) ROW_MEANS_IMPL_KEEPNA(INTSXP) #undef ROW_MEANS_IMPL_KEEPNA // RowMeans // na.rm = TRUE // default input // default output // template class RowMeansImpl : public Lazy::type, RowMeansImpl > { private: const MatrixBase& ref; typedef detail::RowMeansReturn return_traits; typedef typename return_traits::type return_vector; typedef typename traits::storage_type::type stored_type; public: RowMeansImpl(const MatrixBase& ref_) : ref(ref_) {} return_vector get() const { R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); return_vector res(nr); std::vector n_ok(nr, 0); stored_type current = stored_type(); for (j = 0; j < nc; j++) { for (i = 0; i < nr; i++) { current = ref(i, j); if (!detail::check_na(current)) { detail::incr(&res[i], ref(i, j)); ++n_ok[i]; } } } for (i = 0; i < nr; i++) { if (n_ok[i]) { detail::div(&res[i], n_ok[i]); } else { detail::set_nan(&res[i]); } } return res; } }; // RowMeans // na.rm = TRUE // LGLSXP / INTSXP input // REALSXP output // #define ROW_MEANS_IMPL_RMNA(__RTYPE__) \ \ template \ class RowMeansImpl<__RTYPE__, NA, T, true> : \ public Lazy::type, RowMeansImpl<__RTYPE__, NA, T, true> > { \ private: \ const MatrixBase<__RTYPE__, NA, T>& ref; \ \ typedef detail::RowMeansReturn<__RTYPE__> return_traits; \ typedef typename return_traits::type return_vector; \ typedef typename traits::storage_type::type stored_type; \ \ public: \ RowMeansImpl(const MatrixBase<__RTYPE__, NA, T>& ref_) \ : ref(ref_) \ {} \ \ return_vector get() const { \ R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); \ return_vector res(nr); \ \ std::vector n_ok(nr, 0); \ \ for (j = 0; j < nc; j++) { \ for (i = 0; i < nr; i++) { \ if (!detail::check_na(ref(i, j))) { \ detail::incr(&res[i], ref(i, j)); \ ++n_ok[i]; \ } \ } \ } \ \ for (i = 0; i < nr; i++) { \ if (n_ok[i]) { \ detail::div(&res[i], n_ok[i]); \ } else { \ detail::set_nan(&res[i]); \ } \ } \ \ return res; \ } \ }; ROW_MEANS_IMPL_RMNA(LGLSXP) ROW_MEANS_IMPL_RMNA(INTSXP) #undef ROW_MEANS_IMPL_RMNA // RowMeans // Input with template parameter NA = false // RowMeansImpl<..., NA_RM = false> // template class RowMeansImpl : public RowMeansImpl {}; // ColMeans // na.rm = FALSE // default input // default output // template class ColMeansImpl : public Lazy::type, ColMeansImpl > { private: const MatrixBase& ref; typedef detail::ColMeansReturn return_traits; typedef typename return_traits::type return_vector; typedef typename traits::storage_type::type stored_type; public: ColMeansImpl(const MatrixBase& ref_) : ref(ref_) {} return_vector get() const { R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); return_vector res(nc); for (j = 0; j < nc; j++) { for (i = 0; i < nr; i++) { detail::incr(&res[j], ref(i, j)); } } for (j = 0; j < nc; j++) { detail::div(&res[j], nr); } return res; } }; // ColMeans // na.rm = FALSE // LGLSXP / INTSXP input // REALSXP output // #define COL_MEANS_IMPL_KEEPNA(__RTYPE__) \ \ template \ class ColMeansImpl<__RTYPE__, NA, T, NA_RM> : \ public Lazy::type, ColMeansImpl<__RTYPE__, NA, T, NA_RM> > { \ private: \ const MatrixBase<__RTYPE__, NA, T>& ref; \ \ typedef detail::ColMeansReturn<__RTYPE__> return_traits; \ typedef typename return_traits::type return_vector; \ typedef typename traits::storage_type::type stored_type; \ \ struct bit { \ unsigned char x : 1; \ }; \ \ public: \ ColMeansImpl(const MatrixBase<__RTYPE__, NA, T>& ref_) \ : ref(ref_) \ {} \ \ return_vector get() const { \ R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); \ return_vector res(nc); \ \ std::vector na_flags(nc); \ \ for (j = 0; j < nc; j++) { \ for (i = 0; i < nr; i++) { \ if (detail::check_na(ref(i, j))) { \ na_flags[j].x |= 0x1; \ } \ detail::incr(&res[j], ref(i, j)); \ } \ } \ \ for (j = 0; j < nc; j++) { \ if (!na_flags[j].x) { \ detail::div(&res[j], nr); \ } else { \ res[j] = NA_REAL; \ } \ } \ \ return res; \ } \ }; COL_MEANS_IMPL_KEEPNA(LGLSXP) COL_MEANS_IMPL_KEEPNA(INTSXP) #undef COL_MEANS_IMPL_KEEPNA // ColMeans // na.rm = TRUE // default input // default output // template class ColMeansImpl : public Lazy::type, ColMeansImpl > { private: const MatrixBase& ref; typedef detail::ColMeansReturn return_traits; typedef typename return_traits::type return_vector; typedef typename traits::storage_type::type stored_type; public: ColMeansImpl(const MatrixBase& ref_) : ref(ref_) {} return_vector get() const { R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); return_vector res(nc); std::vector n_ok(nc, 0); stored_type current = stored_type(); for (j = 0; j < nc; j++) { for (i = 0; i < nr; i++) { current = ref(i, j); if (!detail::check_na(current)) { detail::incr(&res[j], ref(i, j)); ++n_ok[j]; } } } for (j = 0; j < nc; j++) { if (n_ok[j]) { detail::div(&res[j], n_ok[j]); } else { detail::set_nan(&res[j]); } } return res; } }; // ColMeans // na.rm = TRUE // LGLSXP / INTSXP input // REALSXP output // #define COL_MEANS_IMPL_RMNA(__RTYPE__) \ \ template \ class ColMeansImpl<__RTYPE__, NA, T, true> : \ public Lazy::type, ColMeansImpl<__RTYPE__, NA, T, true> > { \ private: \ const MatrixBase<__RTYPE__, NA, T>& ref; \ \ typedef detail::ColMeansReturn<__RTYPE__> return_traits; \ typedef typename return_traits::type return_vector; \ typedef typename traits::storage_type::type stored_type; \ \ public: \ ColMeansImpl(const MatrixBase<__RTYPE__, NA, T>& ref_) \ : ref(ref_) \ {} \ \ return_vector get() const { \ R_xlen_t i, j, nr = ref.nrow(), nc = ref.ncol(); \ return_vector res(nc); \ \ std::vector n_ok(nc, 0); \ \ for (j = 0; j < nc; j++) { \ for (i = 0; i < nr; i++) { \ if (!detail::check_na(ref(i, j))) { \ detail::incr(&res[j], ref(i, j)); \ ++n_ok[j]; \ } \ } \ } \ \ for (j = 0; j < nc; j++) { \ if (n_ok[j]) { \ detail::div(&res[j], n_ok[j]); \ } else { \ detail::set_nan(&res[j]); \ } \ } \ \ return res; \ } \ }; COL_MEANS_IMPL_RMNA(LGLSXP) COL_MEANS_IMPL_RMNA(INTSXP) #undef COL_MEANS_IMPL_RMNA // ColMeans // Input with template parameter NA = false // ColMeansImpl<..., NA_RM = false> // template class ColMeansImpl : public ColMeansImpl {}; } // sugar template inline typename sugar::detail::RowSumsReturn::type rowSums(const MatrixBase& x, bool na_rm = false) { if (!na_rm) { return sugar::RowSumsImpl(x); } return sugar::RowSumsImpl(x); } template inline typename sugar::detail::ColSumsReturn::type colSums(const MatrixBase& x, bool na_rm = false) { if (!na_rm) { return sugar::ColSumsImpl(x); } return sugar::ColSumsImpl(x); } template inline typename sugar::detail::RowMeansReturn::type rowMeans(const MatrixBase& x, bool na_rm = false) { if (!na_rm) { return sugar::RowMeansImpl(x); } return sugar::RowMeansImpl(x); } template inline typename sugar::detail::ColMeansReturn::type colMeans(const MatrixBase& x, bool na_rm = false) { if (!na_rm) { return sugar::ColMeansImpl(x); } return sugar::ColMeansImpl(x); } } // Rcpp #endif // Rcpp__sugar__rowSums_h Rcpp/inst/include/Rcpp/sugar/functions/Lazy.h0000644000176200001440000000211712336231761020710 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // Lazy.h: Rcpp R/C++ interface class library -- Lazy // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__Lazy_h #define Rcpp__sugar__Lazy_h namespace Rcpp{ namespace sugar{ template class Lazy { public: inline operator T() const { return static_cast(*this).get() ; } } ; } } #endif Rcpp/inst/include/Rcpp/sugar/functions/strings/0000755000176200001440000000000013103613705021303 5ustar liggesusersRcpp/inst/include/Rcpp/sugar/functions/strings/trimws.h0000644000176200001440000001271113103613705023003 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // trimws.h: Rcpp R/C++ interface class library -- trimws // // Copyright (C) 2017 Nathan Russell // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__trimws_h #define Rcpp__sugar__trimws_h #include #include namespace Rcpp { namespace sugar { namespace detail { /* NB: std::isspace is not used because it also counts '\f' and '\v' as whitespace, whereas base::trimws only checks for ' ', '\t', '\r', and '\n' */ inline bool isws(const char c) { return c == ' ' || c == '\t' || c == '\n' || c == '\r'; } inline const char* trim_left(const char* str) { if (!str) { return ""; } while (isws(*str)) { ++str; } return str; } inline const char* trim_right(const char* str, R_len_t sz, std::string* buff) { if (!str) { return ""; } buff->clear(); const char* ptr = str + sz - 1; for (; ptr > str && isws(*ptr); --sz, --ptr); buff->append(str, sz - isws(*ptr)); return buff->c_str(); } inline const char* trim_both(const char* str, R_len_t sz, std::string* buff) { if (!str) { return ""; } buff->clear(); while (isws(*str)) { ++str; --sz; } const char* ptr = str + sz - 1; for (; ptr > str && isws(*ptr); --sz, --ptr); buff->append(str, sz); return buff->c_str(); } } // detail } // sugar inline Vector trimws(const Vector& x, const char* which = "both") { R_xlen_t i = 0, sz = x.size(); Vector res = no_init(sz); std::string buffer; if (*which == 'b') { for (; i < sz; i++) { if (traits::is_na(x[i])) { res[i] = x[i]; } else { res[i] = sugar::detail::trim_both( x[i], LENGTH(x[i]), &buffer ); } } } else if (*which == 'l') { for (; i < sz; i++) { if (traits::is_na(x[i])) { res[i] = x[i]; } else { res[i] = sugar::detail::trim_left(x[i]); } } } else if (*which == 'r') { for (; i < sz; i++) { if (traits::is_na(x[i])) { res[i] = x[i]; } else { res[i] = sugar::detail::trim_right( x[i], LENGTH(x[i]), &buffer ); } } } else { stop("Invalid `which` argument '%s'!", which); return Vector::create("Unreachable"); } return res; } inline Matrix trimws(const Matrix& x, const char* which = "both") { R_xlen_t i = 0, sz = x.size(); int nr = x.nrow(), nc = x.ncol(); Matrix res = no_init(nr, nc); std::string buffer; if (*which == 'b') { for (; i < sz; i++) { if (traits::is_na(x[i])) { res[i] = x[i]; } else { res[i] = sugar::detail::trim_both( x[i], LENGTH(x[i]), &buffer ); } } } else if (*which == 'l') { for (; i < sz; i++) { if (traits::is_na(x[i])) { res[i] = x[i]; } else { res[i] = sugar::detail::trim_left(x[i]); } } } else if (*which == 'r') { for (; i < sz; i++) { if (traits::is_na(x[i])) { res[i] = x[i]; } else { res[i] = sugar::detail::trim_right( x[i], LENGTH(x[i]), &buffer ); } } } else { stop("Invalid `which` argument '%s'!", which); return Matrix(); } return res; } inline String trimws(const String& str, const char* which = "both") { std::string buffer; if (*which == 'b') { if (traits::is_na(str.get_sexp())) { return String(str.get_sexp()); } return sugar::detail::trim_both( str.get_cstring(), LENGTH(str.get_sexp()), &buffer ); } if (*which == 'l') { if (traits::is_na(str.get_sexp())) { return String(str.get_sexp()); } return sugar::detail::trim_left(str.get_cstring()); } if (*which == 'r') { if (traits::is_na(str.get_sexp())) { return String(str.get_sexp()); } return sugar::detail::trim_right( str.get_cstring(), LENGTH(str.get_sexp()), &buffer ); } stop("Invalid `which` argument '%s'!", which); return String("Unreachable"); } } // Rcpp #endif // Rcpp__sugar__trimws_h Rcpp/inst/include/Rcpp/sugar/functions/strings/strings.h0000644000176200001440000000204413077226144023154 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // strings.h: Rcpp R/C++ interface class library -- string sugar functions // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_FUNCTIONS_STRINGS_H #define RCPP_SUGAR_FUNCTIONS_STRINGS_H #include #include #endif Rcpp/inst/include/Rcpp/sugar/functions/strings/collapse.h0000644000176200001440000000273012535036334023265 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // collapse.h: Rcpp R/C++ interface class library -- string sugar functions // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_FUNCTIONS_COLLAPSE_H #define RCPP_SUGAR_FUNCTIONS_COLLAPSE_H namespace Rcpp{ namespace sugar { template inline String collapse__impl( Iterator it, R_xlen_t n ){ static String buffer ; buffer = "" ; for( R_xlen_t i=0; i inline String collapse( const VectorBase& vec ){ return sugar::collapse__impl( vec.get_ref().begin(), vec.size() ) ; } } #endif Rcpp/inst/include/Rcpp/sugar/functions/setdiff.h0000644000176200001440000001377412535036334021430 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // setdiff.h: Rcpp R/C++ interface class library -- setdiff // // Copyright (C) 2012 - 2014 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__setdiff_h #define Rcpp__sugar__setdiff_h namespace Rcpp{ namespace sugar{ template class RemoveFromSet { public: RemoveFromSet( SET& set_) : set(set_){} template void operator()(T value){ set.erase( value ); } private: SET& set ; } ; template class SetDiff { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; SetDiff( const LHS_T& lhs, const RHS_T& rhs) : lhs_set( get_const_begin(lhs), get_const_end(lhs) ), rhs_set( get_const_begin(rhs), get_const_end(rhs) ) { std::for_each( rhs_set.begin(), rhs_set.end(), RemoveFromSet(lhs_set) ) ; } Vector get() const { R_xlen_t n = lhs_set.size() ; Vector out = no_init(n) ; std::copy( lhs_set.begin(), lhs_set.end(), out.begin() ) ; return out ; } private: typedef RCPP_UNORDERED_SET SET ; typedef typename SET::const_iterator ITERATOR ; SET lhs_set ; SET rhs_set ; } ; template class SetEqual { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; SetEqual( const LHS_T& lhs, const RHS_T& rhs) : lhs_set( get_const_begin(lhs), get_const_end(lhs) ), rhs_set( get_const_begin(rhs), get_const_end(rhs) ) { } bool get() const { if( lhs_set.size() != rhs_set.size() ) return false ; ITERATOR it = lhs_set.begin(), end = lhs_set.end(), rhs_end = rhs_set.end() ; for( ; it != end; ){ if( rhs_set.find(*it++) == rhs_end ) return false ; } return true ; } private: typedef RCPP_UNORDERED_SET SET ; typedef typename SET::const_iterator ITERATOR ; SET lhs_set ; SET rhs_set ; } ; template class Intersect { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; Intersect( const LHS_T& lhs, const RHS_T& rhs) : intersect() { SET lhs_set( get_const_begin(lhs), get_const_end(lhs) ) ; SET rhs_set( get_const_begin(rhs), get_const_end(rhs) ) ; ITERATOR end = lhs_set.end() ; ITERATOR rhs_end = rhs_set.end() ; for( ITERATOR it=lhs_set.begin(); it != end; it++){ if( rhs_set.find(*it) != rhs_end ) intersect.insert(*it) ; } } Vector get() const { R_xlen_t n = intersect.size() ; Vector out = no_init(n) ; std::copy( intersect.begin(), intersect.end(), out.begin() ) ; return out ; } private: typedef RCPP_UNORDERED_SET SET ; typedef typename SET::const_iterator ITERATOR ; SET intersect ; } ; template class Union { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; Union( const LHS_T& lhs, const RHS_T& rhs) : result( get_const_begin(lhs), get_const_end(lhs) ) { result.insert( get_const_begin(rhs), get_const_end(rhs) ) ; } Vector get() const { R_xlen_t n = result.size() ; Vector out = no_init(n) ; std::copy( result.begin(), result.end(), out.begin() ) ; return out ; } private: typedef RCPP_UNORDERED_SET SET ; typedef typename SET::const_iterator ITERATOR ; SET result ; } ; } // sugar template inline Vector setdiff( const VectorBase& lhs, const VectorBase& rhs ){ return sugar::SetDiff( lhs.get_ref(), rhs.get_ref() ).get() ; } template inline bool setequal( const VectorBase& lhs, const VectorBase& rhs ){ return sugar::SetEqual( lhs.get_ref(), rhs.get_ref() ).get() ; } template inline Vector intersect( const VectorBase& lhs, const VectorBase& rhs ){ return sugar::Intersect( lhs.get_ref(), rhs.get_ref() ).get() ; } // we cannot use "union" because it is a keyword template inline Vector union_( const VectorBase& lhs, const VectorBase& rhs ){ return sugar::Union( lhs.get_ref(), rhs.get_ref() ).get() ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/median.h0000644000176200001440000001670312650522242021230 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // median.h: Rcpp R/C++ interface class library -- median // // Copyright (C) 2016 Dirk Eddelbuettel, Romain Francois, and Nathan Russell // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__median_h #define Rcpp__sugar__median_h namespace Rcpp { namespace sugar { namespace median_detail { // need to return double for integer vectors // (in case of even-length input vector) // and Rcpp::String for STRSXP // also need to return NA_REAL for // integer vector yielding NA result template struct result { typedef typename Rcpp::traits::storage_type::type type; enum { rtype = RTYPE }; }; template <> struct result { typedef double type; enum { rtype = REALSXP }; }; template <> struct result { typedef Rcpp::String type; enum { rtype = STRSXP }; }; // std::nth_element and std::max_element don't // know how to compare Rcomplex values template inline bool less(T lhs, T rhs) { return lhs < rhs; } template<> inline bool less(Rcomplex lhs, Rcomplex rhs) { if (lhs.r < rhs.r) return true; if (lhs.i < rhs.i) return true; return false; } // compiler does not know how to handle // Rcomplex numerator / double denominator // and need explicit cast for INTSXP case inline double half(double lhs) { return lhs / 2.0; } inline double half(int lhs) { return static_cast(lhs) / 2.0; } inline Rcomplex half(Rcomplex lhs) { lhs.r /= 2.0; lhs.i /= 2.0; return lhs; } } // median_detail // base case template class Median { public: typedef typename median_detail::result::type result_type; typedef typename Rcpp::traits::storage_type::type stored_type; enum { RESULT_RTYPE = median_detail::result::rtype }; typedef T VECTOR; private: VECTOR x; public: Median(const VECTOR& xx) : x(Rcpp::clone(xx)) {} operator result_type() { if (x.size() < 1) { return Rcpp::traits::get_na(); } if (Rcpp::any(Rcpp::is_na(x))) { return Rcpp::traits::get_na(); } R_xlen_t n = x.size() / 2; std::nth_element( x.begin(), x.begin() + n, x.end(), median_detail::less); if (x.size() % 2) return x[n]; return median_detail::half( x[n] + *std::max_element( x.begin(), x.begin() + n, median_detail::less)); } }; // na.rm = TRUE template class Median { public: typedef typename median_detail::result::type result_type; typedef typename Rcpp::traits::storage_type::type stored_type; enum { RESULT_RTYPE = median_detail::result::rtype }; typedef T VECTOR; private: VECTOR x; public: Median(const VECTOR& xx) : x(Rcpp::na_omit(Rcpp::clone(xx))) {} operator result_type() { if (!x.size()) { return Rcpp::traits::get_na(); } R_xlen_t n = x.size() / 2; std::nth_element( x.begin(), x.begin() + n, x.end(), median_detail::less); if (x.size() % 2) return x[n]; return median_detail::half( x[n] + *std::max_element( x.begin(), x.begin() + n, median_detail::less)); } }; // NA = false template class Median { public: typedef typename median_detail::result::type result_type; typedef typename Rcpp::traits::storage_type::type stored_type; enum { RESULT_RTYPE = median_detail::result::rtype }; typedef T VECTOR; private: VECTOR x; public: Median(const VECTOR& xx) : x(Rcpp::clone(xx)) {} operator result_type() { if (x.size() < 1) { return Rcpp::traits::get_na(); } R_xlen_t n = x.size() / 2; std::nth_element( x.begin(), x.begin() + n, x.end(), median_detail::less); if (x.size() % 2) return x[n]; return median_detail::half( x[n] + *std::max_element( x.begin(), x.begin() + n, median_detail::less)); } }; // specialize for character vector // due to string_proxy's incompatibility // with certain std:: algorithms; // need to return NA for even-length vectors template class Median { public: typedef typename median_detail::result::type result_type; typedef typename Rcpp::traits::storage_type::type stored_type; typedef T VECTOR; private: VECTOR x; public: Median(const VECTOR& xx) : x(Rcpp::clone(xx)) {} operator result_type() { if (!(x.size() % 2)) { return Rcpp::traits::get_na(); } if (Rcpp::any(Rcpp::is_na(x))) { return Rcpp::traits::get_na(); } R_xlen_t n = x.size() / 2; x.sort(); return x[n]; } }; // na.rm = TRUE template class Median { public: typedef typename median_detail::result::type result_type; typedef typename Rcpp::traits::storage_type::type stored_type; typedef T VECTOR; private: VECTOR x; public: Median(const VECTOR& xx) : x(Rcpp::na_omit(Rcpp::clone(xx))) {} operator result_type() { if (!(x.size() % 2)) { return Rcpp::traits::get_na(); } R_xlen_t n = x.size() / 2; x.sort(); return x[n]; } }; // NA = false template class Median { public: typedef typename median_detail::result::type result_type; typedef typename Rcpp::traits::storage_type::type stored_type; typedef T VECTOR; private: VECTOR x; public: Median(const VECTOR& xx) : x(Rcpp::clone(xx)) {} operator result_type() { if (!(x.size() % 2)) { return Rcpp::traits::get_na(); } R_xlen_t n = x.size() / 2; x.sort(); return x[n]; } }; } // sugar template inline typename sugar::median_detail::result::type median(const Rcpp::VectorBase& x, bool na_rm = false) { if (!na_rm) return sugar::Median(x); return sugar::Median(x); } } // Rcpp #endif // Rcpp__sugar__median_h Rcpp/inst/include/Rcpp/sugar/functions/rep.h0000644000176200001440000000513513074145201020553 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // rep.h: Rcpp R/C++ interface class library -- rep // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__rep_h #define Rcpp__sugar__rep_h namespace Rcpp{ namespace sugar{ template class Rep : public Rcpp::VectorBase< RTYPE ,NA, Rep > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Rep( const VEC_TYPE& object_, R_xlen_t times_ ) : object(object_), times(times_), n(object_.size()){} inline STORAGE operator[]( R_xlen_t i ) const { return object[ i % n ] ; } inline R_xlen_t size() const { return times * n ; } private: const VEC_TYPE& object ; R_xlen_t times, n ; } ; template class Rep_Single : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype, true, Rep_Single > { public: Rep_Single( const T& x_, R_xlen_t n_) : x(x_), n(n_){} inline T operator[]( R_xlen_t ) const { return x; } inline R_xlen_t size() const { return n ; } private: const T& x ; R_xlen_t n; } ; } // sugar template inline sugar::Rep rep( const VectorBase& t, R_xlen_t n ){ return sugar::Rep( t, n ) ; } inline sugar::Rep_Single rep( const double& x, R_xlen_t n ){ return sugar::Rep_Single( x, n ) ; } inline sugar::Rep_Single rep( const int& x, R_xlen_t n ){ return sugar::Rep_Single( x, n ) ; } inline sugar::Rep_Single rep( const Rbyte& x, R_xlen_t n ){ return sugar::Rep_Single( x, n ) ; } inline sugar::Rep_Single rep( const Rcomplex& x, R_xlen_t n ){ return sugar::Rep_Single( x, n ) ; } inline sugar::Rep_Single rep( const bool& x, R_xlen_t n ){ return sugar::Rep_Single( x, n ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/max.h0000644000176200001440000000464613324633757020600 0ustar liggesusers // max.h: Rcpp R/C++ interface class library -- max // // Copyright (C) 2012 - 2018 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__max_h #define Rcpp__sugar__max_h namespace Rcpp{ namespace sugar{ template class Max { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; Max( const T& obj_) : obj(obj_) {} operator STORAGE() const { R_xlen_t n = obj.size(); if (n == 0) return(static_cast(R_NegInf)); STORAGE max, current ; max = obj[0] ; if( Rcpp::traits::is_na( max ) ) return max ; for( R_xlen_t i=1; i( current ) ) return current; if( current > max ) max = current ; } return max ; } private: const T& obj ; } ; // version for NA = false template class Max { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; Max( const T& obj_) : obj(obj_) {} operator STORAGE() const { R_xlen_t n = obj.size(); if (n == 0) return(static_cast(R_NegInf)); STORAGE max, current ; max = obj[0] ; for( R_xlen_t i=1; i max ) max = current ; } return max ; } private: const T& obj ; } ; } // sugar template sugar::Max max( const VectorBase& x){ return sugar::Max(x.get_ref()) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/unique.h0000644000176200001440000000442213445421075021301 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // unique.h: Rcpp R/C++ interface class library -- unique // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__unique_h #define Rcpp__sugar__unique_h namespace Rcpp{ namespace sugar{ template class InSet { typedef typename HASH::STORAGE STORAGE ; public: InSet( const HASH& hash_ ) : hash(hash_){} inline int operator()(STORAGE value){ return hash.contains(value) ; } private: const HASH& hash ; } ; template class In { Vector vec ; typedef sugar::IndexHash HASH ; HASH hash ; public: In( const TABLE_T& table) : vec(table), hash(vec){ hash.fill() ; } template LogicalVector get( const T& x) const { return LogicalVector( x.begin(), x.end(), InSet(hash) ) ; } } ; } // sugar template inline Vector unique( const VectorBase& t ){ Vector vec(t) ; sugar::IndexHash hash(vec) ; hash.fill() ; return hash.keys() ; } template inline Vector sort_unique( const VectorBase& t , bool decreasing = false){ return unique( t ).sort(decreasing) ; } template inline LogicalVector in( const VectorBase& x, const VectorBase& table ){ typedef VectorBase TABLE_T ; return sugar::In(table).get( x.get_ref() ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/is_finite.h0000644000176200001440000000304312535036334021741 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // is_finite.h: Rcpp R/C++ interface class library -- is_finite // // Copyright (C) 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__is_finite_h #define Rcpp__sugar__is_finite_h namespace Rcpp{ namespace sugar{ template class IsFinite : public ::Rcpp::VectorBase< LGLSXP, false, IsFinite > { public: IsFinite( const VEC_TYPE& obj_) : obj(obj_){} inline int operator[]( R_xlen_t i ) const { return ::Rcpp::traits::is_finite( obj[i] ) ; } inline R_xlen_t size() const { return obj.size() ; } private: const VEC_TYPE& obj ; } ; } // sugar template inline sugar::IsFinite is_finite( const Rcpp::VectorBase& t){ return sugar::IsFinite( t.get_ref() ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/tail.h0000644000176200001440000000342412535036334020724 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // tail.h: Rcpp R/C++ interface class library -- tail // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__tail_h #define Rcpp__sugar__tail_h namespace Rcpp{ namespace sugar{ template class Tail : public Rcpp::VectorBase< RTYPE ,NA, Tail > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Tail( const VEC_TYPE& object_, R_xlen_t n_ ) : object(object_), start(0), n(n_) { if( n > 0 ){ start = object.size() - n ; } else { start = -n ; n = object.size() - start ; } } inline STORAGE operator[]( R_xlen_t i ) const { return object[ start + i ] ; } inline R_xlen_t size() const { return n; } private: const VEC_TYPE& object ; R_xlen_t start, n ; } ; } // sugar template inline sugar::Tail tail( const VectorBase& t, R_xlen_t n ){ return sugar::Tail( t, n ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/diff.h0000644000176200001440000001015112535036334020676 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 4 -*- // // diff.h: Rcpp R/C++ interface class library -- diff // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__diff_h #define Rcpp__sugar__diff_h namespace Rcpp{ namespace sugar{ // NOTE: caching the previous value so that we only have to fetch the // value once only works because we process the object from left to // right template class Diff : public Rcpp::VectorBase< RTYPE, LHS_NA , Diff > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Diff( const LHS_TYPE& lhs_ ) : lhs(lhs_), previous(lhs_[0]), previous_index(0), was_na(traits::is_na(previous)) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE y = lhs[i+1] ; if( previous_index != i ){ // we don't know the previous value, we need to get it. set_previous(i, lhs[i] ) ; // record the current value } if( was_na || traits::is_na(y) ) { set_previous(i+1, y ) ; return traits::get_na() ; // NA } STORAGE res = y - previous ; set_previous( i+1, y) ; return res ; } inline void set_previous(R_xlen_t i, STORAGE value) const { previous = value ; was_na = traits::is_na(previous) ; previous_index = i ; } inline R_xlen_t size() const { return lhs.size() - 1 ; } private: const LHS_TYPE& lhs ; mutable STORAGE previous ; mutable R_xlen_t previous_index ; mutable bool was_na ; } ; template class Diff : public Rcpp::VectorBase< REALSXP, LHS_NA, Diff >{ public: typedef typename Rcpp::VectorBase LHS_TYPE ; Diff( const LHS_TYPE& lhs_ ) : lhs(lhs_), previous(lhs_[0]), previous_index(0) {} inline double operator[]( R_xlen_t i ) const { double y = lhs[i+1] ; if( previous_index != i ) previous = lhs[i] ; double res = y - previous ; previous = y ; previous_index = i+1 ; return res ; } inline R_xlen_t size() const { return lhs.size() - 1 ; } private: const LHS_TYPE& lhs ; mutable double previous ; mutable R_xlen_t previous_index ; } ; template class Diff : public Rcpp::VectorBase< RTYPE, false , Diff > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Diff( const LHS_TYPE& lhs_ ) : lhs(lhs_), previous(lhs[0]), previous_index(0) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE y = lhs[i+1] ; if( previous_index != i ) previous = lhs[i] ; STORAGE diff = y - previous ; previous = y ; previous_index = i+1 ; return y - previous ; } inline R_xlen_t size() const { return lhs.size() - 1 ; } private: const LHS_TYPE& lhs ; mutable STORAGE previous ; mutable R_xlen_t previous_index ; } ; } // sugar template inline sugar::Diff diff( const VectorBase& lhs ){ return sugar::Diff( lhs ) ; } template inline sugar::Diff diff( const VectorBase& lhs ){ return sugar::Diff( lhs ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/all.h0000644000176200001440000000435512535036334020547 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // all.h: Rcpp R/C++ interface class library -- all // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__all_h #define Rcpp__sugar__all_h namespace Rcpp{ namespace sugar{ template class All : public SingleLogicalResult< true, All >{ public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef SingleLogicalResult< true, All > PARENT ; All( const VEC_TYPE& t ) : PARENT() , object(t) {} void apply(){ R_xlen_t n = object.size() ; int current = 0 ; PARENT::reset() ; for( R_xlen_t i=0 ; i(current) ) { PARENT::set_na(); } } if( PARENT::is_unresolved() ){ PARENT::set_true() ; } } private: const VEC_TYPE& object ; } ; template class All : public SingleLogicalResult< false, All >{ public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef SingleLogicalResult< false, All > PARENT ; All( const VEC_TYPE& t ) : PARENT() , object(t) {} void apply(){ R_xlen_t n = object.size() ; PARENT::set_true() ; for( R_xlen_t i=0 ; i inline sugar::All all( const Rcpp::VectorBase& t){ return sugar::All( t ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/cumsum.h0000644000176200001440000000410312535036334021277 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // cumsum.h: Rcpp R/C++ interface class library -- cumsum // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__cumsum_h #define Rcpp__sugar__cumsum_h namespace Rcpp{ namespace sugar{ template class Cumsum : public Lazy< Rcpp::Vector , Cumsum > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef Rcpp::Vector VECTOR ; Cumsum( const VEC_TYPE& object_ ) : object(object_){} VECTOR get() const { R_xlen_t n = object.size() ; VECTOR result( n, Rcpp::traits::get_na() ) ; STORAGE current = object[0] ; if( Rcpp::traits::is_na(current) ) return result ; result[0] = current ; for( R_xlen_t i=1; i(current) ) return result ; result[i] = result[i-1] + current ; } return result ; } private: const VEC_TYPE& object ; } ; } // sugar template inline sugar::Cumsum cumsum( const VectorBase& t){ return sugar::Cumsum( t ) ; } template inline sugar::Cumsum cumsum( const VectorBase& t){ return sugar::Cumsum( t ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/pmin.h0000644000176200001440000001165012535036334020736 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // pmin.h: Rcpp R/C++ interface class library -- pmin // // Copyright (C) 2010 - 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__pmin_h #define Rcpp__sugar__pmin_h namespace Rcpp{ namespace sugar{ template struct pmin_op ; // specializations for double. // we use the fact that NA < x is false template <> struct pmin_op{ inline double operator()( double left, double right ) const { return ( Rcpp::traits::is_na( left ) || (left < right) ) ? left : right ; } } ; template <> struct pmin_op { inline double operator()( double left, double right ) const { return right < left ? right : left ; } } ; template <> struct pmin_op { inline double operator()( double left, double right ) const { return right < left ? right : left ; } } ; template <> struct pmin_op { inline double operator()( double left, double right ) const { return left < right ? left : right ; } } ; // specializations for INTSXP. Since NA is represented as the smallest // int, NA is always the smallest, so it is safe to return NA template struct pmin_op { inline int operator()(int left, int right) const { return left < right ? left : right ; } } ; // general case template class pmin_op_Vector_Primitive { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; pmin_op_Vector_Primitive( STORAGE right_ ) : right(right_) {} inline STORAGE operator()( STORAGE left ) const { return left < right ? left : right ; } private: STORAGE right ; } ; // only special case we need to take care of template <> class pmin_op_Vector_Primitive { public: pmin_op_Vector_Primitive( double right_ ) : right(right_) {} inline double operator()( double left ) const { return ( Rcpp::traits::is_na( left ) || (left < right) ) ? left : right ; } private: double right ; } ; template < int RTYPE, bool LHS_NA, typename LHS_T, bool RHS_NA, typename RHS_T > class Pmin_Vector_Vector : public VectorBase< RTYPE , ( LHS_NA || RHS_NA ) , Pmin_Vector_Vector > { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef pmin_op OPERATOR ; Pmin_Vector_Vector( const LHS_T& lhs_, const RHS_T& rhs_ ) : lhs(lhs_), rhs(rhs_), op() {} inline STORAGE operator[]( R_xlen_t i ) const { return op( lhs[i], rhs[i] ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_T& lhs ; const RHS_T& rhs ; OPERATOR op ; } ; template < int RTYPE, bool LHS_NA, typename LHS_T > class Pmin_Vector_Primitive : public VectorBase< RTYPE , true , Pmin_Vector_Primitive > { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef pmin_op_Vector_Primitive OPERATOR ; Pmin_Vector_Primitive( const LHS_T& lhs_, STORAGE rhs_ ) : lhs(lhs_), op(rhs_) {} inline STORAGE operator[]( R_xlen_t i ) const { return op( lhs[i] ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_T& lhs ; OPERATOR op ; } ; } // sugar template < int RTYPE, bool LHS_NA, typename LHS_T, bool RHS_NA, typename RHS_T > inline sugar::Pmin_Vector_Vector pmin( const Rcpp::VectorBase& lhs, const Rcpp::VectorBase& rhs ){ return sugar::Pmin_Vector_Vector( lhs.get_ref(), rhs.get_ref() ) ; } template < int RTYPE, bool LHS_NA, typename LHS_T > inline sugar::Pmin_Vector_Primitive pmin( const Rcpp::VectorBase& lhs, typename Rcpp::traits::storage_type::type rhs ){ return sugar::Pmin_Vector_Primitive( lhs.get_ref(), rhs ) ; } template < int RTYPE, bool RHS_NA, typename RHS_T > inline sugar::Pmin_Vector_Primitive pmin( typename Rcpp::traits::storage_type::type lhs, const Rcpp::VectorBase& rhs ){ return sugar::Pmin_Vector_Primitive( rhs.get_ref(), lhs ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/seq_along.h0000644000176200001440000000306712535036334021746 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // seq_along.h: Rcpp R/C++ interface class library -- any // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__seq_along_h #define Rcpp__sugar__seq_along_h namespace Rcpp{ namespace sugar{ class SeqLen : public VectorBase< INTSXP,false,SeqLen > { public: SeqLen( R_xlen_t len_ ) : len(len_){} inline R_xlen_t operator[]( R_xlen_t i ) const { return 1 + i ; } inline R_xlen_t size() const { return len ; } private: R_xlen_t len ; } ; } // sugar template inline sugar::SeqLen seq_along( const Rcpp::VectorBase& t){ return sugar::SeqLen( t.size() ) ; } inline sugar::SeqLen seq_len( const size_t& n){ return sugar::SeqLen( n ) ; } inline Range seq(R_xlen_t start, R_xlen_t end){ return Range( start, end ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/cummax.h0000644000176200001440000000432112615210414021252 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // cumsum.h: Rcpp R/C++ interface class library -- cumsum // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__cummax_h #define Rcpp__sugar__cummax_h namespace Rcpp{ namespace sugar{ template class Cummax : public Lazy< Rcpp::Vector, Cummax > { public: typedef typename Rcpp::VectorBase VEC_TYPE; typedef typename Rcpp::traits::storage_type::type STORAGE; typedef Rcpp::Vector VECTOR; Cummax(const VEC_TYPE& object_) : object(object_) {} VECTOR get() const { R_xlen_t n = object.size(); VECTOR result(n, Rcpp::traits::get_na()); STORAGE current = object[0]; if (Rcpp::traits::is_na(current)) return result; result[0] = current; for (R_xlen_t i = 1; i < n; i++) { current = object[i]; if (Rcpp::traits::is_na(current)) return result; result[i] = result[i-1] > current ? result[i-1] : current; } return result ; } private: const VEC_TYPE& object; }; } // sugar template inline sugar::Cummax cummax(const VectorBase& t) { return sugar::Cummax(t); } template inline sugar::Cummax cummax(const VectorBase& t) { return sugar::Cummax(t); } } // Rcpp #endif // Rcpp__sugar__cummax_h Rcpp/inst/include/Rcpp/sugar/functions/range.h0000644000176200001440000000521512535036334021067 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // range.h: Rcpp R/C++ interface class library -- range // // Copyright (C) 2012 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__range_h #define Rcpp__sugar__range_h namespace Rcpp{ namespace sugar{ template class Range { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; Range( const T& obj_) : obj(obj_) {} operator Vector(){ min_ = max_ = obj[0] ; if( Rcpp::traits::is_na( min_ ) ) return Vector::create( min_, max_ ) ; R_xlen_t n = obj.size() ; for( R_xlen_t i=1; i( current ) ) return Vector::create( min_, max_ ) ; if( current < min_ ) min_ = current ; if( current > max_ ) max_ = current ; } return Vector::create( min_, max_ ) ; } private: const T& obj ; STORAGE min_, max_, current ; } ; // version for NA = false template class Range { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; Range( const T& obj_) : obj(obj_) {} operator Vector(){ min_ = max_ = obj[0] ; R_xlen_t n = obj.size() ; for( R_xlen_t i=1; i max_ ) max_ = current ; } return Vector::create( min_, max_ ) ; } private: const T& obj ; STORAGE min_, max_, current ; } ; } // sugar template sugar::Range range( const VectorBase& x){ return sugar::Range(x.get_ref()) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/which_min.h0000644000176200001440000000470312535036334021741 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // which_min.h: Rcpp R/C++ interface class library -- which.min // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__which_min_h #define Rcpp__sugar__which_min_h namespace Rcpp{ namespace sugar{ template class WhichMin { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; WhichMin(const VEC_TYPE& obj_ ) : obj(obj_){} R_xlen_t get() const { STORAGE current = obj[0] ; STORAGE min = current ; R_xlen_t index = 0 ; if( Rcpp::traits::is_na(current) ) return NA_INTEGER ; R_xlen_t n = obj.size() ; for( R_xlen_t i=1; i(current) ) return NA_INTEGER ; if( current < min ){ min = current ; index = i ; } } return index ; } private: const VEC_TYPE& obj ; } ; template class WhichMin { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; WhichMin(const VEC_TYPE& obj_ ) : obj(obj_){} R_xlen_t get() const { STORAGE current = obj[0] ; STORAGE min = current ; R_xlen_t index = 0 ; R_xlen_t n = obj.size() ; for( R_xlen_t i=1; i R_xlen_t which_min( const VectorBase& t ){ return sugar::WhichMin(t).get() ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/self_match.h0000644000176200001440000000423012535036334022074 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // self_match.h: Rcpp R/C++ interface class library -- self match // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__self_match_h #define Rcpp__sugar__self_match_h namespace Rcpp{ namespace sugar{ template class SelfInserter { public: SelfInserter( HASH& hash_ ) : hash(hash_), index(0) {} inline R_xlen_t operator()( STORAGE value ){ typename HASH::iterator it = hash.find( value ) ; if( it == hash.end() ){ hash.insert( std::make_pair(value, ++index) ) ; return index ; } else { return it->second ; } } private: HASH& hash ; R_xlen_t index; } ; template class SelfMatch { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; SelfMatch( const TABLE_T& table ): hash(), result(table.size()) { std::transform( table.begin(), table.end(), result.begin(), Inserter(hash) ) ; } inline operator IntegerVector() const { return result ; } private: typedef RCPP_UNORDERED_MAP HASH ; typedef SelfInserter Inserter ; HASH hash ; IntegerVector result ; }; } // sugar template inline IntegerVector self_match( const VectorBase& x ){ Vector vec(x) ; return sugar::SelfHash(vec).fill_and_self_match() ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/duplicated.h0000644000176200001440000000225312316773510022111 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // duplicated.h: Rcpp R/C++ interface class library -- duplicated // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__duplicated_h #define Rcpp__sugar__duplicated_h namespace Rcpp{ template inline LogicalVector duplicated( const VectorBase& x ){ Vector vec(x) ; sugar::IndexHash hash(vec) ; return hash.fill_and_get_duplicated() ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/math.h0000644000176200001440000000534012445015064020720 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // SugarBlock.h: Rcpp R/C++ interface class library -- sugar functions // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_MATH_H #define RCPP_SUGAR_MATH_H VECTORIZED_MATH_1(exp,::exp) VECTORIZED_MATH_1(acos,::acos) VECTORIZED_MATH_1(asin,::asin) VECTORIZED_MATH_1(atan,::atan) VECTORIZED_MATH_1(ceil,::ceil) VECTORIZED_MATH_1(ceiling,::ceil) VECTORIZED_MATH_1(cos,::cos) VECTORIZED_MATH_1(cosh,::cosh) VECTORIZED_MATH_1(floor,::floor) VECTORIZED_MATH_1(log,::log) VECTORIZED_MATH_1(log10,::log10) VECTORIZED_MATH_1(sqrt,::sqrt) VECTORIZED_MATH_1(sin,::sin) VECTORIZED_MATH_1(sinh,::sinh) VECTORIZED_MATH_1(tan,::tan) VECTORIZED_MATH_1(tanh,::tanh) VECTORIZED_MATH_1(abs,::fabs) VECTORIZED_MATH_1(gamma , ::Rf_gammafn ) VECTORIZED_MATH_1(lgamma , ::Rf_lgammafn ) VECTORIZED_MATH_1(digamma , ::Rf_digamma ) VECTORIZED_MATH_1(trigamma , ::Rf_trigamma ) VECTORIZED_MATH_1(tetragamma , ::Rf_tetragamma ) VECTORIZED_MATH_1(pentagamma , ::Rf_pentagamma ) VECTORIZED_MATH_1(expm1 , ::expm1 ) VECTORIZED_MATH_1(log1p , ::log1p ) namespace Rcpp{ namespace internal{ extern "C" inline double factorial( double x ){ return ::Rf_gammafn( x + 1.0 ) ; } extern "C" inline double lfactorial( double x ){ return ::Rf_lgammafn( x + 1.0 ) ; } } } VECTORIZED_MATH_1(factorial , ::Rcpp::internal::factorial ) VECTORIZED_MATH_1(lfactorial , ::Rcpp::internal::lfactorial ) SUGAR_BLOCK_2(choose , ::Rf_choose ) SUGAR_BLOCK_2(lchoose , ::Rf_lchoose ) SUGAR_BLOCK_2(beta , ::Rf_beta ) SUGAR_BLOCK_2(lbeta , ::Rf_lbeta ) SUGAR_BLOCK_2(psigamma , ::Rf_psigamma ) VECTORIZED_MATH_1(trunc, ::Rf_ftrunc) // truncates to zero (cf Writing R Extension, 6.7.3 Numerical Utilities) SUGAR_BLOCK_2(round, ::Rf_fround) // rounds 'x' to 'digits' decimals digits (used by R's round()) SUGAR_BLOCK_2(signif, ::Rf_fprec) // rounds 'x' to 'digits' significant digits (used by R's signif()) #endif Rcpp/inst/include/Rcpp/sugar/functions/any.h0000644000176200001440000000433012535036334020557 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // any.h: Rcpp R/C++ interface class library -- any // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__any_h #define Rcpp__sugar__any_h namespace Rcpp{ namespace sugar{ template class Any : public SingleLogicalResult< true, Any >{ public: typedef Rcpp::VectorBase VEC_TYPE ; typedef SingleLogicalResult< true , Any > PARENT ; Any( const VEC_TYPE& t ) : PARENT() , object(t) {} void apply(){ R_xlen_t n = object.size() ; int current = 0 ; PARENT::reset() ; for( R_xlen_t i=0 ; i(current) ) { PARENT::set_na(); } } if( PARENT::is_unresolved() ){ PARENT::set_false() ; } } private: const VEC_TYPE& object ; } ; template class Any : public SingleLogicalResult< false, Any >{ public: typedef Rcpp::VectorBase VEC_TYPE ; typedef SingleLogicalResult< false , Any > PARENT ; Any( const VEC_TYPE& t ) : PARENT() , object(t) {} void apply(){ R_xlen_t n = object.size() ; PARENT::set_false() ; for( R_xlen_t i=0 ; i inline sugar::Any any( const Rcpp::VectorBase& t){ return sugar::Any( t ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/rep_each.h0000644000176200001440000000336412535036334021544 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // rep_each.h: Rcpp R/C++ interface class library -- rep_each // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__rep_each_h #define Rcpp__sugar__rep_each_h namespace Rcpp{ namespace sugar{ template class Rep_each : public Rcpp::VectorBase< RTYPE ,NA, Rep_each > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Rep_each( const VEC_TYPE& object_, R_xlen_t times_ ) : object(object_), times(times_), n(object.size()) {} inline STORAGE operator[]( R_xlen_t i ) const { return object[ i / times ] ; } inline R_xlen_t size() const { return n * times ; } private: const VEC_TYPE& object ; R_xlen_t times, n ; } ; } // sugar template inline sugar::Rep_each rep_each( const VectorBase& t, R_xlen_t times ){ return sugar::Rep_each( t, times ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/na_omit.h0000644000176200001440000000502112730355576021425 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // na_omit.h: Rcpp R/C++ interface class library -- na_omit // // Copyright (C) 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__na_omit_h #define Rcpp__sugar__na_omit_h namespace Rcpp{ namespace sugar{ template Vector na_omit_impl(const T& x, Rcpp::traits::false_type ) { R_xlen_t n = x.size() ; R_xlen_t n_out = n - sum( is_na(x) ) ; if( n_out == n ) return x ; Vector out = no_init(n_out) ; for( R_xlen_t i=0, j=0; i::is_na( x[i] ) ) continue ; out[j++] = x[i]; } return out ; } template Vector na_omit_impl(const T& x, Rcpp::traits::true_type ) { R_xlen_t n = x.size() ; R_xlen_t n_out = n - sum( is_na(x) ) ; if( n_out == n ) return x; Vector out = no_init(n_out) ; bool has_name = x.attr("names") != R_NilValue ; if( has_name ){ CharacterVector names = x.attr("names") ; CharacterVector onames( n_out ) ; for( R_xlen_t i=0, j=0; i::is_na( x[i] ) ) continue ; onames[j] = names[i] ; out[j++] = x[i]; } out.attr("names") = onames ; } else { for( R_xlen_t i=0, j=0; i::is_na( x[i] ) ) continue ; out[j++] = x[i]; } } return out ; } } // sugar template inline Vector na_omit( const VectorBase& t){ return sugar::na_omit_impl( t.get_ref(), typename Rcpp::traits::same_type >::type() ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/functions.h0000644000176200001440000000600614356652371022012 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // functions.h: Rcpp R/C++ interface class library -- sugar functions // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_FUNCTIONS_H #define RCPP_SUGAR_FUNCTIONS_H /* for exp( double ) */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif Rcpp/inst/include/Rcpp/sugar/functions/sapply.h0000644000176200001440000001133614366751467021323 0ustar liggesusers // sapply.h: Rcpp R/C++ interface class library -- sapply // // Copyright (C) 2010 - 2023 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__sapply_h #define Rcpp__sugar__sapply_h #if defined(RCPP_USING_CXX0X_OR_LATER) #include // ::std::result_of #endif namespace Rcpp{ namespace sugar{ template struct sapply_application_result_of { #if defined(RCPP_USING_CXX0X_OR_LATER) #if __cplusplus < 201703L // deprecated by C++17, removed by C++2020, see https://en.cppreference.com/w/cpp/types/result_of typedef typename ::std::result_of::type type; #else // since C++17, see https://en.cppreference.com/w/cpp/types/result_of typedef typename ::std::invoke_result::type type; #endif #else typedef typename ::Rcpp::traits::result_of::type type; #endif } ; // template // using sapply_application_result_of_t = typename sapply_application_result_of::type; template class Sapply : public VectorBase< Rcpp::traits::r_sexptype_traits< typename ::Rcpp::sugar::sapply_application_result_of::type >::rtype , true , Sapply > { public: typedef typename ::Rcpp::sugar::sapply_application_result_of::type result_type ; const static int RESULT_R_TYPE = Rcpp::traits::r_sexptype_traits::rtype ; typedef Rcpp::VectorBase VEC ; typedef typename Rcpp::traits::r_vector_element_converter::type converter_type ; typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, NA, T>::type EXT ; Sapply( const VEC& vec_, Function fun_ ) : vec(vec_.get_ref()), fun(fun_){ RCPP_DEBUG_1( "Sapply With Converter = %s", DEMANGLE(Sapply) ) RCPP_DEBUG_1( "Sapply Converter = %s", DEMANGLE(converter_type) ) } inline STORAGE operator[]( R_xlen_t i ) const { STORAGE res = converter_type::get( fun( vec[i] ) ); return res ; } inline R_xlen_t size() const { return vec.size() ; } private: const EXT& vec ; Function fun ; } ; template class Sapply : public VectorBase< Rcpp::traits::r_sexptype_traits< typename ::Rcpp::sugar::sapply_application_result_of::type >::rtype , true , Sapply > { public: typedef typename ::Rcpp::sugar::sapply_application_result_of::type result_type ; const static int RESULT_R_TYPE = Rcpp::traits::r_sexptype_traits::rtype ; typedef Rcpp::VectorBase VEC ; typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, NA, T>::type EXT ; Sapply( const VEC& vec_, Function fun_ ) : vec(vec_.get_ref()), fun(fun_){ RCPP_DEBUG_1( "Sapply = %s", DEMANGLE(Sapply) ) } inline STORAGE operator[]( R_xlen_t i ) const { return fun( vec[i] ) ; } inline R_xlen_t size() const { return vec.size() ; } private: const EXT& vec ; Function fun ; } ; } // sugar template inline sugar::Sapply< RTYPE,NA,T,Function, traits::same_type< typename ::Rcpp::sugar::sapply_application_result_of::type , typename Rcpp::traits::storage_type< traits::r_sexptype_traits< typename ::Rcpp::sugar::sapply_application_result_of::type >::rtype >::type >::value > sapply( const Rcpp::VectorBase& t, Function fun ){ return sugar::Sapply::type , typename Rcpp::traits::storage_type< traits::r_sexptype_traits< typename ::Rcpp::sugar::sapply_application_result_of::type >::rtype >::type >::value >( t, fun ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/which_max.h0000644000176200001440000000470312535036334021743 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // which_max.h: Rcpp R/C++ interface class library -- which.max // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__which_max_h #define Rcpp__sugar__which_max_h namespace Rcpp{ namespace sugar{ template class WhichMax { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; WhichMax(const VEC_TYPE& obj_ ) : obj(obj_){} R_xlen_t get() const { STORAGE current = obj[0] ; STORAGE min = current ; R_xlen_t index = 0 ; if( Rcpp::traits::is_na(current) ) return NA_INTEGER ; R_xlen_t n = obj.size() ; for( R_xlen_t i=1; i(current) ) return NA_INTEGER ; if( current > min ){ min = current ; index = i ; } } return index ; } private: const VEC_TYPE& obj ; } ; template class WhichMax { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; WhichMax(const VEC_TYPE& obj_ ) : obj(obj_){} R_xlen_t get() const { STORAGE current = obj[0] ; STORAGE min = current ; R_xlen_t index = 0 ; R_xlen_t n = obj.size() ; for( R_xlen_t i=1; i min ){ min = current ; index = i ; } } return index ; } private: const VEC_TYPE& obj ; } ; } // sugar template R_xlen_t which_max( const VectorBase& t ){ return sugar::WhichMax(t).get() ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/rev.h0000644000176200001440000000316412535036334020570 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // rev.h: Rcpp R/C++ interface class library -- rev // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__rev_h #define Rcpp__sugar__rev_h namespace Rcpp{ namespace sugar{ template class Rev : public Rcpp::VectorBase< RTYPE ,NA, Rev > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Rev( const VEC_TYPE& object_ ) : object(object_), n(object_.size() - 1) {} inline STORAGE operator[]( R_xlen_t i ) const { return object[n - i] ; } inline R_xlen_t size() const { return n + 1; } private: const VEC_TYPE& object ; R_xlen_t n ; } ; } // sugar template inline sugar::Rev rev( const VectorBase& t){ return sugar::Rev( t ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/functions/lapply.h0000644000176200001440000000334012535036334021271 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // lapply.h: Rcpp R/C++ interface class library -- lapply // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__lapply_h #define Rcpp__sugar__lapply_h namespace Rcpp{ namespace sugar{ template class Lapply : public VectorBase< VECSXP , true , Lapply > { public: typedef Rcpp::VectorBase VEC ; typedef typename ::Rcpp::traits::result_of::type result_type ; Lapply( const VEC& vec_, Function fun_ ) : vec(vec_), fun(fun_){} inline SEXP operator[]( R_xlen_t i ) const { return Rcpp::wrap( fun( vec[i] ) ); } inline R_xlen_t size() const { return vec.size() ; } private: const VEC& vec ; Function fun ; } ; } // sugar template inline sugar::Lapply lapply( const Rcpp::VectorBase& t, Function fun ){ return sugar::Lapply( t, fun ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/operators/0000755000176200001440000000000012716501067017626 5ustar liggesusersRcpp/inst/include/Rcpp/sugar/operators/logical_operators__Vector__Vector.h0000644000176200001440000000730712316773510026660 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // logical_operators__Vector__Vector.h: Rcpp R/C++ interface class library -- // logical operators for Vector to Vector comparisons // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__logical_operators__Vector__Vector_h #define Rcpp__sugar__logical_operators__Vector__Vector_h /* Vector < Vector */ template inline Rcpp::sugar::Comparator< RTYPE , Rcpp::sugar::less, LHS_NA, LHS_T, RHS_NA, RHS_T > operator<( const Rcpp::VectorBase& lhs , const Rcpp::VectorBase& rhs ){ return Rcpp::sugar::Comparator< RTYPE, Rcpp::sugar::less, LHS_NA, LHS_T, RHS_NA, RHS_T >( lhs, rhs ) ; } /* Vector > Vector */ template inline Rcpp::sugar::Comparator< RTYPE , Rcpp::sugar::greater, LHS_NA, LHS_T, RHS_NA, RHS_T > operator>( const Rcpp::VectorBase& lhs , const Rcpp::VectorBase& rhs ){ return Rcpp::sugar::Comparator< RTYPE, Rcpp::sugar::greater, LHS_NA, LHS_T, RHS_NA, RHS_T >( lhs, rhs ) ; } /* Vector <= Vector */ template inline Rcpp::sugar::Comparator< RTYPE , Rcpp::sugar::less_or_equal, LHS_NA, LHS_T, RHS_NA, RHS_T > operator<=( const Rcpp::VectorBase& lhs , const Rcpp::VectorBase& rhs ){ return Rcpp::sugar::Comparator< RTYPE, Rcpp::sugar::less_or_equal, LHS_NA, LHS_T, RHS_NA, RHS_T >( lhs, rhs ) ; } /* Vector >= Vector */ template inline Rcpp::sugar::Comparator< RTYPE , Rcpp::sugar::greater_or_equal, LHS_NA, LHS_T, RHS_NA, RHS_T > operator>=( const Rcpp::VectorBase& lhs , const Rcpp::VectorBase& rhs ){ return Rcpp::sugar::Comparator< RTYPE, Rcpp::sugar::greater_or_equal, LHS_NA, LHS_T, RHS_NA, RHS_T >( lhs, rhs ) ; } /* Vector == Vector */ template inline Rcpp::sugar::Comparator< RTYPE , Rcpp::sugar::equal, LHS_NA, LHS_T, RHS_NA, RHS_T > operator==( const Rcpp::VectorBase& lhs , const Rcpp::VectorBase& rhs ){ return Rcpp::sugar::Comparator< RTYPE, Rcpp::sugar::equal, LHS_NA, LHS_T, RHS_NA, RHS_T >( lhs, rhs ) ; } /* Vector != Vector */ template inline Rcpp::sugar::Comparator< RTYPE , Rcpp::sugar::not_equal, LHS_NA, LHS_T, RHS_NA, RHS_T > operator!=( const Rcpp::VectorBase& lhs , const Rcpp::VectorBase& rhs ){ return Rcpp::sugar::Comparator< RTYPE, Rcpp::sugar::not_equal, LHS_NA, LHS_T, RHS_NA, RHS_T >( lhs, rhs ) ; } #endif Rcpp/inst/include/Rcpp/sugar/operators/operators.h0000644000176200001440000000271412316773510022021 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // any.h: Rcpp R/C++ interface class library -- any // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__operators__operators_h #define Rcpp__sugar__operators__operators_h // binary operators #include #include #include #include #include #include #include #include // unary operators #include #include #endif Rcpp/inst/include/Rcpp/sugar/operators/minus.h0000644000176200001440000003521712716501067021142 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // minus.h: Rcpp R/C++ interface class library -- operator- // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__minus_h #define Rcpp__sugar__minus_h namespace Rcpp{ namespace sugar{ template class Minus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, LHS_NA, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, RHS_NA, RHS_T>::type RHS_EXT ; Minus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE x = lhs[i] ; if( Rcpp::traits::is_na( x ) ) return x ; STORAGE y = rhs[i] ; return Rcpp::traits::is_na( y ) ? y : ( x - y ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE = REALSXP template class Minus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Minus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs[i] - rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Minus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Minus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE y = rhs[i] ; if( Rcpp::traits::is_na( y ) ) return y ; return lhs[i] - y ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE = REALSXP template class Minus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Minus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs[i] - rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Minus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Minus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE x = lhs[i] ; if( Rcpp::traits::is_na( x ) ) return x ; return x - rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE = REALSXP template class Minus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Minus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs[i] - rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Minus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Minus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline STORAGE operator[]( R_xlen_t i ) const { return lhs[i] - rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Minus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Minus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs[i] - rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Minus_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Minus_Vector_Primitive( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_), rhs_na( Rcpp::traits::is_na(rhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { if( rhs_na ) return rhs ; STORAGE x = lhs[i] ; return Rcpp::traits::is_na(x) ? x : (x - rhs) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_EXT& lhs ; STORAGE rhs ; bool rhs_na ; } ; template class Minus_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Minus_Vector_Primitive( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_){} inline double operator[]( R_xlen_t i ) const { return lhs[i] - rhs ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_EXT& lhs ; double rhs ; } ; template class Minus_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Minus_Vector_Primitive( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_), rhs_na( Rcpp::traits::is_na(rhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { if( rhs_na ) return rhs ; STORAGE x = lhs[i] ; return Rcpp::traits::is_na(x) ? x : (x - rhs) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_EXT& lhs ; STORAGE rhs ; bool rhs_na ; } ; template class Minus_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Minus_Vector_Primitive( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_){} inline double operator[]( R_xlen_t i ) const { return lhs[i] - rhs ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_EXT& lhs ; double rhs ; } ; template class Minus_Primitive_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Minus_Primitive_Vector( STORAGE lhs_, const VEC_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_.get_ref()), lhs_na( Rcpp::traits::is_na(lhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { if( lhs_na ) return lhs ; return lhs - rhs[i] ; } inline R_xlen_t size() const { return rhs.size() ; } private: STORAGE lhs ; const VEC_EXT& rhs ; bool lhs_na ; } ; template class Minus_Primitive_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Minus_Primitive_Vector( double lhs_, const VEC_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_.get_ref()){} inline double operator[]( R_xlen_t i ) const { return lhs - rhs[i] ; } inline R_xlen_t size() const { return rhs.size() ; } private: double lhs ; const VEC_EXT& rhs ; } ; template class Minus_Primitive_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Minus_Primitive_Vector( STORAGE lhs_, const VEC_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_.get_ref()), lhs_na( Rcpp::traits::is_na(lhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { if( lhs_na ) return lhs ; return lhs - rhs[i] ; } inline R_xlen_t size() const { return rhs.size() ; } private: STORAGE lhs ; const VEC_EXT& rhs ; bool lhs_na ; } ; template class Minus_Primitive_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Minus_Primitive_Vector( double lhs_, const VEC_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_.get_ref()){} inline double operator[]( R_xlen_t i ) const { return lhs - rhs[i] ; } inline R_xlen_t size() const { return rhs.size() ; } private: double lhs ; const VEC_EXT& rhs ; } ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, sugar::Minus_Vector_Primitive< RTYPE , NA, T > >::type operator-( const VectorBase& lhs, const U &rhs ) { return sugar::Minus_Vector_Primitive( lhs, rhs ) ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, sugar::Minus_Primitive_Vector< RTYPE , NA,T> >::type operator-( const U &lhs, const VectorBase& rhs ) { return sugar::Minus_Primitive_Vector( lhs, rhs ) ; } template inline sugar::Minus_Vector_Vector< RTYPE , LHS_NA, LHS_T, RHS_NA, RHS_T > operator-( const VectorBase& lhs, const VectorBase& rhs ) { return sugar::Minus_Vector_Vector< RTYPE, LHS_NA,LHS_T, RHS_NA,RHS_T >( lhs, rhs ) ; } } #endif Rcpp/inst/include/Rcpp/sugar/operators/divides.h0000644000176200001440000003562312716501067021437 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // divides.h: Rcpp R/C++ interface class library -- operator- // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__divides_h #define Rcpp__sugar__divides_h namespace Rcpp{ namespace sugar{ template class Divides_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, LHS_NA, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, RHS_NA, RHS_T>::type RHS_EXT ; Divides_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE x = lhs[i] ; if( Rcpp::traits::is_na( x ) ) return x ; STORAGE y = rhs[i] ; return Rcpp::traits::is_na( y ) ? y : ( x / y ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE = REALSXP template class Divides_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Divides_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs[i] / rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Divides_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, false, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, RHS_NA, RHS_T>::type RHS_EXT ; Divides_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE y = rhs[i] ; if( Rcpp::traits::is_na( y ) ) return y ; return lhs[i] / y ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE = REALSXP template class Divides_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Divides_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs[i] / rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Divides_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, LHS_NA, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, false, RHS_T>::type RHS_EXT ; Divides_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE x = lhs[i] ; if( Rcpp::traits::is_na( x ) ) return x ; return x / rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE = REALSXP template class Divides_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Divides_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs[i] / rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Divides_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Divides_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline STORAGE operator[]( R_xlen_t i ) const { return lhs[i] / rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE : REALSXP template class Divides_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Divides_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs[i] / rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Divides_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Divides_Vector_Primitive( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_), rhs_na( Rcpp::traits::is_na(rhs_) ) { } inline STORAGE operator[]( R_xlen_t i ) const { if(rhs_na) return rhs ; STORAGE x = lhs[i] ; return Rcpp::traits::is_na(x) ? x : (x / rhs) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_EXT& lhs ; STORAGE rhs ; bool rhs_na ; } ; // RTYPE : REALSXP template class Divides_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Divides_Vector_Primitive( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) { } inline double operator[]( R_xlen_t i ) const { return lhs[i] / rhs ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_EXT& lhs ; double rhs ; } ; template class Divides_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Divides_Vector_Primitive( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_), rhs_na( Rcpp::traits::is_na(rhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { if( rhs_na ) return rhs ; STORAGE x = lhs[i] ; return Rcpp::traits::is_na(x) ? x : (x / rhs) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_EXT& lhs ; STORAGE rhs ; bool rhs_na ; } ; // RTYPE = REALSXP template class Divides_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Divides_Vector_Primitive( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_), rhs(rhs_){} inline double operator[]( R_xlen_t i ) const { return lhs[i] / rhs ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_EXT& lhs ; double rhs ; } ; template class Divides_Primitive_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; typedef typename traits::storage_type::type STORAGE ; Divides_Primitive_Vector( STORAGE lhs_, const VEC_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_.get_ref()), lhs_na( Rcpp::traits::is_na(lhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { if( lhs_na ) return lhs ; STORAGE x = rhs[i] ; return Rcpp::traits::is_na(x) ? x : (lhs / x) ; } inline R_xlen_t size() const { return rhs.size() ; } private: STORAGE lhs ; const VEC_EXT& rhs ; bool lhs_na ; } ; // RTYPE = REALSXP template class Divides_Primitive_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Divides_Primitive_Vector( double lhs_, const VEC_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs / rhs[i] ; } inline R_xlen_t size() const { return rhs.size() ; } private: double lhs ; const VEC_EXT& rhs ; } ; template class Divides_Primitive_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Divides_Primitive_Vector( STORAGE lhs_, const VEC_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_.get_ref()), lhs_na( Rcpp::traits::is_na(lhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { if( lhs_na ) return lhs ; return lhs / rhs[i] ; } inline R_xlen_t size() const { return rhs.size() ; } private: STORAGE lhs ; const VEC_EXT& rhs ; bool lhs_na ; } ; // RTYPE = REALSXP template class Divides_Primitive_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Divides_Primitive_Vector( double lhs_, const VEC_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs / rhs[i] ; } inline R_xlen_t size() const { return rhs.size() ; } private: double lhs ; const VEC_EXT& rhs ; } ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, sugar::Divides_Vector_Primitive< RTYPE , NA, T > >::type operator/( const VectorBase& lhs, const U &rhs ) { return sugar::Divides_Vector_Primitive( lhs, rhs ) ; } template inline typename traits::enable_if< traits::is_convertible< typename traits::remove_const_and_reference::type, typename traits::storage_type::type>::value, sugar::Divides_Primitive_Vector< RTYPE , NA,T> >::type operator/( const U &lhs, const VectorBase& rhs ) { return sugar::Divides_Primitive_Vector( lhs, rhs ) ; } template inline sugar::Divides_Vector_Vector< RTYPE , LHS_NA, LHS_T, RHS_NA, RHS_T > operator/( const VectorBase& lhs, const VectorBase& rhs ) { return sugar::Divides_Vector_Vector< RTYPE, LHS_NA,LHS_T, RHS_NA,RHS_T >( lhs, rhs ) ; } } #endif Rcpp/inst/include/Rcpp/sugar/operators/Comparator_With_One_Value.h0000644000176200001440000000573012535036334025042 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // LessThan.h: Rcpp R/C++ interface class library -- vector operators // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__Comparator_With_One_Value_h #define Rcpp__sugar__Comparator_With_One_Value_h namespace Rcpp{ namespace sugar{ template class Comparator_With_One_Value : public ::Rcpp::VectorBase< LGLSXP, true, Comparator_With_One_Value > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef int (Comparator_With_One_Value::*METHOD)(int) const ; Comparator_With_One_Value( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_), rhs(rhs_), m(), op() { m = Rcpp::traits::is_na(rhs) ? &Comparator_With_One_Value::rhs_is_na : &Comparator_With_One_Value::rhs_is_not_na ; } inline int operator[]( R_xlen_t i ) const { return (this->*m)(i) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_TYPE& lhs ; STORAGE rhs ; METHOD m ; Operator op ; inline int rhs_is_na(int i) const { return rhs ; } inline int rhs_is_not_na(int i) const { STORAGE x = lhs[i] ; return Rcpp::traits::is_na(x) ? x : op( x, rhs ) ; } } ; template class Comparator_With_One_Value : public ::Rcpp::VectorBase< RTYPE, true, Comparator_With_One_Value > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef int (Comparator_With_One_Value::*METHOD)(int) const ; Comparator_With_One_Value( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_), rhs(rhs_), m(), op() { m = Rcpp::traits::is_na(rhs) ? &Comparator_With_One_Value::rhs_is_na : &Comparator_With_One_Value::rhs_is_not_na ; } inline int operator[]( R_xlen_t i ) const { return (this->*m)(i) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_TYPE& lhs ; STORAGE rhs ; METHOD m ; Operator op ; inline int rhs_is_na(int i) const { return rhs ; } inline int rhs_is_not_na(int i) const { return op( lhs[i], rhs ) ; } } ; } // sugar } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/operators/Comparator.h0000644000176200001440000000655512535036334022120 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // LessThan.h: Rcpp R/C++ interface class library -- vector operators // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__Comparator_h #define Rcpp__sugar__Comparator_h namespace Rcpp{ namespace sugar{ template class Comparator : public ::Rcpp::VectorBase< LGLSXP, true, Comparator > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; Comparator( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_), op() {} inline int operator[]( R_xlen_t i ) const { STORAGE x = lhs[i] ; if( Rcpp::traits::is_na( x ) ) return NA_LOGICAL ; STORAGE y = rhs[i] ; if( Rcpp::traits::is_na( y ) ) return NA_LOGICAL ; return op( x, y ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; Operator op ; } ; template class Comparator : public ::Rcpp::VectorBase< LGLSXP, true, Comparator > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; Comparator( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_), op() {} inline int operator[]( R_xlen_t i ) const { STORAGE y = rhs[i] ; if( Rcpp::traits::is_na( y ) ) return NA_LOGICAL ; return op( lhs[i], y ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; Operator op ; } ; template class Comparator : public ::Rcpp::VectorBase< LGLSXP, true, Comparator > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename traits::storage_type::type STORAGE ; Comparator( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_), op() {} inline int operator[]( R_xlen_t i ) const { return op( lhs[i], rhs[i] ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; Operator op ; } ; } } #endif Rcpp/inst/include/Rcpp/sugar/operators/not.h0000644000176200001440000000546712535036334020612 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // not.h: Rcpp R/C++ interface class library -- unary operator! // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__not_h #define Rcpp__sugar__not_h namespace Rcpp{ namespace sugar{ template class not_ { public: typedef typename traits::storage_type::type STORAGE ; inline int apply( STORAGE x ) const { return Rcpp::traits::is_na(x) ? NA_LOGICAL : (x ? FALSE : TRUE) ; } } ; template class not_ { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; inline int apply( STORAGE x ) const { return x ? FALSE : TRUE ; } } ; template class not_{ public: inline int apply( double x ) const { return Rcpp::traits::is_na( x ) ? NA_LOGICAL : ( (x == 0) ? FALSE : TRUE ) ; } } ; template <> class not_{ public: inline int apply( double x ) const { return ( x == 0.0 ? FALSE : TRUE ) ; } } ; template class not_{ public: inline int apply( Rcomplex x ) const { return Rcpp::traits::is_na( x ) ? NA_LOGICAL : ( (x.r == 0.0 & x.i == 0.0 ) ? FALSE : TRUE ) ; } } ; template <> class not_{ public: inline int apply( Rcomplex x ) const { return ((x.r == 0.0) & (x.i == 0.0) ) ? FALSE : TRUE ; } } ; template class Not_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef not_ OPERATOR ; Not_Vector( const VEC_TYPE& lhs_ ) : lhs(lhs_), op() {} inline STORAGE operator[]( R_xlen_t i ) const { return op.apply( lhs[i] ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_TYPE& lhs ; OPERATOR op ; } ; } } template inline Rcpp::sugar::Not_Vector< RTYPE , NA , T > operator!( const Rcpp::VectorBase& x ) { return Rcpp::sugar::Not_Vector( x ) ; } #endif Rcpp/inst/include/Rcpp/sugar/operators/logical_operators__Vector__primitive.h0000644000176200001440000001323012316773510027416 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // logical_operators__Vector__primitive.h: Rcpp R/C++ interface class library -- // logical operators for Vector to primitive comparisons // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__logical_operators__Vector__primitive_h #define Rcpp__sugar__logical_operators__Vector__primitive_h /* Vector < primitive */ template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::less, NA, T > operator<( const Rcpp::VectorBase& lhs , typename Rcpp::traits::storage_type::type rhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::less, NA, T >( lhs, rhs ) ; } template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::less, NA, T > operator>( typename Rcpp::traits::storage_type::type rhs, const Rcpp::VectorBase& lhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::less, NA, T >( lhs, rhs ) ; } /* Vector > primitive */ template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::greater, NA, T > operator>( const Rcpp::VectorBase& lhs , typename Rcpp::traits::storage_type::type rhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::greater, NA, T >( lhs, rhs ) ; } template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::greater, NA, T > operator<( typename Rcpp::traits::storage_type::type rhs, const Rcpp::VectorBase& lhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::greater, NA, T >( lhs, rhs ) ; } /* Vector <= primitive */ template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::less_or_equal, NA, T > operator<=( const Rcpp::VectorBase& lhs , typename Rcpp::traits::storage_type::type rhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::less_or_equal, NA, T >( lhs, rhs ) ; } template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::less_or_equal, NA, T > operator>=( typename Rcpp::traits::storage_type::type rhs, const Rcpp::VectorBase& lhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::less_or_equal, NA, T >( lhs, rhs ) ; } /* Vector >= primitive */ template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::greater_or_equal, NA, T > operator>=( const Rcpp::VectorBase& lhs , typename Rcpp::traits::storage_type::type rhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::greater_or_equal, NA, T >( lhs, rhs ) ; } template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::greater_or_equal, NA, T > operator<=( typename Rcpp::traits::storage_type::type rhs, const Rcpp::VectorBase& lhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::greater_or_equal, NA, T >( lhs, rhs ) ; } /* Vector == primitive */ template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::equal, NA, T > operator==( const Rcpp::VectorBase& lhs , typename Rcpp::traits::storage_type::type rhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::equal, NA, T >( lhs, rhs ) ; } template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::equal, NA, T > operator==( typename Rcpp::traits::storage_type::type rhs, const Rcpp::VectorBase& lhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::equal, NA, T >( lhs, rhs ) ; } /* Vector != primitive */ template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::not_equal, NA, T > operator!=( const Rcpp::VectorBase& lhs , typename Rcpp::traits::storage_type::type rhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::not_equal, NA, T >( lhs, rhs ) ; } template inline Rcpp::sugar::Comparator_With_One_Value< RTYPE , Rcpp::sugar::not_equal, NA, T > operator!=( typename Rcpp::traits::storage_type::type rhs, const Rcpp::VectorBase& lhs ){ return Rcpp::sugar::Comparator_With_One_Value< RTYPE, Rcpp::sugar::not_equal, NA, T >( lhs, rhs ) ; } #endif Rcpp/inst/include/Rcpp/sugar/operators/plus.h0000644000176200001440000003744212716501067020774 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 4 -*- // // plus.h: Rcpp R/C++ interface class library -- operator+ // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__plus_h #define Rcpp__sugar__plus_h namespace Rcpp{ namespace sugar{ template class Plus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor< RTYPE, LHS_NA, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, RHS_NA, RHS_T>::type RHS_EXT ; Plus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE lhs_ = lhs[i] ; if( traits::is_na(lhs_) ) return lhs_ ; STORAGE rhs_ = rhs[i] ; return traits::is_na(rhs_) ? rhs_ : (lhs_ + rhs_) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // specialization of the above for REALSXP because : // NA_REAL + NA_REAL = NA_REAL // NA_REAL + x = NA_REAL // x + NA_REAL = NA_REAL template class Plus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Plus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) {} inline double operator[]( R_xlen_t i ) const { return lhs[i] + rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // specialization LHS_NA = false template class Plus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor< RTYPE, false, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, RHS_NA, RHS_T>::type RHS_EXT ; Plus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE rhs_ = rhs[i] ; if( traits::is_na(rhs_) ) return rhs_ ; return lhs[i] + rhs_ ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // LHS_NA = false & RTYPE = REALSXP template class Plus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Plus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline double operator[]( R_xlen_t i ) const { return lhs[i] + rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // specialization for RHS_NA = false template class Plus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor< RTYPE, LHS_NA, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, false, RHS_T>::type RHS_EXT ; Plus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE lhs_ = lhs[i] ; if( traits::is_na(lhs_) ) return lhs_ ; return lhs_ + rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RHS_NA = false, RTYPE = REALSXP template class Plus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Plus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline double operator[]( R_xlen_t i ) const { return lhs[i] + rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // specialization for RHS_NA = false and LHS_NA = false template class Plus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor< RTYPE, false, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, false, RHS_T>::type RHS_EXT ; Plus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline STORAGE operator[]( R_xlen_t i ) const { return lhs[i] + rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // specialization for RHS_NA = false and LHS_NA = false, RTYPE = REALSXP template class Plus_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Plus_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline double operator[]( R_xlen_t i ) const { return lhs[i] + rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Plus_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, NA, T>::type EXT ; Plus_Vector_Primitive( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_), rhs_na( Rcpp::traits::is_na(rhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { if( rhs_na ) return rhs ; STORAGE x = lhs[i] ; return Rcpp::traits::is_na(x) ? x : (x + rhs) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; STORAGE rhs ; bool rhs_na ; } ; // RTYPE = REALSXP template class Plus_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor< REALSXP, NA, T>::type EXT ; Plus_Vector_Primitive( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline double operator[]( R_xlen_t i ) const { return rhs + lhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; double rhs ; } ; template class Plus_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, false, T>::type EXT ; Plus_Vector_Primitive( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_), rhs_na( Rcpp::traits::is_na(rhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { return rhs_na ? rhs : (rhs + lhs[i] ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; STORAGE rhs ; bool rhs_na ; } ; // RTYPE = REALSXP template class Plus_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor< REALSXP, false, T>::type EXT ; Plus_Vector_Primitive( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline double operator[]( R_xlen_t i ) const { return rhs + lhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; double rhs ; } ; // Vector * nona(primitive) template class Plus_Vector_Primitive_nona : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, NA, T>::type EXT ; Plus_Vector_Primitive_nona( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE x = lhs[i] ; return Rcpp::traits::is_na(x) ? x : (x + rhs) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; STORAGE rhs ; } ; template class Plus_Vector_Primitive_nona : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type EXT ; Plus_Vector_Primitive_nona( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline double operator[]( R_xlen_t i ) const { return rhs + lhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; double rhs ; } ; template class Plus_Vector_Primitive_nona : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, false, T>::type EXT ; Plus_Vector_Primitive_nona( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline STORAGE operator[]( R_xlen_t i ) const { return rhs + lhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; STORAGE rhs ; } ; // RTYPE = REALSXP template class Plus_Vector_Primitive_nona : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor< REALSXP, false, T>::type EXT ; Plus_Vector_Primitive_nona( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline double operator[]( R_xlen_t i ) const { return rhs + lhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; double rhs ; } ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, typename sugar::Plus_Vector_Primitive >::type operator+( const VectorBase& lhs, const U &rhs ) { return sugar::Plus_Vector_Primitive( lhs, rhs ) ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, typename sugar::Plus_Vector_Primitive< RTYPE , NA , T> >::type operator+( const U &rhs, const VectorBase& lhs ) { return sugar::Plus_Vector_Primitive( lhs, rhs ) ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, sugar::Plus_Vector_Primitive_nona >::type operator+( const VectorBase& lhs, const typename sugar::NonaPrimitive< U > &rhs ) { return sugar::Plus_Vector_Primitive_nona( lhs, rhs ) ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, sugar::Plus_Vector_Primitive_nona< RTYPE , NA , T> >::type operator+( const typename sugar::NonaPrimitive< U > &rhs, const VectorBase& lhs ) { return sugar::Plus_Vector_Primitive_nona( lhs, rhs ) ; } template inline sugar::Plus_Vector_Vector< RTYPE , LHS_NA, LHS_T, RHS_NA, RHS_T > operator+( const VectorBase& lhs, const VectorBase& rhs ) { return sugar::Plus_Vector_Vector< RTYPE, LHS_NA, LHS_T, RHS_NA, RHS_T >( lhs, rhs ) ; } } #endif Rcpp/inst/include/Rcpp/sugar/operators/r_binary_op.h0000644000176200001440000000326412316773510022307 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // LessThan.h: Rcpp R/C++ interface class library -- vector operators // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__r_binary_op_h #define Rcpp__sugar__r_binary_op_h namespace Rcpp{ namespace sugar{ #undef RCPP_OP #define RCPP_OP(NAME,OP) \ template \ class NAME { \ public: \ typedef typename traits::storage_type::type STORAGE ; \ inline int operator()( STORAGE lhs, STORAGE rhs) const { \ return lhs OP rhs ; \ } \ } ; RCPP_OP(less,<) RCPP_OP(greater,>) RCPP_OP(less_or_equal,<=) RCPP_OP(greater_or_equal,>=) RCPP_OP(equal,==) RCPP_OP(not_equal,!=) #undef RCPP_OP } // sugar } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/operators/unary_minus.h0000644000176200001440000000616712535036334022361 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // unary_minus.h: Rcpp R/C++ interface class library -- unary operator- // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__unary_minus_h #define Rcpp__sugar__unary_minus_h namespace Rcpp{ namespace sugar{ template struct unary_minus_result_type{ typedef typename traits::storage_type::type type ; enum{ value = RTYPE } ; } ; template <> struct unary_minus_result_type{ typedef traits::storage_type::type type ; enum{ value = INTSXP } ; } ; template class unary_minus { public: typedef typename traits::storage_type::type STORAGE ; typedef typename unary_minus_result_type::type RESULT ; inline RESULT apply( STORAGE x ) const { return Rcpp::traits::is_na(x) ? x : ( -x ) ; } } ; template class unary_minus { public: typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef typename unary_minus_result_type::type RESULT ; inline RESULT apply( STORAGE x ) const { return -x ; } } ; template class unary_minus{ public: inline Rcomplex apply( Rcomplex x ) const { if (Rcpp::traits::is_na( x ) ) return x; Rcomplex cx ; cx.r = -x.r; cx.i = -x.i ; return cx ; } } ; template <> class unary_minus{ public: inline Rcomplex apply( Rcomplex x ) const { Rcomplex cx ; cx.r = -x.r; cx.i = -x.i ; return cx ; } } ; template class UnaryMinus_Vector : public Rcpp::VectorBase< unary_minus_result_type::value , NA, UnaryMinus_Vector< unary_minus_result_type::value ,NA,T> > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename unary_minus_result_type::type RESULT ; typedef unary_minus OPERATOR ; UnaryMinus_Vector( const VEC_TYPE& lhs_ ) : lhs(lhs_), op() {} inline RESULT operator[]( R_xlen_t i ) const { return op.apply( lhs[i] ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const VEC_TYPE& lhs ; OPERATOR op ; } ; } } template inline Rcpp::sugar::UnaryMinus_Vector< RTYPE , NA , T > operator-( const Rcpp::VectorBase& x ) { return Rcpp::sugar::UnaryMinus_Vector( x ) ; } #endif Rcpp/inst/include/Rcpp/sugar/operators/times.h0000644000176200001440000003716112716501067021130 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 4 -*- // // times.h: Rcpp R/C++ interface class library -- operator* // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__times_h #define Rcpp__sugar__times_h namespace Rcpp{ namespace sugar{ template class Times_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor< RTYPE, LHS_NA, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, RHS_NA, RHS_T>::type RHS_EXT ; Times_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) { } inline STORAGE operator[]( R_xlen_t i ) const { STORAGE lhs_ = lhs[i] ; if( traits::is_na(lhs_) ) return lhs_ ; STORAGE rhs_ = rhs[i] ; return traits::is_na(rhs_) ? rhs_ : (lhs_ * rhs_) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE = REALSXP template class Times_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Times_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()) { } inline double operator[]( R_xlen_t i ) const { return lhs[i] * rhs[i]; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // specialization LHS_NA = false template class Times_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor< RTYPE, false, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, RHS_NA, RHS_T>::type RHS_EXT ; Times_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE rhs_ = rhs[i] ; if( traits::is_na(rhs_) ) return rhs_ ; return lhs[i] * rhs_ ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE = REALSXP template class Times_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Times_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline double operator[]( R_xlen_t i ) const { return lhs[i] * rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // specialization for RHS_NA = false template class Times_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor< RTYPE, LHS_NA, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, false, RHS_T>::type RHS_EXT ; Times_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE lhs_ = lhs[i] ; if( traits::is_na(lhs_) ) return lhs_ ; return lhs_ * rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE = REALSXP template class Times_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Times_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline double operator[]( R_xlen_t i ) const { return lhs[i] * rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // specialization for RHS_NA = false and LHS_NA = false template class Times_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor< RTYPE, false, LHS_T>::type LHS_EXT ; typedef typename Rcpp::traits::Extractor< RTYPE, false, RHS_T>::type RHS_EXT ; Times_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline STORAGE operator[]( R_xlen_t i ) const { return lhs[i] * rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; // RTYPE = REALSXP template class Times_Vector_Vector : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; typedef typename Rcpp::traits::Extractor::type LHS_EXT ; typedef typename Rcpp::traits::Extractor::type RHS_EXT ; Times_Vector_Vector( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_.get_ref()){} inline double operator[]( R_xlen_t i ) const { return lhs[i] * rhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const LHS_EXT& lhs ; const RHS_EXT& rhs ; } ; template class Times_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, NA, T>::type EXT ; Times_Vector_Primitive( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_), rhs_na( Rcpp::traits::is_na(rhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { if( rhs_na ) return rhs ; STORAGE x = lhs[i] ; return Rcpp::traits::is_na(x) ? x : (x * rhs) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; STORAGE rhs ; bool rhs_na ; } ; // RTYPE = REALSXP template class Times_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type EXT ; Times_Vector_Primitive( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline double operator[]( R_xlen_t i ) const { return rhs * lhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; double rhs ; } ; template class Times_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, false, T>::type EXT ; Times_Vector_Primitive( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_), rhs_na( Rcpp::traits::is_na(rhs_) ) {} inline STORAGE operator[]( R_xlen_t i ) const { return rhs_na ? rhs : (rhs * lhs[i] ) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; STORAGE rhs ; bool rhs_na ; } ; // RTYPE = REALSXP template class Times_Vector_Primitive : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type EXT ; Times_Vector_Primitive( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline double operator[]( R_xlen_t i ) const { return rhs * lhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; double rhs ; } ; // Vector * nona(primitive) template class Times_Vector_Primitive_nona : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, NA, T>::type EXT ; Times_Vector_Primitive_nona( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline STORAGE operator[]( R_xlen_t i ) const { STORAGE x = lhs[i] ; return Rcpp::traits::is_na(x) ? x : (x * rhs) ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; STORAGE rhs ; } ; // RTYPE = REALSXP template class Times_Vector_Primitive_nona : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type EXT ; Times_Vector_Primitive_nona( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline double operator[]( R_xlen_t i ) const { return lhs[i] * rhs ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; double rhs ; } ; template class Times_Vector_Primitive_nona : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename traits::storage_type::type STORAGE ; typedef typename Rcpp::traits::Extractor< RTYPE, false, T>::type EXT ; Times_Vector_Primitive_nona( const VEC_TYPE& lhs_, STORAGE rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline STORAGE operator[]( R_xlen_t i ) const { return rhs * lhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; STORAGE rhs ; } ; template class Times_Vector_Primitive_nona : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type EXT ; Times_Vector_Primitive_nona( const VEC_TYPE& lhs_, double rhs_ ) : lhs(lhs_.get_ref()), rhs(rhs_) {} inline double operator[]( R_xlen_t i ) const { return rhs * lhs[i] ; } inline R_xlen_t size() const { return lhs.size() ; } private: const EXT& lhs ; double rhs ; } ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, sugar::Times_Vector_Primitive >::type operator*( const VectorBase& lhs, const U &rhs ) { return sugar::Times_Vector_Primitive( lhs, rhs ) ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, sugar::Times_Vector_Primitive< RTYPE , NA , T > >::type operator*( const U &rhs, const VectorBase& lhs ) { return sugar::Times_Vector_Primitive( lhs, rhs ) ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, sugar::Times_Vector_Primitive_nona >::type operator*( const VectorBase& lhs, const typename sugar::NonaPrimitive< U > &rhs ) { return sugar::Times_Vector_Primitive_nona( lhs, rhs ) ; } template inline typename traits::enable_if::type, typename traits::storage_type::type>::value, sugar::Times_Vector_Primitive_nona< RTYPE , NA , T > >::type operator*( const typename sugar::NonaPrimitive< U > &rhs, const VectorBase& lhs ) { return sugar::Times_Vector_Primitive_nona( lhs, rhs ) ; } template inline sugar::Times_Vector_Vector< RTYPE , LHS_NA, LHS_T, RHS_NA, RHS_T > operator*( const VectorBase& lhs, const VectorBase& rhs ) { return sugar::Times_Vector_Vector< RTYPE, LHS_NA, LHS_T, RHS_NA, RHS_T >( lhs, rhs ) ; } } #endif Rcpp/inst/include/Rcpp/sugar/Range.h0000644000176200001440000000466113004204647017017 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // Range.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_RANGE_H #define RCPP_SUGAR_RANGE_H namespace Rcpp{ class Range : public VectorBase{ public: Range( R_xlen_t start_, R_xlen_t end__ ) : start(start_), end_(end__){ if( start_ > end__ ){ throw std::range_error( "upper value must be greater than lower value" ) ; } } inline R_xlen_t size() const{ return end_ - start + 1; } inline R_xlen_t operator[]( R_xlen_t i) const { return start + i ; } Range& operator++() { start++ ; end_++ ; return *this ; } Range operator++(int) { Range orig(*this) ; ++(*this); return orig ; } Range& operator--() { start-- ; end_-- ; return *this ; } Range operator--(int) { Range orig(*this) ; --(*this); return orig ; } Range& operator+=( int n ) { start += n ; end_ += n ; return *this ; } Range& operator-=( int n ) { start -= n ; end_ -= n ; return *this ; } Range operator+( int n ){ return Range( start + n, end_ + n ) ; } Range operator-( int n ){ return Range( start - n, end_ - n ) ; } inline R_xlen_t get_start() const { return start ; } inline R_xlen_t get_end() const { return end_ ; } private: R_xlen_t start ; R_xlen_t end_ ; } ; } #endif Rcpp/inst/include/Rcpp/sugar/sugar_forward.h0000644000176200001440000000212612253723677020640 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // sugar_forward.h: Rcpp R/C++ interface class library -- forward declaration for Rcpp::sugar // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_FORWARD_H #define RCPP_SUGAR_FORWARD_H // traits #include // abstractions #include #include #endif Rcpp/inst/include/Rcpp/sugar/block/0000755000176200001440000000000012535036334016701 5ustar liggesusersRcpp/inst/include/Rcpp/sugar/block/SugarBlock_1.h0000644000176200001440000000504312535036334021330 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // SugarBlock.h: Rcpp R/C++ interface class library -- sugar functions // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_BLOCK_1_H #define RCPP_SUGAR_BLOCK_1_H namespace Rcpp{ namespace sugar{ template class SugarBlock_1 : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , NA, SugarBlock_1 > { public: typedef RESULT_TYPE (*FunPtr)(U1) ; SugarBlock_1( FunPtr ptr_, const T1 & vec_) : ptr(ptr_), vec(vec_){} inline RESULT_TYPE operator[]( R_xlen_t i) const { return ptr( vec[i] ) ; } inline R_xlen_t size() const { return vec.size() ; } private: FunPtr ptr ; const T1& vec ; }; } // sugar } // Rcpp #define SB1_T VectorBase #define SUGAR_BLOCK_1(__NAME__,__SYMBOL__) \ namespace Rcpp{ \ template \ inline sugar::SugarBlock_1 \ __NAME__( \ const SB1_T& t \ ){ \ return sugar::SugarBlock_1( \ __SYMBOL__ , t \ ) ; \ } \ } #endif Rcpp/inst/include/Rcpp/sugar/block/SugarMath.h0000644000176200001440000001071412535036334020750 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // SugarBlock.h: Rcpp R/C++ interface class library -- sugar functions // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_SUGARMATH_H #define RCPP_SUGAR_SUGARMATH_H namespace Rcpp{ namespace sugar{ template class SugarMath_1 : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , NA, SugarMath_1 > { public: typedef Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype ,NA,T1> VEC_TYPE ; SugarMath_1( FunPtr ptr_, const VEC_TYPE & vec_) : ptr(ptr_), vec(vec_){} inline RESULT_TYPE operator[]( R_xlen_t i) const { U1 x = vec[i] ; if( ISNAN(x) ) return x; return ptr( x ) ; } inline R_xlen_t size() const { return vec.size() ; } private: FunPtr ptr ; const VEC_TYPE& vec ; }; template class SugarMath_1 : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , NA, SugarMath_1 > { public: typedef Rcpp::VectorBase< INTSXP ,NA,T1> VEC_TYPE ; SugarMath_1( FunPtr ptr_, const VEC_TYPE & vec_) : ptr(ptr_), vec(vec_){} inline RESULT_TYPE operator[]( R_xlen_t i) const { int x = vec[i] ; if( Rcpp::traits::is_na(x) ) return Rcpp::traits::get_na( ) ; return ptr( x ) ; } inline R_xlen_t size() const { return vec.size() ; } private: FunPtr ptr ; const VEC_TYPE& vec ; }; template class SugarMath_1 : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , false, SugarMath_1 > { public: typedef Rcpp::VectorBase< INTSXP ,false,T1> VEC_TYPE ; SugarMath_1( FunPtr ptr_, const VEC_TYPE & vec_) : ptr(ptr_), vec(vec_){} inline RESULT_TYPE operator[]( R_xlen_t i) const { return ptr( vec[i] ) ; } inline R_xlen_t size() const { return vec.size() ; } private: FunPtr ptr ; const VEC_TYPE& vec ; }; } // sugar } // Rcpp #define SUGAR_MATH_1(__NAME__,__SYMBOL__) \ namespace Rcpp{ \ template \ inline sugar::SugarMath_1 \ __NAME__( \ const VectorBase& t \ ){ \ return sugar::SugarMath_1( \ &__SYMBOL__ , t \ ) ; \ } \ inline sugar::SugarMath_1 \ __NAME__( SEXP x){ return __NAME__( NumericVector( x ) ) ; } \ template \ inline sugar::SugarMath_1 \ __NAME__( \ const VectorBase& t \ ){ \ return sugar::SugarMath_1( \ &__SYMBOL__ , t \ ) ; \ } \ } #endif Rcpp/inst/include/Rcpp/sugar/block/SugarBlock_3.h0000644000176200001440000001164312535036334021335 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // SugarBlock.h: Rcpp R/C++ interface class library -- sugar functions // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_BLOCK_3_H #define RCPP_SUGAR_BLOCK_3_H namespace Rcpp{ namespace sugar{ template < bool NA, typename RESULT_TYPE, typename U1, typename T1, typename U2, typename T2, typename U3, typename T3 > class SugarBlock_3_VVV : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , NA, SugarBlock_3_VVV > { public: typedef RESULT_TYPE (*FunPtr)(U1,U2,U3) ; SugarBlock_3_VVV( FunPtr ptr_, const T1 & x_, const T2& y_, const T3& z_ ) : ptr(ptr_), x(x_), y(y_), z(z_) { // TODO: size checks, recycling, etc ... } inline RESULT_TYPE operator[]( R_xlen_t i) const { return ptr( x[i], y[i], z[i] ) ; } inline R_xlen_t size() const { return x.size() ; } private: FunPtr ptr ; const T1& x ; const T2& y ; const T2& z ; }; // template // class SugarBlock_3__VP : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , NA, SugarBlock_3__VP > { // public: // typedef RESULT_TYPE (*FunPtr)(U1,U2) ; // SugarBlock_3__VP( FunPtr ptr_, const T1 & x_, U2 u2 ) : // ptr(ptr_), x(x_), y(u2){} // // inline RESULT_TYPE operator[]( int i) const { // return ptr( x[i], y ) ; // } // inline int size() const { return x.size() ; } // // private: // FunPtr ptr ; // const T1& x ; // U2 y ; // }; // // template // class SugarBlock_3__PV : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , NA, SugarBlock_3__PV > { // public: // typedef RESULT_TYPE (*FunPtr)(U1,U2) ; // SugarBlock_3__PV( FunPtr ptr_, U1 u1, const T2& y_ ) : // ptr(ptr_), x(u1), y(y_){} // // inline RESULT_TYPE operator[]( int i) const { // return ptr( x, y[i] ) ; // } // inline int size() const { return y.size() ; } // // private: // FunPtr ptr ; // U1 x ; // const T2& y ; // }; } // sugar } // Rcpp #define SB3_T1 VectorBase #define SB3_T2 VectorBase #define SB3_T3 VectorBase #define SUGAR_BLOCK_3(__NAME__,__SYMBOL__) \ namespace Rcpp{ \ template \ inline sugar::SugarBlock_3_VVV< \ (T1_NA||T2_NA||T3_NA) ,double, \ double,SB3_T1, \ double,SB3_T2, \ double,SB3_T3 \ > \ __NAME__( \ const SB3_T1& x1, \ const SB3_T2& x2, \ const SB3_T3& x3 \ ){ \ return sugar::SugarBlock_3_VVV< \ (T1_NA||T2_NA||T3_NA) , double, \ double,SB3_T1, \ double,SB3_T2, \ double,SB3_T3 \ >( \ __SYMBOL__ , x1, x2, x3 \ ) ; \ } \ } #endif Rcpp/inst/include/Rcpp/sugar/block/Vectorized_Math.h0000644000176200001440000000761412535036334022151 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // SugarBlock.h: Rcpp R/C++ interface class library -- sugar functions // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_VECTORIZEDMATH_H #define RCPP_SUGAR_VECTORIZEDMATH_H namespace Rcpp{ namespace sugar{ extern "C" typedef double (*DDFun)(double); template class Vectorized : public VectorBase >{ public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Vectorized( const VEC_TYPE& object_) : object( object_.get_ref() ){} inline double operator[]( R_xlen_t i) const { return Func( object[i] ) ; } inline R_xlen_t size() const { return object.size(); } private: const VEC_EXT& object ; } ; template class Vectorized_INTSXP : public VectorBase >{ public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Vectorized_INTSXP( const VEC_TYPE& object_) : object( object_.get_ref() ){} inline double operator[]( R_xlen_t i) const { int x = object[i] ; if( x == NA_INTEGER ) return NA_REAL ; return Func( x ) ; } inline R_xlen_t size() const { return object.size(); } private: const VEC_EXT& object ; } ; template class Vectorized_INTSXP : public VectorBase >{ public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::Extractor::type VEC_EXT ; Vectorized_INTSXP( const VEC_TYPE& object_) : object( object_.get_ref() ){} inline double operator[]( R_xlen_t i) const { return Func( object[i] ) ; } inline R_xlen_t size() const { return object.size(); } private: const VEC_EXT& object ; } ; } // sugar } // Rcpp #define VECTORIZED_MATH_1(__NAME__,__SYMBOL__) \ namespace Rcpp{ \ template \ inline sugar::Vectorized<__SYMBOL__,NA,T> \ __NAME__( const VectorBase& t ){ \ return sugar::Vectorized<__SYMBOL__,NA,T>( t ) ; \ } \ inline sugar::Vectorized<__SYMBOL__,true,NumericVector> \ __NAME__( SEXP x){ return __NAME__( NumericVector( x ) ) ; } \ template \ inline sugar::Vectorized_INTSXP<__SYMBOL__,NA,T> \ __NAME__( const VectorBase& t ){ \ return sugar::Vectorized_INTSXP<__SYMBOL__,NA,T>( t ) ; \ } \ } #endif Rcpp/inst/include/Rcpp/sugar/block/SugarBlock_2.h0000644000176200001440000002232112535036334021327 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // SugarBlock.h: Rcpp R/C++ interface class library -- sugar functions // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_BLOCK_2_H #define RCPP_SUGAR_BLOCK_2_H namespace Rcpp{ namespace sugar{ template class SugarBlock_2 : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , NA, SugarBlock_2 > { public: typedef RESULT_TYPE (*FunPtr)(U1,U2) ; SugarBlock_2( FunPtr ptr_, const T1 & x_, const T2& y_ ) : ptr(ptr_), x(x_), y(y_){ // TODO: check that x and y have same size } inline RESULT_TYPE operator[]( R_xlen_t i) const { return ptr( x[i], y[i] ) ; } inline R_xlen_t size() const { return x.size() ; } private: FunPtr ptr ; const T1& x ; const T2& y ; }; template class SugarBlock_2__VP : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , NA, SugarBlock_2__VP > { public: typedef RESULT_TYPE (*FunPtr)(U1,U2) ; SugarBlock_2__VP( FunPtr ptr_, const T1 & x_, U2 u2 ) : ptr(ptr_), x(x_), y(u2){} inline RESULT_TYPE operator[]( R_xlen_t i) const { return ptr( x[i], y ) ; } inline R_xlen_t size() const { return x.size() ; } private: FunPtr ptr ; const T1& x ; U2 y ; }; template class SugarBlock_2__PV : public Rcpp::VectorBase< Rcpp::traits::r_sexptype_traits::rtype , NA, SugarBlock_2__PV > { public: typedef RESULT_TYPE (*FunPtr)(U1,U2) ; SugarBlock_2__PV( FunPtr ptr_, U1 u1, const T2& y_ ) : ptr(ptr_), x(u1), y(y_){} inline RESULT_TYPE operator[]( R_xlen_t i) const { return ptr( x, y[i] ) ; } inline R_xlen_t size() const { return y.size() ; } private: FunPtr ptr ; U1 x ; const T2& y ; }; } // sugar } // Rcpp #define SB2_LHT VectorBase #define SB2_RHT VectorBase #define SUGAR_BLOCK_2(__NAME__,__SYMBOL__) \ namespace Rcpp{ \ template \ inline sugar::SugarBlock_2< (LHS_NA||RHS_NA) ,double,double,SB2_LHT,double,SB2_RHT> \ __NAME__( \ const SB2_LHT& lhs, \ const SB2_RHT& rhs \ ){ \ return sugar::SugarBlock_2< (LHS_NA||RHS_NA) ,double,double,SB2_LHT,double,SB2_RHT >(\ __SYMBOL__ , lhs, rhs \ ) ; \ } \ template \ inline sugar::SugarBlock_2__VP \ __NAME__( \ const SB2_LHT& lhs, \ double rhs \ ){ \ return sugar::SugarBlock_2__VP( \ __SYMBOL__ , lhs, rhs \ ) ; \ } \ template \ inline sugar::SugarBlock_2__PV \ __NAME__( \ double lhs, \ const SB2_RHT& rhs \ ){ \ return sugar::SugarBlock_2__PV( \ __SYMBOL__ , lhs, rhs \ ) ; \ } \ } #define SUGAR_BLOCK_2_NA(__NAME__,__SYMBOL__,__NA__) \ namespace Rcpp{ \ template \ inline sugar::SugarBlock_2< __NA__ ,double,double,SB2_LHT,double,SB2_RHT> \ __NAME__( \ const SB2_LHT& lhs, \ const SB2_RHT& rhs \ ){ \ return sugar::SugarBlock_2< __NA__ ,double,double,SB2_LHT,double,SB2_RHT \ >( \ __SYMBOL__ , lhs, rhs \ ) ; \ } \ template \ inline sugar::SugarBlock_2__VP<__NA__,double,double,SB2_LHT,double> \ __NAME__( \ const SB2_LHT& lhs, \ double rhs \ ){ \ return sugar::SugarBlock_2__VP<__NA__,double,double,SB2_LHT,double>( \ __SYMBOL__ , lhs, rhs \ ) ; \ } \ template \ inline sugar::SugarBlock_2__PV<__NA__,double,double,double,SB2_RHT> \ __NAME__( \ double lhs, \ const SB2_RHT& rhs \ ){ \ return sugar::SugarBlock_2__PV<__NA__,double,double,double,SB2_RHT \ >( \ __SYMBOL__ , lhs, rhs \ ) ; \ } \ } #endif Rcpp/inst/include/Rcpp/sugar/block/block.h0000644000176200001440000000221512253723677020156 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // block.h: Rcpp R/C++ interface class library -- sugar blocks // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__block__block_h #define Rcpp__sugar__block__block_h #include #include #include #include #include #endif Rcpp/inst/include/Rcpp/sugar/logical/0000755000176200001440000000000012535036334017221 5ustar liggesusersRcpp/inst/include/Rcpp/sugar/logical/SingleLogicalResult.h0000644000176200001440000000437212336231761023313 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // SingleLogicalResult.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__SingleLogicalResult_h #define Rcpp__sugar__SingleLogicalResult_h namespace Rcpp{ namespace sugar{ template class forbidden_conversion ; template <> class forbidden_conversion{} ; template class conversion_to_bool_is_forbidden : forbidden_conversion{ public: void touch(){} }; template class SingleLogicalResult { public: const static int UNRESOLVED = -5 ; SingleLogicalResult() : result(UNRESOLVED) {} ; void apply(){ if( result == UNRESOLVED ){ static_cast(*this).apply() ; } } inline bool is_true(){ apply() ; return result == TRUE ; } inline bool is_false(){ apply() ; return result == FALSE ; } inline bool is_na(){ apply() ; return Rcpp::traits::is_na( result ) ; } inline operator SEXP(){ return get_sexp() ; } inline operator bool(){ conversion_to_bool_is_forbidden x ; x.touch() ; return is_true() ; } inline int size(){ return 1 ; } inline int get(){ apply(); return result; } inline SEXP get_sexp(){ apply() ; return Rf_ScalarLogical( result ) ; } protected: int result ; inline void set(int x){ result = x ;} inline void reset(){ set(UNRESOLVED) ; } inline void set_true(){ set(TRUE); } inline void set_false(){ set(FALSE); } inline void set_na(){ set(NA_LOGICAL); } inline bool is_unresolved(){ return result == UNRESOLVED ; } } ; } } #endif Rcpp/inst/include/Rcpp/sugar/logical/or.h0000644000176200001440000002300012535036334020005 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // or.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__logical_or_h #define Rcpp__sugar__logical_or_h namespace Rcpp{ namespace sugar{ template class Or_SingleLogicalResult_SingleLogicalResult : public SingleLogicalResult< (LHS_NA || RHS_NA) , Or_SingleLogicalResult_SingleLogicalResult > { public: typedef SingleLogicalResult LHS_TYPE ; typedef SingleLogicalResult RHS_TYPE ; typedef SingleLogicalResult< (LHS_NA || RHS_NA) , Or_SingleLogicalResult_SingleLogicalResult > BASE ; Or_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_){} ; inline void apply(){ int left = lhs.get() ; if( Rcpp::traits::is_na( left ) ){ BASE::set( left ) ; } else if( left == TRUE ){ BASE::set( TRUE ) ; } else { BASE::set( rhs.get() ) ; } } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; // special version when we know the rhs is not NA template class Or_SingleLogicalResult_SingleLogicalResult : public SingleLogicalResult< LHS_NA , Or_SingleLogicalResult_SingleLogicalResult > { public: typedef SingleLogicalResult LHS_TYPE ; typedef SingleLogicalResult RHS_TYPE ; typedef SingleLogicalResult< LHS_NA, Or_SingleLogicalResult_SingleLogicalResult > BASE ; Or_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_){} ; inline void apply(){ // here we know rhs does not have NA, so we start with the rhs int right = rhs.get() ; if( right == TRUE ){ BASE::set( TRUE ) ; } else { BASE::set( lhs.get() ) ; } } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; // special version when we know the lhs is not NA template class Or_SingleLogicalResult_SingleLogicalResult : public SingleLogicalResult< RHS_NA , Or_SingleLogicalResult_SingleLogicalResult > { public: typedef SingleLogicalResult LHS_TYPE ; typedef SingleLogicalResult RHS_TYPE ; typedef SingleLogicalResult< RHS_NA, Or_SingleLogicalResult_SingleLogicalResult > BASE ; Or_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_){} ; inline void apply(){ // here we know lhs does not have NA, so we start with the rhs int left = lhs.get() ; if( left == TRUE ){ BASE::set( TRUE ) ; } else { BASE::set( rhs.get() ) ; } } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; // special version when we know both the lhs and the rhs are not NA template class Or_SingleLogicalResult_SingleLogicalResult : public SingleLogicalResult< false , Or_SingleLogicalResult_SingleLogicalResult > { public: typedef SingleLogicalResult LHS_TYPE ; typedef SingleLogicalResult RHS_TYPE ; typedef SingleLogicalResult< false, Or_SingleLogicalResult_SingleLogicalResult > BASE ; Or_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_){} ; inline void apply(){ int left = lhs.get() ; if( left == TRUE ){ BASE::set( TRUE ) ; } else { BASE::set( rhs.get() ) ; } } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; template class Or_SingleLogicalResult_bool : public SingleLogicalResult< LHS_NA , And_SingleLogicalResult_bool > { public: typedef SingleLogicalResult LHS_TYPE ; typedef SingleLogicalResult< LHS_NA , Or_SingleLogicalResult_bool > BASE ; Or_SingleLogicalResult_bool( const LHS_TYPE& lhs_, bool rhs_) : lhs(lhs_), rhs(rhs_){} ; inline void apply(){ if( rhs ){ BASE::set( TRUE ) ; } else{ BASE::set( lhs.get() ) ; } } private: const LHS_TYPE& lhs ; bool rhs ; } ; // (LogicalExpression) | (LogicalExpression) template class Or_LogicalExpression_LogicalExpression : public Rcpp::VectorBase< LGLSXP, true, Or_LogicalExpression_LogicalExpression >{ public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; Or_LogicalExpression_LogicalExpression( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_){} inline int operator[]( R_xlen_t i ) const{ if( lhs[i] == TRUE || rhs[i] == TRUE ) return TRUE ; if( lhs[i] == FALSE && rhs[i] == FALSE ) return FALSE ; return NA_LOGICAL; } inline R_xlen_t size() const { return lhs.size(); } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; template class Or_LogicalExpression_LogicalExpression : public Rcpp::VectorBase< LGLSXP, true, Or_LogicalExpression_LogicalExpression >{ public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; Or_LogicalExpression_LogicalExpression( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_){} inline int operator[]( R_xlen_t i ) const{ if( lhs[i] == TRUE || rhs[i] == TRUE ) return TRUE ; if( rhs[i] == NA_LOGICAL ) return NA_LOGICAL ; return FALSE ; } inline R_xlen_t size() const { return lhs.size(); } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; template class Or_LogicalExpression_LogicalExpression : public Rcpp::VectorBase< LGLSXP, true, Or_LogicalExpression_LogicalExpression >{ public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; Or_LogicalExpression_LogicalExpression( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_){} inline int operator[]( R_xlen_t i ) const{ if( lhs[i] == TRUE || rhs[i] == TRUE ) return TRUE ; if( lhs[i] == NA_LOGICAL ) return NA_LOGICAL ; return FALSE; } inline R_xlen_t size() const { return lhs.size(); } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; template class Or_LogicalExpression_LogicalExpression : public Rcpp::VectorBase< LGLSXP, false, Or_LogicalExpression_LogicalExpression >{ public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; Or_LogicalExpression_LogicalExpression( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_){} inline int operator[]( R_xlen_t i ) const{ if( lhs[i] == TRUE || rhs[i] == TRUE ) return TRUE ; return FALSE; } inline R_xlen_t size() const { return lhs.size(); } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; } // sugar } // Rcpp template inline Rcpp::sugar::Or_SingleLogicalResult_SingleLogicalResult operator||( const Rcpp::sugar::SingleLogicalResult& lhs, const Rcpp::sugar::SingleLogicalResult& rhs ){ return Rcpp::sugar::Or_SingleLogicalResult_SingleLogicalResult( lhs, rhs ) ; } template inline Rcpp::sugar::Or_SingleLogicalResult_bool operator||( const Rcpp::sugar::SingleLogicalResult& lhs, bool rhs ){ return Rcpp::sugar::Or_SingleLogicalResult_bool( lhs, rhs ) ; } template inline Rcpp::sugar::Or_SingleLogicalResult_bool operator||( bool rhs, const Rcpp::sugar::SingleLogicalResult& lhs ){ return Rcpp::sugar::Or_SingleLogicalResult_bool( lhs, rhs ) ; } // (logical expression) | (logical expression) template inline Rcpp::sugar::Or_LogicalExpression_LogicalExpression operator|( const Rcpp::VectorBase& lhs, const Rcpp::VectorBase& rhs ){ return Rcpp::sugar::Or_LogicalExpression_LogicalExpression( lhs, rhs ) ; } #endif Rcpp/inst/include/Rcpp/sugar/logical/and.h0000644000176200001440000002305712535036334020143 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // and.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__logical_and_h #define Rcpp__sugar__logical_and_h namespace Rcpp{ namespace sugar{ template class And_SingleLogicalResult_SingleLogicalResult : public SingleLogicalResult< (LHS_NA || RHS_NA) , And_SingleLogicalResult_SingleLogicalResult > { public: typedef SingleLogicalResult LHS_TYPE ; typedef SingleLogicalResult RHS_TYPE ; typedef SingleLogicalResult< (LHS_NA || RHS_NA) , And_SingleLogicalResult_SingleLogicalResult > BASE ; And_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_){} ; inline void apply(){ int left = lhs.get() ; if( Rcpp::traits::is_na( left ) ){ BASE::set( left ) ; } else if( left == FALSE ){ BASE::set( FALSE ) ; } else { BASE::set( rhs.get() ) ; } } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; // special version when we know the rhs is not NA template class And_SingleLogicalResult_SingleLogicalResult : public SingleLogicalResult< LHS_NA , And_SingleLogicalResult_SingleLogicalResult > { public: typedef SingleLogicalResult LHS_TYPE ; typedef SingleLogicalResult RHS_TYPE ; typedef SingleLogicalResult< LHS_NA, And_SingleLogicalResult_SingleLogicalResult > BASE ; And_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_){} ; inline void apply(){ // here we know rhs does not have NA, so we start with the rhs int right = rhs.get() ; if( right == FALSE ){ BASE::set( FALSE ) ; } else { BASE::set( lhs.get() ) ; } } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; // special version when we know the lhs is not NA template class And_SingleLogicalResult_SingleLogicalResult : public SingleLogicalResult< RHS_NA , And_SingleLogicalResult_SingleLogicalResult > { public: typedef SingleLogicalResult LHS_TYPE ; typedef SingleLogicalResult RHS_TYPE ; typedef SingleLogicalResult< RHS_NA, And_SingleLogicalResult_SingleLogicalResult > BASE ; And_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_){} ; inline void apply(){ // here we know lhs does not have NA, so we start with the rhs int left = lhs.get() ; if( left == FALSE ){ BASE::set( FALSE ) ; } else { BASE::set( rhs.get() ) ; } } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; // special version when we know both the lhs and the rhs are not NA template class And_SingleLogicalResult_SingleLogicalResult : public SingleLogicalResult< false , And_SingleLogicalResult_SingleLogicalResult > { public: typedef SingleLogicalResult LHS_TYPE ; typedef SingleLogicalResult RHS_TYPE ; typedef SingleLogicalResult< false, And_SingleLogicalResult_SingleLogicalResult > BASE ; And_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) : lhs(lhs_), rhs(rhs_){} ; inline void apply(){ int left = lhs.get() ; if( left == FALSE ){ BASE::set( FALSE ) ; } else { BASE::set( rhs.get() ) ; } } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; template class And_SingleLogicalResult_bool : public SingleLogicalResult< LHS_NA , And_SingleLogicalResult_bool > { public: typedef SingleLogicalResult LHS_TYPE ; typedef SingleLogicalResult< LHS_NA , And_SingleLogicalResult_bool > BASE ; And_SingleLogicalResult_bool( const LHS_TYPE& lhs_, bool rhs_) : lhs(lhs_), rhs(rhs_){} ; inline void apply(){ if( !rhs ){ BASE::set( FALSE ) ; } else{ BASE::set( lhs.get() ) ; } } private: const LHS_TYPE& lhs ; bool rhs ; } ; // (LogicalExpression) & (LogicalExpression) template class And_LogicalExpression_LogicalExpression : public Rcpp::VectorBase< LGLSXP, true, And_LogicalExpression_LogicalExpression >{ public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; And_LogicalExpression_LogicalExpression( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_){} inline int operator[]( R_xlen_t i ) const{ if( lhs[i] == TRUE && rhs[i] == TRUE ) return TRUE ; if( lhs[i] == NA_LOGICAL || rhs[i] == NA_LOGICAL ) return NA_LOGICAL ; return FALSE ; } inline R_xlen_t size() const { return lhs.size(); } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; template class And_LogicalExpression_LogicalExpression : public Rcpp::VectorBase< LGLSXP, true, And_LogicalExpression_LogicalExpression >{ public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; And_LogicalExpression_LogicalExpression( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_){} inline int operator[]( R_xlen_t i ) const{ if( lhs[i] == TRUE && rhs[i] == TRUE ) return TRUE ; if( rhs[i] == NA_LOGICAL ) return NA_LOGICAL ; return FALSE ; } inline R_xlen_t size() const { return lhs.size(); } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; template class And_LogicalExpression_LogicalExpression : public Rcpp::VectorBase< LGLSXP, true, And_LogicalExpression_LogicalExpression >{ public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; And_LogicalExpression_LogicalExpression( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_){} inline int operator[]( R_xlen_t i ) const{ if( lhs[i] == TRUE && rhs[i] == TRUE ) return TRUE ; if( lhs[i] == NA_LOGICAL ) return NA_LOGICAL ; return FALSE; } inline R_xlen_t size() const { return lhs.size(); } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; template class And_LogicalExpression_LogicalExpression : public Rcpp::VectorBase< LGLSXP, false, And_LogicalExpression_LogicalExpression >{ public: typedef typename Rcpp::VectorBase LHS_TYPE ; typedef typename Rcpp::VectorBase RHS_TYPE ; And_LogicalExpression_LogicalExpression( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_ ) : lhs(lhs_), rhs(rhs_){} inline int operator[]( R_xlen_t i ) const{ if( lhs[i] == TRUE && rhs[i] == TRUE ) return TRUE ; return FALSE; } inline R_xlen_t size() const { return lhs.size(); } private: const LHS_TYPE& lhs ; const RHS_TYPE& rhs ; } ; } } template inline Rcpp::sugar::And_SingleLogicalResult_SingleLogicalResult operator&&( const Rcpp::sugar::SingleLogicalResult& lhs, const Rcpp::sugar::SingleLogicalResult& rhs ){ return Rcpp::sugar::And_SingleLogicalResult_SingleLogicalResult( lhs, rhs ) ; } template inline Rcpp::sugar::And_SingleLogicalResult_bool operator&&( const Rcpp::sugar::SingleLogicalResult& lhs, bool rhs ){ return Rcpp::sugar::And_SingleLogicalResult_bool( lhs, rhs ) ; } template inline Rcpp::sugar::And_SingleLogicalResult_bool operator&&( bool rhs, const Rcpp::sugar::SingleLogicalResult& lhs ){ return Rcpp::sugar::And_SingleLogicalResult_bool( lhs, rhs ) ; } // (logical expression) & (logical expression) template inline Rcpp::sugar::And_LogicalExpression_LogicalExpression operator&( const Rcpp::VectorBase& lhs, const Rcpp::VectorBase& rhs ){ return Rcpp::sugar::And_LogicalExpression_LogicalExpression( lhs, rhs ) ; } #endif Rcpp/inst/include/Rcpp/sugar/logical/not.h0000644000176200001440000000351612336231761020177 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // not.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__logical__not_h #define Rcpp__sugar__logical__not_h namespace Rcpp{ namespace sugar{ template struct negate{ static inline int apply( int x ){ return Rcpp::traits::is_na( x ) ? x : ( x ? FALSE : TRUE ) ; } } ; template<> struct negate{ static inline int apply( int x){ return x ? FALSE : TRUE ; } ; } ; template class Negate_SingleLogicalResult : public SingleLogicalResult >{ public: typedef SingleLogicalResult TYPE ; typedef SingleLogicalResult > BASE ; Negate_SingleLogicalResult( const TYPE& orig_ ) : orig(orig_) {} inline void apply(){ BASE::set( negate::apply( orig.get() ) ); } private: const TYPE& orig ; } ; } } template inline Rcpp::sugar::Negate_SingleLogicalResult operator!( const Rcpp::sugar::SingleLogicalResult& x){ return Rcpp::sugar::Negate_SingleLogicalResult( x ); } #endif Rcpp/inst/include/Rcpp/sugar/logical/logical.h0000644000176200001440000000221412316773510021004 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // logical.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_LOGICAL_H #define RCPP_SUGAR_LOGICAL_H #include #include #include #include #include #include #endif Rcpp/inst/include/Rcpp/sugar/logical/is.h0000644000176200001440000000273412336231761020013 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // is.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_LOGICAL_IS_H #define RCPP_SUGAR_LOGICAL_IS_H namespace Rcpp{ template inline bool is_true( const Rcpp::sugar::SingleLogicalResult& x){ return const_cast< Rcpp::sugar::SingleLogicalResult& >(x).is_true() ; } template inline bool is_false( const Rcpp::sugar::SingleLogicalResult& x){ return const_cast< Rcpp::sugar::SingleLogicalResult& >(x).is_false() ; } template inline bool is_na( const Rcpp::sugar::SingleLogicalResult& x){ return const_cast< Rcpp::sugar::SingleLogicalResult& >(x).is_na() ; } } #endif Rcpp/inst/include/Rcpp/sugar/logical/can_have_na.h0000644000176200001440000000201612316773510021614 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // can_have_na.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__can_have_na_h #define Rcpp__sugar__can_have_na_h namespace Rcpp{ template struct can_have_na : T::can_have_na::type {} ; } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/matrix/0000755000176200001440000000000013044160437017111 5ustar liggesusersRcpp/inst/include/Rcpp/sugar/matrix/diag.h0000644000176200001440000000513012535036334020167 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // diag.h: Rcpp R/C++ interface class library -- diag // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__diag_h #define Rcpp__sugar__diag_h namespace Rcpp{ namespace sugar{ template class Diag_Extractor : public Rcpp::VectorBase< RTYPE ,NA, Diag_Extractor > { public: typedef typename Rcpp::MatrixBase MAT_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Diag_Extractor( const MAT_TYPE& object_ ) : object(object_), n(0) { int nr = object.nrow() ; int nc = object.ncol() ; n = (nc < nr ) ? nc : nr ; } inline STORAGE operator[]( int i ) const { return object( i, i ) ; } inline R_xlen_t size() const { return n; } private: const MAT_TYPE& object ; R_xlen_t n ; } ; template class Diag_Maker : public Rcpp::MatrixBase< RTYPE ,NA, Diag_Maker > { public: typedef typename Rcpp::VectorBase VEC_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Diag_Maker( const VEC_TYPE& object_ ) : object(object_), n(object_.size()) {} inline STORAGE operator()( int i, int j ) const { return (i==j) ? object[i] : 0 ; } inline R_xlen_t size() const { return static_cast(n) * n; } inline int ncol() const { return n; } inline int nrow() const { return n; } private: const VEC_TYPE& object ; int n ; } ; template struct diag_result_type_trait{ typedef typename Rcpp::traits::if_< Rcpp::traits::matrix_interface::value, Diag_Extractor< T::r_type::value , T::can_have_na::value , T >, Diag_Maker< T::r_type::value , T::can_have_na::value , T > >::type type ; } ; } // sugar template inline typename sugar::diag_result_type_trait::type diag( const T& t ){ return typename sugar::diag_result_type_trait::type( t ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/matrix/lower_tri.h0000644000176200001440000000427713044160437021302 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // lower_tri.h: Rcpp R/C++ interface class library -- lower.tri // // Copyright (C) 2010 - 2017 Dirk Eddelbuettel and Romain Francois // Copyright (C) 2017 Dirk Eddelbuettel, Romain Francois, and Nathan Russell // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__lower_tri_h #define Rcpp__sugar__lower_tri_h namespace Rcpp { namespace sugar { template class LowerTri : public MatrixBase > { public: typedef Rcpp::MatrixBase MatBase; LowerTri(const T& lhs, bool diag) : nr(lhs.nrow()), nc(lhs.ncol()), getter(diag ? (&LowerTri::get_diag_true) : (&LowerTri::get_diag_false)) {} inline int operator()(int i, int j) const { return get(i, j); } inline R_xlen_t size() const { return static_cast(nr) * nc; } inline int nrow() const { return nr; } inline int ncol() const { return nc; } private: typedef bool (LowerTri::*Method)(int, int) const; int nr, nc; Method getter; inline bool get_diag_true(int i, int j) const { return i >= j; } inline bool get_diag_false(int i, int j) const { return i > j; } inline bool get(int i, int j) const { return (this->*getter)(i, j); } }; } // sugar template inline sugar::LowerTri lower_tri(const Rcpp::MatrixBase& lhs, bool diag = false) { return sugar::LowerTri(lhs, diag); } } // Rcpp #endif // Rcpp__sugar__lower_tri_h Rcpp/inst/include/Rcpp/sugar/matrix/tools.h0000644000176200001440000000236212336231761020427 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // matrix_functions.h: Rcpp R/C++ interface class library -- matrix sugar functions // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_MATRIX_TOOLS_H #define RCPP_SUGAR_MATRIX_TOOLS_H namespace Rcpp{ namespace internal{ inline int get_line( int index, int nr ){ return index % nr ; } inline int get_column( int index, int nr ){ int i = get_line( index, nr ); return (index-i) / nr ; } inline int get_column( int index, int nr, int i ){ return (index-i) / nr ; } } } #endif Rcpp/inst/include/Rcpp/sugar/matrix/col.h0000644000176200001440000000322412535036334020042 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // col.h: Rcpp R/C++ interface class library -- col // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__col_h #define Rcpp__sugar__col_h namespace Rcpp{ namespace sugar{ template class Col : public MatrixBase< INTSXP , false , Col > { public: typedef Rcpp::MatrixBase LHS_TYPE ; Col( const LHS_TYPE& lhs) : nr( lhs.ncol() ), nc( lhs.ncol() ) {} inline int operator()( int i, int j ) const { return j + 1 ; } inline R_xlen_t size() const { return static_cast(nr) * nc ; } inline int nrow() const { return nr; } inline int ncol() const { return nc; } private: int nr, nc ; } ; } // sugar template inline sugar::Col col( const Rcpp::MatrixBase& lhs){ return sugar::Col( lhs ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/matrix/outer.h0000644000176200001440000000551412535036334020427 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // outer.h: Rcpp R/C++ interface class library -- outer // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__outer_h #define Rcpp__sugar__outer_h namespace Rcpp{ namespace sugar{ template class Outer : public MatrixBase< Rcpp::traits::r_sexptype_traits< typename ::Rcpp::traits::result_of::type >::rtype , true , Outer > { public: typedef typename ::Rcpp::traits::result_of::type result_type ; const static int RESULT_R_TYPE = Rcpp::traits::r_sexptype_traits::rtype ; typedef Rcpp::VectorBase LHS_TYPE ; typedef Rcpp::VectorBase RHS_TYPE ; typedef Rcpp::internal::LazyVector LHS_LAZY ; typedef Rcpp::internal::LazyVector RHS_LAZY ; typedef typename Rcpp::traits::r_vector_element_converter::type converter_type ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Outer( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_, Function fun_ ) : lhs(lhs_), rhs(rhs_), fun(fun_), nr(lhs_.size()), nc(rhs_.size()) {} inline STORAGE operator()( int i, int j ) const { return converter_type::get( fun( lhs[i], rhs[j] ) ); } inline R_xlen_t size() const { return static_cast(nr) * nc ; } inline int nrow() const { return nr; } inline int ncol() const { return nc; } private: LHS_LAZY lhs ; RHS_LAZY rhs ; Function fun ; int nr, nc ; } ; } // sugar template inline sugar::Outer outer( const Rcpp::VectorBase& lhs, const Rcpp::VectorBase& rhs, Function fun ){ return sugar::Outer( lhs, rhs, fun ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/matrix/upper_tri.h0000644000176200001440000000430313044160437021273 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // upper_tri.h: Rcpp R/C++ interface class library -- upper.tri // // Copyright (C) 2010 - 2017 Dirk Eddelbuettel and Romain Francois // Copyright (C) 2017 Dirk Eddelbuettel, Romain Francois, and Nathan Russell // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__upper_tri_h #define Rcpp__sugar__upper_tri_h namespace Rcpp { namespace sugar { template class UpperTri : public MatrixBase > { public: typedef Rcpp::MatrixBase MatBase; UpperTri(const T& lhs, bool diag) : nr(lhs.nrow()), nc(lhs.ncol()), getter(diag ? (&UpperTri::get_diag_true) : (&UpperTri::get_diag_false)) {} inline int operator()(int i, int j) const { return get(i, j); } inline R_xlen_t size() const { return static_cast(nr) * nc; } inline int nrow() const { return nr; } inline int ncol() const { return nc; } private: typedef bool (UpperTri::*Method)(int, int) const; int nr, nc; Method getter; inline bool get_diag_true(int i, int j) const { return i <= j; } inline bool get_diag_false(int i, int j) const { return i < j; } inline bool get(int i, int j) const { return (this->*getter)(i, j); } }; } // sugar template inline sugar::UpperTri upper_tri(const Rcpp::MatrixBase& lhs, bool diag = false) { return sugar::UpperTri(lhs, diag); } } // Rcpp #endif // Rcpp__sugar__upper_tri_h Rcpp/inst/include/Rcpp/sugar/matrix/as_vector.h0000644000176200001440000000421212535036334021250 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // as_vector.h: Rcpp R/C++ interface class library -- as_vector( sugar matrix expression ) // // Copyright (C) 2010 - 2014 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__matrix_as_vector_h #define Rcpp__sugar__matrix_as_vector_h namespace Rcpp{ namespace internal{ template inline Rcpp::Vector as_vector__impl( MatrixBase& t, Rcpp::traits::false_type ){ T& ref = t.get_ref() ; int nc = ref.ncol(), nr = ref.nrow() ; Vector out (static_cast(nr) * nc) ; R_xlen_t k =0; for( int col_index=0; col_index inline Rcpp::Vector as_vector__impl( MatrixBase& t, Rcpp::traits::true_type ){ Matrix& ref = t.get_ref() ; R_xlen_t size = static_cast(ref.ncol())*ref.nrow() ; typename Rcpp::Vector::const_iterator first(static_cast&>(ref).begin()) ; return Vector(first, first+size ); } } // internal template inline Rcpp::Vector as_vector( const MatrixBase& t ){ return internal::as_vector__impl( const_cast< MatrixBase& >(t), typename Rcpp::traits::same_type< T , Matrix >() ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/matrix/matrix_functions.h0000644000176200001440000000233013004204647022652 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // matrix_functions.h: Rcpp R/C++ interface class library -- matrix sugar functions // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_MATRIX_FUNCTIONS_H #define RCPP_SUGAR_MATRIX_FUNCTIONS_H #include #include #include #include #include #include #include #endif Rcpp/inst/include/Rcpp/sugar/matrix/row.h0000644000176200001440000000322412535036334020074 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // row.h: Rcpp R/C++ interface class library -- row // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__row_h #define Rcpp__sugar__row_h namespace Rcpp{ namespace sugar{ template class Row : public MatrixBase< INTSXP , false , Row > { public: typedef Rcpp::MatrixBase LHS_TYPE ; Row( const LHS_TYPE& lhs) : nr( lhs.nrow() ), nc( lhs.ncol() ) {} inline int operator()( int i, int j ) const { return i + 1 ; } inline R_xlen_t size() const { return static_cast(nr) * nc ; } inline int nrow() const { return nr; } inline int ncol() const { return nc; } private: int nr, nc ; } ; } // sugar template inline sugar::Row row( const Rcpp::MatrixBase& lhs){ return sugar::Row( lhs ) ; } } // Rcpp #endif Rcpp/inst/include/Rcpp/sugar/nona/0000755000176200001440000000000012535036334016542 5ustar liggesusersRcpp/inst/include/Rcpp/sugar/nona/nona.h0000644000176200001440000000544312535036334017654 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 4 -*- // // nona.h: Rcpp R/C++ interface class library -- noNA handling // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_NONA_NONA_H #define RCPP_SUGAR_NONA_NONA_H namespace Rcpp{ namespace sugar { template class Nona : public Rcpp::VectorBase > { public: typedef typename Rcpp::VectorBase SUGAR_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; Nona( const SUGAR_TYPE& expr) : data(expr.get_ref()){} inline R_xlen_t size() const { return data.size() ; } inline STORAGE operator[](R_xlen_t i) const { return data[i] ; } private: const VECTOR& data ; } ; // specialization when the expression is actually a vector expression template class Nona< RTYPE,NA,Rcpp::Vector > : public Rcpp::VectorBase > > { public: typedef typename Rcpp::VectorBase > SUGAR_TYPE ; typedef typename Rcpp::traits::storage_type::type STORAGE ; typedef typename Rcpp::Vector::const_iterator iterator ; Nona( const SUGAR_TYPE& expr) : data(expr.get_ref().begin()), n(expr.size()){} inline R_xlen_t size() const { return n ; } inline STORAGE operator[](R_xlen_t i) const { return data[i] ; } private: iterator data ; R_xlen_t n ; } ; template class NonaPrimitive { public: NonaPrimitive( T t) : x(t){} inline operator T(){ return x ; } private: T x ; } ; } template inline sugar::Nona noNA( const Rcpp::VectorBase& vec ){ return sugar::Nona( vec ) ; } inline sugar::NonaPrimitive noNA( double x ){ return sugar::NonaPrimitive( x ) ; } inline sugar::NonaPrimitive noNA( int x ){ return sugar::NonaPrimitive( x ) ; } } #endif Rcpp/inst/include/Rcpp/sugar/sets.h0000644000176200001440000000354412316773510016745 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // sets.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__sets_h #define Rcpp__sugar__sets_h #if __cplusplus >= 201103L #define RCPP_UNORDERED_SET std::unordered_set #define RCPP_UNORDERED_MAP std::unordered_map namespace std { template<> struct hash { std::size_t operator()(const Rcpp::String& key) const { return pointer_hasher( key.get_sexp() ) ; } hash pointer_hasher ; }; } #elif defined(HAS_TR1_UNORDERED_SET) #define RCPP_UNORDERED_SET std::tr1::unordered_set #define RCPP_UNORDERED_MAP std::tr1::unordered_map namespace std { namespace tr1 { template<> struct hash { std::size_t operator()(const Rcpp::String& key) const { return pointer_hasher( key.get_sexp() ) ; } hash pointer_hasher ; }; } } #else #define RCPP_UNORDERED_SET std::set #define RCPP_UNORDERED_MAP std::map #endif #endif Rcpp/inst/include/Rcpp/sugar/tools/0000755000176200001440000000000012535036334016747 5ustar liggesusersRcpp/inst/include/Rcpp/sugar/tools/iterator.h0000644000176200001440000001153312535036334020754 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // iterator.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2012 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__sugar__tools_iterator_h #define Rcpp__sugar__tools_iterator_h namespace Rcpp { namespace sugar { /* generic sugar iterator type */ template class SugarIterator { public: typedef R_xlen_t difference_type ; typedef typename Rcpp::traits::storage_type< Rcpp::traits::r_sexptype_traits::rtype >::type STORAGE_TYPE ; typedef STORAGE_TYPE reference ; typedef STORAGE_TYPE* pointer ; typedef std::random_access_iterator_tag iterator_category ; typedef SugarIterator iterator ; SugarIterator( const T& ref_ ) :ref(ref_), index(0) {} SugarIterator( const T& ref_, R_xlen_t index_) : ref(ref_), index(index_) {} SugarIterator( const SugarIterator& other) : ref(other.ref), index(other.index){} inline iterator& operator++(){ index++; return *this ; } inline iterator operator++(int){ iterator orig(*this) ; ++(*this); return orig ; } inline iterator& operator--(){ index--; return *this ; } inline iterator operator--(int){ iterator orig(*this) ; --(*this); return orig ; } inline iterator operator+(difference_type n) const { return iterator( ref, index+n ) ; } inline iterator operator-(difference_type n) const { return iterator( ref, index-n ) ; } inline iterator& operator+=(difference_type n) { index += n ; return *this ; } inline iterator& operator-=(difference_type n) { index -= n; return *this ; } inline reference operator[](R_xlen_t i){ return ref[index+i] ; } inline reference operator*() { return ref[index] ; } inline pointer operator->(){ return &ref[index] ; } inline bool operator==( const iterator& y) const { return ( index == y.index ) ; } inline bool operator!=( const iterator& y) const { return ( index != y.index ) ; } inline bool operator<( const iterator& other ) const { return index < other.index ; } inline bool operator>( const iterator& other ) const { return index > other.index ; } inline bool operator<=( const iterator& other ) const { return index <= other.index ; } inline bool operator>=( const iterator& other ) const { return index >= other.index ; } inline difference_type operator-(const iterator& other) const { return index - other.index ; } private: const T& ref ; R_xlen_t index ; } ; template struct sugar_const_iterator_type { typedef SugarIterator type ; } ; template struct sugar_const_iterator_type< Rcpp::Vector >{ typedef typename Rcpp::Vector::const_iterator type ; } ; template <> struct sugar_const_iterator_type< CharacterVector >{ typedef SEXP* type ; } ; template struct is_sugar_vector : public Rcpp::traits::false_type{} ; template struct is_sugar_vector< Rcpp::Vector > : public Rcpp::traits::true_type{} ; template inline typename sugar_const_iterator_type::type get_const_begin__impl(const T& obj, Rcpp::traits::true_type ){ return obj.begin() ; } template inline typename sugar_const_iterator_type::type get_const_begin__impl(const T& obj, Rcpp::traits::false_type ){ typedef typename sugar_const_iterator_type::type const_iterator ; return const_iterator( obj ) ; } template inline typename sugar_const_iterator_type::type get_const_begin(const T& obj){ return get_const_begin__impl( obj, typename is_sugar_vector::type() ) ; } /* full specialization for character vectors */ template <> inline SEXP* get_const_begin(const CharacterVector& obj){ return get_string_ptr(obj) ; } template inline typename sugar_const_iterator_type::type get_const_end(const T& obj){ return get_const_begin(obj) + obj.size() ; } } } #endif Rcpp/inst/include/Rcpp/sugar/sugar.h0000644000176200001440000000222612253723677017115 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // sugar.h: Rcpp R/C++ interface class library -- main file for Rcpp::sugar // // Copyright (C) 2010 - 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_H #define RCPP_SUGAR_H #include #include #include #include #include #include #endif Rcpp/inst/include/Rcpp/sugar/undoRmath.h0000644000176200001440000000561114734567034017735 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- // // undoRmath.h: Rcpp R/C++ interface class library -- undo the macros set by Rmath.h // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_SUGAR_UNDORMATH_H #define RCPP_SUGAR_UNDORMATH_H // undo some of the mess of Rmath #undef sign #undef trunc #undef rround #undef prec #undef bessel_i #undef bessel_j #undef bessel_k #undef bessel_y #undef bessel_i_ex #undef bessel_j_ex #undef bessel_k_ex #undef bessel_y_ex #undef beta #undef choose #undef dbeta #undef dbinom #undef dcauchy #undef dchisq #undef dexp #undef df #undef dgamma #undef dgeom #undef dhyper #undef digamma #undef dlnorm #undef dlogis #undef dnbeta #undef dnbinom #undef dnchisq #undef dnf #undef dnorm4 #undef dnt #undef dpois #undef dpsifn #undef dsignrank #undef dt #undef dtukey #undef dunif #undef dweibull #undef dwilcox #undef fmax2 #undef fmin2 #undef fprec #undef fround #undef ftrunc #undef fsign #undef gammafn #undef imax2 #undef imin2 #undef lbeta #undef lchoose #undef lgammafn #undef lgammafn_sign #undef lgamma1p #undef log1pmx #undef logspace_add #undef logspace_sub #undef pbeta #undef pbeta_raw #undef pbinom #undef pcauchy #undef pchisq #undef pentagamma #undef pexp #undef pf #undef pgamma #undef pgeom #undef phyper #undef plnorm #undef plogis #undef pnbeta #undef pnbinom #undef pnchisq #undef pnf #undef pnorm5 #undef pnorm_both #undef pnt #undef ppois #undef psignrank #undef psigamma #undef pt #undef ptukey #undef punif /* #undef pythag */ #undef pweibull #undef pwilcox #undef qbeta #undef qbinom #undef qcauchy #undef qchisq #undef qchisq_appr #undef qexp #undef qf #undef qgamma #undef qgeom #undef qhyper #undef qlnorm #undef qlogis #undef qnbeta #undef qnbinom #undef qnchisq #undef qnf #undef qnorm5 #undef qnt #undef qpois #undef qsignrank #undef qt #undef qtukey #undef qunif #undef qweibull #undef qwilcox #undef rbeta #undef rbinom #undef rcauchy #undef rchisq #undef rexp #undef rf #undef rgamma #undef rgeom #undef rhyper #undef rlnorm #undef rlogis #undef rnbeta #undef rnbinom #undef rnchisq #undef rnf #undef rnorm #undef rnt #undef rpois #undef rsignrank #undef rt #undef rtukey #undef runif #undef rweibull #undef rwilcox #undef sign #undef tetragamma #undef trigamma #endif Rcpp/inst/include/Rcpp/Benchmark/0000755000176200001440000000000014735274111016361 5ustar liggesusersRcpp/inst/include/Rcpp/Benchmark/Timer.h0000644000176200001440000001041314735274111017611 0ustar liggesusers// Timer.h: Rcpp R/C++ interface class library -- Rcpp benchmark utility // // Copyright (C) 2012 - 2025 JJ Allaire, Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_BENCHMARH_TIMER_H #define RCPP_BENCHMARH_TIMER_H #include #include #include #ifndef R_NO_REMAP #define R_NO_REMAP #endif #include #if defined(_WIN32) #define WIN32_LEAN_AND_MEAN #include #elif defined(__APPLE__) #include #elif defined(linux) || defined(__linux) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__GLIBC__) || defined(__GNU__) || defined(__CYGWIN__) #include #elif defined(sun) || defined(__sun) || defined(_AIX) #include #else /* Unsupported OS */ #error "Rcpp::Timer not supported by your OS." #endif namespace Rcpp{ typedef uint64_t nanotime_t; #if defined(_WIN32) inline nanotime_t get_nanotime(void) { LARGE_INTEGER time_var, frequency; QueryPerformanceCounter(&time_var); QueryPerformanceFrequency(&frequency); /* Convert to nanoseconds */ return 1.0e9 * time_var.QuadPart / frequency.QuadPart; } #elif defined(__APPLE__) inline nanotime_t get_nanotime(void) { nanotime_t time; mach_timebase_info_data_t info; time = mach_absolute_time(); mach_timebase_info(&info); /* Convert to nanoseconds */ return time * (info.numer / info.denom); } #elif defined(linux) || defined(__linux) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__GLIBC__) || defined(__GNU__) || defined(__CYGWIN__) static const nanotime_t nanoseconds_in_second = static_cast(1000000000.0); inline nanotime_t get_nanotime(void) { struct timespec time_var; /* Possible other values we could have used are CLOCK_MONOTONIC, * which is takes longer to retrieve and CLOCK_PROCESS_CPUTIME_ID * which, if I understand it correctly, would require the R * process to be bound to one core. */ clock_gettime(CLOCK_REALTIME, &time_var); nanotime_t sec = time_var.tv_sec; nanotime_t nsec = time_var.tv_nsec; /* Combine both values to one nanoseconds value */ return (nanoseconds_in_second * sec) + nsec; } #elif defined(sun) || defined(__sun) || defined(_AIX) /* short an sweet! */ inline nanotime_t get_nanotime(void) { return gethrtime(); } #endif class Timer { public: Timer() : data(), start_time( get_nanotime() ){} Timer(nanotime_t start_time_) : data(), start_time(start_time_){} void step( const std::string& name){ data.push_back(std::make_pair(name, now())); } operator SEXP() const { size_t n = data.size(); NumericVector out(n); CharacterVector names(n); for (size_t i=0; i get_timers(int n){ return std::vector( n, Timer() ) ; } inline nanotime_t now() const { return get_nanotime() ; } inline nanotime_t origin() const { return start_time ; } private: typedef std::pair Step; typedef std::vector Steps; Steps data; const nanotime_t start_time; }; } #ifdef FALSE #undef FALSE #endif #endif Rcpp/inst/include/Rcpp/Rcpp0000644000176200001440000000151014154713250015310 0ustar liggesusers// Rcpp/Rcpp: R/C++ interface class library // // Copyright (C) 2008 - 2021 Dirk Eddelbuettel // Copyright (C) 2009 - 2021 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #include Rcpp/inst/include/Rcpp/protection/0000755000176200001440000000000013431002072016640 5ustar liggesusersRcpp/inst/include/Rcpp/protection/protection.h0000644000176200001440000000157312253723677021233 0ustar liggesusers// Copyright (C) 2013 Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_protection_protection_H #define Rcpp_protection_protection_H #include #include #include #endif Rcpp/inst/include/Rcpp/protection/Armor.h0000644000176200001440000000264112316773510020111 0ustar liggesusers// Copyright (C) 2013 Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_protection_Armor_H #define Rcpp_protection_Armor_H namespace Rcpp { template class Armor { public: Armor() : data(){ init(R_NilValue) ; } template Armor( U x ); inline operator SEXP() const { return data ; } template inline Armor& operator=( const U& x ) ; ~Armor(){ UNPROTECT(1) ; } private: void init(SEXP x){ PROTECT_WITH_INDEX( data = x, &index ) ; } SEXP data ; PROTECT_INDEX index ; // not defined on purpose Armor(const Armor&) ; Armor& operator=(const Armor&) ; } ; } #endif Rcpp/inst/include/Rcpp/protection/Shield.h0000644000176200001440000000271513341030612020227 0ustar liggesusers// Copyright (C) 2013 Romain Francois and Kevin Ushey // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__protection_Shield_h #define Rcpp__protection_Shield_h namespace Rcpp{ inline SEXP Rcpp_protect(SEXP x){ if( x != R_NilValue ) PROTECT(x) ; return x ; } inline void Rcpp_unprotect(int i){ // Prefer this function over UNPROTECT() in Rcpp so that all // balance checks errors by rchk are contained at one location (#892) UNPROTECT(i); } template class Shield{ public: Shield( SEXP t_) : t(Rcpp_protect(t_)){} ~Shield(){ if( t != R_NilValue ) Rcpp_unprotect(1) ; } operator SEXP() const { return t; } SEXP t ; private: Shield( const Shield& ) ; Shield& operator=( const Shield& ) ; } ; } #endif Rcpp/inst/include/Rcpp/protection/Shelter.h0000644000176200001440000000240213431002072020415 0ustar liggesusers// Copyright (C) 2013 Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_protection_Shelter_H #define Rcpp_protection_Shelter_H namespace Rcpp { template class Shelter { public: Shelter() : nprotected(0) {} inline SEXP operator()(SEXP x) { if (x != R_NilValue) nprotected++; return Rcpp_protect(x); } ~Shelter(){ Rcpp_unprotect(nprotected); nprotected = 0; } private: int nprotected; // not defined on purpose Shelter(const Shelter&) ; Shelter& operator=(const Shelter&) ; }; } #endif Rcpp/inst/include/Rcpp/Nullable.h0000644000176200001440000000755012650522242016400 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // Nullable.h: Rcpp R/C++ interface class library -- SEXP container which can be NULL // // Copyright (C) 2015 Dirk Eddelbuettel and Daniel C. Dillon // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_Nullable_h #define Rcpp_Nullable_h // We looked into the safe_bool_idiom [1] but found that more trouble than is // warranted here. We first and foremost want an operator SEXP() which got in // the way of redefining operator bool. // [1] http://www.artima.com/cppsource/safebool.html) namespace Rcpp { template class Nullable { public: /** * Empty no-argument constructor of a Nullable object * * Assigns (R's) NULL value, and sets validator to FALSE */ inline Nullable() : m_sexp(R_NilValue), m_set(false) {} /** * Template constructor of a Nullable object * * Assigns object, and set validator to TRUE */ inline Nullable(const T &t) : m_sexp(t), m_set(true) {} /** * Standard constructor of a Nullable object * * @param SEXP is stored */ inline Nullable(SEXP t) { m_sexp = t; m_set = true; } public: /** * Copy constructor for Nullable object * * @param SEXP is used to update internal copy */ inline Nullable &operator=(SEXP sexp) { m_sexp = sexp; m_set = true; return *this; } /** * operator SEXP() to return nullable object * * @throw 'not initialized' if object has not been set */ inline operator SEXP() const { checkIfSet(); return m_sexp; } /** * get() accessor for object * * @throw 'not initialized' if object has not been set */ inline SEXP get() const { checkIfSet(); return m_sexp; } /** * Boolean test for usability as a T */ inline bool isUsable() const { return m_set && !Rf_isNull(m_sexp); } /** * Boolean test for NULL * * @throw 'not initialized' if object has not been set */ inline bool isNull() const { checkIfSet(); return Rf_isNull(m_sexp); } /** * Boolean test for not NULL * * @throw 'not initialized' if object has not been set */ inline bool isNotNull() const { return ! isNull(); } /** * Test function to check if object has been initialized * */ inline bool isSet(void) const { return m_set; } /** * Returns m_sexp as a T */ inline T as() { return get(); } /** * Return a clone of m_sexp as a T */ inline T clone() const { return Rcpp::clone(get()); } private: SEXP m_sexp; bool m_set; inline void checkIfSet(void) const { if (!m_set) { throw ::Rcpp::exception("Not initialized"); } } }; } #endif Rcpp/inst/include/Rcpp/RNGScope.h0000644000176200001440000000244713306213000016246 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // RNGScope.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2016 Douglas Bates, Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__RNGScope_h #define Rcpp__RNGScope_h namespace Rcpp { class RNGScope{ public: RNGScope(){ internal::enterRNGScope(); } ~RNGScope(){ internal::exitRNGScope(); } }; class SuspendRNGSynchronizationScope { public: SuspendRNGSynchronizationScope() { internal::beginSuspendRNGSynchronization(); } ~SuspendRNGSynchronizationScope() { internal::endSuspendRNGSynchronization(); } }; } // namespace Rcpp #endif Rcpp/inst/include/Rcpp/unwindProtect.h0000644000176200001440000000474114001571144017503 0ustar liggesusers // unwind.h: Rcpp R/C++ interface class library -- Unwind Protect // // Copyright (C) 2018 - 2020 RStudio // Copyright (C) 2021 RStudio, Dirk Eddelbuettel and Iñaki Ucar // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_UNWINDPROTECT_H #define RCPP_UNWINDPROTECT_H #include #ifdef RCPP_USING_CXX11 #include #endif namespace Rcpp { namespace internal { struct UnwindData { std::jmp_buf jmpbuf; }; // First jump back to the protected context with a C longjmp because // `Rcpp_protected_eval()` is called from C and we can't safely throw // exceptions across C frames. inline void maybeJump(void* unwind_data, Rboolean jump) { if (jump) { UnwindData* data = static_cast(unwind_data); longjmp(data->jmpbuf, 1); } } #ifdef RCPP_USING_CXX11 inline SEXP unwindProtectUnwrap(void* data) { std::function* callback = (std::function*) data; return (*callback)(); } #endif }} // namespace Rcpp::internal namespace Rcpp { inline SEXP unwindProtect(SEXP (*callback)(void* data), void* data) { internal::UnwindData unwind_data; Shield token(::R_MakeUnwindCont()); if (setjmp(unwind_data.jmpbuf)) { // Keep the token protected while unwinding because R code might run // in C++ destructors. Can't use PROTECT() for this because // UNPROTECT() might be called in a destructor, for instance if a // Shield is on the stack. ::R_PreserveObject(token); throw LongjumpException(token); } return ::R_UnwindProtect(callback, data, internal::maybeJump, &unwind_data, token); } #ifdef RCPP_USING_CXX11 inline SEXP unwindProtect(std::function callback) { return unwindProtect(&internal::unwindProtectUnwrap, &callback); } #endif } // namespace Rcpp #endif Rcpp/inst/include/Rcpp/internal/0000755000176200001440000000000014711515066016304 5ustar liggesusersRcpp/inst/include/Rcpp/internal/wrap_end.h0000644000176200001440000000303112316773510020250 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // wrap_end.h: R/C++ interface class library // // Copyright (C) 2012 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_internal_wrap_end_h #define Rcpp_internal_wrap_end_h namespace Rcpp{ template inline SEXP wrap(const T& object){ RCPP_DEBUG_1( "inline SEXP wrap<%s>(const T& object)", DEMANGLE(T) ) return internal::wrap_dispatch( object, typename ::Rcpp::traits::wrap_type_traits::wrap_category() ) ; } template inline SEXP module_wrap_dispatch( const T& obj, Rcpp::traits::normal_wrap_tag ){ return wrap( obj ) ; } template inline SEXP module_wrap_dispatch( const T& obj, Rcpp::traits::pointer_wrap_tag ) { return wrap( object< typename traits::un_pointer::type >( obj ) ) ; } } #endif Rcpp/inst/include/Rcpp/internal/r_coerce.h0000644000176200001440000002040014351164565020236 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- /* :tabSize=4:indentSize=4:noTabs=false:folding=explicit:collapseFolds=1: */ // // r_coerce.h: Rcpp R/C++ interface class library -- coercion // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel, Romain Francois, and Kevin Ushey // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__internal__r_coerce__h #define Rcpp__internal__r_coerce__h namespace Rcpp{ namespace internal{ template typename ::Rcpp::traits::storage_type::type r_coerce( typename ::Rcpp::traits::storage_type::type from ) ; template <> inline int r_coerce(int from) { return from ; } template <> inline int r_coerce(int from) { return from ; } template <> inline double r_coerce(double from) { return from ; } template <> inline Rcomplex r_coerce(Rcomplex from) { return from ; } template <> inline Rbyte r_coerce(Rbyte from) { return from ; } // -> INTSXP template <> inline int r_coerce(int from){ return (from==NA_LOGICAL) ? NA_INTEGER : from ; } template <> inline int r_coerce(double from){ if (Rcpp_IsNA(from)) { return NA_INTEGER; } else if (from > INT_MAX || from <= INT_MIN ) { return NA_INTEGER; } return static_cast(from); } template <> inline int r_coerce(Rcomplex from){ return r_coerce(from.r) ; } template <> inline int r_coerce(Rbyte from){ return static_cast(from); } // -> REALSXP template <> inline double r_coerce(int from){ return from == NA_LOGICAL ? NA_REAL : static_cast(from) ; } template <> inline double r_coerce(int from){ return from == NA_INTEGER ? NA_REAL : static_cast(from) ; } template <> inline double r_coerce(Rcomplex from){ return from.r ; } template <> inline double r_coerce(Rbyte from){ return static_cast(from) ; } // -> LGLSXP template <> inline int r_coerce(double from){ return Rcpp_IsNA(from) ? NA_LOGICAL : (from!=0.0); } template <> inline int r_coerce(int from){ return ( from == NA_INTEGER ) ? NA_LOGICAL : (from!=0); } template <> inline int r_coerce(Rcomplex from){ if( Rcpp_IsNA(from.r) ) return NA_LOGICAL ; if( from.r == 0.0 || from.i == 0.0 ) return FALSE ; return TRUE ; } template <> inline int r_coerce(Rbyte from){ if( from != static_cast(0) ) return TRUE ; return FALSE ; } // -> RAWSXP template <> inline Rbyte r_coerce(int from){ return (from < 0 || from > 255) ? static_cast(0) : static_cast(from) ; } template <> inline Rbyte r_coerce(double from){ if( Rcpp_IsNA(from) ) return static_cast(0) ; return r_coerce(static_cast(from)) ; } template <> inline Rbyte r_coerce(Rcomplex from){ return r_coerce(from.r) ; } template <> inline Rbyte r_coerce(int from){ return static_cast(from == TRUE) ; } // -> CPLXSXP template <> inline Rcomplex r_coerce(double from){ Rcomplex c ; if( Rcpp_IsNA(from) ){ c.r = NA_REAL; c.i = NA_REAL; } else{ c.r = from ; c.i = 0.0 ; } return c ; } template <> inline Rcomplex r_coerce(int from){ Rcomplex c ; if( from == NA_INTEGER ){ c.r = NA_REAL; c.i = NA_REAL; } else{ c.r = static_cast(from) ; c.i = 0.0 ; } return c ; } template <> inline Rcomplex r_coerce(Rbyte from){ Rcomplex c ; c.r = static_cast(from); c.i = 0.0 ; return c ; } template <> inline Rcomplex r_coerce(int from){ Rcomplex c ; if( from == TRUE ){ c.r = 1.0 ; c.i = 0.0 ; } else if( from == FALSE ){ c.r = c.i = 0.0 ; } else { /* NA */ c.r = c.i = NA_REAL; } return c ; } // -> STRSXP template const char* coerce_to_string( typename ::Rcpp::traits::storage_type::type from ) ; inline const char* dropTrailing0(char *s, char cdec) { /* Note that 's' is modified */ char *p = s; for (p = s; *p; p++) { if(*p == cdec) { char *replace = p++; while ('0' <= *p && *p <= '9') if(*(p++) != '0') replace = p; if(replace != p) while((*(replace++) = *(p++))) ; break; } } return s; } inline int integer_width( int n ){ return n < 0 ? ( (int) ( ::log10( -n+0.5) + 2 ) ) : ( (int) ( ::log10( n+0.5) + 1 ) ) ; } template <> inline const char* coerce_to_string(Rcomplex x){ //int wr, dr, er, wi, di, ei; //Rf_formatComplex(&x, 1, &wr, &dr, &er, &wi, &di, &ei, 0); // we are no longer allowed to use this: // Rf_EncodeComplex(x, wr, dr, er, wi, di, ei, '.' ); // so approximate it poorly as static char tmp1[128], tmp2[128], tmp3[256]; //snprintf(tmp, 127, "%*.*f+%*.*fi", wr, dr, x.r, wi, di, x.i); //snprintf(tmp, 127, "%f+%fi", x.r, x.i); // FIXEM: barebones default formatting snprintf(tmp1, 127, "%f", x.r); snprintf(tmp2, 127, "%f", x.i); snprintf(tmp3, 255, "%s+%si", dropTrailing0(tmp1, '.'), dropTrailing0(tmp2, '.')); return tmp3; } template <> inline const char* coerce_to_string(double x){ //int w,d,e ; // cf src/main/format.c in R's sources: // The return values are // w : the required field width // d : use %w.df in fixed format, %#w.de in scientific format // e : use scientific format if != 0, value is number of exp digits - 1 // // nsmall specifies the minimum number of decimal digits in fixed format: // it is 0 except when called from do_format. //Rf_formatReal( &x, 1, &w, &d, &e, 0 ) ; // we are no longer allowed to use this: // char* tmp = const_cast( Rf_EncodeReal(x, w, d, e, '.') ); // so approximate it poorly as static char tmp[128]; snprintf(tmp, 127, "%f", x); if (strcmp( dropTrailing0(tmp, '.'), "-0") == 0) return "0"; else return dropTrailing0(tmp, '.'); } #define NB 1000 template <> inline const char* coerce_to_string(int from) { static char buffer[NB] ; snprintf(buffer, NB, "%*d", integer_width(from), from); return buffer ; } template <> inline const char* coerce_to_string(Rbyte from){ static char buff[3]; snprintf(buff, 3, "%02x", from); return buff; } template <> inline const char* coerce_to_string(int from){ return from == 0 ? "FALSE" : "TRUE" ; } #undef NB template <> inline SEXP r_coerce(SEXP from){ return from ; } template <> inline SEXP r_coerce(Rcomplex from) { return Rcpp::traits::is_na(from) ? NA_STRING : Rf_mkChar( coerce_to_string( from ) ) ; } template <> inline SEXP r_coerce(double from){ // handle some special values explicitly if (Rcpp_IsNaN(from)) return Rf_mkChar("NaN"); else if (from == R_PosInf) return Rf_mkChar("Inf"); else if (from == R_NegInf) return Rf_mkChar("-Inf"); else return Rcpp::traits::is_na(from) ? NA_STRING :Rf_mkChar( coerce_to_string( from ) ) ; } template <> inline SEXP r_coerce(int from){ return Rcpp::traits::is_na(from) ? NA_STRING :Rf_mkChar( coerce_to_string( from ) ) ; } template <> inline SEXP r_coerce(Rbyte from){ return Rf_mkChar( coerce_to_string(from)); } template <> inline SEXP r_coerce(int from){ return Rcpp::traits::is_na(from) ? NA_STRING :Rf_mkChar( coerce_to_string(from)); } template <> inline SEXP r_coerce(SEXP from){ return Rf_ScalarString( PRINTNAME(from) ) ; } } // internal } // Rcpp #endif Rcpp/inst/include/Rcpp/internal/GreedyVector.h0000644000176200001440000000547012316773510021064 0ustar liggesusers// Copyright (C) 2013 Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_INTERNAL_GREEDYVECTOR_H #define RCPP_INTERNAL_GREEDYVECTOR_H namespace Rcpp { template class GreedyVector { public: typedef typename std::vector::iterator iterator; typedef typename std::vector::const_iterator const_iterator; GreedyVector(SEXP vec) : v(0){ if (!Rf_isNumeric(vec) || Rf_isMatrix(vec) || Rf_isLogical(vec)) throw std::range_error("invalid numeric vector in constructor"); int len = Rf_length(vec); if (len == 0) throw std::range_error("null vector in constructor"); v.resize(len); for (int i = 0; i < len; i++) v[i] = T( static_cast(REAL(vec)[i])); } GreedyVector(int n) : v(n){} inline const T& operator()(int i) const{ return at(i) ; } inline T& operator()(int i){ return at(i) ; } inline const T& operator[](int i) const{ return at(i) ; } inline T& operator[](int i){ return at(i) ; } inline int size() const { return (int)v.size(); } inline iterator begin(){ return v.begin(); } inline iterator end(){ return v.end(); } inline const_iterator begin() const { return v.begin(); } inline const_iterator end() const { return v.end(); } inline operator SEXP() const { return wrap( v ) ; } protected: std::vector v; private: const T& at(int i) const{ if (i < 0 || i >= static_cast(v.size())) { std::ostringstream oss; oss << "subscript out of range: " << i; throw std::range_error(oss.str()); } return v[i]; } T& at(int i) { if (i < 0 || i >= static_cast(v.size())) { std::ostringstream oss; oss << "subscript out of range: " << i; throw std::range_error(oss.str()); } return v[i]; } } ; } #endif Rcpp/inst/include/Rcpp/internal/call.h0000644000176200001440000000411014711515066017364 0ustar liggesusers#ifndef RCPP_INTERNAL_CALL_H #define RCPP_INTERNAL_CALL_H #include #include #if defined(HAS_VARIADIC_TEMPLATES) namespace Rcpp { namespace internal { // Utility struct so that we can pass a pack of types between functions template struct type_pack {}; /** * This specialisation is for functions that return a value, whereas the below * is for void-returning functions. * * The "* = nullptr" default argument allows both templates to be well-defined * regardless of which one is used. */ template ::value>::type* = nullptr> SEXP call_impl(const F& fun, SEXP* args, type_pack, traits::index_sequence) { RESULT_TYPE res = fun((typename traits::input_parameter::type(args[Is]))...); return Rcpp::module_wrap(res); } template ::value>::type* = nullptr> SEXP call_impl(const F& fun, SEXP* args, type_pack, traits::index_sequence) { fun((typename traits::input_parameter::type(args[Is]))...); return R_NilValue; } } // namespace internal /** * Helper for calling a function with an array of SEXP arguments, * where each argument is converted to the appropriate type before being passed * to the function. A compile-time sequence is used to index the SEXP array. * * The function only needs the intended types of the result and arguments, * which allows the template to be used for function pointers, lambdas, and * `std::function` objects. */ template SEXP call(const F& fun, SEXP* args) { return internal::call_impl(fun, args, internal::type_pack{}, traits::make_index_sequence{}); } } // namespace Rcpp #endif #endif Rcpp/inst/include/Rcpp/internal/Proxy_Iterator.h0000644000176200001440000000662014630145635021454 0ustar liggesusers // Proxy_Iterator.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__internal__Proxy_Iterator__h #define Rcpp__internal__Proxy_Iterator__h namespace Rcpp{ namespace internal{ template class Proxy_Iterator { public: typedef PROXY& reference ; typedef PROXY* pointer ; typedef R_xlen_t difference_type ; typedef PROXY value_type; typedef std::random_access_iterator_tag iterator_category ; Proxy_Iterator( ): proxy(){} ; Proxy_Iterator( const Proxy_Iterator& other) : proxy( other.proxy){} Proxy_Iterator( const PROXY& proxy_ ) : proxy( proxy_ ){} ; Proxy_Iterator& operator=( const Proxy_Iterator& other ){ proxy.import( other.proxy ) ; return *this ; } inline Proxy_Iterator& operator++(){ proxy.move(1) ; return *this ; } inline Proxy_Iterator operator++(int){ Proxy_Iterator orig(*this) ; ++(*this) ; return orig ; } inline Proxy_Iterator& operator--(){ proxy.move(-1) ; return *this ; } inline Proxy_Iterator operator--(int){ Proxy_Iterator orig(*this) ; --(*this) ; return orig ; } inline Proxy_Iterator operator+(difference_type n) const { return Proxy_Iterator( PROXY(*proxy.parent, proxy.index + n) ) ; } inline Proxy_Iterator operator-(difference_type n) const { return Proxy_Iterator( PROXY(*proxy.parent, proxy.index - n) ) ; } inline Proxy_Iterator& operator+=(difference_type n) { proxy.move( n ) ; return *this ; } inline Proxy_Iterator& operator-=(difference_type n) { proxy.move( -n ) ; return *this ; } inline reference operator*() { return proxy ; } inline pointer operator->(){ return &proxy ; } inline bool operator==( const Proxy_Iterator& y) const { return ( this->proxy.index == y.proxy.index ) && ( this->proxy.parent == y.proxy.parent ); } inline bool operator!=( const Proxy_Iterator& y) const { return ( this->proxy.index != y.proxy.index ) || ( this->proxy.parent != y.proxy.parent ); } inline bool operator<( const Proxy_Iterator& other ) const { return proxy.index < other.proxy.index ; } inline bool operator>( const Proxy_Iterator& other ) const { return proxy.index > other.proxy.index ; } inline bool operator<=( const Proxy_Iterator& other ) const { return proxy.index <= other.proxy.index ; } inline bool operator>=( const Proxy_Iterator& other ) const { return proxy.index >= other.proxy.index ; } inline difference_type operator-(const Proxy_Iterator& other) const { return proxy.index - other.proxy.index ; } inline int index() const { return proxy.index ; } inline PROXY operator[](R_xlen_t i) const { return PROXY(*proxy.parent, proxy.index + i) ; } private: PROXY proxy ; } ; } } #endif Rcpp/inst/include/Rcpp/internal/Exporter.h0000644000176200001440000000745112336231761020272 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // exporter.h: Rcpp R/C++ interface class library -- identify if a class has a nested iterator typedef // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__internal__exporter__h #define Rcpp__internal__exporter__h namespace Rcpp{ namespace traits{ template class Exporter{ public: Exporter( SEXP x ) : t(x){} inline T get(){ return t ; } private: T t ; } ; template class RangeExporter { public: typedef typename T::value_type r_export_type ; RangeExporter( SEXP x ) : object(x){} ~RangeExporter(){} T get(){ T vec( ::Rf_length(object) ); ::Rcpp::internal::export_range( object, vec.begin() ) ; return vec ; } private: SEXP object ; } ; template class IndexingExporter { public: typedef value_type r_export_type ; IndexingExporter( SEXP x) : object(x){} ~IndexingExporter(){} T get(){ T result( ::Rf_length(object) ) ; ::Rcpp::internal::export_indexing( object, result ) ; return result ; } private: SEXP object ; } ; template class MatrixExporter { public: typedef value_type r_export_type ; MatrixExporter( SEXP x) : object(x){} ~MatrixExporter(){} T get() { Shield dims( ::Rf_getAttrib( object, R_DimSymbol ) ) ; if( Rf_isNull(dims) || ::Rf_length(dims) != 2 ){ throw ::Rcpp::not_a_matrix() ; } int* dims_ = INTEGER(dims) ; T result( dims_[0], dims_[1] ) ; ::Rcpp::internal::export_indexing( object, result ) ; return result ; } private: SEXP object ; } ; template < template class Container, typename T> struct container_exporter{ typedef RangeExporter< Container > > type ; } ; template < template class Container > struct container_exporter< Container, int > ; template < template class Container > struct container_exporter< Container, double > ; template class Exporter< std::vector > : public container_exporter< std::vector, T>::type { public: Exporter(SEXP x) : container_exporter< std::vector, T>::type(x){} }; template class Exporter< std::deque > : public container_exporter< std::deque, T>::type { public: Exporter(SEXP x) : container_exporter< std::deque, T>::type(x){} }; template class Exporter< std::list > : public container_exporter< std::list, T>::type { public: Exporter(SEXP x) : container_exporter< std::list, T>::type(x){} }; } // namespace traits } // namespace Rcpp #endif Rcpp/inst/include/Rcpp/internal/ListInitialization.h0000644000176200001440000000262412336231761022302 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- /* :tabSize=4:indentSize=4:noTabs=false:folding=explicit:collapseFolds=1: */ // // ListInitialization.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__internal__ListInitialization__h #define Rcpp__internal__ListInitialization__h namespace Rcpp{ namespace internal{ template class ListInitialization { public: ListInitialization( iterator iter_ ) : iter(iter_) {} ; ListInitialization operator,( value_type x ){ *iter = x ; return ListInitialization( iter + 1 ); } private: iterator iter ; } ; } // internal } // Rcpp #endif Rcpp/inst/include/Rcpp/internal/na.h0000644000176200001440000000214513226746441017060 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- /* :tabSize=4:indentSize=4:noTabs=false:folding=explicit:collapseFolds=1: */ // // na.h: Rcpp R/C++ interface class library -- optimized na checking // // Copyright (C) 2012-2014 Dirk Eddelbuettel, Romain Francois and Kevin Ushey // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . namespace Rcpp { namespace internal { inline bool Rcpp_IsNA(double x) { return R_IsNA(x); } inline bool Rcpp_IsNaN(double x) { return R_IsNaN(x); } } } Rcpp/inst/include/Rcpp/internal/r_vector.h0000644000176200001440000001071714635573221020310 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- /* :tabSize=4:indentSize=4:noTabs=false:folding=explicit:collapseFolds=1: */ // // r_vector.h: Rcpp R/C++ interface class library -- information about R vectors // // Copyright (C) 2010 - 2017 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__internal__r_vector_h #define Rcpp__internal__r_vector_h namespace Rcpp{ namespace internal{ template typename Rcpp::traits::storage_type::type* r_vector_start(SEXP x) { typedef typename Rcpp::traits::storage_type::type* pointer; return reinterpret_cast(dataptr(x)); } // add specializations to avoid use of dataptr #define RCPP_VECTOR_START_IMPL(__RTYPE__, __ACCESSOR__) \ template <> \ inline typename Rcpp::traits::storage_type<__RTYPE__>::type* r_vector_start<__RTYPE__>(SEXP x) { \ return __ACCESSOR__(x); \ } RCPP_VECTOR_START_IMPL(LGLSXP, LOGICAL); RCPP_VECTOR_START_IMPL(INTSXP, INTEGER); RCPP_VECTOR_START_IMPL(RAWSXP, RAW); RCPP_VECTOR_START_IMPL(CPLXSXP, COMPLEX); RCPP_VECTOR_START_IMPL(REALSXP, REAL); #undef RCPP_VECTOR_START_IMPL /** * The value 0 statically casted to the appropriate type for * the given SEXP type */ template // #nocov start inline CTYPE get_zero() { return static_cast(0); } // #nocov end /** * Specialization for Rcomplex */ template<> inline Rcomplex get_zero(){ Rcomplex x; x.r = 0.0; x.i = 0.0; return x; } /** * Initializes a vector of the given SEXP type. The template fills the * vector with the value 0 of the appropriate type, for example * an INTSXP vector is initialized with (int)0, etc... */ template void r_init_vector(SEXP x) { // #nocov start typedef typename ::Rcpp::traits::storage_type::type CTYPE; CTYPE* start=r_vector_start(x); std::fill(start, start + Rf_xlength(x), get_zero()); } // #nocov end /** * Initializes a generic vector (VECSXP). Does nothing since * R already initializes all elements to NULL */ template<> inline void r_init_vector(SEXP /*x*/) {} /** * Initializes an expression vector (EXPRSXP). Does nothing since * R already initializes all elements to NULL */ template<> inline void r_init_vector(SEXP /*x*/) {} /** * Initializes a character vector (STRSXP). Does nothing since * R already initializes all elements to "" */ template<> inline void r_init_vector(SEXP /*x*/) {} /** * We do not allow List(RTYPE=VECSXP), RawVector(RTYPE=RAWSXP) * or ExpressionVector(RTYPE=EXPRSXP) to be sorted, so it is * desirable to issue a compiler error if user attempts to sort * these types of Vectors. * * We declare a template class without defining the generic * class body, but complete the definition in specialization * of qualified Vector types. Hence when using this class * on unqualified Vectors, the compiler will emit errors. */ template class Sort_is_not_allowed_for_this_type; /** * Specialization for CPLXSXP, INTSXP, LGLSXP, REALSXP, and STRSXP */ template<> class Sort_is_not_allowed_for_this_type { public: static void do_nothing() {} }; template<> class Sort_is_not_allowed_for_this_type { public: static void do_nothing() {} }; template<> class Sort_is_not_allowed_for_this_type { public: static void do_nothing() {} }; template<> class Sort_is_not_allowed_for_this_type { public: static void do_nothing() {} }; template<> class Sort_is_not_allowed_for_this_type { public: static void do_nothing() {} }; } // internal } // Rcpp #endif Rcpp/inst/include/Rcpp/internal/NAEquals.h0000644000176200001440000000233112316773510020124 0ustar liggesusers// NAEquals.h: Rcpp R/C++ interface class library -- for allowing NA == NA // // Copyright (C) 2014 Kevin Ushey // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__internal__NAEquals__h #define Rcpp__internal__NAEquals__h namespace Rcpp { namespace internal { template struct NAEquals { inline bool operator()(T left, T right) const { return left == right; } }; // TODO: check different kinds of NA, NaNs template <> struct NAEquals { inline bool operator()(double left, double right) const { return memcmp(&left, &right, sizeof(double)) == 0; } }; } } #endif Rcpp/inst/include/Rcpp/internal/SEXP_Iterator.h0000644000176200001440000000523314647556006021117 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- /* :tabSize=4:indentSize=4:noTabs=false:folding=explicit:collapseFolds=1: */ // // SEXP_Iterator.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__internal__SEXP_Iterator__h #define Rcpp__internal__SEXP_Iterator__h namespace Rcpp{ namespace internal{ template class SEXP_Iterator { public: typedef const SEXP& reference ; typedef const SEXP* pointer ; typedef int difference_type ; typedef SEXP value_type; typedef std::random_access_iterator_tag iterator_category ; SEXP_Iterator( ): ptr(){} ; SEXP_Iterator( const SEXP_Iterator& other) : ptr(other.ptr){} ; SEXP_Iterator( const VECTOR& vec ) : ptr( RCPP_VECTOR_PTR(vec) ){} ; SEXP_Iterator& operator=(const SEXP_Iterator& other){ ptr = other.ptr ; return *this ;} int operator-( const SEXP_Iterator& other){ return ptr - other.ptr ; } SEXP_Iterator operator+( int n){ return SEXP_Iterator(ptr+n); } SEXP_Iterator operator-( int n){ return SEXP_Iterator(ptr-n); } SEXP_Iterator& operator++(){ ptr++ ; return *this ; } SEXP_Iterator& operator--(){ ptr-- ; return *this ; } SEXP_Iterator& operator+=(int n){ ptr += n; return *this ; } SEXP_Iterator& operator-=(int n){ ptr -= n; return *this ; } bool operator<( const SEXP_Iterator& other ){ return ptr < other.ptr ; } bool operator>( const SEXP_Iterator& other ){ return ptr > other.ptr ; } bool operator<=( const SEXP_Iterator& other ){ return ptr <= other.ptr ; } bool operator>=( const SEXP_Iterator& other ){ return ptr >= other.ptr ; } reference operator*(){ return *ptr ; } reference operator[](int n){ return ptr[n] ; } bool operator==(const SEXP_Iterator& other) const { return ptr == other.ptr ;} bool operator!=(const SEXP_Iterator& other) const { return ptr != other.ptr ;} private: const SEXP* ptr ; SEXP_Iterator( const SEXP* ptr_) : ptr(ptr_){} } ; } } #endif Rcpp/inst/include/Rcpp/internal/export.h0000644000176200001440000001341114630145635017777 0ustar liggesusers // export.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__internal__export__h #define Rcpp__internal__export__h namespace Rcpp{ namespace internal{ template std::wstring as_string_elt__impl( SEXP x, R_xlen_t i, Rcpp::traits::true_type ){ const char* y = char_get_string_elt( x, i ) ; return std::wstring(y, y+strlen(y) ) ; } template std::string as_string_elt__impl( SEXP x, R_xlen_t i, Rcpp::traits::false_type ){ return char_get_string_elt( x, i ) ; } template const std::basic_string< typename Rcpp::traits::char_type::type > as_string_elt( SEXP x, R_xlen_t i ){ return as_string_elt__impl( x, i, typename Rcpp::traits::is_wide_string::type() ) ; } /* iterating */ template void export_range__impl( SEXP x, InputIterator first, ::Rcpp::traits::false_type ) { const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype ; typedef typename ::Rcpp::traits::storage_type::type STORAGE ; Shield y( ::Rcpp::r_cast(x) ) ; STORAGE* start = ::Rcpp::internal::r_vector_start(y) ; std::copy( start, start + ::Rf_xlength(y), first ) ; } template void export_range__impl( SEXP x, InputIterator first, ::Rcpp::traits::true_type ) { const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype ; typedef typename ::Rcpp::traits::storage_type::type STORAGE ; Shield y( ::Rcpp::r_cast(x) ) ; STORAGE* start = ::Rcpp::internal::r_vector_start(y) ; std::transform( start, start + ::Rf_xlength(y) , first, caster ) ; } // implemented in meat template void export_range__dispatch( SEXP x, InputIterator first, ::Rcpp::traits::r_type_generic_tag ) ; template void export_range__dispatch( SEXP x, InputIterator first, ::Rcpp::traits::r_type_primitive_tag ) { export_range__impl( x, first, typename ::Rcpp::traits::r_sexptype_needscast() ); } template void export_range__dispatch( SEXP x, InputIterator first, ::Rcpp::traits::r_type_string_tag ) { if( ! ::Rf_isString( x) ) { const char* fmt = "Expecting a string vector: " "[type=%s; required=STRSXP]."; throw ::Rcpp::not_compatible(fmt, Rf_type2char(TYPEOF(x)) ); } R_xlen_t n = ::Rf_xlength(x) ; for( R_xlen_t i=0; i::value_type> ( x, i ) ; } } template void export_range( SEXP x, InputIterator first ) { export_range__dispatch::value_type>( x, first, typename ::Rcpp::traits::r_type_traits::value_type>::r_category() ); } /* indexing */ template void export_indexing__impl( SEXP x, T& res, ::Rcpp::traits::false_type ) { const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype ; typedef typename ::Rcpp::traits::storage_type::type STORAGE ; Shield y( ::Rcpp::r_cast(x) ) ; STORAGE* start = ::Rcpp::internal::r_vector_start(y) ; R_xlen_t size = ::Rf_xlength(y) ; for( R_xlen_t i=0; i void export_indexing__impl( SEXP x, T& res, ::Rcpp::traits::true_type ) { const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype ; typedef typename ::Rcpp::traits::storage_type::type STORAGE ; Shield y( ::Rcpp::r_cast(x) ); STORAGE* start = ::Rcpp::internal::r_vector_start(y) ; R_xlen_t size = ::Rf_xlength(y) ; for( R_xlen_t i=0; i(start[i]) ; } } template void export_indexing__dispatch( SEXP x, T& res, ::Rcpp::traits::r_type_primitive_tag ) { export_indexing__impl( x, res, typename ::Rcpp::traits::r_sexptype_needscast() ); } template void export_indexing__dispatch( SEXP x, T& res, ::Rcpp::traits::r_type_string_tag ) { if( ! ::Rf_isString( x) ) { const char* fmt = "Expecting a string vector: " "[type=%s; required=STRSXP]."; throw ::Rcpp::not_compatible(fmt, Rf_type2char(TYPEOF(x)) ); } R_xlen_t n = ::Rf_xlength(x) ; for( R_xlen_t i=0; i( x, i) ; } } template void export_indexing( SEXP x, T& res ) { export_indexing__dispatch( x, res, typename ::Rcpp::traits::r_type_traits::r_category() ); } } } #endif Rcpp/inst/include/Rcpp/internal/NAComparator.h0000644000176200001440000000665312750071673021017 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- /* :tabSize=4:indentSize=4:noTabs=false:folding=explicit:collapseFolds=1: */ // // NAComparator.h: Rcpp R/C++ interface class library -- comparator // // Copyright (C) 2012-2014 Dirk Eddelbuettel, Romain Francois and Kevin Ushey // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__internal__NAComparator__h #define Rcpp__internal__NAComparator__h namespace Rcpp { namespace internal { inline int StrCmp(SEXP x, SEXP y) { if (x == NA_STRING) return (y == NA_STRING ? 0 : 1); if (y == NA_STRING) return -1; if (x == y) return 0; // same string in cache return strcmp(char_nocheck(x), char_nocheck(y)); } template struct NAComparator { inline bool operator()(T left, T right) const { return left < right; } }; template <> struct NAComparator { inline bool operator()(int left, int right) const { if (left == NA_INTEGER) return false; if (right == NA_INTEGER) return true; return left < right; } }; template <> struct NAComparator { inline bool operator()(double left, double right) const { bool leftNaN = (left != left); bool rightNaN = (right != right); // this branch inspired by data.table: see // https://github.com/arunsrinivasan/datatable/commit/1a3e476d3f746e18261662f484d2afa84ac7a146#commitcomment-4885242 if (Rcpp_IsNaN(right) and Rcpp_IsNA(left)) return true; if (leftNaN != rightNaN) { return leftNaN < rightNaN; } else { return left < right; } } }; template <> struct NAComparator { inline bool operator()(Rcomplex left, Rcomplex right) const { // sort() in R says that complex numbers are first sorted by // the real parts, and then the imaginary parts. // When only one of the two numbers contains NA or NaN, move // it to the right hand side. // When both left and right contain NA or NaN, return true. bool leftNaN = (left.r != left.r) || (left.i != left.i); bool rightNaN = (right.r != right.r) || (right.i != right.i); if (!(leftNaN || rightNaN)) // if both are nice numbers { if (left.r == right.r) // if real parts are the same return left.i < right.i; else return left.r < right.r; } else return leftNaN <= rightNaN; } }; template <> struct NAComparator { inline bool operator()(SEXP left, SEXP right) const { return StrCmp(left, right) < 0; } }; template struct NAComparatorGreater { inline bool operator()(T left, T right) const { return NAComparator()(right, left); } }; } // internal } // Rcpp #endif // Rcpp__internal__NAComparator__h Rcpp/inst/include/Rcpp/internal/converter.h0000644000176200001440000000253612336231761020470 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- // // converter.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_internal_converter_h #define Rcpp_internal_converter_h namespace Rcpp{ namespace internal{ class converter { public: converter( ) : x(R_NilValue){} ; converter( SEXP x_) : x(x_){} ; converter( const converter& other) : x(other.x){} converter& operator=( const converter& other){ x = other.x ; return *this ; } ~converter(){} template operator T(){ return ::Rcpp::as( x ) ; } private: SEXP x ; } ; } // namespace internal } // namespace Rcpp #endif Rcpp/inst/include/Rcpp/internal/wrap.h0000644000176200001440000011543413226746441017441 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*- /* :tabSize=4:indentSize=4:noTabs=false:folding=explicit:collapseFolds=1: */ // // wrap.h: Rcpp R/C++ interface class library -- wrap implementations // // Copyright (C) 2010 - 2017 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_internal_wrap_h #define Rcpp_internal_wrap_h #include // this is a private header, included in RcppCommon.h // don't include it directly namespace Rcpp { namespace RcppEigen { template SEXP eigen_wrap(const T& object); } template SEXP wrap(const T& object); template class CustomImporter; namespace internal { inline SEXP make_charsexp__impl__wstring(const wchar_t* data) { char* buffer = get_string_buffer(); wcstombs(buffer, data, MAXELTSIZE); return Rf_mkChar(buffer); } inline SEXP make_charsexp__impl__wstring(wchar_t data) { wchar_t x[2]; x[0] = data; x[1] = '\0'; char* buffer = get_string_buffer(); wcstombs(buffer, x, MAXELTSIZE); return Rf_mkChar(buffer); } inline SEXP make_charsexp__impl__wstring(const std::wstring& st) { return make_charsexp__impl__wstring(st.data()); } inline SEXP make_charsexp__impl__cstring(const char* data) { return Rf_mkChar(data); } inline SEXP make_charsexp__impl__cstring(char data) { char x[2]; x[0] = data; x[1] = '\0'; return Rf_mkChar(x); } inline SEXP make_charsexp__impl__cstring(const std::string& st) { return make_charsexp__impl__cstring(st.c_str()); } template inline SEXP make_charsexp__impl(const T& s, Rcpp::traits::true_type) { return make_charsexp__impl__wstring(s); } template inline SEXP make_charsexp__impl(const T& s, Rcpp::traits::false_type) { return make_charsexp__impl__cstring(s); } template inline SEXP make_charsexp(const T& s) { return make_charsexp__impl(s, typename Rcpp::traits::is_wide_string::type()); } template <> inline SEXP make_charsexp(const Rcpp::String&); template SEXP range_wrap(InputIterator first, InputIterator last); template SEXP rowmajor_wrap(InputIterator first, int nrow, int ncol); // {{{ range wrap // {{{ unnamed range wrap /** * Range based primitive wrap implementation. used when * - T is a primitive type, indicated by the r_type_traits * - T needs a static_cast to be of the type suitable to fit in the R vector * * This produces an unnamed vector of the appropriate type using the * std::transform algorithm */ template inline SEXP primitive_range_wrap__impl(InputIterator first, InputIterator last, ::Rcpp::traits::true_type) { size_t size = std::distance(first, last); const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; Shield x(Rf_allocVector(RTYPE, size)); std::transform(first, last, r_vector_start(x), caster< T, typename ::Rcpp::traits::storage_type::type >); return wrap_extra_steps(x); } template inline SEXP primitive_range_wrap__impl__nocast(InputIterator first, InputIterator last, std::random_access_iterator_tag) { size_t size = std::distance(first, last); const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; Shield x(Rf_allocVector(RTYPE, size)); typedef typename ::Rcpp::traits::storage_type::type STORAGE; R_xlen_t __trip_count = size >> 2; STORAGE* start = r_vector_start(x); R_xlen_t i = 0; for (; __trip_count > 0; --__trip_count) { start[i] = first[i]; i++; start[i] = first[i]; i++; start[i] = first[i]; i++; start[i] = first[i]; i++; } switch (size - i) { case 3: start[i] = first[i]; i++; // fallthrough case 2: start[i] = first[i]; i++; // fallthrough case 1: start[i] = first[i]; i++; // fallthrough case 0: default: {} } return wrap_extra_steps(x); } template inline SEXP primitive_range_wrap__impl__nocast(InputIterator first, InputIterator last, std::input_iterator_tag) { size_t size = std::distance(first, last); const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; Shield x(Rf_allocVector(RTYPE, size)); std::copy(first, last, r_vector_start(x)); return wrap_extra_steps(x); } /** * Range based primitive wrap implementation. used when : * - T is a primitive type * - T does not need a cast * * This produces an unnamed vector of the appropriate type using * the std::copy algorithm */ template inline SEXP primitive_range_wrap__impl(InputIterator first, InputIterator last, ::Rcpp::traits::false_type) { return primitive_range_wrap__impl__nocast(first, last, typename std::iterator_traits::iterator_category()); } /** * Range based wrap implementation that deals with iterator over * primitive types (int, double, etc ...) * * This produces an unnamed vector of the appropriate type */ template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_primitive_tag) { return primitive_range_wrap__impl(first, last, typename ::Rcpp::traits::r_sexptype_needscast()); } /** * range based wrap implementation that deals with iterators over * some type U. each U object is itself wrapped * * This produces an unnamed generic vector (list) */ template inline SEXP range_wrap_dispatch___generic(InputIterator first, InputIterator last) { size_t size = std::distance(first, last); Shield x(Rf_allocVector(VECSXP, size)); size_t i =0; while(i < size) { SET_VECTOR_ELT(x, i, ::Rcpp::wrap(*first)); i++; ++first; } return x; } template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_generic_tag) { return range_wrap_dispatch___generic(first, last); } // modules template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_module_object_pointer_tag) { return range_wrap_dispatch___generic(first, last); } template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_module_object_const_pointer_tag) { return range_wrap_dispatch___generic(first, last); } template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_module_object_tag) { return range_wrap_dispatch___generic(first, last); } template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_module_object_reference_tag) { return range_wrap_dispatch___generic(first, last); } template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_module_object_const_reference_tag) { return range_wrap_dispatch___generic(first, last); } /** * Range based wrap implementation for iterators over std::string * * This produces an unnamed character vector */ template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_string_tag) { size_t size = std::distance(first, last); Shield x(Rf_allocVector(STRSXP, size)); size_t i = 0; while(i < size) { SET_STRING_ELT(x, i, make_charsexp(*first)); i++; ++first; } return x; } // }}} // {{{ named range wrap /** * range based wrap implementation that deals with iterators over * pair where T is a primitive type : int, double ... * * This version is used when there is no need to cast T * * This produces a named R vector of the appropriate type */ template // #nocov start inline SEXP range_wrap_dispatch___impl__cast(InputIterator first, InputIterator last, ::Rcpp::traits::false_type) { size_t size = std::distance(first, last); const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; Shield x(Rf_allocVector(RTYPE, size)); Shield names(Rf_allocVector(STRSXP, size)); typedef typename ::Rcpp::traits::storage_type::type CTYPE; CTYPE* start = r_vector_start(x); size_t i =0; std::string buf; for (; i(x); // #nocov end } /** * range based wrap implementation that deals with iterators over * pair where T is a primitive type : int, double ... * * This version is used when T needs to be cast to the associated R * type * * This produces a named R vector of the appropriate type */ template inline SEXP range_wrap_dispatch___impl__cast(InputIterator first, InputIterator last, ::Rcpp::traits::true_type) { size_t size = std::distance(first, last); const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; Shield x(Rf_allocVector(RTYPE, size)); Shield names(Rf_allocVector(STRSXP, size)); typedef typename ::Rcpp::traits::storage_type::type CTYPE; CTYPE* start = r_vector_start(x); size_t i =0; std::string buf; for (; i(first->second); buf = first->first; SET_STRING_ELT(names, i, Rf_mkChar(buf.c_str())); } ::Rf_setAttrib(x, R_NamesSymbol, names); return wrap_extra_steps(x); } /** * range based wrap implementation that deals with iterators over * pair where T is a primitive type : int, double ... * * This dispatches further depending on whether the type needs * a cast to fit into the associated R type * * This produces a named R vector of the appropriate type */ template // #nocov start inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_pairstring_primitive_tag) { return range_wrap_dispatch___impl__cast(first, last, typename ::Rcpp::traits::r_sexptype_needscast()); } // #nocov end /** * Range based wrap implementation that deals with iterators over * pair where U is wrappable. This is the kind of * iterators that are produced by map * * This produces a named generic vector (named list). The first * element of the list contains the result of a call to wrap on the * object of type U, etc ... * * The names are taken from the keys */ template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_pairstring_generic_tag) { size_t size = std::distance(first, last); Shield x(Rf_allocVector(VECSXP, size)); Shield names(Rf_allocVector(STRSXP, size)); size_t i =0; std::string buf; SEXP element = R_NilValue; while(i < size) { // #nocov start element = ::Rcpp::wrap(first->second); buf = first->first; SET_VECTOR_ELT(x, i, element); SET_STRING_ELT(names, i, Rf_mkChar(buf.c_str())); i++; ++first; } // #nocov end ::Rf_setAttrib(x, R_NamesSymbol, names); return x; } /** * Range based wrap for iterators over std::pair * * This is mainly used for wrapping map and friends * which happens to produce iterators over pair * * This produces a character vector containing copies of the * string iterated over. The names of the vector is set to the keys * of the pair */ template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_pairstring_string_tag) { size_t size = std::distance(first, last); Shield x(Rf_allocVector(STRSXP, size)); Shield names(Rf_allocVector(STRSXP, size)); for (size_t i = 0; i < size; i++, ++first) { SET_STRING_ELT(x, i, make_charsexp(first->second)); SET_STRING_ELT(names, i, make_charsexp(first->first)); } ::Rf_setAttrib(x, R_NamesSymbol, names); return x; } /** * iterating over pair * where VALUE is some primitive type */ template inline SEXP range_wrap_dispatch___impl__pair(InputIterator first, InputIterator last, Rcpp::traits::true_type); /** * iterating over pair * where VALUE is a type that needs wrapping */ template inline SEXP range_wrap_dispatch___impl__pair(InputIterator first, InputIterator last, Rcpp::traits::false_type); /** * Range wrap dispatch for iterators over std::pair */ template inline SEXP range_wrap_dispatch___impl(InputIterator first, InputIterator last, ::Rcpp::traits::r_type_pair_tag) { typedef typename T::second_type VALUE; typedef typename T::first_type KEY; return range_wrap_dispatch___impl__pair::rtype >(first, last, typename Rcpp::traits::is_primitive::type()); } // }}} /** * Dispatcher for all range based wrap implementations * * This uses the Rcpp::traits::r_type_traits to perform further dispatch */ template inline SEXP range_wrap_dispatch(InputIterator first, InputIterator last) { #if RCPP_DEBUG_LEVEL > 0 typedef typename ::Rcpp::traits::r_type_traits::r_category categ; #endif RCPP_DEBUG_3("range_wrap_dispatch< InputIterator = \n%s , T = %s, categ = %s>\n", DEMANGLE(InputIterator), DEMANGLE(T), DEMANGLE(categ)); return range_wrap_dispatch___impl(first, last, typename ::Rcpp::traits::r_type_traits::r_category()); } // we use the iterator trait to make the dispatch /** * range based wrap. This uses the std::iterator_traits class * to perform further dispatch */ template inline SEXP range_wrap(InputIterator first, InputIterator last) { return range_wrap_dispatch::value_type>::type >(first, last); } // }}} // {{{ primitive wrap (wrapping a single primitive value) /** * wraps a single primitive value when there is no need for a cast */ template inline SEXP primitive_wrap__impl__cast(const T& object, ::Rcpp::traits::false_type) { const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; Shield x(Rf_allocVector(RTYPE, 1)); r_vector_start(x)[0] = object; return x; } /** * wraps a single primitive value when a cast is needed */ template inline SEXP primitive_wrap__impl__cast(const T& object, ::Rcpp::traits::true_type) { const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; typedef typename ::Rcpp::traits::storage_type::type STORAGE_TYPE; Shield x(Rf_allocVector(RTYPE, 1)); r_vector_start(x)[0] = caster(object); return x; } /** * primitive wrap for 'easy' primitive types: int, double, Rbyte, Rcomplex * * This produces a vector of length 1 of the appropriate type */ template inline SEXP primitive_wrap__impl(const T& object, ::Rcpp::traits::r_type_primitive_tag) { return primitive_wrap__impl__cast(object, typename ::Rcpp::traits::r_sexptype_needscast()); } /** * primitive wrap for types that can be converted implicitely to std::string or std::wstring * * This produces a character vector of length 1 containing the std::string or wstring */ template inline SEXP primitive_wrap__impl(const T& object, ::Rcpp::traits::r_type_string_tag) { Shield x(::Rf_allocVector(STRSXP, 1)); SET_STRING_ELT(x, 0, make_charsexp(object)); return x; } /** * called when T is a primitive type : int, bool, double, std::string, etc ... * This uses the Rcpp::traits::r_type_traits on the type T to perform * further dispatching and wrap the object into an vector of length 1 * of the appropriate SEXP type */ template inline SEXP primitive_wrap(const T& object) { return primitive_wrap__impl(object, typename ::Rcpp::traits::r_type_traits::r_category()); } // }}} // {{{ unknown /** * Called when the type T is known to be implicitely convertible to * SEXP. It uses the implicit conversion to SEXP to wrap the object * into a SEXP */ template inline SEXP wrap_dispatch_unknown(const T& object, ::Rcpp::traits::true_type) { RCPP_DEBUG_1("wrap_dispatch_unknown<%s>(., false )", DEMANGLE(T)) // here we know (or assume) that T is convertible to SEXP SEXP x = object; return x; } /** * This is the worst case : * - not a primitive * - not implicitely convertible tp SEXP * - not iterable * * so we just give up and attempt to use static_assert to generate * a compile time message if it is available, otherwise we use * implicit conversion to SEXP to bomb the compiler, which will give * quite a cryptic message */ template inline SEXP wrap_dispatch_unknown_iterable(const T& object, ::Rcpp::traits::false_type) { RCPP_DEBUG_1("wrap_dispatch_unknown_iterable<%s>(., false )", DEMANGLE(T)) // here we know that T is not convertible to SEXP #ifdef HAS_STATIC_ASSERT static_assert(!sizeof(T), "cannot convert type to SEXP"); #else // leave the cryptic message SEXP x = object; return x; #endif return R_NilValue; // -Wall } template inline SEXP wrap_dispatch_unknown_iterable__logical(const T& object, ::Rcpp::traits::true_type) { RCPP_DEBUG_1("wrap_dispatch_unknown_iterable__logical<%s>(., true )", DEMANGLE(T)) size_t size = object.size(); Shield x(Rf_allocVector(LGLSXP, size)); std::copy(object.begin(), object.end(), LOGICAL(x)); return x; } template inline SEXP wrap_range_sugar_expression(const T& object, Rcpp::traits::false_type) { RCPP_DEBUG_1("wrap_range_sugar_expression<%s>(., false )", DEMANGLE(T)) return range_wrap(object.begin(), object.end()); } template inline SEXP wrap_range_sugar_expression(const T& object, Rcpp::traits::true_type); template inline SEXP wrap_dispatch_unknown_iterable__logical(const T& object, ::Rcpp::traits::false_type) { RCPP_DEBUG_1("wrap_dispatch_unknown_iterable__logical<%s>(., false )", DEMANGLE(T)) return wrap_range_sugar_expression(object, typename Rcpp::traits::is_sugar_expression::type()); } template inline SEXP wrap_dispatch_unknown_iterable__matrix_interface(const T& object, ::Rcpp::traits::false_type) { RCPP_DEBUG_1("wrap_dispatch_unknown_iterable__matrix_interface<%s>(., false )", DEMANGLE(T)) return wrap_dispatch_unknown_iterable__logical(object, typename ::Rcpp::traits::expands_to_logical::type()); } template inline SEXP wrap_dispatch_matrix_logical(const T& object, ::Rcpp::traits::true_type) { int nr = object.nrow(), nc = object.ncol(); Shield res(Rf_allocVector(LGLSXP, nr * nc)); int k=0; int* p = LOGICAL(res); for (int j=0; j dim(Rf_allocVector(INTSXP, 2)); INTEGER(dim)[0] = nr; INTEGER(dim)[1] = nc; Rf_setAttrib(res, R_DimSymbol , dim); return res; } template inline SEXP wrap_dispatch_matrix_primitive(const T& object) { const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; int nr = object.nrow(), nc = object.ncol(); Shield res(Rf_allocVector(RTYPE, nr*nc)); int k=0; STORAGE* p = r_vector_start< RTYPE>(res); for (int j=0; j dim(Rf_allocVector(INTSXP, 2)); INTEGER(dim)[0] = nr; INTEGER(dim)[1] = nc; Rf_setAttrib(res, R_DimSymbol , dim); return res; } template inline SEXP wrap_dispatch_matrix_not_logical(const T& object, ::Rcpp::traits::r_type_primitive_tag) { return wrap_dispatch_matrix_primitive(object); } template inline SEXP wrap_dispatch_matrix_not_logical(const T& object, ::Rcpp::traits::r_type_string_tag) { int nr = object.nrow(), nc = object.ncol(); Shield res(Rf_allocVector(STRSXP, nr*nc)); int k=0; for (int j=0; j dim(Rf_allocVector(INTSXP, 2)); INTEGER(dim)[0] = nr; INTEGER(dim)[1] = nc; Rf_setAttrib(res, R_DimSymbol , dim); return res; } template inline SEXP wrap_dispatch_matrix_not_logical(const T& object, ::Rcpp::traits::r_type_generic_tag) { int nr = object.nrow(), nc = object.ncol(); Shield res(Rf_allocVector(VECSXP, nr*nc)); int k=0; for (int j=0; j dim(Rf_allocVector(INTSXP, 2)); INTEGER(dim)[0] = nr; INTEGER(dim)[1] = nc; Rf_setAttrib(res, R_DimSymbol , dim); return res; } template inline SEXP wrap_dispatch_matrix_logical(const T& object, ::Rcpp::traits::false_type) { return wrap_dispatch_matrix_not_logical(object, typename ::Rcpp::traits::r_type_traits::r_category()); } template inline SEXP wrap_dispatch_unknown_iterable__matrix_interface(const T& object, ::Rcpp::traits::true_type) { RCPP_DEBUG_1("wrap_dispatch_unknown_iterable__matrix_interface<%s>(., true )", DEMANGLE(T)) return wrap_dispatch_matrix_logical(object, typename ::Rcpp::traits::expands_to_logical::type()); } /** * Here we know for sure that type T has a T::iterator typedef * so we hope for the best and call the range based wrap with begin * and end * * This works fine for all stl containers and classes T that have : * - T::iterator * - T::iterator begin() * - T::iterator end() * * If someone knows a better way, please advise */ template inline SEXP wrap_dispatch_unknown_iterable(const T& object, ::Rcpp::traits::true_type) { RCPP_DEBUG_1("wrap_dispatch_unknown_iterable<%s>(., true )", DEMANGLE(T)) return wrap_dispatch_unknown_iterable__matrix_interface(object, typename ::Rcpp::traits::matrix_interface::type()); } template inline SEXP wrap_dispatch_importer__impl__prim(const T& object, ::Rcpp::traits::false_type) { int size = object.size(); const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; Shield x(Rf_allocVector(RTYPE, size)); typedef typename ::Rcpp::traits::storage_type::type CTYPE; CTYPE* start = r_vector_start(x); for (int i=0; i inline SEXP wrap_dispatch_importer__impl__prim(const T& object, ::Rcpp::traits::true_type) { int size = object.size(); const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; Shield x(Rf_allocVector(RTYPE, size)); typedef typename ::Rcpp::traits::storage_type::type CTYPE; CTYPE* start = r_vector_start(x); for (int i=0; i(object.get(i)); } return x; } template inline SEXP wrap_dispatch_importer__impl(const T& object, ::Rcpp::traits::r_type_primitive_tag) { return wrap_dispatch_importer__impl__prim(object, typename ::Rcpp::traits::r_sexptype_needscast()); } template inline SEXP wrap_dispatch_importer__impl(const T& object, ::Rcpp::traits::r_type_string_tag) { int size = object.size(); Shield x(Rf_allocVector(STRSXP, size)); for (int i=0; i inline SEXP wrap_dispatch_importer__impl(const T& object, ::Rcpp::traits::r_type_generic_tag) { int size = object.size(); Shield x(Rf_allocVector(VECSXP, size)); for (int i=0; i inline SEXP wrap_dispatch_importer(const T& object) { return wrap_dispatch_importer__impl(object, typename ::Rcpp::traits::r_type_traits::r_category()); } /** * Called when no implicit conversion to SEXP is possible and this is * not tagged as a primitive type, checks whether the type is * iterable */ template inline SEXP wrap_dispatch_unknown(const T& object, ::Rcpp::traits::false_type) { RCPP_DEBUG_1("wrap_dispatch_unknown<%s>(., false )", DEMANGLE(T)) return wrap_dispatch_unknown_iterable(object, typename ::Rcpp::traits::has_iterator::type()); } // }}} // {{{ wrap dispatch /** * wrapping a __single__ primitive type : int, double, std::string, size_t, * Rbyte, Rcomplex */ template inline SEXP wrap_dispatch(const T& object, ::Rcpp::traits::wrap_type_primitive_tag) { return primitive_wrap(object); } template inline SEXP wrap_dispatch(const T& object, ::Rcpp::traits::wrap_type_char_array) { return Rf_mkString(object); } template inline SEXP wrap_dispatch(const T& object, ::Rcpp::traits::wrap_type_module_object_pointer_tag) { return Rcpp::internal::make_new_object< typename T::object_type >(object.ptr); } template inline SEXP wrap_dispatch(const T& object, ::Rcpp::traits::wrap_type_module_object_tag) { return Rcpp::internal::make_new_object(new T(object)); } template inline SEXP wrap_dispatch(const T& object, ::Rcpp::traits::wrap_type_enum_tag) { return wrap((int)object); } template inline SEXP wrap_dispatch_eigen(const T& object, ::Rcpp::traits::false_type) { RCPP_DEBUG_1("wrap_dispatch_eigen<%s>(., false )", DEMANGLE(T)) return wrap_dispatch_unknown(object, typename ::Rcpp::traits::is_convertible::type()); } template inline SEXP wrap_dispatch_eigen(const T& object, ::Rcpp::traits::true_type) { RCPP_DEBUG_1("wrap_dispatch_eigen<%s>(., true )", DEMANGLE(T)) return ::Rcpp::RcppEigen::eigen_wrap(object); } /** * called when T is wrap_type_unknown_tag and is not an Importer class * The next step is to try implicit conversion to SEXP */ template inline SEXP wrap_dispatch_unknown_importable(const T& object, ::Rcpp::traits::false_type) { RCPP_DEBUG_1("wrap_dispatch_unknown_importable<%s>(., false )", DEMANGLE(T)) return wrap_dispatch_eigen(object, typename traits::is_eigen_base::type()); } /** * called when T is an Importer */ template inline SEXP wrap_dispatch_unknown_importable(const T& object, ::Rcpp::traits::true_type) { RCPP_DEBUG_1("wrap_dispatch_unknown_importable<%s>(., true )", DEMANGLE(T)) return wrap_dispatch_importer(object); } /** * This is called by wrap when the wrap_type_traits is wrap_type_unknown_tag * * This tries to identify if the object conforms to the Importer class */ template inline SEXP wrap_dispatch(const T& object, ::Rcpp::traits::wrap_type_unknown_tag) { RCPP_DEBUG_1("wrap_dispatch<%s>(., wrap_type_unknown_tag)", DEMANGLE(T)) return wrap_dispatch_unknown_importable(object, typename ::Rcpp::traits::is_importer::type()); } // }}} // {{{ wrap a container that is structured in row major order template inline SEXP rowmajor_wrap__dispatch(InputIterator first, int nrow, int ncol, ::Rcpp::traits::r_type_generic_tag) { Shield out(::Rf_allocVector(VECSXP, nrow * ncol)); int i=0, j=0; for (j=0; j dims(::Rf_allocVector(INTSXP, 2)); INTEGER(dims)[0] = nrow; INTEGER(dims)[1] = ncol; ::Rf_setAttrib(out, R_DimSymbol, dims); return out; } template inline SEXP rowmajor_wrap__dispatch(InputIterator first, int nrow, int ncol, ::Rcpp::traits::r_type_string_tag) { Shield out(::Rf_allocVector(STRSXP, nrow * ncol)); int i=0, j=0; for (j=0; j dims(::Rf_allocVector(INTSXP, 2)); INTEGER(dims)[0] = nrow; INTEGER(dims)[1] = ncol; ::Rf_setAttrib(out, R_DimSymbol, dims); return out; } template inline SEXP primitive_rowmajor_wrap__dispatch(InputIterator first, int nrow, int ncol, ::Rcpp::traits::false_type) { const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; Shield out(::Rf_allocVector(RTYPE, nrow * ncol)); value_type* ptr = r_vector_start(out); int i=0, j=0; for (j=0; j dims(::Rf_allocVector(INTSXP, 2)); INTEGER(dims)[0] = nrow; INTEGER(dims)[1] = ncol; ::Rf_setAttrib(out, R_DimSymbol, dims); return out; } template inline SEXP primitive_rowmajor_wrap__dispatch(InputIterator first, int nrow, int ncol, ::Rcpp::traits::true_type) { const int RTYPE = ::Rcpp::traits::r_sexptype_traits::rtype; typedef typename ::Rcpp::traits::storage_type::type STORAGE; Shield out(::Rf_allocVector(RTYPE, nrow * ncol)); STORAGE* ptr = r_vector_start(out); int i=0, j=0; for (j=0; j(*first); } } Shield dims(::Rf_allocVector(INTSXP, 2)); INTEGER(dims)[0] = nrow; INTEGER(dims)[1] = ncol; ::Rf_setAttrib(out, R_DimSymbol, dims); return out; } template inline SEXP rowmajor_wrap__dispatch(InputIterator first, int nrow, int ncol, ::Rcpp::traits::r_type_primitive_tag) { return primitive_rowmajor_wrap__dispatch(first, nrow, ncol, typename ::Rcpp::traits::r_sexptype_needscast()); } template inline SEXP rowmajor_wrap(InputIterator first, int nrow, int ncol) { typedef typename std::iterator_traits::value_type VALUE_TYPE; return rowmajor_wrap__dispatch(first, nrow, ncol, typename ::Rcpp::traits::r_type_traits::r_category()); } // }}} } // internal /** * wraps an object of type T in a SEXP * * This method depends on the Rcpp::traits::wrap_type_traits trait * class to dispatch to the appropriate internal implementation * method * */ template inline SEXP wrap(const T& object); template <> inline SEXP wrap(const Rcpp::String& object); template inline SEXP module_wrap_dispatch(const T& obj, Rcpp::traits::void_wrap_tag) { return R_NilValue; } // these are defined in wrap_end.h template inline SEXP module_wrap_dispatch(const T& obj, Rcpp::traits::pointer_wrap_tag); template inline SEXP module_wrap_dispatch(const T& obj, Rcpp::traits::normal_wrap_tag); template inline SEXP module_wrap(const T& obj) { return module_wrap_dispatch(obj, typename Rcpp::traits::module_wrap_traits::category()); } template <> inline SEXP module_wrap(const SEXP& obj) { return obj; } inline SEXP wrap(const char* const v) { if (v != NULL) return Rf_mkString(v); else return R_NilValue; // #nocov } /** * Range based version of wrap */ template inline SEXP wrap(InputIterator first, InputIterator last) { return internal::range_wrap(first, last); } } // Rcpp #endif Rcpp/inst/include/Rcpp/internal/caster.h0000644000176200001440000000374112336231761017741 0ustar liggesusers// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- /* :tabSize=4:indentSize=4:noTabs=false:folding=explicit:collapseFolds=1: */ // // caster.h: Rcpp R/C++ interface class library -- // // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__internal__caster__h #define Rcpp__internal__caster__h namespace Rcpp{ namespace internal{ template TO caster(FROM from){ return static_cast(from) ; } template inline Rcomplex Rcomplex_caster( std::complex from ){ Rcomplex cx ; cx.r = (double)from.real() ; cx.i = (double)from.imag() ; return cx ; } template <> inline Rcomplex caster, Rcomplex>( std::complex from){ return Rcomplex_caster(from) ; } template<> inline Rcomplex caster, Rcomplex>( std::complex from){ return Rcomplex_caster(from) ; } template inline std::complex std_complex_caster( Rcomplex from ){ return std::complex( static_cast(from.r), static_cast(from.i) ) ; } template <> inline std::complex caster >( Rcomplex from){ return std_complex_caster(from); } template<> inline std::complex caster >( Rcomplex from){ return std_complex_caster(from) ; } } } #endif Rcpp/inst/include/Rcpp/StringTransformer.h0000644000176200001440000000321014351164565020332 0ustar liggesusers // clone.h: Rcpp R/C++ interface class library -- clone RObject's // // Copyright (C) 2010 - 2022 Dirk Eddelbuettel and Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp__StringTransformer_h #define Rcpp__StringTransformer_h #include namespace Rcpp{ template #if __cplusplus < 201103L class StringTransformer : public std::unary_function { #else class StringTransformer : public std::function { #endif public: StringTransformer( const UnaryOperator& op_ ): op(op_), buffer(){} ~StringTransformer(){} const char* operator()(const char* input ) { buffer = input; std::transform( buffer.begin(), buffer.end(), buffer.begin(), op ); return buffer.c_str(); } private: const UnaryOperator& op; std::string buffer; }; template StringTransformer make_string_transformer( const UnaryOperator& fun){ return StringTransformer( fun ); } } #endif Rcpp/inst/include/Rcpp/routines.h0000644000176200001440000002345514006073034016511 0ustar liggesusers // routines.h: Rcpp R/C++ interface class library -- callable function setup // // Copyright (C) 2013 - 2014 Romain Francois // Copyright (C) 2015 - 2020 Romain Francois and Dirk Eddelbuettel // Copyright (C) 2021 Romain Francois, Dirk Eddelbuettel and Iñaki Ucar // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef RCPP_ROUTINE_H #define RCPP_ROUTINE_H #include #if defined(COMPILING_RCPP) // the idea is that this file should be generated automatically by Rcpp::register namespace Rcpp{ const char* type2name(SEXP x); namespace internal{ unsigned long enterRNGScope(); unsigned long exitRNGScope(); unsigned long beginSuspendRNGSynchronization(); unsigned long endSuspendRNGSynchronization(); char* get_string_buffer(); SEXP get_Rcpp_namespace(); } double mktime00(struct tm &); struct tm * gmtime_(const time_t * const); void Rcpp_precious_init(); void Rcpp_precious_teardown(); SEXP Rcpp_precious_preserve(SEXP object); void Rcpp_precious_remove(SEXP token); Rostream& Rcpp_cout_get(); Rostream& Rcpp_cerr_get(); } SEXP rcpp_get_stack_trace(); SEXP rcpp_set_stack_trace(SEXP); std::string demangle(const std::string& name); const char* short_file_name(const char* ); int* get_cache(int n); SEXP stack_trace( const char *file = "", int line = -1); SEXP get_string_elt(SEXP s, R_xlen_t i); const char* char_get_string_elt(SEXP s, R_xlen_t i); void set_string_elt(SEXP s, R_xlen_t i, SEXP v); void char_set_string_elt(SEXP s, R_xlen_t i, const char* v); SEXP* get_string_ptr(SEXP s); SEXP get_vector_elt(SEXP v, R_xlen_t i); void set_vector_elt(SEXP v, R_xlen_t i, SEXP x); SEXP* get_vector_ptr(SEXP v); const char* char_nocheck(SEXP x); void* dataptr(SEXP x); Rcpp::Module* getCurrentScope(); void setCurrentScope( Rcpp::Module* mod ); SEXP reset_current_error(); int error_occured(); SEXP rcpp_get_current_error(); // void print(SEXP s); #else namespace Rcpp { #define GET_CALLABLE(__FUN__) (Fun) R_GetCCallable( "Rcpp", __FUN__ ) inline attribute_hidden const char* type2name(SEXP x){ typedef const char* (*Fun)(SEXP); static Fun fun = GET_CALLABLE("type2name"); return fun(x); } namespace internal{ inline attribute_hidden unsigned long enterRNGScope(){ typedef unsigned long (*Fun)(void); static Fun fun = GET_CALLABLE("enterRNGScope"); return fun(); } inline attribute_hidden unsigned long exitRNGScope(){ typedef unsigned long (*Fun)(void); static Fun fun = GET_CALLABLE("exitRNGScope"); return fun(); } inline attribute_hidden unsigned long beginSuspendRNGSynchronization(){ typedef unsigned long (*Fun)(void); static Fun fun = GET_CALLABLE("beginSuspendRNGSynchronization"); return fun(); } inline attribute_hidden unsigned long endSuspendRNGSynchronization(){ typedef unsigned long (*Fun)(void); static Fun fun = GET_CALLABLE("endSuspendRNGSynchronization"); return fun(); } inline attribute_hidden char* get_string_buffer(){ typedef char* (*Fun)(void); static Fun fun = GET_CALLABLE("get_string_buffer"); return fun(); } inline attribute_hidden SEXP get_Rcpp_namespace() { typedef SEXP (*Fun)(void); static Fun fun = GET_CALLABLE("get_Rcpp_namespace"); return fun(); } } inline attribute_hidden double mktime00(struct tm &tm){ typedef double (*Fun)(struct tm&); static Fun fun = GET_CALLABLE("mktime00"); return fun(tm); } inline attribute_hidden struct tm * gmtime_(const time_t * const x){ typedef struct tm* (*Fun)(const time_t* const); static Fun fun = GET_CALLABLE("gmtime_"); return fun(x); } inline attribute_hidden void Rcpp_precious_init() { typedef void (*Fun)(void); static Fun fun = GET_CALLABLE("Rcpp_precious_init"); fun(); } inline attribute_hidden void Rcpp_precious_teardown() { typedef void (*Fun)(void); static Fun fun = GET_CALLABLE("Rcpp_precious_teardown"); fun(); } inline attribute_hidden SEXP Rcpp_precious_preserve(SEXP object) { typedef SEXP (*Fun)(SEXP); static Fun fun = GET_CALLABLE("Rcpp_precious_preserve"); return fun(object); } inline attribute_hidden void Rcpp_precious_remove(SEXP token) { typedef void (*Fun)(SEXP); static Fun fun = GET_CALLABLE("Rcpp_precious_remove"); fun(token); } inline attribute_hidden Rostream& Rcpp_cout_get() { typedef Rostream& (*Fun)(); static Fun fun = GET_CALLABLE("Rcpp_cout_get"); return fun(); } inline attribute_hidden Rostream& Rcpp_cerr_get() { typedef Rostream& (*Fun)(); static Fun fun = GET_CALLABLE("Rcpp_cerr_get"); return fun(); } } // The 'attribute_hidden' used here is a simple precessor defined from // ${R_HOME}/include/R_ext/Visibility.h -- it is empty when not supported // by the compiler and otherwise '__attribute__ ((visibility ("hidden")))' inline attribute_hidden SEXP rcpp_get_stack_trace(){ typedef SEXP (*Fun)(void); static Fun fun = GET_CALLABLE("rcpp_get_stack_trace"); return fun(); } inline attribute_hidden SEXP rcpp_set_stack_trace(SEXP e){ typedef SEXP (*Fun)(SEXP); static Fun fun = GET_CALLABLE("rcpp_set_stack_trace"); return fun(e); } inline attribute_hidden std::string demangle( const std::string& name){ typedef std::string (*Fun)( const std::string& ); static Fun fun = GET_CALLABLE("demangle"); return fun(name); } inline attribute_hidden const char* short_file_name(const char* file) { typedef const char* (*Fun)(const char*); static Fun fun = GET_CALLABLE("short_file_name"); return fun(file); } inline attribute_hidden SEXP stack_trace( const char *file = "", int line = -1){ typedef SEXP (*Fun)(const char*, int); static Fun fun = GET_CALLABLE("stack_trace"); return fun(file, line); } inline attribute_hidden SEXP get_string_elt(SEXP s, R_xlen_t i){ typedef SEXP (*Fun)(SEXP, R_xlen_t); static Fun fun = GET_CALLABLE("get_string_elt"); return fun(s, i); } inline attribute_hidden const char* char_get_string_elt(SEXP s, R_xlen_t i){ typedef const char* (*Fun)(SEXP, R_xlen_t); static Fun fun = GET_CALLABLE("char_get_string_elt"); return fun(s, i); } inline attribute_hidden void set_string_elt(SEXP s, R_xlen_t i, SEXP v){ typedef void (*Fun)(SEXP, R_xlen_t, SEXP); static Fun fun = GET_CALLABLE("set_string_elt"); fun(s, i, v); } inline attribute_hidden void char_set_string_elt(SEXP s, R_xlen_t i, const char* v){ typedef void (*Fun)(SEXP, R_xlen_t, const char*); static Fun fun = GET_CALLABLE("char_set_string_elt"); fun(s, i, v ); } inline attribute_hidden SEXP* get_string_ptr(SEXP s){ typedef SEXP* (*Fun)(SEXP); static Fun fun = GET_CALLABLE("get_string_ptr"); return fun(s); } inline attribute_hidden SEXP get_vector_elt(SEXP v, R_xlen_t i){ typedef SEXP (*Fun)(SEXP, R_xlen_t); static Fun fun = GET_CALLABLE("get_vector_elt"); return fun(v, i); } inline attribute_hidden void set_vector_elt(SEXP v, R_xlen_t i, SEXP x){ typedef void (*Fun)(SEXP, R_xlen_t, SEXP); static Fun fun = GET_CALLABLE("set_vector_elt"); fun(v, i, x); } inline attribute_hidden SEXP* get_vector_ptr(SEXP v){ typedef SEXP* (*Fun)(SEXP); static Fun fun = GET_CALLABLE("get_vector_ptr"); return fun(v); } inline attribute_hidden const char* char_nocheck( SEXP x){ typedef const char* (*Fun)(SEXP); static Fun fun = GET_CALLABLE("char_nocheck"); return fun(x); } inline attribute_hidden void* dataptr(SEXP x){ typedef void* (*Fun)(SEXP); static Fun fun = GET_CALLABLE("dataptr"); return fun(x); } inline attribute_hidden Rcpp::Module* getCurrentScope(){ typedef Rcpp::Module* (*Fun)(void); static Fun fun = GET_CALLABLE("getCurrentScope"); return fun(); } inline attribute_hidden void setCurrentScope( Rcpp::Module* mod ){ typedef void (*Fun)(Rcpp::Module*); static Fun fun = GET_CALLABLE("setCurrentScope"); fun(mod); } inline attribute_hidden int* get_cache( int n ){ typedef int* (*Fun)(int); static Fun fun = GET_CALLABLE("get_cache"); return fun(n); } inline attribute_hidden SEXP reset_current_error(){ typedef SEXP (*Fun)(void); static Fun fun = GET_CALLABLE("reset_current_error"); return fun(); } inline attribute_hidden int error_occured(){ typedef int (*Fun)(void); static Fun fun = GET_CALLABLE("error_occured"); return fun(); } inline attribute_hidden SEXP rcpp_get_current_error(){ typedef SEXP (*Fun)(void); static Fun fun = GET_CALLABLE("rcpp_get_current_error"); return fun(); } // inline attribute_hidden void print(SEXP s) { // typedef void (*Fun)(SEXP); // static Fun fun = GET_CALLABLE("print"); // fun(s); // } #endif #endif Rcpp/inst/include/Rcpp/api/0000755000176200001440000000000012253723677015251 5ustar liggesusersRcpp/inst/include/Rcpp/api/meat/0000755000176200001440000000000014026215717016166 5ustar liggesusersRcpp/inst/include/Rcpp/api/meat/S4.h0000644000176200001440000000300412316773510016622 0ustar liggesusers// Copyright (C) 2013 Romain Francois // // This file is part of Rcpp. // // Rcpp is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 2 of the License, or // (at your option) any later version. // // Rcpp is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Rcpp. If not, see . #ifndef Rcpp_api_meat_S4_h #define Rcpp_api_meat_S4_h namespace Rcpp{ template