From ce2e38f8e3f127479cf30508fd8961f149556b9c Mon Sep 17 00:00:00 2001 From: lianna Date: Tue, 19 Aug 2014 13:12:34 -0400 Subject: [PATCH 1/5] don't like game posts --- casperjs/loveMachine.js | 14 +++++++++++--- install.bat | 1 - 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/casperjs/loveMachine.js b/casperjs/loveMachine.js index 69a5898..bdbea75 100644 --- a/casperjs/loveMachine.js +++ b/casperjs/loveMachine.js @@ -155,9 +155,17 @@ var doSomeLove = function () { if( $(this).attr('id') === undefined || $(this).attr('id') === "" ){ // If element doesn't have class "selected", which means it's already clicked if ( !$(this).children('strong').hasClass('selected') && window.likePosts){ - $(this).attr('id', 'like' + window.nbPostLikes ); - console.log('Creating id="#like' + window.nbPostLikes + '"' ); - window.nbPostLikes++; + var isApp; + var footer = $(this).parents("footer") + var body = footer.prevUntil("header"); + var a = body.find("a"); + var isApp = (a.attr('href').indexOf("apps.facebook.com") > -1); + if (!isApp){ + $(this).attr('id', 'like' + window.nbPostLikes ); + $(this).attr('id', 'like' + window.nbPostLikes ); + console.log('Creating id="#like' + window.nbPostLikes + '"' ); + window.nbPostLikes++; + } } if ( window.likeComments && $(this).attr('title') === 'Like this comment' ){ $(this).attr('id', 'commentLike' + window.nbCommentLikes ); diff --git a/install.bat b/install.bat index 2656817..3b4ae76 100755 --- a/install.bat +++ b/install.bat @@ -1,5 +1,4 @@ setlocal ENABLEDELAYEDEXPANSION -set instdir=%cd% set psstart1="&{ start-process powershell -ArgumentList '-ExecutionPolicy RemoteSigned -noprofile -file set psstart2=\install.ps1' -verb RunAs}" set psstart=%psstart1% %cd%%psstart2% From 8330f4b0b345ebd280bb07a4c74167f2d54300d9 Mon Sep 17 00:00:00 2001 From: lianna Date: Tue, 19 Aug 2014 14:58:52 -0400 Subject: [PATCH 2/5] set exclude game post as an option --- README.md | 3 +- casperjs/love-2014.txt | 28 + casperjs/loveMachine.js | 30 +- n1k0-casperjs-4f105a9/.gitattributes | 1 + n1k0-casperjs-4f105a9/.gitignore | 8 + n1k0-casperjs-4f105a9/.gitmodules | 0 n1k0-casperjs-4f105a9/.jshintignore | 11 + n1k0-casperjs-4f105a9/.jshintrc | 25 + n1k0-casperjs-4f105a9/.travis.yml | 60 + n1k0-casperjs-4f105a9/CHANGELOG.md | 1 + n1k0-casperjs-4f105a9/CONTRIBUTING.md | 93 + n1k0-casperjs-4f105a9/CONTRIBUTORS.md | 109 + n1k0-casperjs-4f105a9/LICENSE.md | 19 + n1k0-casperjs-4f105a9/Makefile | 25 + n1k0-casperjs-4f105a9/README.md | 94 + n1k0-casperjs-4f105a9/batchbin/casperjs.bat | 5 + n1k0-casperjs-4f105a9/bin/bootstrap.js | 395 +++ n1k0-casperjs-4f105a9/bin/casperjs | 140 + n1k0-casperjs-4f105a9/bin/casperjs.exe | Bin 0 -> 7168 bytes n1k0-casperjs-4f105a9/bin/usage.txt | 14 + n1k0-casperjs-4f105a9/casperjs.gemspec | 23 + n1k0-casperjs-4f105a9/docs/Makefile | 13 + n1k0-casperjs-4f105a9/docs/README.md | 5 + .../docs/_static/casperjs-favicon.ico | Bin 0 -> 1150 bytes .../docs/_static/images/bg.png | Bin 0 -> 99 bytes .../_static/images/casperjs-logo-medium.png | Bin 0 -> 12546 bytes .../_static/images/casperjs-logo-small.png | Bin 0 -> 6665 bytes .../images/casperjs-logo-squared-inv.png | Bin 0 -> 12616 bytes .../_static/images/casperjs-logo-squared.png | Bin 0 -> 9254 bytes .../_static/images/casperjs-logo-xsmall.png | Bin 0 -> 2363 bytes .../docs/_static/images/casperjs-logo.png | Bin 0 -> 27460 bytes .../docs/_static/images/casperjs-rounded.png | Bin 0 -> 7363 bytes .../docs/_static/images/colorizer.png | Bin 0 -> 119414 bytes .../docs/_static/images/cow-test-ko.png | Bin 0 -> 57079 bytes .../docs/_static/images/cow-test-ok.png | Bin 0 -> 35652 bytes .../docs/_static/images/demo.png | Bin 0 -> 44903 bytes .../docs/_static/images/evaluate-diagram.png | Bin 0 -> 7644 bytes .../docs/_static/images/forkme.png | Bin 0 -> 4884 bytes .../docs/_static/images/logoutput.png | Bin 0 -> 37472 bytes .../_static/images/split-test-results.png | Bin 0 -> 32309 bytes .../docs/_static/images/tar.png | Bin 0 -> 3920 bytes .../docs/_static/images/testsuiteok.png | Bin 0 -> 45169 bytes .../docs/_static/images/zip.png | Bin 0 -> 3788 bytes .../docs/_themes/casperjs/addon.html | 15 + .../docs/_themes/casperjs/layout.html | 7 + .../docs/_themes/casperjs/localtoc.html | 4 + .../docs/_themes/casperjs/sourcelink.html | 16 + .../_themes/casperjs/static/casperjs-dark.css | 991 +++++++ .../casperjs/static/casperjs-light.css | 887 ++++++ .../_themes/casperjs/static/style-switcher.js | 106 + .../docs/_themes/casperjs/theme.conf | 2 + n1k0-casperjs-4f105a9/docs/changelog.rst | 4 + n1k0-casperjs-4f105a9/docs/cli.rst | 164 ++ n1k0-casperjs-4f105a9/docs/conf.py | 259 ++ n1k0-casperjs-4f105a9/docs/credits.rst | 64 + n1k0-casperjs-4f105a9/docs/debugging.rst | 111 + n1k0-casperjs-4f105a9/docs/events-filters.rst | 591 ++++ n1k0-casperjs-4f105a9/docs/extending.rst | 138 + n1k0-casperjs-4f105a9/docs/faq.rst | 360 +++ n1k0-casperjs-4f105a9/docs/index.rst | 46 + n1k0-casperjs-4f105a9/docs/installation.rst | 187 ++ n1k0-casperjs-4f105a9/docs/license.rst | 29 + n1k0-casperjs-4f105a9/docs/logging.rst | 69 + n1k0-casperjs-4f105a9/docs/modules/casper.rst | 2289 +++++++++++++++ .../docs/modules/clientutils.rst | 373 +++ .../docs/modules/colorizer.rst | 102 + n1k0-casperjs-4f105a9/docs/modules/index.rst | 14 + n1k0-casperjs-4f105a9/docs/modules/tester.rst | 940 ++++++ n1k0-casperjs-4f105a9/docs/modules/utils.rst | 250 ++ n1k0-casperjs-4f105a9/docs/quickstart.rst | 191 ++ n1k0-casperjs-4f105a9/docs/selectors.rst | 99 + n1k0-casperjs-4f105a9/docs/testing.rst | 269 ++ n1k0-casperjs-4f105a9/docs/upgrading/1.1.rst | 112 + .../docs/upgrading/index.rst | 7 + .../docs/writing_modules.rst | 76 + n1k0-casperjs-4f105a9/modules/casper.js | 2578 +++++++++++++++++ n1k0-casperjs-4f105a9/modules/cli.js | 149 + n1k0-casperjs-4f105a9/modules/clientutils.js | 888 ++++++ n1k0-casperjs-4f105a9/modules/colorizer.js | 134 + n1k0-casperjs-4f105a9/modules/events.js | 272 ++ n1k0-casperjs-4f105a9/modules/http.js | 75 + n1k0-casperjs-4f105a9/modules/mouse.js | 116 + n1k0-casperjs-4f105a9/modules/pagestack.js | 167 ++ n1k0-casperjs-4f105a9/modules/querystring.js | 214 ++ n1k0-casperjs-4f105a9/modules/tester.js | 1987 +++++++++++++ n1k0-casperjs-4f105a9/modules/utils.js | 852 ++++++ n1k0-casperjs-4f105a9/modules/xunit.js | 172 ++ n1k0-casperjs-4f105a9/package.json | 35 + n1k0-casperjs-4f105a9/rpm/build | 41 + n1k0-casperjs-4f105a9/rpm/casperjs.spec | 82 + n1k0-casperjs-4f105a9/rubybin/casperjs | 63 + n1k0-casperjs-4f105a9/samples/bbcshots.coffee | 65 + n1k0-casperjs-4f105a9/samples/bbcshots.js | 81 + n1k0-casperjs-4f105a9/samples/cliplay.coffee | 19 + n1k0-casperjs-4f105a9/samples/cliplay.js | 30 + .../samples/customevents.coffee | 11 + n1k0-casperjs-4f105a9/samples/customevents.js | 16 + .../samples/customlogging.coffee | 31 + .../samples/customlogging.js | 41 + n1k0-casperjs-4f105a9/samples/download.coffee | 10 + n1k0-casperjs-4f105a9/samples/download.js | 14 + n1k0-casperjs-4f105a9/samples/dynamic.coffee | 60 + n1k0-casperjs-4f105a9/samples/dynamic.js | 68 + n1k0-casperjs-4f105a9/samples/each.coffee | 14 + n1k0-casperjs-4f105a9/samples/each.js | 20 + n1k0-casperjs-4f105a9/samples/events.coffee | 34 + n1k0-casperjs-4f105a9/samples/events.js | 43 + n1k0-casperjs-4f105a9/samples/extends.coffee | 29 + n1k0-casperjs-4f105a9/samples/extends.js | 40 + .../samples/googlelinks.coffee | 30 + n1k0-casperjs-4f105a9/samples/googlelinks.js | 41 + .../samples/googlematch.coffee | 47 + n1k0-casperjs-4f105a9/samples/googlematch.js | 68 + .../samples/googlepagination.coffee | 45 + .../samples/googlepagination.js | 59 + .../samples/googletesting.coffee | 28 + .../samples/googletesting.js | 46 + n1k0-casperjs-4f105a9/samples/logcolor.coffee | 10 + n1k0-casperjs-4f105a9/samples/logcolor.js | 14 + .../samples/metaextract.coffee | 23 + n1k0-casperjs-4f105a9/samples/metaextract.js | 32 + n1k0-casperjs-4f105a9/samples/multirun.coffee | 37 + n1k0-casperjs-4f105a9/samples/multirun.js | 59 + .../samples/screenshot.coffee | 28 + n1k0-casperjs-4f105a9/samples/screenshot.js | 36 + .../samples/statushandlers.coffee | 15 + .../samples/statushandlers.js | 22 + .../samples/steptimeout.coffee | 37 + n1k0-casperjs-4f105a9/samples/steptimeout.js | 48 + n1k0-casperjs-4f105a9/samples/timeout.coffee | 39 + n1k0-casperjs-4f105a9/samples/timeout.js | 50 + .../samples/translate.coffee | 23 + n1k0-casperjs-4f105a9/samples/translate.js | 30 + n1k0-casperjs-4f105a9/src/casperjs.cs | 175 ++ .../tests/clitests/error/syntax.js | 1 + .../clitests/fail-fast/manual-abort/index.js | 16 + .../clitests/fail-fast/standard/test1.js | 4 + .../clitests/fail-fast/standard/test2.js | 4 + .../clitests/fail-fast/standard/test3.js | 4 + .../tests/clitests/modules/mod.js | 4 + .../clitests/modules/node_modules/bar.js | 1 + .../clitests/modules/node_modules/baz/baz.js | 1 + .../modules/node_modules/baz/package.json | 3 + .../modules/node_modules/foo/index.js | 1 + .../clitests/modules/node_modules/json.json | 1 + .../clitests/modules/sub/coffeemod.coffee | 1 + .../tests/clitests/modules/sub/mod.js | 1 + .../tests/clitests/modules/test.js | 4 + .../tests/clitests/modules/test_coffee.js | 4 + .../tests/clitests/modules/test_node_json.js | 4 + .../tests/clitests/modules/test_node_mod.js | 4 + .../clitests/modules/test_node_mod_index.js | 4 + .../modules/test_node_mod_json_package.js | 4 + .../clitests/modules/test_patched_require.js | 5 + .../tests/clitests/runtests.py | 412 +++ .../tests/clitests/scripts/script.js | 3 + .../tester/casper-instance-override.js | 9 + .../tests/clitests/tester/dubious.js | 5 + .../tests/clitests/tester/exit.js | 8 + .../tests/clitests/tester/failing.js | 5 + .../tests/clitests/tester/mytest.js | 14 + .../tests/clitests/tester/passing.js | 5 + .../tests/clitests/tester/skipped.js | 6 + .../tests/clitests/tester/step_throws.js | 10 + .../tests/clitests/tester/waitFor_timeout.js | 116 + n1k0-casperjs-4f105a9/tests/run.js | 123 + .../tests/sample_modules/config.json | 1 + .../tests/sample_modules/csmodule.coffee | 1 + .../tests/sample_modules/jsmodule.js | 1 + n1k0-casperjs-4f105a9/tests/selftest.js | 64 + n1k0-casperjs-4f105a9/tests/site/alert.html | 10 + .../tests/site/callback.html | 10 + n1k0-casperjs-4f105a9/tests/site/click.html | 65 + n1k0-casperjs-4f105a9/tests/site/confirm.html | 12 + n1k0-casperjs-4f105a9/tests/site/dummy.js | 1 + .../tests/site/elementattribute.html | 8 + n1k0-casperjs-4f105a9/tests/site/error.html | 10 + .../tests/site/field-array.html | 14 + n1k0-casperjs-4f105a9/tests/site/form.html | 93 + n1k0-casperjs-4f105a9/tests/site/frame1.html | 10 + n1k0-casperjs-4f105a9/tests/site/frame2.html | 11 + n1k0-casperjs-4f105a9/tests/site/frame3.html | 11 + n1k0-casperjs-4f105a9/tests/site/frames.html | 12 + n1k0-casperjs-4f105a9/tests/site/global.html | 14 + .../tests/site/images/phantom.png | Bin 0 -> 4618 bytes .../tests/site/includes/include1.js | 7 + .../tests/site/includes/include2.js | 7 + n1k0-casperjs-4f105a9/tests/site/index.html | 20 + .../tests/site/mouse-events.html | 47 + .../tests/site/multiple-forms.html | 16 + n1k0-casperjs-4f105a9/tests/site/page1.html | 8 + n1k0-casperjs-4f105a9/tests/site/page2.html | 8 + n1k0-casperjs-4f105a9/tests/site/page3.html | 8 + n1k0-casperjs-4f105a9/tests/site/popup.html | 18 + n1k0-casperjs-4f105a9/tests/site/prompt.html | 12 + .../tests/site/resources.html | 15 + n1k0-casperjs-4f105a9/tests/site/result.html | 11 + n1k0-casperjs-4f105a9/tests/site/test.html | 10 + n1k0-casperjs-4f105a9/tests/site/urls.html | 14 + n1k0-casperjs-4f105a9/tests/site/visible.html | 17 + n1k0-casperjs-4f105a9/tests/site/waitFor.html | 29 + n1k0-casperjs-4f105a9/tests/suites/.casper | 0 .../tests/suites/casper/.casper | 0 .../tests/suites/casper/agent.js | 32 + .../tests/suites/casper/alert.js | 25 + .../tests/suites/casper/auth.js | 26 + .../tests/suites/casper/bypass.js | 107 + .../tests/suites/casper/callback.js | 25 + .../tests/suites/casper/callutils.js | 23 + .../tests/suites/casper/capture.js | 50 + .../tests/suites/casper/click.js | 126 + .../tests/suites/casper/confirm.js | 53 + .../tests/suites/casper/content.js | 21 + .../tests/suites/casper/debug.js | 12 + .../tests/suites/casper/elementattribute.js | 21 + .../tests/suites/casper/encode.js | 19 + .../tests/suites/casper/evaluate.js | 112 + .../tests/suites/casper/events.js | 29 + .../tests/suites/casper/exists.js | 10 + .../tests/suites/casper/fetchtext.js | 21 + .../tests/suites/casper/flow.coffee | 38 + .../tests/suites/casper/formfill.js | 231 ++ .../tests/suites/casper/frames.js | 45 + .../tests/suites/casper/global.js | 14 + .../tests/suites/casper/headers.js | 33 + .../tests/suites/casper/history.js | 23 + .../tests/suites/casper/hooks.js | 65 + .../tests/suites/casper/keys.js | 72 + .../tests/suites/casper/location.js | 23 + .../tests/suites/casper/logging.js | 41 + .../tests/suites/casper/mouseevents.js | 30 + .../tests/suites/casper/navigation.js | 50 + .../tests/suites/casper/onerror.js | 25 + .../tests/suites/casper/open.js | 264 ++ .../tests/suites/casper/popup.js | 91 + .../tests/suites/casper/prompt.js | 12 + .../tests/suites/casper/request.coffee | 103 + .../tests/suites/casper/request.js | 48 + .../tests/suites/casper/resources.js | 35 + .../tests/suites/casper/scripts.js | 34 + .../tests/suites/casper/scroll.js | 30 + .../tests/suites/casper/start.js | 17 + .../tests/suites/casper/steps.js | 54 + .../tests/suites/casper/urls.js | 25 + .../tests/suites/casper/viewport.js | 41 + .../tests/suites/casper/visible.js | 19 + .../tests/suites/casper/wait.js | 170 ++ .../tests/suites/casper/xpath.js | 34 + n1k0-casperjs-4f105a9/tests/suites/cli.js | 158 + .../tests/suites/clientutils.js | 203 ++ .../tests/suites/coffee.coffee | 20 + n1k0-casperjs-4f105a9/tests/suites/fs.js | 35 + .../tests/suites/http_status.js | 80 + .../tests/suites/pagestack.js | 33 + n1k0-casperjs-4f105a9/tests/suites/require.js | 37 + .../tests/suites/tester/.casper | 0 .../tests/suites/tester/assert.js | 222 ++ .../tests/suites/tester/begin-config.js | 35 + .../suites/tester/setup-teardown-async.js | 31 + .../tests/suites/tester/setup-teardown.js | 25 + .../tests/suites/tester/skip.js | 23 + .../tests/suites/tester/test-order.js | 21 + .../tests/suites/tester/testcase.js | 50 + .../tests/suites/tester/testsuite.js | 56 + n1k0-casperjs-4f105a9/tests/suites/utils.js | 485 ++++ n1k0-casperjs-4f105a9/tests/suites/xunit.js | 77 + .../tests/testdir/01_a/abc.js | 0 .../tests/testdir/01_a/def.js | 0 .../tests/testdir/02_b/abc.js | 0 n1k0-casperjs-4f105a9/tests/testdir/03_a.js | 0 n1k0-casperjs-4f105a9/tests/testdir/03_b.js | 0 .../tests/testdir/04/01_init.js | 0 .../tests/testdir/04/02_do.js | 0 phantomjs-1.9.7-windows/ChangeLog | 360 +++ phantomjs-1.9.7-windows/LICENSE.BSD | 22 + phantomjs-1.9.7-windows/README.md | 45 + .../examples/arguments.coffee | 7 + phantomjs-1.9.7-windows/examples/arguments.js | 9 + .../examples/child_process-examples.coffee | 20 + .../examples/child_process-examples.js | 27 + .../examples/colorwheel.coffee | 46 + .../examples/colorwheel.js | 51 + .../examples/countdown.coffee | 8 + phantomjs-1.9.7-windows/examples/countdown.js | 9 + .../examples/detectsniff.coffee | 42 + .../examples/detectsniff.js | 59 + .../examples/direction.coffee | 30 + phantomjs-1.9.7-windows/examples/direction.js | 35 + .../examples/echoToFile.coffee | 19 + .../examples/echoToFile.js | 23 + .../examples/features.coffee | 23 + phantomjs-1.9.7-windows/examples/features.js | 30 + phantomjs-1.9.7-windows/examples/fibo.coffee | 8 + phantomjs-1.9.7-windows/examples/fibo.js | 9 + .../examples/follow.coffee | 33 + phantomjs-1.9.7-windows/examples/follow.js | 38 + phantomjs-1.9.7-windows/examples/hello.coffee | 2 + phantomjs-1.9.7-windows/examples/hello.js | 2 + .../examples/imagebin.coffee | 20 + phantomjs-1.9.7-windows/examples/imagebin.js | 23 + .../examples/injectme.coffee | 23 + phantomjs-1.9.7-windows/examples/injectme.js | 25 + .../examples/ipgeocode.coffee | 13 + phantomjs-1.9.7-windows/examples/ipgeocode.js | 14 + .../examples/loadspeed.coffee | 18 + phantomjs-1.9.7-windows/examples/loadspeed.js | 23 + .../examples/loadurlwithoutcss.coffee | 20 + .../examples/loadurlwithoutcss.js | 25 + phantomjs-1.9.7-windows/examples/modernizr.js | 1116 +++++++ .../examples/module.coffee | 4 + phantomjs-1.9.7-windows/examples/module.js | 4 + .../examples/movies.coffee | 13 + phantomjs-1.9.7-windows/examples/movies.js | 14 + .../examples/netlog.coffee | 18 + phantomjs-1.9.7-windows/examples/netlog.js | 25 + .../examples/netsniff.coffee | 114 + phantomjs-1.9.7-windows/examples/netsniff.js | 143 + .../examples/outputEncoding.coffee | 12 + .../examples/outputEncoding.js | 16 + .../examples/page_events.coffee | 132 + .../examples/page_events.js | 142 + .../examples/pagecallback.coffee | 16 + .../examples/pagecallback.js | 17 + .../examples/phantomwebintro.coffee | 13 + .../examples/phantomwebintro.js | 19 + phantomjs-1.9.7-windows/examples/pizza.coffee | 18 + phantomjs-1.9.7-windows/examples/pizza.js | 20 + phantomjs-1.9.7-windows/examples/post.coffee | 12 + phantomjs-1.9.7-windows/examples/post.js | 14 + .../examples/postserver.coffee | 25 + .../examples/postserver.js | 34 + .../examples/printenv.coffee | 6 + phantomjs-1.9.7-windows/examples/printenv.js | 10 + .../examples/printheaderfooter.coffee | 88 + .../examples/printheaderfooter.js | 89 + .../examples/printmargins.coffee | 33 + .../examples/printmargins.js | 35 + .../examples/rasterize.coffee | 23 + phantomjs-1.9.7-windows/examples/rasterize.js | 32 + .../examples/render_multi_url.coffee | 60 + .../examples/render_multi_url.js | 73 + .../examples/run-jasmine.coffee | 61 + .../examples/run-jasmine.js | 86 + .../examples/run-qunit.coffee | 64 + phantomjs-1.9.7-windows/examples/run-qunit.js | 76 + .../examples/scandir.coffee | 16 + phantomjs-1.9.7-windows/examples/scandir.js | 22 + .../examples/seasonfood.coffee | 17 + .../examples/seasonfood.js | 19 + .../examples/server.coffee | 45 + phantomjs-1.9.7-windows/examples/server.js | 43 + .../examples/serverkeepalive.coffee | 32 + .../examples/serverkeepalive.js | 34 + .../examples/simpleserver.coffee | 38 + .../examples/simpleserver.js | 42 + .../examples/sleepsort.coffee | 20 + phantomjs-1.9.7-windows/examples/sleepsort.js | 25 + .../examples/stdin-stdout-stderr.coffee | 18 + .../examples/stdin-stdout-stderr.js | 18 + .../examples/technews.coffee | 17 + phantomjs-1.9.7-windows/examples/technews.js | 16 + .../examples/tweets.coffee | 31 + phantomjs-1.9.7-windows/examples/tweets.js | 37 + phantomjs-1.9.7-windows/examples/universe.js | 10 + .../examples/unrandomize.coffee | 18 + .../examples/unrandomize.js | 24 + .../examples/useragent.coffee | 11 + phantomjs-1.9.7-windows/examples/useragent.js | 14 + .../examples/version.coffee | 5 + phantomjs-1.9.7-windows/examples/version.js | 5 + .../examples/waitfor.coffee | 48 + phantomjs-1.9.7-windows/examples/waitfor.js | 57 + .../examples/walk_through_frames.coffee | 66 + .../examples/walk_through_frames.js | 73 + .../examples/weather.coffee | 29 + phantomjs-1.9.7-windows/examples/weather.js | 37 + phantomjs-1.9.7-windows/phantomjs.exe | Bin 0 -> 7009792 bytes phantomjs-1.9.7-windows/third-party.txt | 48 + webdriver/loveMachine.py | 4 +- 379 files changed, 29478 insertions(+), 18 deletions(-) create mode 100644 casperjs/love-2014.txt create mode 100644 n1k0-casperjs-4f105a9/.gitattributes create mode 100644 n1k0-casperjs-4f105a9/.gitignore create mode 100644 n1k0-casperjs-4f105a9/.gitmodules create mode 100644 n1k0-casperjs-4f105a9/.jshintignore create mode 100644 n1k0-casperjs-4f105a9/.jshintrc create mode 100644 n1k0-casperjs-4f105a9/.travis.yml create mode 100644 n1k0-casperjs-4f105a9/CHANGELOG.md create mode 100644 n1k0-casperjs-4f105a9/CONTRIBUTING.md create mode 100644 n1k0-casperjs-4f105a9/CONTRIBUTORS.md create mode 100644 n1k0-casperjs-4f105a9/LICENSE.md create mode 100644 n1k0-casperjs-4f105a9/Makefile create mode 100644 n1k0-casperjs-4f105a9/README.md create mode 100644 n1k0-casperjs-4f105a9/batchbin/casperjs.bat create mode 100644 n1k0-casperjs-4f105a9/bin/bootstrap.js create mode 100644 n1k0-casperjs-4f105a9/bin/casperjs create mode 100644 n1k0-casperjs-4f105a9/bin/casperjs.exe create mode 100644 n1k0-casperjs-4f105a9/bin/usage.txt create mode 100644 n1k0-casperjs-4f105a9/casperjs.gemspec create mode 100644 n1k0-casperjs-4f105a9/docs/Makefile create mode 100644 n1k0-casperjs-4f105a9/docs/README.md create mode 100644 n1k0-casperjs-4f105a9/docs/_static/casperjs-favicon.ico create mode 100644 n1k0-casperjs-4f105a9/docs/_static/images/bg.png create mode 100644 n1k0-casperjs-4f105a9/docs/_static/images/casperjs-logo-medium.png create mode 100644 n1k0-casperjs-4f105a9/docs/_static/images/casperjs-logo-small.png create mode 100644 n1k0-casperjs-4f105a9/docs/_static/images/casperjs-logo-squared-inv.png create mode 100644 n1k0-casperjs-4f105a9/docs/_static/images/casperjs-logo-squared.png create mode 100644 n1k0-casperjs-4f105a9/docs/_static/images/casperjs-logo-xsmall.png create mode 100644 n1k0-casperjs-4f105a9/docs/_static/images/casperjs-logo.png create mode 100644 n1k0-casperjs-4f105a9/docs/_static/images/casperjs-rounded.png create mode 100644 n1k0-casperjs-4f105a9/docs/_static/images/colorizer.png create mode 100644 n1k0-casperjs-4f105a9/docs/_static/images/cow-test-ko.png create mode 100644 n1k0-casperjs-4f105a9/docs/_static/images/cow-test-ok.png create mode 100644 n1k0-casperjs-4f105a9/docs/_static/images/demo.png create mode 100644 n1k0-casperjs-4f105a9/docs/_static/images/evaluate-diagram.png create mode 100644 n1k0-casperjs-4f105a9/docs/_static/images/forkme.png create mode 100644 n1k0-casperjs-4f105a9/docs/_static/images/logoutput.png create mode 100644 n1k0-casperjs-4f105a9/docs/_static/images/split-test-results.png create mode 100644 n1k0-casperjs-4f105a9/docs/_static/images/tar.png create mode 100644 n1k0-casperjs-4f105a9/docs/_static/images/testsuiteok.png create mode 100644 n1k0-casperjs-4f105a9/docs/_static/images/zip.png create mode 100644 n1k0-casperjs-4f105a9/docs/_themes/casperjs/addon.html create mode 100644 n1k0-casperjs-4f105a9/docs/_themes/casperjs/layout.html create mode 100644 n1k0-casperjs-4f105a9/docs/_themes/casperjs/localtoc.html create mode 100644 n1k0-casperjs-4f105a9/docs/_themes/casperjs/sourcelink.html create mode 100644 n1k0-casperjs-4f105a9/docs/_themes/casperjs/static/casperjs-dark.css create mode 100644 n1k0-casperjs-4f105a9/docs/_themes/casperjs/static/casperjs-light.css create mode 100644 n1k0-casperjs-4f105a9/docs/_themes/casperjs/static/style-switcher.js create mode 100644 n1k0-casperjs-4f105a9/docs/_themes/casperjs/theme.conf create mode 100644 n1k0-casperjs-4f105a9/docs/changelog.rst create mode 100644 n1k0-casperjs-4f105a9/docs/cli.rst create mode 100644 n1k0-casperjs-4f105a9/docs/conf.py create mode 100644 n1k0-casperjs-4f105a9/docs/credits.rst create mode 100644 n1k0-casperjs-4f105a9/docs/debugging.rst create mode 100644 n1k0-casperjs-4f105a9/docs/events-filters.rst create mode 100644 n1k0-casperjs-4f105a9/docs/extending.rst create mode 100644 n1k0-casperjs-4f105a9/docs/faq.rst create mode 100644 n1k0-casperjs-4f105a9/docs/index.rst create mode 100644 n1k0-casperjs-4f105a9/docs/installation.rst create mode 100644 n1k0-casperjs-4f105a9/docs/license.rst create mode 100644 n1k0-casperjs-4f105a9/docs/logging.rst create mode 100644 n1k0-casperjs-4f105a9/docs/modules/casper.rst create mode 100644 n1k0-casperjs-4f105a9/docs/modules/clientutils.rst create mode 100644 n1k0-casperjs-4f105a9/docs/modules/colorizer.rst create mode 100644 n1k0-casperjs-4f105a9/docs/modules/index.rst create mode 100644 n1k0-casperjs-4f105a9/docs/modules/tester.rst create mode 100644 n1k0-casperjs-4f105a9/docs/modules/utils.rst create mode 100644 n1k0-casperjs-4f105a9/docs/quickstart.rst create mode 100644 n1k0-casperjs-4f105a9/docs/selectors.rst create mode 100644 n1k0-casperjs-4f105a9/docs/testing.rst create mode 100644 n1k0-casperjs-4f105a9/docs/upgrading/1.1.rst create mode 100644 n1k0-casperjs-4f105a9/docs/upgrading/index.rst create mode 100644 n1k0-casperjs-4f105a9/docs/writing_modules.rst create mode 100644 n1k0-casperjs-4f105a9/modules/casper.js create mode 100644 n1k0-casperjs-4f105a9/modules/cli.js create mode 100644 n1k0-casperjs-4f105a9/modules/clientutils.js create mode 100644 n1k0-casperjs-4f105a9/modules/colorizer.js create mode 100644 n1k0-casperjs-4f105a9/modules/events.js create mode 100644 n1k0-casperjs-4f105a9/modules/http.js create mode 100644 n1k0-casperjs-4f105a9/modules/mouse.js create mode 100644 n1k0-casperjs-4f105a9/modules/pagestack.js create mode 100644 n1k0-casperjs-4f105a9/modules/querystring.js create mode 100644 n1k0-casperjs-4f105a9/modules/tester.js create mode 100644 n1k0-casperjs-4f105a9/modules/utils.js create mode 100644 n1k0-casperjs-4f105a9/modules/xunit.js create mode 100644 n1k0-casperjs-4f105a9/package.json create mode 100644 n1k0-casperjs-4f105a9/rpm/build create mode 100644 n1k0-casperjs-4f105a9/rpm/casperjs.spec create mode 100644 n1k0-casperjs-4f105a9/rubybin/casperjs create mode 100644 n1k0-casperjs-4f105a9/samples/bbcshots.coffee create mode 100644 n1k0-casperjs-4f105a9/samples/bbcshots.js create mode 100644 n1k0-casperjs-4f105a9/samples/cliplay.coffee create mode 100644 n1k0-casperjs-4f105a9/samples/cliplay.js create mode 100644 n1k0-casperjs-4f105a9/samples/customevents.coffee create mode 100644 n1k0-casperjs-4f105a9/samples/customevents.js create mode 100644 n1k0-casperjs-4f105a9/samples/customlogging.coffee create mode 100644 n1k0-casperjs-4f105a9/samples/customlogging.js create mode 100644 n1k0-casperjs-4f105a9/samples/download.coffee create mode 100644 n1k0-casperjs-4f105a9/samples/download.js create mode 100644 n1k0-casperjs-4f105a9/samples/dynamic.coffee create mode 100644 n1k0-casperjs-4f105a9/samples/dynamic.js create mode 100644 n1k0-casperjs-4f105a9/samples/each.coffee create mode 100644 n1k0-casperjs-4f105a9/samples/each.js create mode 100644 n1k0-casperjs-4f105a9/samples/events.coffee create mode 100644 n1k0-casperjs-4f105a9/samples/events.js create mode 100644 n1k0-casperjs-4f105a9/samples/extends.coffee create mode 100644 n1k0-casperjs-4f105a9/samples/extends.js create mode 100644 n1k0-casperjs-4f105a9/samples/googlelinks.coffee create mode 100644 n1k0-casperjs-4f105a9/samples/googlelinks.js create mode 100644 n1k0-casperjs-4f105a9/samples/googlematch.coffee create mode 100644 n1k0-casperjs-4f105a9/samples/googlematch.js create mode 100644 n1k0-casperjs-4f105a9/samples/googlepagination.coffee create mode 100644 n1k0-casperjs-4f105a9/samples/googlepagination.js create mode 100644 n1k0-casperjs-4f105a9/samples/googletesting.coffee create mode 100644 n1k0-casperjs-4f105a9/samples/googletesting.js create mode 100644 n1k0-casperjs-4f105a9/samples/logcolor.coffee create mode 100644 n1k0-casperjs-4f105a9/samples/logcolor.js create mode 100644 n1k0-casperjs-4f105a9/samples/metaextract.coffee create mode 100644 n1k0-casperjs-4f105a9/samples/metaextract.js create mode 100644 n1k0-casperjs-4f105a9/samples/multirun.coffee create mode 100644 n1k0-casperjs-4f105a9/samples/multirun.js create mode 100644 n1k0-casperjs-4f105a9/samples/screenshot.coffee create mode 100644 n1k0-casperjs-4f105a9/samples/screenshot.js create mode 100644 n1k0-casperjs-4f105a9/samples/statushandlers.coffee create mode 100644 n1k0-casperjs-4f105a9/samples/statushandlers.js create mode 100644 n1k0-casperjs-4f105a9/samples/steptimeout.coffee create mode 100644 n1k0-casperjs-4f105a9/samples/steptimeout.js create mode 100644 n1k0-casperjs-4f105a9/samples/timeout.coffee create mode 100644 n1k0-casperjs-4f105a9/samples/timeout.js create mode 100644 n1k0-casperjs-4f105a9/samples/translate.coffee create mode 100644 n1k0-casperjs-4f105a9/samples/translate.js create mode 100644 n1k0-casperjs-4f105a9/src/casperjs.cs create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/error/syntax.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/fail-fast/manual-abort/index.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/fail-fast/standard/test1.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/fail-fast/standard/test2.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/fail-fast/standard/test3.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/modules/mod.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/modules/node_modules/bar.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/modules/node_modules/baz/baz.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/modules/node_modules/baz/package.json create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/modules/node_modules/foo/index.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/modules/node_modules/json.json create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/modules/sub/coffeemod.coffee create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/modules/sub/mod.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/modules/test.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/modules/test_coffee.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/modules/test_node_json.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/modules/test_node_mod.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/modules/test_node_mod_index.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/modules/test_node_mod_json_package.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/modules/test_patched_require.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/runtests.py create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/scripts/script.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/tester/casper-instance-override.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/tester/dubious.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/tester/exit.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/tester/failing.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/tester/mytest.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/tester/passing.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/tester/skipped.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/tester/step_throws.js create mode 100644 n1k0-casperjs-4f105a9/tests/clitests/tester/waitFor_timeout.js create mode 100644 n1k0-casperjs-4f105a9/tests/run.js create mode 100644 n1k0-casperjs-4f105a9/tests/sample_modules/config.json create mode 100644 n1k0-casperjs-4f105a9/tests/sample_modules/csmodule.coffee create mode 100644 n1k0-casperjs-4f105a9/tests/sample_modules/jsmodule.js create mode 100644 n1k0-casperjs-4f105a9/tests/selftest.js create mode 100644 n1k0-casperjs-4f105a9/tests/site/alert.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/callback.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/click.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/confirm.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/dummy.js create mode 100644 n1k0-casperjs-4f105a9/tests/site/elementattribute.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/error.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/field-array.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/form.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/frame1.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/frame2.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/frame3.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/frames.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/global.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/images/phantom.png create mode 100644 n1k0-casperjs-4f105a9/tests/site/includes/include1.js create mode 100644 n1k0-casperjs-4f105a9/tests/site/includes/include2.js create mode 100644 n1k0-casperjs-4f105a9/tests/site/index.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/mouse-events.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/multiple-forms.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/page1.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/page2.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/page3.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/popup.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/prompt.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/resources.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/result.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/test.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/urls.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/visible.html create mode 100644 n1k0-casperjs-4f105a9/tests/site/waitFor.html create mode 100644 n1k0-casperjs-4f105a9/tests/suites/.casper create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/.casper create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/agent.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/alert.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/auth.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/bypass.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/callback.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/callutils.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/capture.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/click.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/confirm.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/content.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/debug.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/elementattribute.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/encode.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/evaluate.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/events.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/exists.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/fetchtext.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/flow.coffee create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/formfill.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/frames.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/global.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/headers.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/history.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/hooks.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/keys.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/location.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/logging.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/mouseevents.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/navigation.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/onerror.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/open.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/popup.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/prompt.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/request.coffee create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/request.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/resources.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/scripts.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/scroll.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/start.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/steps.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/urls.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/viewport.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/visible.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/wait.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/casper/xpath.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/cli.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/clientutils.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/coffee.coffee create mode 100644 n1k0-casperjs-4f105a9/tests/suites/fs.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/http_status.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/pagestack.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/require.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/tester/.casper create mode 100644 n1k0-casperjs-4f105a9/tests/suites/tester/assert.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/tester/begin-config.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/tester/setup-teardown-async.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/tester/setup-teardown.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/tester/skip.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/tester/test-order.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/tester/testcase.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/tester/testsuite.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/utils.js create mode 100644 n1k0-casperjs-4f105a9/tests/suites/xunit.js create mode 100644 n1k0-casperjs-4f105a9/tests/testdir/01_a/abc.js create mode 100644 n1k0-casperjs-4f105a9/tests/testdir/01_a/def.js create mode 100644 n1k0-casperjs-4f105a9/tests/testdir/02_b/abc.js create mode 100644 n1k0-casperjs-4f105a9/tests/testdir/03_a.js create mode 100644 n1k0-casperjs-4f105a9/tests/testdir/03_b.js create mode 100644 n1k0-casperjs-4f105a9/tests/testdir/04/01_init.js create mode 100644 n1k0-casperjs-4f105a9/tests/testdir/04/02_do.js create mode 100644 phantomjs-1.9.7-windows/ChangeLog create mode 100644 phantomjs-1.9.7-windows/LICENSE.BSD create mode 100644 phantomjs-1.9.7-windows/README.md create mode 100644 phantomjs-1.9.7-windows/examples/arguments.coffee create mode 100644 phantomjs-1.9.7-windows/examples/arguments.js create mode 100644 phantomjs-1.9.7-windows/examples/child_process-examples.coffee create mode 100644 phantomjs-1.9.7-windows/examples/child_process-examples.js create mode 100644 phantomjs-1.9.7-windows/examples/colorwheel.coffee create mode 100644 phantomjs-1.9.7-windows/examples/colorwheel.js create mode 100644 phantomjs-1.9.7-windows/examples/countdown.coffee create mode 100644 phantomjs-1.9.7-windows/examples/countdown.js create mode 100644 phantomjs-1.9.7-windows/examples/detectsniff.coffee create mode 100644 phantomjs-1.9.7-windows/examples/detectsniff.js create mode 100644 phantomjs-1.9.7-windows/examples/direction.coffee create mode 100644 phantomjs-1.9.7-windows/examples/direction.js create mode 100644 phantomjs-1.9.7-windows/examples/echoToFile.coffee create mode 100644 phantomjs-1.9.7-windows/examples/echoToFile.js create mode 100644 phantomjs-1.9.7-windows/examples/features.coffee create mode 100644 phantomjs-1.9.7-windows/examples/features.js create mode 100644 phantomjs-1.9.7-windows/examples/fibo.coffee create mode 100644 phantomjs-1.9.7-windows/examples/fibo.js create mode 100644 phantomjs-1.9.7-windows/examples/follow.coffee create mode 100644 phantomjs-1.9.7-windows/examples/follow.js create mode 100644 phantomjs-1.9.7-windows/examples/hello.coffee create mode 100644 phantomjs-1.9.7-windows/examples/hello.js create mode 100644 phantomjs-1.9.7-windows/examples/imagebin.coffee create mode 100644 phantomjs-1.9.7-windows/examples/imagebin.js create mode 100644 phantomjs-1.9.7-windows/examples/injectme.coffee create mode 100644 phantomjs-1.9.7-windows/examples/injectme.js create mode 100644 phantomjs-1.9.7-windows/examples/ipgeocode.coffee create mode 100644 phantomjs-1.9.7-windows/examples/ipgeocode.js create mode 100644 phantomjs-1.9.7-windows/examples/loadspeed.coffee create mode 100644 phantomjs-1.9.7-windows/examples/loadspeed.js create mode 100644 phantomjs-1.9.7-windows/examples/loadurlwithoutcss.coffee create mode 100644 phantomjs-1.9.7-windows/examples/loadurlwithoutcss.js create mode 100644 phantomjs-1.9.7-windows/examples/modernizr.js create mode 100644 phantomjs-1.9.7-windows/examples/module.coffee create mode 100644 phantomjs-1.9.7-windows/examples/module.js create mode 100644 phantomjs-1.9.7-windows/examples/movies.coffee create mode 100644 phantomjs-1.9.7-windows/examples/movies.js create mode 100644 phantomjs-1.9.7-windows/examples/netlog.coffee create mode 100644 phantomjs-1.9.7-windows/examples/netlog.js create mode 100644 phantomjs-1.9.7-windows/examples/netsniff.coffee create mode 100644 phantomjs-1.9.7-windows/examples/netsniff.js create mode 100644 phantomjs-1.9.7-windows/examples/outputEncoding.coffee create mode 100644 phantomjs-1.9.7-windows/examples/outputEncoding.js create mode 100644 phantomjs-1.9.7-windows/examples/page_events.coffee create mode 100644 phantomjs-1.9.7-windows/examples/page_events.js create mode 100644 phantomjs-1.9.7-windows/examples/pagecallback.coffee create mode 100644 phantomjs-1.9.7-windows/examples/pagecallback.js create mode 100644 phantomjs-1.9.7-windows/examples/phantomwebintro.coffee create mode 100644 phantomjs-1.9.7-windows/examples/phantomwebintro.js create mode 100644 phantomjs-1.9.7-windows/examples/pizza.coffee create mode 100644 phantomjs-1.9.7-windows/examples/pizza.js create mode 100644 phantomjs-1.9.7-windows/examples/post.coffee create mode 100644 phantomjs-1.9.7-windows/examples/post.js create mode 100644 phantomjs-1.9.7-windows/examples/postserver.coffee create mode 100644 phantomjs-1.9.7-windows/examples/postserver.js create mode 100644 phantomjs-1.9.7-windows/examples/printenv.coffee create mode 100644 phantomjs-1.9.7-windows/examples/printenv.js create mode 100644 phantomjs-1.9.7-windows/examples/printheaderfooter.coffee create mode 100644 phantomjs-1.9.7-windows/examples/printheaderfooter.js create mode 100644 phantomjs-1.9.7-windows/examples/printmargins.coffee create mode 100644 phantomjs-1.9.7-windows/examples/printmargins.js create mode 100644 phantomjs-1.9.7-windows/examples/rasterize.coffee create mode 100644 phantomjs-1.9.7-windows/examples/rasterize.js create mode 100644 phantomjs-1.9.7-windows/examples/render_multi_url.coffee create mode 100644 phantomjs-1.9.7-windows/examples/render_multi_url.js create mode 100644 phantomjs-1.9.7-windows/examples/run-jasmine.coffee create mode 100644 phantomjs-1.9.7-windows/examples/run-jasmine.js create mode 100644 phantomjs-1.9.7-windows/examples/run-qunit.coffee create mode 100644 phantomjs-1.9.7-windows/examples/run-qunit.js create mode 100644 phantomjs-1.9.7-windows/examples/scandir.coffee create mode 100644 phantomjs-1.9.7-windows/examples/scandir.js create mode 100644 phantomjs-1.9.7-windows/examples/seasonfood.coffee create mode 100644 phantomjs-1.9.7-windows/examples/seasonfood.js create mode 100644 phantomjs-1.9.7-windows/examples/server.coffee create mode 100644 phantomjs-1.9.7-windows/examples/server.js create mode 100644 phantomjs-1.9.7-windows/examples/serverkeepalive.coffee create mode 100644 phantomjs-1.9.7-windows/examples/serverkeepalive.js create mode 100644 phantomjs-1.9.7-windows/examples/simpleserver.coffee create mode 100644 phantomjs-1.9.7-windows/examples/simpleserver.js create mode 100644 phantomjs-1.9.7-windows/examples/sleepsort.coffee create mode 100644 phantomjs-1.9.7-windows/examples/sleepsort.js create mode 100644 phantomjs-1.9.7-windows/examples/stdin-stdout-stderr.coffee create mode 100644 phantomjs-1.9.7-windows/examples/stdin-stdout-stderr.js create mode 100644 phantomjs-1.9.7-windows/examples/technews.coffee create mode 100644 phantomjs-1.9.7-windows/examples/technews.js create mode 100644 phantomjs-1.9.7-windows/examples/tweets.coffee create mode 100644 phantomjs-1.9.7-windows/examples/tweets.js create mode 100644 phantomjs-1.9.7-windows/examples/universe.js create mode 100644 phantomjs-1.9.7-windows/examples/unrandomize.coffee create mode 100644 phantomjs-1.9.7-windows/examples/unrandomize.js create mode 100644 phantomjs-1.9.7-windows/examples/useragent.coffee create mode 100644 phantomjs-1.9.7-windows/examples/useragent.js create mode 100644 phantomjs-1.9.7-windows/examples/version.coffee create mode 100644 phantomjs-1.9.7-windows/examples/version.js create mode 100644 phantomjs-1.9.7-windows/examples/waitfor.coffee create mode 100644 phantomjs-1.9.7-windows/examples/waitfor.js create mode 100644 phantomjs-1.9.7-windows/examples/walk_through_frames.coffee create mode 100644 phantomjs-1.9.7-windows/examples/walk_through_frames.js create mode 100644 phantomjs-1.9.7-windows/examples/weather.coffee create mode 100644 phantomjs-1.9.7-windows/examples/weather.js create mode 100644 phantomjs-1.9.7-windows/phantomjs.exe create mode 100644 phantomjs-1.9.7-windows/third-party.txt diff --git a/README.md b/README.md index 49e1ac9..38d55b5 100644 --- a/README.md +++ b/README.md @@ -9,9 +9,10 @@ Basically, it will log into your Facebook account and click on "every" possible Since most of my fb_friends feel flattered, empowered, loved,... when they receive a 'like' for their actions on facebook, I thought I might automate some love giving and distribute 'likes' to my friends in a more efficient way. Or have I just created the first like-spamming application? ## Usage -`casperjs lovemachine.js --email= --password=` +`casperjs lovemachine.js --email= --password= --strictmode=` (On Windows, if that doesn't work, you may want to change 'casperjs' to casperjs_directory\casperjs.) +strictmode: if strictmode is set to true, the machine will not like game posts. ## History This project has started a couple years ago and was first done in Python using Selenium Webdriver with the intention of working as a standalone server application. But for some reason, it never reached that stage because having a chromeless firefox behaving like a desktop one with selenium on top of it, was something I could not achieve. diff --git a/casperjs/love-2014.txt b/casperjs/love-2014.txt new file mode 100644 index 0000000..50a012f --- /dev/null +++ b/casperjs/love-2014.txt @@ -0,0 +1,28 @@ +{"start":"2014-07-21T15:45:05.825Z","end":"2014-07-21T15:45:18.958Z","likes":0,"posts":0,"comments":0} +{"start":"2014-07-21T23:47:29.633Z","end":"2014-07-21T23:59:36.280Z","likes":78,"posts":79,"comments":-1} +{"start":"2014-07-22T00:31:58.930Z","end":"2014-07-22T00:44:09.302Z","likes":74,"posts":75,"comments":-1} +{"start":"2014-07-22T00:48:57.077Z","end":"2014-07-22T00:51:18.789Z","likes":12,"posts":13,"comments":-1} +{"start":"2014-07-22T01:06:19.831Z","end":"2014-07-22T01:08:49.464Z","likes":16,"posts":17,"comments":-1} +{"start":"2014-07-22T02:12:40.876Z","end":"2014-07-22T02:17:12.213Z","likes":25,"posts":26,"comments":-1} +{"start":"2014-07-22T13:40:44.258Z","end":"2014-07-22T13:56:31.976Z","likes":102,"posts":103,"comments":-1} +{"start":"2014-07-22T14:57:11.792Z","end":"2014-07-22T15:11:25.421Z","likes":70,"posts":71,"comments":-1} +{"start":"2014-07-22T20:47:41.205Z","end":"2014-07-22T20:58:26.941Z","likes":62,"posts":63,"comments":-1} +{"start":"2014-07-22T22:29:53.356Z","end":"2014-07-22T22:39:41.724Z","likes":57,"posts":58,"comments":-1} +{"start":"2014-07-27T21:14:20.316Z","end":"2014-07-27T21:16:43.364Z","likes":13,"posts":14,"comments":-1} +{"start":"2014-07-27T21:32:27.164Z","end":"2014-07-27T21:35:31.767Z","likes":15,"posts":16,"comments":-1} +{"start":"2014-07-28T00:25:15.387Z","end":"2014-07-28T00:34:10.321Z","likes":52,"posts":53,"comments":-1} +{"start":"2014-07-28T02:16:20.617Z","end":"2014-07-28T02:28:12.002Z","likes":72,"posts":73,"comments":-1} +{"start":"2014-07-28T02:35:55.263Z","end":"2014-07-28T02:49:00.374Z","likes":82,"posts":83,"comments":-1} +{"start":"2014-07-28T19:32:37.962Z","end":"2014-07-28T19:43:19.079Z","likes":62,"posts":63,"comments":-1} +{"start":"2014-07-30T02:39:04.230Z","end":"2014-07-30T02:50:16.910Z","likes":66,"posts":67,"comments":-1} +{"start":"2014-08-12T00:40:53.774Z","end":"2014-08-12T00:53:11.103Z","likes":76,"posts":77,"comments":-1} +{"start":"2014-08-12T01:21:14.333Z","end":"2014-08-12T01:31:58.639Z","likes":66,"posts":67,"comments":-1} +{"start":"2014-08-12T01:41:51.163Z","end":"2014-08-12T01:50:08.187Z","likes":49,"posts":50,"comments":-1} +{"start":"2014-08-12T02:49:58.486Z","end":"2014-08-12T03:01:20.689Z","likes":66,"posts":67,"comments":-1} +{"start":"2014-08-12T12:39:50.071Z","end":"2014-08-12T12:50:25.991Z","likes":61,"posts":62,"comments":-1} +{"start":"2014-08-15T22:18:08.265Z","end":"2014-08-15T22:29:44.519Z","likes":67,"posts":68,"comments":-1} +{"start":"2014-08-19T16:59:58.881Z","end":"2014-08-19T17:01:25.298Z","likes":3,"posts":4,"comments":-1} +{"start":"2014-08-19T18:13:10.394Z","end":"2014-08-19T18:13:24.647Z","likes":-1,"posts":0,"comments":-1} +{"start":"2014-08-19T18:44:18.980Z","end":"2014-08-19T18:44:32.190Z","likes":-1,"posts":0,"comments":-1} +{"start":"2014-08-19T18:44:44.879Z","end":"2014-08-19T18:44:57.958Z","likes":-1,"posts":0,"comments":-1} +{"start":"2014-08-19T18:46:46.509Z","end":"2014-08-19T18:47:24.668Z","likes":1,"posts":2,"comments":-1} diff --git a/casperjs/loveMachine.js b/casperjs/loveMachine.js index bdbea75..eb0a64d 100644 --- a/casperjs/loveMachine.js +++ b/casperjs/loveMachine.js @@ -132,12 +132,14 @@ var postStatus = function(){ var doSomeLove = function () { if( init ){ // this.echo('Init...'); - this.evaluate(function(){ + this.evaluate(function(strictMode){ window.likePosts = true; window.likeComments = true; window.nbPostLikes = 0; window.nbCommentLikes = 0; - }); + window.strictMode = strictMode; + }, + casper.cli.get('strictmode')); init = false; } if ( (nbPL >0 || nbCL > 0) && loop < maxLoop && numberOfPostLikes <= maxLikes ){ @@ -153,19 +155,17 @@ var doSomeLove = function () { if($(this).text() === 'Like'){ if( $(this).attr('id') === undefined || $(this).attr('id') === "" ){ - // If element doesn't have class "selected", which means it's already clicked - if ( !$(this).children('strong').hasClass('selected') && window.likePosts){ - var isApp; - var footer = $(this).parents("footer") - var body = footer.prevUntil("header"); - var a = body.find("a"); - var isApp = (a.attr('href').indexOf("apps.facebook.com") > -1); - if (!isApp){ - $(this).attr('id', 'like' + window.nbPostLikes ); - $(this).attr('id', 'like' + window.nbPostLikes ); - console.log('Creating id="#like' + window.nbPostLikes + '"' ); - window.nbPostLikes++; - } + // If element doesn't have class "selected", which means it's already clicked + if ( !$(this).children('strong').hasClass('selected') && window.likePosts){ + var footer = $(this).parents("footer") + var body = footer.prevUntil("header"); + var a = body.find("a"); + var isApp = (a.attr('href').indexOf("apps.facebook.com") > -1); + if (!(isApp && window.strictMode)){ + $(this).attr('id', 'like' + window.nbPostLikes ); + console.log('Creating id="#like' + window.nbPostLikes + '"' ); + window.nbPostLikes++; + } } if ( window.likeComments && $(this).attr('title') === 'Like this comment' ){ $(this).attr('id', 'commentLike' + window.nbCommentLikes ); diff --git a/n1k0-casperjs-4f105a9/.gitattributes b/n1k0-casperjs-4f105a9/.gitattributes new file mode 100644 index 0000000..176a458 --- /dev/null +++ b/n1k0-casperjs-4f105a9/.gitattributes @@ -0,0 +1 @@ +* text=auto diff --git a/n1k0-casperjs-4f105a9/.gitignore b/n1k0-casperjs-4f105a9/.gitignore new file mode 100644 index 0000000..eecc4e2 --- /dev/null +++ b/n1k0-casperjs-4f105a9/.gitignore @@ -0,0 +1,8 @@ +.DS_Store +/*.xml +/*.png +/docs/*.js +/docs/*.xml +/docs/_build +/tmp +*.pyc diff --git a/n1k0-casperjs-4f105a9/.gitmodules b/n1k0-casperjs-4f105a9/.gitmodules new file mode 100644 index 0000000..e69de29 diff --git a/n1k0-casperjs-4f105a9/.jshintignore b/n1k0-casperjs-4f105a9/.jshintignore new file mode 100644 index 0000000..cc2233b --- /dev/null +++ b/n1k0-casperjs-4f105a9/.jshintignore @@ -0,0 +1,11 @@ +docs +modules/vendors +modules/events.js +modules/querystring.js +samples/** +tests/clitests/** +tests/testdir/** +tmp +./*.js +./phantomjs*/* +./engine/* diff --git a/n1k0-casperjs-4f105a9/.jshintrc b/n1k0-casperjs-4f105a9/.jshintrc new file mode 100644 index 0000000..4533c38 --- /dev/null +++ b/n1k0-casperjs-4f105a9/.jshintrc @@ -0,0 +1,25 @@ +{ + "asi": true, + "browser": true, + "debug": true, + "devel": true, + "eqeqeq": true, + "evil": true, + "maxparams": 5, + "maxdepth": 3, + "maxstatements": 15, + "maxcomplexity": 7, + "proto": true, + "regexdash": true, + "strict": true, + "sub": true, + "trailing": true, + "undef": true, + + "predef" : [ + "exports", + "phantom", + "window", + "require" + ] +} diff --git a/n1k0-casperjs-4f105a9/.travis.yml b/n1k0-casperjs-4f105a9/.travis.yml new file mode 100644 index 0000000..14097d9 --- /dev/null +++ b/n1k0-casperjs-4f105a9/.travis.yml @@ -0,0 +1,60 @@ +branches: + only: + - "master" + +before_install: + - echo "Installing $ENGINE $ENGINE_VERSION from $ENGINE_ARCHIVE_URL" + - wget $ENGINE_ARCHIVE_URL --output-document=engine.tar.bz2 + - mkdir engine && tar --strip-components=1 -xvf engine.tar.bz2 -C engine + - if [[ $ENGINE == 'phantomjs' ]]; then + ENGINE_EXECUTABLE="engine/bin/phantomjs"; + elif [[ $ENGINE == 'slimerjs' ]]; then + ENGINE_EXECUTABLE="engine/slimerjs"; + else + echo "Unsupported engine $ENGINE"; + fi + - ls -la $ENGINE_EXECUTABLE && $ENGINE_EXECUTABLE --version; + - export ENGINE_EXECUTABLE="$ENGINE_EXECUTABLE $ENGINE_FLAGS" + +install: + - sudo apt-get install -qq mono-devel mono-mcs + +before_script: + - "npm install -g jshint@2.0.1" + +script: + - "make $MAKE_TEST_COMMAND" + +env: + global: + - ENGINE_FLAGS="--local-to-remote-url-access=yes --ignore-ssl-errors=yes" + matrix: + - ENGINE="phantomjs" ENGINE_VERSION="1.8.2" MAKE_TEST_COMMAND="test-dotNET" + ENGINE_ARCHIVE_URL="https://phantomjs.googlecode.com/files/phantomjs-1.8.2-linux-x86_64.tar.bz2" + - ENGINE="phantomjs" ENGINE_VERSION="1.8.2" MAKE_TEST_COMMAND="test" + ENGINE_ARCHIVE_URL="https://phantomjs.googlecode.com/files/phantomjs-1.8.2-linux-x86_64.tar.bz2" + - ENGINE="phantomjs" ENGINE_VERSION="1.9.0" MAKE_TEST_COMMAND="test-dotNET" + ENGINE_ARCHIVE_URL="https://phantomjs.googlecode.com/files/phantomjs-1.9.0-linux-x86_64.tar.bz2" + - ENGINE="phantomjs" ENGINE_VERSION="1.9.0" MAKE_TEST_COMMAND="test" + ENGINE_ARCHIVE_URL="https://phantomjs.googlecode.com/files/phantomjs-1.9.0-linux-x86_64.tar.bz2" + - ENGINE="phantomjs" ENGINE_VERSION="1.9.1" MAKE_TEST_COMMAND="test-dotNET" + ENGINE_ARCHIVE_URL="https://phantomjs.googlecode.com/files/phantomjs-1.9.1-linux-x86_64.tar.bz2" + - ENGINE="phantomjs" ENGINE_VERSION="1.9.1" MAKE_TEST_COMMAND="test" + ENGINE_ARCHIVE_URL="https://phantomjs.googlecode.com/files/phantomjs-1.9.1-linux-x86_64.tar.bz2" + - ENGINE="phantomjs" ENGINE_VERSION="1.9.2" MAKE_TEST_COMMAND="test-dotNET" + ENGINE_ARCHIVE_URL="https://phantomjs.googlecode.com/files/phantomjs-1.9.2-linux-x86_64.tar.bz2" + - ENGINE="phantomjs" ENGINE_VERSION="1.9.2" MAKE_TEST_COMMAND="test" + ENGINE_ARCHIVE_URL="https://phantomjs.googlecode.com/files/phantomjs-1.9.2-linux-x86_64.tar.bz2" + - ENGINE="slimerjs" ENGINE_VERSION="0.8.4" MAKE_TEST_COMMAND="test-dotNET" + ENGINE_ARCHIVE_URL="http://download.slimerjs.org/v0.8/0.8.4/slimerjs-0.8.4-linux-x86_64.tar.bz2" + - ENGINE="slimerjs" ENGINE_VERSION="0.8.4" MAKE_TEST_COMMAND="test" + ENGINE_ARCHIVE_URL="http://download.slimerjs.org/v0.8/0.8.4/slimerjs-0.8.4-linux-x86_64.tar.bz2" + - ENGINE="slimerjs" ENGINE_VERSION="0.8.5" MAKE_TEST_COMMAND="test-dotNET" + ENGINE_ARCHIVE_URL="http://download.slimerjs.org/v0.8/0.8.5/slimerjs-0.8.5-linux-x86_64.tar.bz2" + - ENGINE="slimerjs" ENGINE_VERSION="0.8.5" MAKE_TEST_COMMAND="test" + ENGINE_ARCHIVE_URL="http://download.slimerjs.org/v0.8/0.8.5/slimerjs-0.8.5-linux-x86_64.tar.bz2" + +notifications: + irc: + channels: + - "irc.freenode.org#casperjs" diff --git a/n1k0-casperjs-4f105a9/CHANGELOG.md b/n1k0-casperjs-4f105a9/CHANGELOG.md new file mode 100644 index 0000000..92f799c --- /dev/null +++ b/n1k0-casperjs-4f105a9/CHANGELOG.md @@ -0,0 +1 @@ +[This file has moved to Github](https://github.com/n1k0/casperjs/releases) diff --git a/n1k0-casperjs-4f105a9/CONTRIBUTING.md b/n1k0-casperjs-4f105a9/CONTRIBUTING.md new file mode 100644 index 0000000..e92e404 --- /dev/null +++ b/n1k0-casperjs-4f105a9/CONTRIBUTING.md @@ -0,0 +1,93 @@ +# Contribution Guide + +*Note: this guide has been heavily inspired by [PhantomJS' one](https://github.com/ariya/phantomjs/blob/master/CONTRIBUTING.md).* + +**This page describes how to contribute changes to the [CasperJS](http://casperjs.org/) project.** + +Please do **not** create a pull request without reading this guide first. Failure to do so may result in the **rejection** of the pull request. + +## For The Impatients + +**Work on a feature branch**. +If your changes need to be modified due to some reviews, it is less clutter to tweak an isolated feature branch and push it again. + +**Create a ticket in the [issue tracker](https://github.com/n1k0/casperjs/issues/)**. +This serves as a placeholder for important feedback, review, or any future updates. **Please ensure searching the bugtracker for an already opened issue matching your case before filing a new issue.** + +In the commit message(s): + +* **Keep the first line short**. Write additional paragraphs if necessary. +* **Reference an opened issue**, by referencing the issue ID prefixed by a `#` and the keyword `refs`, eg. `refs #123` + +Sample commit message: + +> refs #123 - fixed error message formatting +> +> (optional: a short explanation of what the patch actually does) + +**Run tests** + +Run CasperJS' test suite to see you didn't break something: + + $ casperjs selftest + +The result status bar **must be green** before sending your PR. + +## Communicate + +**Improvement and feature request**. If you have an improvement idea, please send an email to the [mailing list](http://groups.google.com/group/casperjs) (preferable than contacting the developers directly) so that other people can give their insights and opinions. This is also important to avoid duplicate work. + +**Help request**. If you're stuck using CasperJS and don't understand how to achieve something, please [ask on the mailing-list](https://groups.google.com/forum/#!forum/casperjs) first. Please don't ask for all the kind people to write your scripts for you. + +**Ensure the issue is related to CasperJS**. Please try to reproduce the issue using plain PhantomJS. If it works with the native PhantomJS API but doesn't with CasperJS, then the issue is probably valid. In the opposite case, please file an issue on [PhantomJS issue tracker](http://code.google.com/p/phantomjs/issues/list). + +**Extending with new API**. Whenever you want to introduce a new API, please send an email to the mailing list along with the link to the issue if any. It may require few iterations to agree on the final API and hence it is important to engage all interested parties as early as possible. + +## Get Ready + +### Use Feature Branch + +To isolate your change, please avoid working on the master branch. Instead, work on a *feature branch* (often also known as *topic branch*). You can create a new branch (example here crash-fix) off the master branch by using: + + git checkout -b crash-fix master + +Refer to your favorite Git tutorial/book for further detailed help. + +Some good practices for the feature branch: + +* Give it a meaningful name instead of, e.g. `prevent-zero-divide` instead of just `fix` +* Make *granular* and *atomic* commits, e.g. do not mix a typo fix with some major refactoring +* Keep one branch for one specific issue. If you need to work on other unrelated issues, create another branch. + +### Write tests + +CasperJS being partly a testing framework, how irrelevant would be to send a pull request with no test? So, please take the time to write and attach tests to your PR. Furthermore, testing with CasperJS is quite [exhaustively documented](http://casperjs.org/testing.html). + +### Run tests! + +This may sound obvious but **don't send pull requests which break the casperjs test suite**. + +To see if your modifications broke the suite, just run: + + $ casperjs selftest + +### Write documentation + +Do you appreciate the [CasperJS documentation](http://casperjs.org/)? I do too. As the documentation contents are managed and generated using Github, Markdown and CasperJS itself, take the time to read the [Documentation Contribution Guide](https://github.com/n1k0/casperjs/blob/gh-pages/README.md#casperjs-documentation) and write the documentation related to your PR whenever applicable. + +**Note:** As the documentation is handled in a [dedicated separated `gh-pages` branch](https://github.com/n1k0/casperjs/tree/gh-pages), you'll have to send a dedicated PR for doc patches. I'm working on a more comfortable solution, but it's no easy task though. + +## Review and Merge + +When your branch is ready, send the pull request. + +While it is not always the case, often it is necessary to improve parts of your code in the branch. This is the actual review process. + +Here is a check list for the review: + +* It does not break the test suite +* There is no typo +* The coding style follows the existing one +* There is a reasonable amount of comment +* The license header is intact +* All examples are still working diff --git a/n1k0-casperjs-4f105a9/CONTRIBUTORS.md b/n1k0-casperjs-4f105a9/CONTRIBUTORS.md new file mode 100644 index 0000000..86c046e --- /dev/null +++ b/n1k0-casperjs-4f105a9/CONTRIBUTORS.md @@ -0,0 +1,109 @@ +# CasperJS contributors + +You can check out the [contribution graphs on github](https://github.com/n1k0/casperjs/graphs/contributors). + +``` +$ git shortlog -s -n | cut -c8- +Nicolas Perriault +Mickaël Andrieu +Laurent Jouanneau +hexid +Brikou CARRE +oncletom +Matt DuVall +Nathan Black +hannyu +Julien Muetton +Chris Bosco +Matt Bowman +Shiryaev Andrey +mickaelandrieu +Clochix +Chris Lorenzo +Victor Yap +JF Paradis +Matthew DuVall +Rob Barreca +Oleg Pudeyev +pborreli +nrabinowitz +Darrell Hamilton +Tyler Ritchie +Andrew Childs +Eric Bouchut +Dave Lee +Solomon White +Luke Rodgers +reina.sweet +renatodarrigo +Donovan Hutchinson +Sean Massa +Vladimir Chizhov +Samuel Gabel +Reina Sweet +Jan Schaumann +fwebdev +Reid Lynch +Justin Collum +Philip Hansen +Michael Geers +Orchestrator81 +Nick Currier +Julien Moulin +Elmar Langholz +Jason Funk +Lee Byrd +Thomas Rosenau +V Sreekanth +Patrick Reagan +Andrew de Andrade +Andy Shinn +Ben Johnson +Ben Lowery +Bert Pareyn +Brandon Bethke +Charlie Park +Chris Winters +Christophe Benz +Dharrya +Dmitry Menshikov +Florent DUBOST +Harrison Reiser +Itamar Nabriski +Ivan +Jamey J. DeOrio +Jan Pochyla +Jan-Martin Fruehwacht +John F. Douthat +Julian Gruber +Justin Marsan +Justin Slattery +Justine Tunney +KaroDidi +Leandro Boscariol +Maisons du monde +Marcel Duran +Mathieu Agopian +Mehdi Kabab +Miguel González +Mikhail Korobov +Mikko Peltonen +Narno +Pascal Borreli +Phillip Alexander +Rafael +Rafael Garcia +Raphaël Benitte +Rock Li +Scott +Thomas Parisot +Tim Bunce +Tzvi Friedman +Yasuo Ohgaki +Yevgeny Smirnov +alfetopito +jayseeg +jean-philippe serafin +shekyan +snkashis +``` diff --git a/n1k0-casperjs-4f105a9/LICENSE.md b/n1k0-casperjs-4f105a9/LICENSE.md new file mode 100644 index 0000000..5c308cb --- /dev/null +++ b/n1k0-casperjs-4f105a9/LICENSE.md @@ -0,0 +1,19 @@ +Copyright (c) 2011-2012 Nicolas Perriault + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/n1k0-casperjs-4f105a9/Makefile b/n1k0-casperjs-4f105a9/Makefile new file mode 100644 index 0000000..2e26ff0 --- /dev/null +++ b/n1k0-casperjs-4f105a9/Makefile @@ -0,0 +1,25 @@ +.PHONY: default test test-dotNET docs selftest compile-dotNET selftest-dotNET clitest jshint + +default: test + +test: selftest clitest jshint + +test-dotNET: compile-dotNET selftest-dotNET + +docs: + sphinx-build -b html ./docs docs/_build + +selftest: + bin/casperjs selftest + +compile-dotNET: + mcs -langversion:3 -out:bin/casperjs.exe src/casperjs.cs + +selftest-dotNET: + bin/casperjs.exe selftest + +clitest: + python tests/clitests/runtests.py + +jshint: + jshint . diff --git a/n1k0-casperjs-4f105a9/README.md b/n1k0-casperjs-4f105a9/README.md new file mode 100644 index 0000000..f6c56e7 --- /dev/null +++ b/n1k0-casperjs-4f105a9/README.md @@ -0,0 +1,94 @@ +# CasperJS + +>**Important note:** the `master` branch hosts the development version of CasperJS, which is now pretty stable and should be the right version to use if you ask me. +> +>Use the [`1.0` branch](https://github.com/n1k0/casperjs/tree/1.0) if you want to keep in sync with the stable old version, or [use tagged versions](https://github.com/n1k0/casperjs/tags). +> +>Currently, available documentation is: +> +>- **hosted on [docs.casperjs.org](http://docs.casperjs.org/) for the development branch** +>- hosted on [casperjs.org](http://casperjs.org/) for the 1.0 branch +> +>[Travis-CI](http://travis-ci.org/n1k0/casperjs) build status: +> +>- ![Build Status](https://travis-ci.org/n1k0/casperjs.png?branch=master) `master` branch +>- 1.0 tests unfortunately have to be run manually using the `casperjs selftest` command + +CasperJS is a navigation scripting & testing utility for [PhantomJS](http://www.phantomjs.org/) +and [SlimerJS](http://slimerjs.org/). It eases the process of defining a full navigation +scenario and provides useful high-level functions, methods & syntaxic sugar for doing common +tasks such as: + +- defining & ordering [navigation steps](http://docs.casperjs.org/en/latest/quickstart.html) +- [filling forms](http://docs.casperjs.org/en/latest/modules/casper.html#fill) +- [clicking links](http://docs.casperjs.org/en/latest/modules/casper.html#click) +- [capturing screenshots](http://docs.casperjs.org/en/latest/modules/casper.html#captureselector) of a page (or an area) +- [making assertions on remote DOM](http://docs.casperjs.org/en/latest/modules/tester.html) +- [logging](http://docs.casperjs.org/en/latest/logging.html) & [events](http://docs.casperjs.org/en/latest/events-filters.html) +- [downloading](http://docs.casperjs.org/en/latest/modules/casper.html#download) resources, even binary ones +- catching errors and react accordingly +- writing [functional test suites](http://docs.casperjs.org/en/latest/testing.html), exporting results as JUnit XML (xUnit) + +Browse the [sample examples repository](https://github.com/n1k0/casperjs/tree/master/samples). +Don't hesitate to pull request for any cool example of yours as well! + +**Read the [full documentation](http://docs.casperjs.org/) on casperjs documentation website.** + +Subscribe to the [project mailing-list](https://groups.google.com/forum/#!forum/casperjs) + +Follow the CasperJS project [on twitter](https://twitter.com/casperjs_org) and [Google+](https://plus.google.com/b/106641872690063476159/). + +## Show me some code! + +First [install CasperJS](http://docs.casperjs.org/en/latest/installation.html), we'll use 1.1 beta here. + +Sample test to see if some dropdown can be opened: + +```javascript +casper.test.begin('a twitter bootstrap dropdown can be opened', 2, function(test) { + casper.start('http://getbootstrap.com/2.3.2/javascript.html#dropdowns', function() { + test.assertExists('#navbar-example'); + this.click('#dropdowns .nav-pills .dropdown:last-of-type a.dropdown-toggle'); + this.waitUntilVisible('#dropdowns .nav-pills .open', function() { + test.pass('Dropdown is open'); + }); + }).run(function() { + test.done(); + }); +}); +``` + +Run the script: + +![](http://cl.ly/image/271e2i403A0F/Capture%20d%E2%80%99%C3%A9cran%202013-01-20%20%C3%A0%2009.26.15.png) + +##Support + +Need help with getting CasperJS up and running? Got a time-consuming problem you want to get solved quickly? + +Get CasperJS support on CodersClan. + + +## Contributing + +### Contributing code + +Please read the [CONTRIBUTING.md](https://github.com/n1k0/casperjs/blob/master/CONTRIBUTING.md) file contents. + +### Contributing documentation + +CasperJS's documentation is written using the [Markdown format](http://daringfireball.net/projects/markdown/), and hosted on Github thanks to the [Github Pages Feature](http://pages.github.com/). + +To view the source files on github, head to [the gh-pages branch](https://github.com/n1k0/casperjs/tree/gh-pages), and check the [documentation's README](https://github.com/n1k0/casperjs/tree/gh-pages#readme) for further instructions. + +## Team + +- Nicolas Perriault ([@n1k0](https://github.com/n1k0)) +- Nick Currier ([@hexid](https://github.com/hexid)) +- Laurent Jouanneau ([@laurentj](https://github.com/laurentj)) +- Mickaël Andrieu ([@mickaelandrieu](https://github.com/mickaelandrieu)) +- Matt DuVall ([@mduvall](https://github.com/mduvall)) + +## License + +MIT diff --git a/n1k0-casperjs-4f105a9/batchbin/casperjs.bat b/n1k0-casperjs-4f105a9/batchbin/casperjs.bat new file mode 100644 index 0000000..dd86a98 --- /dev/null +++ b/n1k0-casperjs-4f105a9/batchbin/casperjs.bat @@ -0,0 +1,5 @@ +@ECHO OFF +set CASPER_PATH=%~dp0.. +set CASPER_BIN=%CASPER_PATH%\bin\ +set ARGV=%* +call phantomjs "%CASPER_BIN%bootstrap.js" --casper-path="%CASPER_PATH%" --cli %ARGV% \ No newline at end of file diff --git a/n1k0-casperjs-4f105a9/bin/bootstrap.js b/n1k0-casperjs-4f105a9/bin/bootstrap.js new file mode 100644 index 0000000..61d1b62 --- /dev/null +++ b/n1k0-casperjs-4f105a9/bin/bootstrap.js @@ -0,0 +1,395 @@ +/*! + * Casper is a navigation utility for PhantomJS. + * + * Documentation: http://casperjs.org/ + * Repository: http://github.com/n1k0/casperjs + * + * Copyright (c) 2011-2012 Nicolas Perriault + * + * Part of source code is Copyright Joyent, Inc. and other Node contributors. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +/*global process, console, phantom, slimer, require:true*/ +/*jshint maxstatements:34, maxcomplexity:10*/ + +// node check +if ('process' in this && process.title === "node") { + console.error('CasperJS cannot be executed within a nodejs environment'); + process.exit(1); +} + +// phantom check +if (!('phantom' in this)) { + console.error('CasperJS needs to be executed in a PhantomJS environment http://phantomjs.org/'); +} + +// Common polyfills +if (typeof Function.prototype.bind !== "function") { + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind#Compatibility + Function.prototype.bind = function (oThis) { + "use strict"; + /* jshint -W055 */ + if (typeof this !== "function") { + // closest thing possible to the ECMAScript 5 internal IsCallable function + throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); + } + var aArgs = Array.prototype.slice.call(arguments, 1), + fToBind = this, + fNOP = function() {}, + fBound = function() { + return fToBind.apply(this instanceof fNOP && oThis ? this : oThis, + aArgs.concat(Array.prototype.slice.call(arguments))); + }; + fNOP.prototype = this.prototype; + fBound.prototype = new fNOP(); + return fBound; + }; +} + +// Custom base error +var CasperError = function CasperError(msg) { + "use strict"; + Error.call(this); + this.message = msg; + this.name = 'CasperError'; +}; +CasperError.prototype = Object.getPrototypeOf(new Error()); + +// casperjs env initialization +(function(global, phantom){ + "use strict"; + // phantom args + // NOTE: we can't use require('system').args here for some very obscure reason + // do not even attempt at using it as it creates infinite recursion + var phantomArgs = phantom.args; + + if (phantom.casperLoaded) { + return; + } + + function __die(message) { + if (message) { + console.error(message); + } + phantom.exit(1); + } + + function __terminate(message) { + if (message) { + console.log(message); + } + phantom.exit(); + } + + (function(version) { + // required version check + if (version.major !== 1) { + return __die('CasperJS needs PhantomJS v1.x'); + } if (version.minor < 8) { + return __die('CasperJS needs at least PhantomJS v1.8 or later.'); + } + if (version.minor === 8 && version.patch < 1) { + return __die('CasperJS needs at least PhantomJS v1.8.1 or later.'); + } + })(phantom.version); + + // Hooks in default phantomjs error handler + phantom.onError = function onPhantomError(msg, trace) { + phantom.defaultErrorHandler.apply(phantom, arguments); + // print a hint when a possible casperjs command misuse is detected + if (msg.indexOf("ReferenceError: Can't find variable: casper") === 0) { + console.error('Hint: you may want to use the `casperjs test` command.'); + } + // exits on syntax error + if (msg.indexOf('SyntaxError: Parse error') === 0) { + __die(); + } + }; + + // Patching fs + var fs = (function patchFs(fs) { + if (!fs.hasOwnProperty('basename')) { + fs.basename = function basename(path) { + return path.replace(/.*\//, ''); + }; + } + if (!fs.hasOwnProperty('dirname')) { + fs.dirname = function dirname(path) { + if (!path) return undefined; + return path.toString().replace(/\\/g, '/').replace(/\/[^\/]*$/, ''); + }; + } + if (!fs.hasOwnProperty('isWindows')) { + fs.isWindows = function isWindows() { + var testPath = arguments[0] || this.workingDirectory; + return (/^[a-z]{1,2}:/i).test(testPath) || testPath.indexOf("\\\\") === 0; + }; + } + if (fs.hasOwnProperty('joinPath')) { + fs.pathJoin = fs.joinPath; + } else if (!fs.hasOwnProperty('pathJoin')) { + fs.pathJoin = function pathJoin() { + return Array.prototype.join.call(arguments, '/'); + }; + } + return fs; + })(require('fs')); + + // CasperJS root path + if (!phantom.casperPath) { + try { + phantom.casperPath = phantom.args.map(function _map(arg) { + var match = arg.match(/^--casper-path=(.*)/); + if (match) { + return fs.absolute(match[1]); + } + }).filter(function _filter(path) { + return fs.isDirectory(path); + }).pop(); + } catch (e) { + return __die("Couldn't find nor compute phantom.casperPath, exiting."); + } + } + + /** + * Prints CasperJS help. + */ + function printHelp() { + var engine = phantom.casperEngine === 'slimerjs' ? slimer : phantom; + var version = [engine.version.major, engine.version.minor, engine.version.patch].join('.'); + return __terminate([ + 'CasperJS version ' + phantom.casperVersion.toString() + + ' at ' + phantom.casperPath + ', using ' + phantom.casperEngine + ' version ' + version, + fs.read(fs.pathJoin(phantom.casperPath, 'bin', 'usage.txt')) + ].join('\n')) + } + + /** + * Patched require to allow loading of native casperjs modules. + * Every casperjs module have to first call this function in order to + * load a native casperjs module: + * + * var require = patchRequire(require); + * var utils = require('utils'); + * + * Useless for SlimerJS + */ + function patchRequire(require) { + if (require.patched) { + return require; + } + function fromPackageJson(module, dir) { + var pkgPath, pkgContents, pkg; + pkgPath = fs.pathJoin(dir, module, 'package.json'); + if (!fs.exists(pkgPath)) { + return; + } + pkgContents = fs.read(pkgPath); + if (!pkgContents) { + return; + } + try { + pkg = JSON.parse(pkgContents); + } catch (e) { + return; + } + if (typeof pkg === "object" && pkg.main) { + return fs.absolute(fs.pathJoin(dir, module, pkg.main)); + } + } + function resolveFile(path, dir) { + var extensions = ['js', 'coffee', 'json']; + var basenames = [path, path + '/index']; + var paths = []; + var nodejsScript = fromPackageJson(path, dir); + if (nodejsScript) { + return nodejsScript; + } + basenames.forEach(function(basename) { + paths.push(fs.absolute(fs.pathJoin(dir, basename))); + extensions.forEach(function(extension) { + paths.push(fs.absolute(fs.pathJoin(dir, [basename, extension].join('.')))); + }); + }); + for (var i = 0; i < paths.length; i++) { + if (fs.isFile(paths[i])) { + return paths[i]; + } + } + return null; + } + function getCurrentScriptRoot() { + if ((phantom.casperScriptBaseDir || "").indexOf(fs.workingDirectory) === 0) { + return phantom.casperScriptBaseDir; + } + return fs.absolute(fs.pathJoin(fs.workingDirectory, phantom.casperScriptBaseDir)); + } + function casperBuiltinPath(path) { + return resolveFile(path, fs.pathJoin(phantom.casperPath, 'modules')); + } + function nodeModulePath(path) { + return resolveFile(path, fs.pathJoin(getCurrentScriptRoot(), 'node_modules')); + } + function localModulePath(path) { + return resolveFile(path, phantom.casperScriptBaseDir || fs.workingDirectory); + } + var patchedRequire = function patchedRequire(path) { + try { + return require(casperBuiltinPath(path) || + nodeModulePath(path) || + localModulePath(path) || + path); + } catch (e) { + throw new CasperError("Can't find module " + path); + } + }; + patchedRequire.cache = require.cache; + patchedRequire.extensions = require.extensions; + patchedRequire.stubs = require.stubs; + patchedRequire.patched = true; + return patchedRequire; + } + + /** + * Initializes the CasperJS Command Line Interface. + */ + function initCasperCli(casperArgs) { + /* jshint maxcomplexity:99 */ + var baseTestsPath = fs.pathJoin(phantom.casperPath, 'tests'); + + function setScriptBaseDir(scriptName) { + var dir = fs.dirname(scriptName); + if (dir === scriptName) { + dir = '.'; + } + phantom.casperScriptBaseDir = dir; + } + + if (!!casperArgs.options.version) { + return __terminate(phantom.casperVersion.toString()) + } else if (casperArgs.get(0) === "test") { + phantom.casperScript = fs.absolute(fs.pathJoin(baseTestsPath, 'run.js')); + phantom.casperTest = true; + casperArgs.drop("test"); + setScriptBaseDir(casperArgs.get(0)); + } else if (casperArgs.get(0) === "selftest") { + phantom.casperScript = fs.absolute(fs.pathJoin(baseTestsPath, 'run.js')); + phantom.casperSelfTest = phantom.casperTest = true; + casperArgs.options.includes = fs.pathJoin(baseTestsPath, 'selftest.js'); + if (casperArgs.args.length <= 1) { + casperArgs.args.push(fs.pathJoin(baseTestsPath, 'suites')); + } + casperArgs.drop("selftest"); + phantom.casperScriptBaseDir = fs.dirname(casperArgs.get(1) || fs.dirname(phantom.casperScript)); + } else if (casperArgs.args.length === 0 || !!casperArgs.options.help) { + return printHelp(); + } + + if (!phantom.casperScript) { + phantom.casperScript = casperArgs.get(0); + } + + if (phantom.casperScript !== "/dev/stdin" && !fs.isFile(phantom.casperScript)) { + return __die('Unable to open file: ' + phantom.casperScript); + } + + if (!phantom.casperScriptBaseDir) { + setScriptBaseDir(phantom.casperScript); + } + + // filter out the called script name from casper args + casperArgs.drop(phantom.casperScript); + } + + // CasperJS version, extracted from package.json - see http://semver.org/ + phantom.casperVersion = (function getCasperVersion(path) { + var parts, patchPart, pkg, pkgFile; + pkgFile = fs.absolute(fs.pathJoin(path, 'package.json')); + if (!fs.exists(pkgFile)) { + throw new CasperError('Cannot find package.json at ' + pkgFile); + } + try { + pkg = JSON.parse(require('fs').read(pkgFile)); + } catch (e) { + throw new CasperError('Cannot read package file contents: ' + e); + } + parts = pkg.version.trim().split("."); + if (parts.length < 3) { + throw new CasperError("Invalid version number"); + } + patchPart = parts[2].split('-'); + return { + major: ~~parts[0] || 0, + minor: ~~parts[1] || 0, + patch: ~~patchPart[0] || 0, + ident: patchPart[1] || "", + toString: function toString() { + var version = [this.major, this.minor, this.patch].join('.'); + if (this.ident) { + version = [version, this.ident].join('-'); + } + return version; + } + }; + })(phantom.casperPath); + + if ("slimer" in global) { + // for SlimerJS, use the standard API to declare directories + // where to search modules + require.paths.push(fs.pathJoin(phantom.casperPath, 'modules')); + require.paths.push(fs.workingDirectory); + + // declare a dummy patchRequire function + require.globals.patchRequire = global.patchRequire = function(req) { return req;}; + require.globals.CasperError = CasperError; + phantom.casperEngine = "slimerjs"; + } + else { + // patch require + global.__require = require; + global.patchRequire = patchRequire; // must be called in every casperjs module as of 1.1 + global.require = patchRequire(global.require); + phantom.casperEngine = "phantomjs"; + } + + // casper cli args + phantom.casperArgs = require('cli').parse(phantomArgs); + + if (true === phantom.casperArgs.get('cli')) { + initCasperCli(phantom.casperArgs); + } + + if ("slimer" in global && phantom.casperScriptBaseDir) { + // initCasperCli has set casperScriptBaseDir + // use it instead of fs.workingDirectory + require.paths.pop(); + require.paths.push(phantom.casperScriptBaseDir); + } + + // casper loading status flag + phantom.casperLoaded = true; + + // passed casperjs script execution + if (phantom.casperScript && !phantom.injectJs(phantom.casperScript)) { + return __die('Unable to load script ' + phantom.casperScript + '; check file syntax'); + } +})(this, phantom); diff --git a/n1k0-casperjs-4f105a9/bin/casperjs b/n1k0-casperjs-4f105a9/bin/casperjs new file mode 100644 index 0000000..d0e3031 --- /dev/null +++ b/n1k0-casperjs-4f105a9/bin/casperjs @@ -0,0 +1,140 @@ +#!/usr/bin/env python + +import os +import sys + +def resolve(path): + if os.path.islink(path): + path = os.path.join(os.path.dirname(path), os.readlink(path)) + return resolve(path) + return path + +SUPPORTED_ENGINES = { + 'phantomjs' : { + 'native_args': [ + 'cookies-file', + 'config', + 'debug', + 'disk-cache', + 'ignore-ssl-errors', + 'load-images', + 'load-plugins', + 'local-storage-path', + 'local-storage-quota', + 'local-to-remote-url-access', + 'max-disk-cache-size', + 'output-encoding', + 'proxy', + 'proxy-auth', + 'proxy-type', + 'remote-debugger-port', + 'remote-debugger-autorun', + 'script-encoding', + 'ssl-protocol', + 'ssl-certificates-path', + 'web-security', + 'webdriver', + 'webdriver-logfile', + 'webdriver-loglevel' + 'webdriver-selenium-grid-hub', + 'wd', + 'w', + ], + 'env_varname': 'PHANTOMJS_EXECUTABLE', + 'default_exec' : 'phantomjs' + }, + 'slimerjs': { + 'native_args': [ + 'P', + 'jsconsole', + 'CreateProfile', + 'profile', + #phantomjs options + 'cookies-file', + 'config', + 'debug', + 'disk-cache', + 'ignore-ssl-errors', + 'load-images', + 'load-plugins', + 'local-storage-path', + 'local-storage-quota', + 'local-to-remote-url-access', + 'max-disk-cache-size', + 'output-encoding', + 'proxy', + 'proxy-auth', + 'proxy-type', + 'remote-debugger-port', + 'remote-debugger-autorun', + 'script-encoding', + 'ssl-protocol', + 'ssl-certificates-path', + 'web-security', + 'webdriver', + 'webdriver-logfile', + 'webdriver-loglevel' + 'webdriver-selenium-grid-hub', + 'wd', + 'w', + ], + 'env_varname': 'SLIMERJS_EXECUTABLE', + 'default_exec' : 'slimerjs' + }, +} + +ENGINE = 'phantomjs' +ENGINE_ARGS = [] +ENGINE_NATIVE_ARGS = [] +ENGINE_EXECUTABLE = '' + +CASPER_ARGS = [] +CASPER_PATH = os.path.abspath(os.path.join(os.path.dirname(resolve(__file__)), + '..')) +SYS_ARGS = sys.argv[1:] + +# retrieve the engine name +for arg in SYS_ARGS: + if arg.startswith('--engine='): + ENGINE = arg[9:].lower() + break + +if not ENGINE in SUPPORTED_ENGINES: + print('Bad engine name. Only phantomjs and slimerjs are supported') + sys.exit(1) + +ENGINE_NATIVE_ARGS = SUPPORTED_ENGINES[ENGINE]['native_args'] +ENGINE_EXECUTABLE = os.environ.get(SUPPORTED_ENGINES[ENGINE]['env_varname'], + SUPPORTED_ENGINES[ENGINE]['default_exec']) + +def extract_arg_name(arg): + "parse out any option name" + try: + return arg.split('=', 1)[0].replace('--', '', 1) + except IndexError: + return arg + +for arg in SYS_ARGS: + arg_name = extract_arg_name(arg) + found = False + for native in ENGINE_NATIVE_ARGS: + if arg_name == native: + ENGINE_ARGS.append(arg) + found = True + if not found and arg_name != 'engine': + CASPER_ARGS.append(arg) + +CASPER_COMMAND = ENGINE_EXECUTABLE.split(' ') +CASPER_COMMAND.extend(ENGINE_ARGS) +CASPER_COMMAND.extend([ + os.path.join(CASPER_PATH, 'bin', 'bootstrap.js'), + '--casper-path=%s' % CASPER_PATH, + '--cli' +]) +CASPER_COMMAND.extend(CASPER_ARGS) + +try: + os.execvp(CASPER_COMMAND[0], CASPER_COMMAND) +except OSError as err: + print('Fatal: %s; did you install %s?' % (err, ENGINE)) + sys.exit(1) diff --git a/n1k0-casperjs-4f105a9/bin/casperjs.exe b/n1k0-casperjs-4f105a9/bin/casperjs.exe new file mode 100644 index 0000000000000000000000000000000000000000..4adeee3380af9fe3acfa93f881f734576558c51b GIT binary patch literal 7168 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 K@BSbB@AY3ZTK0qh literal 0 HcmV?d00001 diff --git a/n1k0-casperjs-4f105a9/docs/_static/images/bg.png b/n1k0-casperjs-4f105a9/docs/_static/images/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..6b37e8640096b0bae538a0ad48e3f65f3dfa9dc4 GIT binary patch literal 99 zcmeAS@N?(olHy`uVBq!ia0vp^Y#_|Y3?y$c)pCP40X`wF^78U(YHAbgiY5R>Bs^Ul sLn`8U4>s}uc}yFUpZE(!y{&q}!+(Zxqf5Yd7N97Dr>mdKI;Vst0EjLYumAu6 literal 0 HcmV?d00001 diff --git a/n1k0-casperjs-4f105a9/docs/_static/images/casperjs-logo-medium.png b/n1k0-casperjs-4f105a9/docs/_static/images/casperjs-logo-medium.png new file mode 100644 index 0000000000000000000000000000000000000000..a30e4b0c22caff417afe6435c909edd44eb97886 GIT binary patch literal 12546 zcmV+dG5yYoP)hxqsNMVHS6_W~;Ny=! ze(?SG-@n}pFTAkCU3c9zv!3(Wo+(>*Y=8gz-)9nV)_VKxw+FoY?z>kHA3pps0q^Zm zqeeAj#*Ar3j~?BO9XpoBv7Kw1uAyjzXUf(q+f=vTe*5=dd+oI= zG{D0daGC)m0Fd7XpekSusCI16^38y3&*Z(@_&xTWciy>E>|u+w)>`X-dZug>xBd06 ze_cqV@d6F*$Z_Mw!8aqhwPV9#j{Phyzdi4PZ2vnRZq&gVzYVKD5u3PO0^Pby z#GWbJ_-#iVam1IOd+xab!q`^588W2N1Z(%2 zWc<(ladH_(j}+@T`~36IpSx$uR^RTq=bkkr)I0!&fIW^>MxaJ)jDSlq(|$)Gizbz- zdGNsp8?l7ufd?LFq-He_J@il`)u}y}gq{j)e5W@4fAWz>9@(U4%9d`QefsIAcN5mW zha_tQ8F;1#R>Z&*;1OdZfc-sEk=p0*e&h8v(Eu+0x%WoiZxixk31UYbd+f0@^i0|Q zfBVB9{xIF^ufKkx25&3_8hB_N$avnL^An*qIU)}?;KgU8q}~f*oVVXxXL`4&&@ES8 zb=4w0pZ4vFE3Q~rgK<58Wv~MOjC!g8q9jQ9YyCYL8RtI_;K%|>0Qb*I`7#aJ;l20X zd*dG;Cn7J+1~&WOOVm+?iWnRvV-Ii-+)OyD34Qin$U9{J z70DIf|I`8Zyz|am;>|bTe3U^jpc)CTV2#JpjBID5IAWTSR0C`Z@HkP}n?!H#>|`vV zL9S((d0DE|YM&b5UVQPz3(HUdaHBCH!>Wj#9#f*RA`W!+tn_-CpDgfF34P63XPwpT zx#ynEkw+fc+;Yn;_FpEv*?ZzU5Z1utmv6Y?hP5Vp;7V7VS;m1o40GLpML^VeAT3^# zk-=hK@xva zK>pTb3tSD-)WY0zO`tNzfP^eM?`OZq>_`qvx^P8L&W$1Ve1AWaO%t%$Xrqmqg%@79 zS!$`Jnx&Usy4^3iDSbo<58j!KfW~oKZ zop;{Z+;r1T%~MZ36$dL~ujh3s?~P{5NItz#7XR}=VA9E%0B~EtT3c+f#hS$zU%c67 zn{AqFuf4XBaF~5(Dxq65>L9DvIU0`7O>P#d?`x2UL*8z^_15OnOD}DneDX=d+zb=^ zafX?ZL}vFDb!QI9j_X4C$F!QoRjiT_r(dzp)lMQfX z)%l7@^AND~y6djP>}NpD)S?V4890Ak#!EA&LMBO9$vD^OTbs={-@KWB{`s44fBW0b z?|%2Y=B>BhGQgJker{=t&4jMkuD|~Jg(e61en!Uoqv@FJv<#m23YDx(CFekthKqo+ z-(IbWnC-F7OXdI)oAkEZZrj?WO=d{gLdG&W3We<12w2eg{CA&*t_<}Hi!8qhY15wB zn^}=c5g4@=u_XdJ>eYVYL|r%P;hf`pnT#0~i4>lJ0#gRCc#qkktwp&a_K)ikE+4w+qKjtilfad$ZE86`v{Adj!g9Z(19((LDuE(fh&IZ2Q_b*Zbt{W#C!M1%0z_Qp31SpXlVYQMAt;6V1R`S7&UPHRp*_0-nN zBrjF-$}6vAdM~Z!z^KXuhP6a~V4uc(Nn2x$H3;wFKbpTUb4mK&o)X-+;f5Pd+gB`B zUzP{uaR5puY!JaVW;_-lEJGL(02tRqvi1D)&$oa(=bUp0nQ4EUB+m8GhOGDbeIUVA z*CQfNXFfu`OmQv%m+lTZ=+ZcFqfH@xQ9`KYF$-?i$j2_~C~) zd+f0X*xH^~0Dd!Iz<}tAtopU%o9CzGt00F5P9TejN69oaw`ir_dTEkYyug z7)WE{AxQ(^I00ypQe<{-|3Alk6a7A?s{t&f{%k%paoT5bR3$!Xm;$5=z{a0KW3dEBomKhcOc? zp)@{NJo5^5%npp$$+2OxHn1C&0|~b^7ykO!zit7mK=c++22?K(7(mU;DV>z-(REv) zaFtb7LB%uazcp}dw%KL?B)T9o3tF7i{y0vGu@dUO+m!&8M7gLwaCqQ=2VTnmQExPoBR0`ynE`c<>{-g{%+LT81qagSlDC+$2FGbg6aR!G}--+hVRKv!>p zX>ExmmS`+|$Nu}pFMeSXbe3FBt3{+l50|xZ>d%H<31EHfiugD)RRnn1a*`2?TS}WH8hx zgelY@00F5)Vn%g>+%mA3IEm{b@&c8~4E$_vQt)n`gQUzo=-=>9fCb4l?DW9&m|ENu zr-kHg2AxDuESWC-ab!Ujly@*fmS-6jc5Eg~w1u0yveM7P4?lb+9~gbJo^L`ru|5Cr zhd*rQo_lUcEZB;gf^frxFqOdzPo}2OJpbfgyi!aC?8L+~0{{zDH>XAkm>FPGY>wA1 zxZr}YiReA@*z5sVa(sA!%aYcR8E(~ZPTh?qjj%7KMt%=;Isrg``qQ5_%PqHDi*an; zc^~;O$M{yUE-^ulKmK@lFZ|PN++Y>Q9yoPC=6p7`c%BIZ6@v78^~$p*17>C`uLU>I zSIn*5319*03;-2%*%(}IKt>o^dF7SSD*>LjD_c1Qq+`?_tXHkny5fo}8ioQ;2D{Eb zJ7aFvs^ptVwBCB_K|KtR9t$&l-2>PIHs(dq|L(vV&YbH}WwO}{-<@y1`EV|@ z_G3{23=)_m@w*ZR19n0ZA-5%f=I82|9QWD(*)^sj`E;9@JjZdTx+0klY(myeUCDz5 zpr6H=8%ak^#p#LKmbD=@#rnx~0WIE(5lX!4rbbRiO*&vEP3C0gO(W6`i6= z{IQRhKCdg)Bz^4i>d?qQc4{6J$T0>A0BREM_+VX4`kfG!C*D`W{79lPb;5rm2FCtb zi|SD+wZ_=fuH71{L!jOJNr4kuDZLU>hdB_^R|jGp@O9NDp9D-OGjKpTXdJ^1Ng=CS!qPh~&N;?BXI36&Eh>i%ct@=34AlG@{4`BM0WkhB=a;=&H=f=nov`V*n zlV*^f`xpSL#3b8)QOaas!JZnwt&`IHI>S;79!TvRBL!nbL0vOHvKdUw-)nJL$N@aV z_%HVAsP1GcQ89lxde6MOku)E9lfK^5t(#PvOHBC>Dnsf$@{yFNO>3^Xrs=ZdDf!lg zE3gz@8-ogF&vn;b7YP_^5dbZ@AblhUCP|)S7>o@ZHP8326eCtLQ)Vg>?_;vvrSPU{ zx)#8cAY|YQ0!2v(F|`R52@IQHavZNS;Hp?C@nAfgs&$ZEi`I;OT=rSM5qc?>H=c(c zjlG$QcwY|Oym`qOvTX6zmOX%P7$*i;SuAN7v5#}u$8qjskP(06nY9G9JQh38 zT=anpkmr$-&cD_5g}XH%7n>2FQi!Zn0)YV}?*}aGWOB?JIyI)vSiJ{t6doXsqq99# zUu?n=8jD43_0?Ag!|a|?Ii^zoVgR5ICNTQju0{$C$W=2_jq8yXOJYSjrHzUQ_-j1_(!GAGP9^TUzHj&1! zXfU5M@|Z}MC9-XM3z)|d0g%U6ABK11Q-&m$TzIv(FPe9V;OH=t4?hRsncf>Fa9&kD zkxP7{-3Zy?m+R>(n}BmHgItX&%xAs*54NB>nFJenZ3<)nf&LnWrBd~PS{^bcRHSaK zTj=PS?wdWQMzT4dMsY}PxkK;xe4hcZobW4-)aJ-tt;}GC&Bg00Wnb#(o2z@Rx!SGnLOx40Tg5Vd+`)8D>RJkXH$j0FRapLnk^z@}o9-^t`DZ0r> zS{U$5Pqg!KLNMs$FEP*zcoE3B6bWYMotYpLzr*ucHUNut3o93F!Tip+G7Y$?g|1$) zAaf7W411B%hf4pSsV~;(*ieHoI*?x9BKax}5Feb7!r$TB0GEhOa-EnY@Ltp+ zAC^PQCT1kt8O6w)4SW}Z9HCe;<7C z!5B1J@02nvAi1P~lCFZ+2m=a11xykmJgH(w&|WLCTMf-Ew%7u7i^;_MqPa0@1Kwbf z^{*y?A({8@>Fb-Y_@Jb|V>Ih!yg1F!W6()W0YDb{;RE7KAD(BPd78QAnu|ST7Z)G^ z#pys`8_)FEjv<6FTlhR-z5u+m1YV}!XX!b%kL(E+!8hEb42-_Nf|@XB1_=^((y6en zQ7QMRT7KU!8QutX!j}<-ypsX)irpC_1yyZ{#`M*1%*thXNnk6UEbasQO@~jG5{SQR z6>Kx>74JjRe@l~SnZ69y7!>~s*uktllj|l!L_g`CHyasDlEkw?&T@i_DvB*N zXRbcTH73tzo_Pim+^R|zgPhpQOHmnF%1QQ(u@5w>diSU*3oP0*xo;|((oX`?txmFz zJgv0$Z*J7@Twy)7Yzdtb8z@=gvg@)2aA6Y<$&>ZX$r-LuKkla)eM@kjM?M^DM@9f- z=WAskvIxhFtVZ6NWd??8(urURcMnStTx{}&XkIM*tHR`4nBhrrGFrxuGfz%UK#MDz z)fV=M&y4Sh6UFb-pnfn{0v%-e)43^f<7?uRHzW~`>Ee^sAcA@|n=H&VdYJq-WY^VL zf}Qu3>xRnCy=2d)eN*i5Y~J z%PyPP_^PRttMz4B-e!}eKRZp%kajOG9TIrovwq=Tl(lIO$_Tk=j9OVD+t&aT$#)GK zqb^>GtEv_prQLShZR2Fm9?&UvO-_v&q!Z7tG87w#jPIc1z4V+x!u;zb=|8FVoT%G# zVq>)SST5LSq=h`FZ#YNC`|G}~WJFp4134R(G#U_svNTbl_9V$?h zi~2%P!Bi^uu%iO-Mply8O2OwfVJiZp(=h-m^Z5KeizvaVK@h^#sjazfC-pC-)L|ITa_5+30Zve!Y_!hBQ6XG(3G<~^ip(_b- zXOX2b)`<%C)zqQbc|SQa0P(-SujDPtqC&IfWl4p(T54gh@kL4JONoR($g`9F`Rcpq z=cj-3o8RoZ^%6ga_^*$Dn~y9cj+IEOZ?$!kIPd?@0suX)9iJM|DUT!$T3)Rqdvjq* zm3mwZ-I?*R?=Hv|V-=dT>35`YIgTqaUcOOv0w5YDs3=gy#Ps)P_^3n{E zBxe*PlcZ}|l%~S`P15bmy_EE~I+QO`u^7X~s<6tp>iuFb3QAvH7<;7v`>~JBGUc7Y z6R9RfIg?l;plUqNuTGkU;FQ+(&)$;-2iD32mmCpUu%VSNJQ;r63o+>HLV}ZViTW`K zZ(H?dn9iJ%98Vpg&6^!s8nA+Feo8hFSZ9+b ztJhphP^+iD<^guuGfI=dvz?FRXj!Kh!jlgJacbsS8+Vz35ALlbwC_uB8scoJ_7bc+ z&x%wWAbv0p)+)8dm74N`ePrOJDb__yx25#RW|)2U*@>RC;JU~kYb&@!N)h$u*s|x0 zuV>0g^*svI|5v2jsiY6z$g>h(w?8)9_`rV&uyf2Y$F%bC4$zCOT@LON=yBB8i^t=!T27WR8oAV8-vDd1*hI5o3RBY)}t1>Ax`%L;e|!_nAor+^m$O z*{>%Kz*;bBMh)&&yeyOtCQj)?ISh8;gOY;c^Go=8)eS_pua)hMo${%lMIIjBSJSaQ zKuZ`(i@+|021inD#n8^0&_y{EZ@nIT+=U$1`e$oL9zIcgKxW0$7}!_^UBDZoM6mu9 z3GgU7SV;I9pXJ&!a$ENy$Ls5v`VlZ0W=2*(D}6`opLw0$!#*$p0TOdaNF4&@3zIK% zocQukdrgcKx0Tn!d?guS=rJW#K#A9LYev0XC{vW>-=_SpLxnwl*Yw*MrdyJ#vwJdL z7Xcmb&(t_^DYzTyM{SJLl%dPrO4&Z{JC7T;^H z-JqJ#U#ira-opt(nQ&Ed8u*soAFqiMBd+!hA0*`ksg@K~j=?J9lQfP!=0z+o)vwHA zywfG%@%4)AcH+g;2%%1~?@scm;yZlm?T`yEym0ynf$wLPSazPXNYO0w?*kdaS1#SC z;wqn&4f=*~Z=8KOPs`UPvU9$bq+%0paK@uIlPFFdY3g*4drSe+cG-d5cH52WI~ZcP z$4{tQ47a^MUSI7WVYQoGH2yg9j5WCE1o=%ym@hp}-62r&JGM{X@z=pl(s} zfm)R_%`_8v!~nP?c}FUfxfna?$L95UP~VkenJj(VYs^M+T`=5a;YG0~^)MB*S#UyP znx~Rg+XkimRm6=KvB#R@Pp7 z?Y2UIR6FWnLB6cS5qqp`U=#JaSiq73E3ypMN!#L48NByC_T0$+)`L>0;gzC@=%R+ZX0Afbw zGb4xPCqKzDzzGkRWP=?C7P5+=fvv0%&7hF(N*bx?fl)LTf#XV_}??jU#9w|!t+fwWR)jK-G-`WMagdMen z@(erUyKBGG@{EzJ#z|xpNcLr03prwIZQbH1NJ2?}FX3_eiCM33S=6Ay3L-Db&_7r0 ze({9e?cT)8;`wf^_;#iaP&1mklc+h!0sz<#B>auiNvK5lV>uVeUS<(1x!_`uUfgH> z%hpXYrvs%MJ=@7jC>D9Xub?j#^bZmsCoWu8AF->`JEOD=YnH zz^fJa%)(PJR8T7mEM*3BE>1$oGlkNqgqQKNXuv4hu(M}Jc_Nc?GoT;{VMYXVOG22R z7_`W9O+`i3x>PAZGyE%MgAWBW0@*MO{zN+HTBUoXnoKPK-)8DnAa8LHeXFkZZ^!Um z089luFd~vjNS7=@6hA{vYOC^CrTBtOQ1dv|^mG4zCQrm*1;(yZkRkh$<<2noGS$4E zr4GT)=E;Fk0=6c=GZTvz6XnNFE8cjQVQ?jaBf8!)t5#YW;FrJrCB_Sk8AhUG#XN*9 zYFL8Ftkl9{)3$U@O)cUXnQB*eYSdF;egBFf!V!a`7GXSBNoOYX%HIo2T#5BWX1e$&J*@wwMNntEk)Yu}` z1jB%3`(?Z|lJuG}BV#kQ=halS=yNt9a*QVD@iIP5H?c5{QuGl3GGL#7={S`S+OM!m z+Vr}9s0~~o%_Xu;t0iIkQu&ZwbYZgYeUes+$?U0?2cWS*gVB^IrsOayj>`?oGqMR* zTc@E^5WH5NskZ1xHYW5Hp8b{#A={WL)GM0|?*rT#NvUcuT$=`N-FUA)W&z#zc3~x! zOjnFRtmgT`+o@~^fNk}&0FadGm>rvP#QppChlc~~7OMvj9_)=GvA?BnjaVCnv5XW~ zvEQ>RZSd{KWD;I;QY2}wrx%V%u+3L%2gonUmb2u(~fl&y`;=5`oFmV!;w1oJK*l+VXJtQ0XqLXSd z%DL6q*P#E&EQ>Xx{zmT1!v+P+Jrx zvX}8pBuO0%W?>C}XS}dfuEWik$Gfv`%m>rKY6MmiTd08NE3cDSx!|_ZP&6|0-6v zg}V8fUWKrH!3Vkw^Qe56D!CG)<$<5o!HNT1(k;`NEC7sf1qQRwbMRLOvfMGZ*914# z4+g-*TYJ^1Q*d3$n-u%!ud9anST$WNU$$w&eIT8G`QEN=^&LVsgYi2G4G|;p*Ya`v z?i2}FH(%xx!aPRk!C}?zx(6tR*m$xJfFb*H&N(Mu9^R1yF4xh=H)A5R!KbW<0Dl@~ zlF`?(xu160X=f8c)tiOBF*%Yl5kEANLVt{2$p>YYph$8{{$Gx>W;!^gNQ@VR*<>Ls zwco`mKKt*#KWdYa=qxa>me`i{&rj;AoDlB;K`?D<{INUJ0Qd)Tq^#SUNK91Z2738u z^T-6lyEPw-$Be@yXjqV`NYPxE85oLnuWU(KR$!4Jf)t;UMvK&l|HVGoVwF5^qm4GQ z$yv)Z^b<3Fd;OZ6L`OtPD@f)S*5V$3iK@jST0GBIW+_$iN%nP_B*)lXBQdqj zkS01Av@s5+1K{4y{awnUBSVL?5`)G&JZ4(!WI%}LQlF>+2B3HV`{;fG^JblOR<0p} zl1xNaPs1=mBgn2@Y-^o$)@kOQcV70aqiE_;Dd#DwbD`xty5JX&9y;viq<#(~iCb;7 z&W+WzW3(Tk{llcB=>OR#iC!$-aBu9-jCA=PC?o zQ3VPvpuFqvC_sL7wbgXIl;ncxCUsfhX@!|*h1!y|tQZMi9spfhkR#TG&PaKYoSPa! zP@N0`_hrT&|?F-*tvbj?CoBG>z>Bkw0`>Kl)=)wQ#-zOj=v ze{rmjWzY8{I*X$!kCX%wcc-S32A=?8O zGVQUvk^mkJ?@_3Vg8~NE0PLTa>zg@1N|BP87LY|_cG4DVrp(bYYOL1NZJUIaFDdYC zM~UyR8jxLv0lYGEhG!-xQS-aYsH%}i60rJ1YSR*d?^^7rhXm74|Ymo&v7x03LL z+Llo@Y)EWHvwjK5LW@9P7VG-KS=rEHblnWLwkp|+CiK(oEjvfKhKmciSuLx7JJN+p z&=5YF!PuPHT}IhZiV%_BuJlwXb=U2Q95RpsiN;0+VV{(og}Gk$T6L2&A^zlzY95vf7}h$yJM|=I<49K$xn~InDlpEtcb9QAP$tZw ztXUGyiBKt=$r(2tnI!{5OUeZz1=-Z##s&A8`E9TC4TCtMBaRP;FN)BJQ549uBb+Fv z%gpP-0l%;>lrc5xGQ5WH>S*)r-G(MR0c1o863k7U5of~ z-)J0^a(1bc^K3g$9;FT*Q^RcbCg7Eh;MBSL){&^xCVYMIzpDvV2vAG-l(P(460cOt zLCY`S=*ZunLTvbR83=}3%QzcQ1<&KnogT7GQDNOeF48ClC}tA_1CYdU(D*x;JdH@W_R8Ww z{lGKKj?@2-1txvVGE07(U{*A=A7+6reSh^;Lp1V}qgdOW2nSOJU=wD_-@?hB(Z)9g z-0wN(XOSTrQ#vqQb`{iD2-sF8x;7H%bJD@6{jV>RVn8O$A}p;)qaxao9!5(c;(^ZC zV6)Old)m<+w7d5;1ZTU@tPD62`w{zL8_OgaCPF)?BqDSP!{BgTI5*?DRFfee=?%`Z zvo@x`YJ8)k!f-zp)WY~1#S}41exug5NzEAboAtD7=gJM&vpYH)D7fe1%RiT2XmBIO zsvNVYOrWuJ+JKqyg2>#dL-n+Iu4eBjJ$0JAx%*gaa4p$ft(;A<(k}+zJEiZ-q#E{s zH=;iNOt8oiG(=@#HN<+Ye81V4IYUo-Mwz6~Ctr#TXDkCjO`ET%sMC;w5^%n}NsY^^3&Zt>1> zx`cZFW)PfQYuH~kZ3J2dp6iw}4Ys(r_&A)r1Sf0RqEjDrdUo=%NsjJZXTWUhXhT<# z;+0g24x`i`(B!zXOpAdg@liPWCxq*ah+9LkI^0c@vUXxt7f0QwbeN&ni9UC$Qc7r0 znI;4O)*aaK`ck-*BPxWfWOCB)S#7JKI@ZtEIyW!V+)6MVOnlV-GL42+pG|P``}h#D zBuK-rOLE+5u4cQMp}VX%VgSnSp=V)NM#ge#3{OcdTZ)trN4Zl!kX7u02gT4#sU=iK(CwV5rI9=70{V`pO61?ajRJ~{_y?uY!=>AKpD#1RUa9wT;?#^ZMo+fx zU9s={0l2;TV1K<%G8}RY8Mb5H(UxT9P=$)taKb(?2wARXzVqhc+8nOmEO1IH5beZnOsaqBzR2?F;jS=mJwF`BhLstHh(rvVQ*N`gM(`Zp>eVc*G z+I{CG5PaWLx{aPuRvq)?-w|S42dlHg)+J6q=e;kNZlimOad*B62e;02`_DRZtQ^_z zk=3ts8)-(q2Us>4DL=O(U7gE&_aFqOuPxn1epz6q@`ltCnu&Puv;zrwXklUD#?oy( z41yxFNS6LYJ=>N<>gbBnKe);@*=@WG;IN%l^H3M-_|M^dF0dZ}zesoP7#dYqFT^Iu zE;#d7IJFgVK81Sud#veh?+Mie7{oTWVBO|vgyomu*qz9-=TPTfQMz^O)~#E&Zru|5 Y4~AABS6SuISpWb407*qoM6N<$f=ci|I{*Lx literal 0 HcmV?d00001 diff --git a/n1k0-casperjs-4f105a9/docs/_static/images/casperjs-logo-small.png b/n1k0-casperjs-4f105a9/docs/_static/images/casperjs-logo-small.png new file mode 100644 index 0000000000000000000000000000000000000000..1e36b5c87978dc16496df37ea23ed564f0a7935f GIT binary patch literal 6665 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 literal 0 HcmV?d00001 diff --git a/n1k0-casperjs-4f105a9/docs/_static/images/casperjs-logo.png b/n1k0-casperjs-4f105a9/docs/_static/images/casperjs-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..421dd8ef9b2bf6822eeaf91dfb3e2f873e2e81af GIT binary patch literal 27460 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 T?PV4e00000NkvXXu0mjf#4vb9 literal 0 HcmV?d00001 diff --git a/n1k0-casperjs-4f105a9/docs/_static/images/casperjs-rounded.png b/n1k0-casperjs-4f105a9/docs/_static/images/casperjs-rounded.png new file mode 100644 index 0000000000000000000000000000000000000000..de8807ec27f2cfe600632fe3460b21e5ae7b005a GIT binary patch literal 7363 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 literal 0 HcmV?d00001 diff --git a/n1k0-casperjs-4f105a9/docs/_static/images/colorizer.png b/n1k0-casperjs-4f105a9/docs/_static/images/colorizer.png new file mode 100644 index 0000000000000000000000000000000000000000..def5b3cd28b805f2aabbf9605417f428bc7e9648 GIT binary patch literal 119414 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

NJi$c+_w+{bn@h|iZW9T~bfE#q86mZG3Mvum0(> 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 s$n;=(!1RFW0n-Df2TTu`9xy%p1TgQ!zcbtZ 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 IDOd*m55{H|$N&HU literal 0 HcmV?d00001 diff --git a/n1k0-casperjs-4f105a9/docs/_static/images/cow-test-ok.png b/n1k0-casperjs-4f105a9/docs/_static/images/cow-test-ok.png new file mode 100644 index 0000000000000000000000000000000000000000..09eaf9f7637c50666afc6a5ac5541bf5f58aa2fd GIT binary patch literal 35652 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

FaxZJ*z^3+Zh33qKbNC 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 literal 0 HcmV?d00001 diff --git a/n1k0-casperjs-4f105a9/docs/_static/images/demo.png b/n1k0-casperjs-4f105a9/docs/_static/images/demo.png new file mode 100644 index 0000000000000000000000000000000000000000..a7b544ae75189700f77e17f41a49ea0d8ad9260e GIT binary patch literal 44903 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

>f+}(=rfxslW1I!LiY^F)?{mgPa^~> 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 literal 0 HcmV?d00001 diff --git a/n1k0-casperjs-4f105a9/docs/_static/images/evaluate-diagram.png b/n1k0-casperjs-4f105a9/docs/_static/images/evaluate-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..aad59ea5cb41908f2e2e1dda028d7a07dddeba36 GIT binary patch literal 7644 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 literal 0 HcmV?d00001 diff --git a/n1k0-casperjs-4f105a9/docs/_static/images/forkme.png b/n1k0-casperjs-4f105a9/docs/_static/images/forkme.png new file mode 100644 index 0000000000000000000000000000000000000000..d48529cce187402c708e5608e40cd18fdfb1b198 GIT binary patch literal 4884 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 N^sl0IO0?`F{{#JrFwg)1 literal 0 HcmV?d00001 diff --git a/n1k0-casperjs-4f105a9/docs/_static/images/logoutput.png b/n1k0-casperjs-4f105a9/docs/_static/images/logoutput.png new file mode 100644 index 0000000000000000000000000000000000000000..2e61d816d09b4be03cd861f176b3d20c609cf57e GIT binary patch literal 37472 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 N8vspotF<3T{SW03+d}{V literal 0 HcmV?d00001 diff --git a/n1k0-casperjs-4f105a9/docs/_static/images/split-test-results.png b/n1k0-casperjs-4f105a9/docs/_static/images/split-test-results.png new file mode 100644 index 0000000000000000000000000000000000000000..ae6c108c89779f03cd746c8dfd95952a969d87b5 GIT binary patch literal 32309 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%0D3}>l7?|}h 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 XaD^T8OsgaAf8mi5lM}5F{^|ceV3ku$ literal 0 HcmV?d00001 diff --git a/n1k0-casperjs-4f105a9/docs/_static/images/zip.png b/n1k0-casperjs-4f105a9/docs/_static/images/zip.png new file mode 100644 index 0000000000000000000000000000000000000000..2099c7cfbb4c8cc385493936428623d3de957790 GIT binary patch literal 3788 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 +

diff --git a/n1k0-casperjs-4f105a9/docs/_themes/casperjs/layout.html b/n1k0-casperjs-4f105a9/docs/_themes/casperjs/layout.html new file mode 100644 index 0000000..23c6623 --- /dev/null +++ b/n1k0-casperjs-4f105a9/docs/_themes/casperjs/layout.html @@ -0,0 +1,7 @@ +{%- extends "basic/layout.html" %} +{% block extrahead %} + + + + +{% endblock extrahead %} diff --git a/n1k0-casperjs-4f105a9/docs/_themes/casperjs/localtoc.html b/n1k0-casperjs-4f105a9/docs/_themes/casperjs/localtoc.html new file mode 100644 index 0000000..ea535a6 --- /dev/null +++ b/n1k0-casperjs-4f105a9/docs/_themes/casperjs/localtoc.html @@ -0,0 +1,4 @@ +{%- if display_toc %} +

{{ _('Document Outline') }}

+ {{ toc }} +{%- endif %} diff --git a/n1k0-casperjs-4f105a9/docs/_themes/casperjs/sourcelink.html b/n1k0-casperjs-4f105a9/docs/_themes/casperjs/sourcelink.html new file mode 100644 index 0000000..223d8ab --- /dev/null +++ b/n1k0-casperjs-4f105a9/docs/_themes/casperjs/sourcelink.html @@ -0,0 +1,16 @@ +

Index

+

Thesaurus

+ +{%- if show_source and has_source and sourcename %} +

{{ _('This Page') }}

+ +{%- endif %} diff --git a/n1k0-casperjs-4f105a9/docs/_themes/casperjs/static/casperjs-dark.css b/n1k0-casperjs-4f105a9/docs/_themes/casperjs/static/casperjs-dark.css new file mode 100644 index 0000000..ebc9552 --- /dev/null +++ b/n1k0-casperjs-4f105a9/docs/_themes/casperjs/static/casperjs-dark.css @@ -0,0 +1,991 @@ +/** + * casper.css + * ~~~~~~~~~~~~~~~ + * + * CasperJS stylesheet, based on RTD one: + * + * Sphinx stylesheet -- sphinxdoc theme. Originally created by + * Armin Ronacher for Werkzeug. + * + * Customized for ReadTheDocs by Eric Pierce & Eric Holscher + * + * :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +@import url("basic.css"); + +/* PAGE LAYOUT -------------------------------------------------------------- */ + +body { + font: 100%/1.5 Asap, "ff-meta-web-pro-1", "ff-meta-web-pro-2", Arial, "Helvetica Neue", sans-serif; + text-align: center; + color: #fff; + background-color: #222; + padding: 0; + margin: 0; +} + +img { + border: 0; + max-width: 100%; +} + +.body > .admonition.note { + margin: 0 0 2em 0; +} + .body > .admonition.note .first { + display: none; + } + +div.document { + text-align: left; + background-color: #333; +} + +div.bodywrapper { + background: #111 url(images/bg.png); + border-left: 1px solid #333; + border-bottom: 1px solid #333; + margin: 0 18em 0 0; +} + +div.body { + margin: 0; + padding: 0.5em 1.3em; + min-width: 20em; +} + +div.related { + font-size: 1em; + background-color: #465158; +} + +div.documentwrapper { + float: left; + width: 100%; + background-color: #333; +} + + +/* HEADINGS --------------------------------------------------------------- */ + +h1 { + margin: 0; + padding: 0 0 0.3em 0; + font-size: 2em; + line-height: 1.15; + color: #fff; + clear: both; +} + +h2 { + margin: 2em 0 0.2em 0; + font-size: 1.35em; + padding: 0; + color: #fff; +} + .section h2 { + border-bottom: 3px solid #777; + margin-top: 2.5em + } + +h3 { + margin: 1em 0 -0.3em 0; + font-size: 1.2em; + color: #fff; +} + +div.body h1 a, div.body h2 a, div.body h3 a, div.body h4 a, div.body h5 a, div.body h6 a { + color: #fff; +} + +h1 a.anchor, h2 a.anchor, h3 a.anchor, h4 a.anchor, h5 a.anchor, h6 a.anchor { + display: none; + margin: 0 0 0 0.3em; + padding: 0 0.2em 0 0.2em; + color: #333 !important; +} + +h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, +h5:hover a.anchor, h6:hover a.anchor { + display: inline; +} + +h1 a.anchor:hover, h2 a.anchor:hover, h3 a.anchor:hover, h4 a.anchor:hover, +h5 a.anchor:hover, h6 a.anchor:hover { + color: #777; + background-color: #eee; +} + + +/* LINKS ------------------------------------------------------------------ */ + +/* Normal links get a pseudo-underline */ +a { + color: #0bc; + text-decoration: none; +} +a.reference, a.internal { + color: #abf; +} + +a.reference em, a.internal em { + font-style: normal; +} + +/* Links in sidebar, TOC, index trees and tables have no underline */ +.sphinxsidebar a, +.toctree-wrapper a, +.indextable a, +#indices-and-tables a { + color: #0bc; + text-decoration: none; + border-bottom: none; +} + +/* Most links get an underline-effect when hovered */ +a:hover, +div.toctree-wrapper a:hover, +.indextable a:hover, +#indices-and-tables a:hover { + color: #2be; + text-decoration: none; +} + +/*toctree dedicated styles*/ +div.toctree-wrapper ul { + list-style-type: none; + padding-left: 2em; +} + +div.toctree-wrapper ul ul { + margin-top: .5em; +} + +div.toctree-wrapper li { + margin-bottom: .5em; +} + div.toctree-wrapper a, .toctree-wrapper a:visited { + padding: .2em .4em; + background-color: #555; + color:#fff; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + div.toctree-wrapper a:hover { + color: #eee; + background-color: #777; + } + +/* Footer links */ +div.footer a { + color: #0bc; + text-decoration: none; + border: none; +} +div.footer a:hover { + color: #2be; + border: none; +} + +/* Permalink anchor (subtle grey with a red hover) */ +div.body a.headerlink { + color: #ccc; + font-size: 1em; + margin-left: 6px; + padding: 0 4px 0 4px; + text-decoration: none; + border: none; +} +div.body a.headerlink:hover { + color: #fff; + border: none; +} + + +/* NAVIGATION BAR --------------------------------------------------------- */ + +div.related ul { + height: 2.5em; + min-height: 2.5em; + background-color: #2c2c2c; + background-image: -moz-linear-gradient(top, #333333, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222)); + background-image: -webkit-linear-gradient(top, #333333, #222222); + background-image: -o-linear-gradient(top, #333333, #222222); + background-image: linear-gradient(to bottom, #333333, #222222); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff333333', endColorstr='#ff222222', GradientType=0); + border-bottom: 1px solid #222; + -moz-border-radius: 4px; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + *zoom: 1; +} + +div.related ul li { + margin: 0; + padding: 0.65em 0; + float: left; + display: block; + color: white; /* For the >> separators */ + font-size: 0.8em; +} + +div.related ul li.right { + float: right; + margin-right: 5px; + color: transparent; /* Hide the | separators */ +} + +/* "Breadcrumb" links in nav bar */ +div.related ul li a { + order: none; + background-color: inherit; + font-weight: bold; + margin: 6px 0 6px 4px; + line-height: 1.75em; + color: #ffffff; + padding: 0.4em 0.8em; + border: none; + border-radius: 3px; +} +/* previous / next / modules / index links look more like buttons */ +div.related ul li.right a { + margin: 0.375em 0; + background-color: #555; + text-shadow: 0 1px rgba(0, 0, 0, 0.5); + border-radius: 3px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; +} +/* All navbar links light up as buttons when hovered */ +div.related ul li a:hover { + background-color: #777; + color: #fff; + text-decoration: none; + border-radius: 3px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; +} +/* Take extra precautions for tt within links */ +a tt, +div.related ul li a tt { + background: inherit !important; + color: inherit !important; +} + +.sphinxsidebar a tt span.pre { + color: #eee; + background-color: #444; + padding: 0 .5em; + border-radius: 4px; +} + +.sphinxsidebar a:active tt span.pre { + color: #f66; +} + + +/* SIDEBAR ---------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 0; +} + +div.sphinxsidebar { + margin: 0; + margin-left: -100%; + float: right; + top: 3em; + left: 0; + padding: 0 1em; + width: 18em; + font-size: 90%; + +} + +div.sphinxsidebar img { + max-width: 12em; +} + +div.sphinxsidebar input[type="image"] { + display: inline; + float: none; + border: 0; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4, +div.sphinxsidebar p.logo { + margin: 1.2em 0 0.3em 0; + font-size: 1em; + padding: 0; + color: #fff; + font-family: Asap, Arial, "ff-meta-web-pro-1", "ff-meta-web-pro-2", "Arial", "Helvetica Neue", sans-serif; +} + +div.sphinxsidebar h3 a { + color: #fff; +} + +div.sphinxsidebar ul, +div.sphinxsidebar p { + margin-top: 0; + padding-left: 0; + line-height: 130%; + +} + +/* No bullets for nested lists, but a little extra indentation */ +div.sphinxsidebar ul ul { + list-style-type: none; + margin-left: 1.2em; + padding: 0; +} + +/* A little top/bottom padding to prevent adjacent links' borders + * from overlapping each other */ +div.sphinxsidebar ul li { + padding: 0; + margin: 2px 0; +} + +/* A little left-padding to make these align with the ULs */ +div.sphinxsidebar p.topless { + padding-left: 0 0 0 1em; +} + +/* Make these into hidden one-liners */ +div.sphinxsidebar ul li, +div.sphinxsidebar p.topless { + white-space: nowrap; + overflow: hidden; + border: 1px solid transparent; /* To prevent things jumping around on hover */ +} +/* ...which become visible when hovered */ +div.sphinxsidebar ul li:hover, +div.sphinxsidebar p.topless:hover { + background-color: #333; + overflow: visible; + + +} + +/* Search text box and "Go" button */ +#searchbox { + margin-top: 2em; + margin-bottom: 1em; + background: #666; + padding: 0.5em; + border-radius: 6px; + -moz-border-radius: 6px; + -webkit-border-radius: 6px; + margin-right: 0; +} +#searchbox h3 { + margin-top: 0; +} + +/* Make search box and button abut and have a border */ +input, +div.sphinxsidebar input { + border: 1px solid #999; + float: left; +} + +/* Search textbox */ +input[type="text"] { + margin: 0; + padding: 0 3px; + height: 20px; + width: 144px; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + -moz-border-radius-topleft: 3px; + -moz-border-radius-bottomleft: 3px; + -webkit-border-top-left-radius: 3px; + -webkit-border-bottom-left-radius: 3px; +} +/* Search button */ +input[type="submit"] { + margin: 0 0 0 -1px; /* -1px prevents a double-border with textbox */ + height: 22px; + color: #444; + background-color: #e8ecef; + padding: 1px 4px; + font-weight: bold; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; +} +input[type="submit"]:hover { + color: #000; + background-color: #ddd; +} + +div.sphinxsidebar p.searchtip { + clear: both; + padding: 0.5em 0 0 0; + color: #fff; + font-size: 0.9em; +} + +/* Sidebar links are unusual */ +div.sphinxsidebar li a, +div.sphinxsidebar p a { + color: #eee; + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border: 1px solid transparent; /* To prevent things jumping around on hover */ + padding: 0 5px 0 5px; +} +div.sphinxsidebar li a:hover, +div.sphinxsidebar p a:hover { + color: #fff; + background-color: #333; +} +div.sphinxsidebar p.logo a { + border: 0; +} + +/* Tweak any link appearing in a heading */ +div.sphinxsidebar h3 a { +} + + +/* OTHER STUFF ------------------------------------------------------------ */ + +/* labels */ +.versionmodified { + font-style: normal; +} + +.bookmarklet, .versionadded, .versionchanged { + display: inline-block; + padding: 4px 6px; + font-size: 13.536px; + font-weight: bold; + line-height: 14px; + color: #ffffff; + vertical-align: baseline; + white-space: nowrap; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #999999; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + text-align: center; + font-style: normal; +} + .bookmarklet a, .versionadded a, .versionchanged a { + color: #fff; + } + +.bookmarklet { + background-color: #2d6987; +} + +.versionadded { + background-color: #468847; +} + div.admonition p.versionadded, + div.warning p.versionadded { + padding: 4px 6px; + } + +.versionchanged { + background-color: #b04040; +} + div.admonition p.versionchanged, + div.warning p.versionchanged { + padding: 4px 6px; + } + +/* Standard tags */ +cite, code, tt { + font-family: 'Source Code Pro', 'Consolas', 'Deja Vu Sans Mono', + 'Bitstream Vera Sans Mono', monospace; + font-size: 0.95em; + letter-spacing: 0.01em; +} + +tt { + color: #f66; + background-color: #444; + padding: 0 5px; + font-size: 95%; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +h1 tt, h2 tt, h3 tt, h4 tt, h5 tt { + padding: 0; + background: none; +} + +tt.descname, tt.descclassname, tt.xref { + border: 0; +} + +hr { + border-top: 1px solid #777; + border-bottom: none; + margin: 2em auto; + width: 50%; +} + + +pre, #_fontwidthtest { + font-family: 'Source Code Pro', 'Consolas', 'Deja Vu Sans Mono', + 'Bitstream Vera Sans Mono', monospace; + margin: 1em 2em; + font-size: 0.95em; + letter-spacing: 0.015em; + line-height: 120%; + padding: 0.5em; + border: 1px solid #ccc; + background-color: #eee; + border-radius: 6px; + -moz-border-radius: 6px; + -webkit-border-radius: 6px; +} + +pre a { + color: inherit; + text-decoration: underline; +} + +td.linenos pre { + margin: 1em 0em; +} + +td.code pre { + margin: 1em 0em; +} + +div.quotebar { + background-color: #f8f8f8; + max-width: 250px; + float: right; + padding: 2px 7px; + border: 1px solid #ccc; +} + +div.topic { + background-color: #333; + border: 0; + padding-bottom: .5em; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; +} + +table { + border-collapse: collapse; + margin: 0 -0.5em 0 -0.5em; +} + +table td, table th { + padding: 0.2em 0.5em 0.2em 0.5em; +} + + +/* ADMONITIONS AND WARNINGS ------------------------------------------------- */ + +/* Shared by admonitions, warnings and sidebars */ +div.admonition, +div.warning, +div.sidebar { + font-size: 0.9em; + margin: 2em; + padding: 0; + /* + border-radius: 6px; + -moz-border-radius: 6px; + -webkit-border-radius: 6px; + */ +} +div.admonition p, +div.warning p, +div.sidebar p { + margin: 0.5em 1em 0.5em 1em; + padding: 0; +} +div.admonition pre, +div.warning pre, +div.sidebar pre { + margin: 0.4em 1em 0.4em 1em; +} +div.admonition p.admonition-title, +div.warning p.admonition-title, +div.sidebar p.sidebar-title { + margin: 0; + padding: 0.1em 0 0.1em 0.5em; + color: white; + font-weight: bold; + font-size: 1.1em; + text-shadow: 0 1px rgba(0, 0, 0, 0.5); +} +div.admonition ul, div.admonition ol, +div.warning ul, div.warning ol, +div.sidebar ul, div.sidebar ol { + margin: 0.1em 0.5em 0.5em 3em; + padding: 0; +} + + +/* Admonitions and sidebars only */ +div.admonition, div.sidebar { + border: none; + background-color: #555; + color: #fff; + padding: .5em; + margin-bottom: 1em; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + +} +div.admonition p.admonition-title, +div.sidebar p.sidebar-title { + padding-bottom: .5em; + border-bottom: 1px solid #888; +} + + +/* Warnings only */ +div.warning { + background-color: #333; +} +div.warning p.admonition-title { + background-color: #b04040; + border-bottom: 1px solid #900000; + border-radius: 4px; +} + + +/* Sidebars only */ +div.sidebar { + max-width: 30%; +} + + + +div.versioninfo { + margin: 1em 0 0 0; + border: 1px solid #ccc; + background-color: #DDEAF0; + padding: 8px; + line-height: 1.3em; + font-size: 0.9em; +} + +.viewcode-back { + font-family: Asap, 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', + 'Verdana', sans-serif; +} + +div.viewcode-block:target { + background-color: #f4debf; + border-top: 1px solid #ac9; + border-bottom: 1px solid #ac9; +} + +dl { + margin: 1em 0 2.5em 0; +} + +/* Highlight target when you click an internal link */ +dt:target { + background: #ffe080; +} +/* Don't highlight whole divs */ +div.highlight { + background: transparent; +} + div.highlight pre, + div.highlight-javascript pre, + div.highlight-html pre { + background-color: #4b4b4b; + background-color: rgba(75, 75, 75, 0.5); + color: #eee; + font-size: 15px; + line-height: 21px; + white-space: pre; + overflow: auto; + border: none; + } + div.admonition pre { + background-color: #333; + } + +/* But do highlight spans (so search results can be highlighted) */ +span.highlight { + background: #111; +} + +div.highlight .c1 { + color: #999; +} +div.highlight .cp { + color: #3aC; +} + +div.highlight .s, +div.highlight .s1, +div.highlight .s2 { + color: orange; +} + +div.highlight .kc { + color: red; +} +div.highlight .k, +div.highlight .kd { + color: #3aC; +} + +div.highlight .nb { + color: #e88; +} +div.highlight .nx { + color: #fff; +} + +div.highlight .p { + color: #eee; +} + +div.footer { + color: #eeeeee; + padding: 1em 2em 1em 2em; + clear: both; + font-size: 0.8em; + text-align: center; + background-color: #222; +} + +p { + margin: 0.8em 0 0.5em 0; +} + +.section p img.math { + margin: 0; +} + + +.section p img { + margin: 1em 2em; +} + + +/* MOBILE LAYOUT -------------------------------------------------------------- */ + +@media screen and (max-width: 600px) { + + h1, h2, h3, h4, h5 { + position: relative; + } + + ul { + padding-left: 1.25em; + } + + div.bodywrapper a.headerlink, #indices-and-tables h1 a { + color: #e6e6e6; + font-size: 80%; + float: right; + line-height: 1.8; + position: absolute; + right: -0.7em; + visibility: inherit; + } + + div.bodywrapper h1 a.headerlink, #indices-and-tables h1 a { + line-height: 1.5; + } + + pre { + font-size: 0.7em; + overflow: auto; + word-wrap: break-word; + white-space: pre-wrap; + } + + div.related ul { + height: 2.5em; + padding: 0; + text-align: left; + } + + div.related ul li { + clear: both; + color: #465158; + padding: 0.2em 0; + } + + div.related ul li:last-child { + border-bottom: 1px dotted #8ca1af; + padding-bottom: 0.4em; + margin-bottom: 1em; + width: 100%; + } + + div.related ul li a { + color: #fff; + padding-right: 0; + } + + div.related ul li a:hover { + background: inherit; + color: inherit; + } + + div.related ul li.right { + clear: none; + padding: 0.65em 0; + margin-bottom: 0.5em; + } + + div.related ul li.right a { + color: #fff; + padding-right: 0.8em; + } + + div.related ul li.right a:hover { + background-color: #8ca1af; + } + + div.body { + clear: both; + min-width: 0; + word-wrap: break-word; + } + + div.bodywrapper { + margin: 0 0 0 0; + } + + div.sphinxsidebar { + float: none; + margin: 0; + width: auto; + } + + div.sphinxsidebar input[type="text"] { + height: 2em; + line-height: 2em; + width: 70%; + } + + div.sphinxsidebar input[type="submit"] { + height: 2em; + margin-left: 0.5em; + width: 20%; + } + + div.sphinxsidebar p.searchtip { + background: inherit; + margin-bottom: 1em; + } + + div.sphinxsidebar ul li, div.sphinxsidebar p.topless { + white-space: normal; + } + + .bodywrapper img { + display: block; + margin-left: auto; + margin-right: auto; + max-width: 100%; + } + + div.documentwrapper { + float: none; + } + + div.admonition, div.warning, pre, blockquote { + margin-left: 0em; + margin-right: 0em; + } + + .body p img { + margin: 0; + } + + #searchbox { + background: transparent; + } + + .related:not(:first-child) li { + display: none; + } + + .related:not(:first-child) li.right { + display: block; + } + + div.footer { + padding: 1em; + } + + .rtd_doc_footer .rtd-badge { + float: none; + margin: 1em auto; + position: static; + } + + .rtd_doc_footer .rtd-badge.revsys-inline { + margin-right: auto; + margin-bottom: 2em; + } + + table.indextable { + display: block; + width: auto; + } + + .indextable tr { + display: block; + } + + .indextable td { + display: block; + padding: 0; + width: auto !important; + } + + .indextable td dt { + margin: 1em 0; + } + + ul.search { + margin-left: 0.25em; + } + + ul.search li div.context { + font-size: 90%; + line-height: 1.1; + margin-bottom: 1; + margin-left: 0; + } + +} + +.donate { + text-align: center; +} + +.donate .flattr { + margin-top: 1.5em; +} diff --git a/n1k0-casperjs-4f105a9/docs/_themes/casperjs/static/casperjs-light.css b/n1k0-casperjs-4f105a9/docs/_themes/casperjs/static/casperjs-light.css new file mode 100644 index 0000000..96510b8 --- /dev/null +++ b/n1k0-casperjs-4f105a9/docs/_themes/casperjs/static/casperjs-light.css @@ -0,0 +1,887 @@ +/* + * rtd.css + * ~~~~~~~~~~~~~~~ + * + * Sphinx stylesheet -- sphinxdoc theme. Originally created by + * Armin Ronacher for Werkzeug. + * + * Customized for ReadTheDocs by Eric Pierce & Eric Holscher + * + * :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* RTD colors + * light blue: #e8ecef + * medium blue: #8ca1af + * dark blue: #465158 + * dark grey: #444444 + * + * white hover: #d1d9df; + * medium blue hover: #697983; + * green highlight: #8ecc4c + * light blue (project bar): #e8ecef + */ + +@import url("basic.css"); + +/* PAGE LAYOUT -------------------------------------------------------------- */ + +body { + font: 100%/1.5 "ff-meta-web-pro-1","ff-meta-web-pro-2",Arial,"Helvetica Neue",sans-serif; + text-align: center; + color: black; + background-color: #465158; + padding: 0; + margin: 0; +} + +img { + border: 0; + max-width: 100%; +} + +div.document { + text-align: left; + background-color: #e8ecef; +} + +div.bodywrapper { + background-color: #ffffff; + border-left: 1px solid #ccc; + border-bottom: 1px solid #ccc; + margin: 0 0 0 16em; +} + +div.body { + margin: 0; + padding: 0.5em 1.3em; + min-width: 20em; +} + +div.related { + font-size: 1em; + background-color: #465158; +} + +div.documentwrapper { + float: left; + width: 100%; + background-color: #e8ecef; +} + + +/* HEADINGS --------------------------------------------------------------- */ + +h1 { + margin: 0; + padding: 0.7em 0 0.3em 0; + font-size: 1.5em; + line-height: 1.15; + color: #111; + clear: both; +} + +h2 { + margin: 2em 0 0.2em 0; + font-size: 1.35em; + padding: 0; + color: #465158; +} + +h3 { + margin: 1em 0 -0.3em 0; + font-size: 1.2em; + color: #6c818f; +} + +div.body h1 a, div.body h2 a, div.body h3 a, div.body h4 a, div.body h5 a, div.body h6 a { + color: black; +} + +h1 a.anchor, h2 a.anchor, h3 a.anchor, h4 a.anchor, h5 a.anchor, h6 a.anchor { + display: none; + margin: 0 0 0 0.3em; + padding: 0 0.2em 0 0.2em; + color: #aaa !important; +} + +h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, +h5:hover a.anchor, h6:hover a.anchor { + display: inline; +} + +h1 a.anchor:hover, h2 a.anchor:hover, h3 a.anchor:hover, h4 a.anchor:hover, +h5 a.anchor:hover, h6 a.anchor:hover { + color: #777; + background-color: #eee; +} + + +/* LINKS ------------------------------------------------------------------ */ + +/* Normal links get a pseudo-underline */ +a { + color: #444; + text-decoration: none; + border-bottom: 1px solid #ccc; +} + +/* Links in sidebar, TOC, index trees and tables have no underline */ +.sphinxsidebar a, +.toctree-wrapper a, +.indextable a, +#indices-and-tables a { + color: #444; + text-decoration: none; + border-bottom: none; +} + +/* Most links get an underline-effect when hovered */ +a:hover, +div.toctree-wrapper a:hover, +.indextable a:hover, +#indices-and-tables a:hover { + color: #111; + text-decoration: none; + border-bottom: 1px solid #111; +} + +/* Footer links */ +div.footer a { + color: #86989B; + text-decoration: none; + border: none; +} +div.footer a:hover { + color: #a6b8bb; + text-decoration: underline; + border: none; +} + +/* Permalink anchor (subtle grey with a red hover) */ +div.body a.headerlink { + color: #ccc; + font-size: 1em; + margin-left: 6px; + padding: 0 4px 0 4px; + text-decoration: none; + border: none; +} +div.body a.headerlink:hover { + color: #c60f0f; + border: none; +} + + +/* NAVIGATION BAR --------------------------------------------------------- */ + +div.related ul { + height: 2.5em; +} + +div.related ul li { + margin: 0; + padding: 0.65em 0; + float: left; + display: block; + color: white; /* For the >> separators */ + font-size: 0.8em; +} + +div.related ul li.right { + float: right; + margin-right: 5px; + color: transparent; /* Hide the | separators */ +} + +/* "Breadcrumb" links in nav bar */ +div.related ul li a { + order: none; + background-color: inherit; + font-weight: bold; + margin: 6px 0 6px 4px; + line-height: 1.75em; + color: #ffffff; + padding: 0.4em 0.8em; + border: none; + border-radius: 3px; +} +/* previous / next / modules / index links look more like buttons */ +div.related ul li.right a { + margin: 0.375em 0; + background-color: #697983; + text-shadow: 0 1px rgba(0, 0, 0, 0.5); + border-radius: 3px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; +} +/* All navbar links light up as buttons when hovered */ +div.related ul li a:hover { + background-color: #8ca1af; + color: #ffffff; + text-decoration: none; + border-radius: 3px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; +} +/* Take extra precautions for tt within links */ +a tt, +div.related ul li a tt { + background: inherit !important; + color: inherit !important; +} + + +/* SIDEBAR ---------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 0; +} + +div.sphinxsidebar { + margin: 0; + margin-left: -100%; + float: left; + top: 3em; + left: 0; + padding: 0 1em; + width: 14em; + font-size: 1em; + text-align: left; + background-color: #e8ecef; +} + +div.sphinxsidebar img { + max-width: 12em; +} + +div.sphinxsidebar input[type="image"] { + display: inline; + float: none; + border: 0; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4, +div.sphinxsidebar p.logo { + margin: 1.2em 0 0.3em 0; + font-size: 1em; + padding: 0; + color: #222222; + font-family: "ff-meta-web-pro-1", "ff-meta-web-pro-2", "Arial", "Helvetica Neue", sans-serif; +} + +div.sphinxsidebar h3 a { + color: #444444; +} + +div.sphinxsidebar ul, +div.sphinxsidebar p { + margin-top: 0; + padding-left: 0; + line-height: 130%; + background-color: #e8ecef; +} + +/* No bullets for nested lists, but a little extra indentation */ +div.sphinxsidebar ul ul { + list-style-type: none; + margin-left: 1.5em; + padding: 0; +} + +/* A little top/bottom padding to prevent adjacent links' borders + * from overlapping each other */ +div.sphinxsidebar ul li { + padding: 1px 0; +} + +/* A little left-padding to make these align with the ULs */ +div.sphinxsidebar p.topless { + padding-left: 0 0 0 1em; +} + +/* Make these into hidden one-liners */ +div.sphinxsidebar ul li, +div.sphinxsidebar p.topless { + white-space: nowrap; + overflow: hidden; +} +/* ...which become visible when hovered */ +div.sphinxsidebar ul li:hover, +div.sphinxsidebar p.topless:hover { + overflow: visible; +} + +/* Search text box and "Go" button */ +#searchbox { + margin-top: 2em; + margin-bottom: 1em; + background: #ddd; + padding: 0.5em; + border-radius: 6px; + -moz-border-radius: 6px; + -webkit-border-radius: 6px; +} +#searchbox h3 { + margin-top: 0; +} + +/* Make search box and button abut and have a border */ +input, +div.sphinxsidebar input { + border: 1px solid #999; + float: left; +} + +/* Search textbox */ +input[type="text"] { + margin: 0; + padding: 0 3px; + height: 20px; + width: 144px; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + -moz-border-radius-topleft: 3px; + -moz-border-radius-bottomleft: 3px; + -webkit-border-top-left-radius: 3px; + -webkit-border-bottom-left-radius: 3px; +} +/* Search button */ +input[type="submit"] { + margin: 0 0 0 -1px; /* -1px prevents a double-border with textbox */ + height: 22px; + color: #444; + background-color: #e8ecef; + padding: 1px 4px; + font-weight: bold; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; +} +input[type="submit"]:hover { + color: #ffffff; + background-color: #8ecc4c; +} + +div.sphinxsidebar p.searchtip { + clear: both; + padding: 0.5em 0 0 0; + background: #ddd; + color: #666; + font-size: 0.9em; +} + +/* Sidebar links are unusual */ +div.sphinxsidebar li a, +div.sphinxsidebar p a { + background: #e8ecef; /* In case links overlap main content */ + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border: 1px solid transparent; /* To prevent things jumping around on hover */ + padding: 0 5px 0 5px; +} +div.sphinxsidebar li a:hover, +div.sphinxsidebar p a:hover { + color: #111; + text-decoration: none; + border: 1px solid #888; +} +div.sphinxsidebar p.logo a { + border: 0; +} + +/* Tweak any link appearing in a heading */ +div.sphinxsidebar h3 a { +} + + + + +/* OTHER STUFF ------------------------------------------------------------ */ + +cite, code, tt { + font-family: 'Consolas', 'Deja Vu Sans Mono', + 'Bitstream Vera Sans Mono', monospace; + font-size: 0.95em; + letter-spacing: 0.01em; +} + +tt { + background-color: #f2f2f2; + color: #444; +} + +tt.descname, tt.descclassname, tt.xref { + border: 0; +} + +hr { + border: 1px solid #abc; + margin: 2em; +} + + +pre, #_fontwidthtest { + font-family: 'Consolas', 'Deja Vu Sans Mono', + 'Bitstream Vera Sans Mono', monospace; + margin: 1em 2em; + font-size: 0.95em; + letter-spacing: 0.015em; + line-height: 120%; + padding: 0.5em; + border: 1px solid #ccc; + background-color: #eee; + border-radius: 6px; + -moz-border-radius: 6px; + -webkit-border-radius: 6px; +} + +pre a { + color: inherit; + text-decoration: underline; +} + +td.linenos pre { + margin: 1em 0em; +} + +td.code pre { + margin: 1em 0em; +} + +div.quotebar { + background-color: #f8f8f8; + max-width: 250px; + float: right; + padding: 2px 7px; + border: 1px solid #ccc; +} + +div.topic { + background-color: #f8f8f8; +} + +table { + border-collapse: collapse; + margin: 0 -0.5em 0 -0.5em; +} + +table td, table th { + padding: 0.2em 0.5em 0.2em 0.5em; +} + + +/* ADMONITIONS AND WARNINGS ------------------------------------------------- */ + +/* Shared by admonitions, warnings and sidebars */ +div.admonition, +div.warning, +div.sidebar { + font-size: 0.9em; + margin: 2em; + padding: 0; + /* + border-radius: 6px; + -moz-border-radius: 6px; + -webkit-border-radius: 6px; + */ +} +div.admonition p, +div.warning p, +div.sidebar p { + margin: 0.5em 1em 0.5em 1em; + padding: 0; +} +div.admonition pre, +div.warning pre, +div.sidebar pre { + margin: 0.4em 1em 0.4em 1em; +} +div.admonition p.admonition-title, +div.warning p.admonition-title, +div.sidebar p.sidebar-title { + margin: 0; + padding: 0.1em 0 0.1em 0.5em; + color: white; + font-weight: bold; + font-size: 1.1em; + text-shadow: 0 1px rgba(0, 0, 0, 0.5); +} +div.admonition ul, div.admonition ol, +div.warning ul, div.warning ol, +div.sidebar ul, div.sidebar ol { + margin: 0.1em 0.5em 0.5em 3em; + padding: 0; +} + + +/* Admonitions and sidebars only */ +div.admonition, div.sidebar { + border: 1px solid #609060; + background-color: #e9ffe9; +} +div.admonition p.admonition-title, +div.sidebar p.sidebar-title { + background-color: #70A070; + border-bottom: 1px solid #609060; +} + + +/* Warnings only */ +div.warning { + border: 1px solid #900000; + background-color: #ffe9e9; +} +div.warning p.admonition-title { + background-color: #b04040; + border-bottom: 1px solid #900000; +} + + +/* Sidebars only */ +div.sidebar { + max-width: 30%; +} + + + +div.versioninfo { + margin: 1em 0 0 0; + border: 1px solid #ccc; + background-color: #DDEAF0; + padding: 8px; + line-height: 1.3em; + font-size: 0.9em; +} + +.viewcode-back { + font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', + 'Verdana', sans-serif; +} + +div.viewcode-block:target { + background-color: #f4debf; + border-top: 1px solid #ac9; + border-bottom: 1px solid #ac9; +} + +dl { + margin: 1em 0 2.5em 0; +} + +/* Highlight target when you click an internal link */ +dt:target { + background: #ffe080; +} +/* Don't highlight whole divs */ +div.highlight { + background: transparent; +} +/* But do highlight spans (so search results can be highlighted) */ +span.highlight { + background: #ffe080; +} + +div.footer { + background-color: #465158; + color: #eeeeee; + padding: 0 2em 2em 2em; + clear: both; + font-size: 0.8em; + text-align: center; +} + +p { + margin: 0.8em 0 0.5em 0; +} + +.section p img.math { + margin: 0; +} + + +.section p img { + margin: 1em 2em; +} + + +/* MOBILE LAYOUT -------------------------------------------------------------- */ + +@media screen and (max-width: 600px) { + + h1, h2, h3, h4, h5 { + position: relative; + } + + ul { + padding-left: 1.25em; + } + + div.bodywrapper a.headerlink, #indices-and-tables h1 a { + color: #e6e6e6; + font-size: 80%; + float: right; + line-height: 1.8; + position: absolute; + right: -0.7em; + visibility: inherit; + } + + div.bodywrapper h1 a.headerlink, #indices-and-tables h1 a { + line-height: 1.5; + } + + pre { + font-size: 0.7em; + overflow: auto; + word-wrap: break-word; + white-space: pre-wrap; + } + + div.related ul { + height: 2.5em; + padding: 0; + text-align: left; + } + + div.related ul li { + clear: both; + color: #465158; + padding: 0.2em 0; + } + + div.related ul li:last-child { + border-bottom: 1px dotted #8ca1af; + padding-bottom: 0.4em; + margin-bottom: 1em; + width: 100%; + } + + div.related ul li a { + color: #465158; + padding-right: 0; + } + + div.related ul li a:hover { + background: inherit; + color: inherit; + } + + div.related ul li.right { + clear: none; + padding: 0.65em 0; + margin-bottom: 0.5em; + } + + div.related ul li.right a { + color: #fff; + padding-right: 0.8em; + } + + div.related ul li.right a:hover { + background-color: #8ca1af; + } + + div.body { + clear: both; + min-width: 0; + word-wrap: break-word; + } + + div.bodywrapper { + margin: 0 0 0 0; + } + + div.sphinxsidebar { + float: none; + margin: 0; + width: auto; + } + + div.sphinxsidebar input[type="text"] { + height: 2em; + line-height: 2em; + width: 70%; + } + + div.sphinxsidebar input[type="submit"] { + height: 2em; + margin-left: 0.5em; + width: 20%; + } + + div.sphinxsidebar p.searchtip { + background: inherit; + margin-bottom: 1em; + } + + div.sphinxsidebar ul li, div.sphinxsidebar p.topless { + white-space: normal; + } + + .bodywrapper img { + display: block; + margin-left: auto; + margin-right: auto; + max-width: 100%; + } + + div.documentwrapper { + float: none; + } + + div.admonition, div.warning, pre, blockquote { + margin-left: 0em; + margin-right: 0em; + } + + .body p img { + margin: 0; + } + + #searchbox { + background: transparent; + } + + .related:not(:first-child) li { + display: none; + } + + .related:not(:first-child) li.right { + display: block; + } + + div.footer { + padding: 1em; + } + + .rtd_doc_footer .rtd-badge { + float: none; + margin: 1em auto; + position: static; + } + + .rtd_doc_footer .rtd-badge.revsys-inline { + margin-right: auto; + margin-bottom: 2em; + } + + table.indextable { + display: block; + width: auto; + } + + .indextable tr { + display: block; + } + + .indextable td { + display: block; + padding: 0; + width: auto !important; + } + + .indextable td dt { + margin: 1em 0; + } + + ul.search { + margin-left: 0.25em; + } + + ul.search li div.context { + font-size: 90%; + line-height: 1.1; + margin-bottom: 1; + margin-left: 0; + } +} + +.donate { + text-align: center; +} + +.donate .flattr { + margin-top: 1.5em; +} + + +.highlight .hll { background-color: #ffffcc } +.highlight { background: #eeffcc; } +.highlight .c { color: #408090; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #007020; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #007020 } /* Comment.Preproc */ +.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #303030 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0040D0 } /* Generic.Traceback */ +.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #007020 } /* Keyword.Pseudo */ +.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #902000 } /* Keyword.Type */ +.highlight .m { color: #208050 } /* Literal.Number */ +.highlight .s { color: #4070a0 } /* Literal.String */ +.highlight .na { color: #4070a0 } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ +.highlight .no { color: #60add5 } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #007020 } /* Name.Exception */ +.highlight .nf { color: #06287e } /* Name.Function */ +.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #bb60d5 } /* Name.Variable */ +.highlight .nx { color: #111111 } /* Std */ +.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mf { color: #208050 } /* Literal.Number.Float */ +.highlight .mh { color: #208050 } /* Literal.Number.Hex */ +.highlight .mi { color: #208050 } /* Literal.Number.Integer */ +.highlight .mo { color: #208050 } /* Literal.Number.Oct */ +.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ +.highlight .sc { color: #4070a0 } /* Literal.String.Char */ +.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ +.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ +.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #c65d09 } /* Literal.String.Other */ +.highlight .sr { color: #235388 } /* Literal.String.Regex */ +.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ +.highlight .ss { color: #517918 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ +.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ +.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ +.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ + +/* https://github.com/n1k0/casperjs-docs/issues/2 */ +#casperjs-documentation img { + -webkit-filter: drop-shadow(0 1px 20px rgba(0,0,0,.5)); + -moz-filter: drop-shadow(0 1px 20px rgba(0,0,0,.5)); + -ms-filter: drop-shadow(0 1px 20px rgba(0,0,0,.5)); + -o-filter: drop-shadow(0 1px 20px rgba(0,0,0,.5)); + filter: drop-shadow(0 1px 20px rgba(0,0,0,.5)); +} diff --git a/n1k0-casperjs-4f105a9/docs/_themes/casperjs/static/style-switcher.js b/n1k0-casperjs-4f105a9/docs/_themes/casperjs/static/style-switcher.js new file mode 100644 index 0000000..1691df5 --- /dev/null +++ b/n1k0-casperjs-4f105a9/docs/_themes/casperjs/static/style-switcher.js @@ -0,0 +1,106 @@ +/** + * http://www.alistapart.com/articles/alternate/ + * + * var cookie = readCookie("style"); + * var title = cookie ? cookie : getPreferredStyleSheet(); + * setActiveStyleSheet(title); + */ +(function(exports, $) { + function setActiveStyleSheet(title) { + var i, a, main; + for (i = 0; (a = document.getElementsByTagName("link")[i]); i++) { + if (a.getAttribute("rel").indexOf("style") !== -1 && a.getAttribute("title")) { + a.disabled = true; + if (a.getAttribute("title") === title) { + a.disabled = false; + } + } + } + } + exports.setActiveStyleSheet = setActiveStyleSheet; + + function getActiveStyleSheet() { + var i, a; + for (i = 0; (a = document.getElementsByTagName("link")[i]); i++) { + if (a.getAttribute("rel").indexOf("style") !== -1 && a.getAttribute("title") && !a.disabled) { + return a.getAttribute("title"); + } + } + return null; + } + exports.getActiveStyleSheet = getActiveStyleSheet; + + function getPreferredStyleSheet() { + var i, a; + for (i = 0; (a = document.getElementsByTagName("link")[i]); i++) { + if (a.getAttribute("rel").indexOf("style") !== -1 && + a.getAttribute("rel").indexOf("alt") === -1 && + a.getAttribute("title")) { + return a.getAttribute("title"); + } + } + return null; + } + exports.getPreferredStyleSheet = getPreferredStyleSheet; + + function createCookie(name, value, days) { + var expires = ""; + if (days) { + var date = new Date(); + date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); + expires = "; expires=" + date.toGMTString(); + } + document.cookie = name + "=" + value + expires + "; path=/"; + } + + function readCookie(name) { + var nameEQ = name + "="; + var ca = document.cookie.split(';'); + for (var i = 0; i < ca.length; i++) { + var c = ca[i]; + while (c.charAt(0) === ' ') { + c = c.substring(1, c.length); + } + if (c.indexOf(nameEQ) === 0) { + return c.substring(nameEQ.length, c.length); + } + } + return null; + } + + function createSwitcher() { + var $nav = $('.related').find('ul'); + var styles = $('link').filter(function(i, link){ + return $(link).attr('rel').indexOf('style') > -1 && $(link).attr('title'); + }).map(function(i, link) { + return $(link).attr('title'); + }); + $(styles).each(function(i, style) { + var $link = $('').attr('href', '#') + .attr('title', style) + .addClass('style-switch') + .text(style); + $nav.prepend($('
  • ').addClass('right').append($link)); + }); + $('.style-switch').bind('click', function(event) { + event.preventDefault(); + setActiveStyleSheet($(this).attr('title')); + }); + } + + exports.onload = function(e) { + var cookie = readCookie("style"); + var title = cookie ? cookie : getPreferredStyleSheet(); + setActiveStyleSheet(title); + createSwitcher(); + } + + exports.onunload = function(e) { + var title = getActiveStyleSheet(); + createCookie("style", title, 365); + } + + var cookie = readCookie("style"); + var title = cookie ? cookie : getPreferredStyleSheet(); + setActiveStyleSheet(title); +})(window, window.jQuery); diff --git a/n1k0-casperjs-4f105a9/docs/_themes/casperjs/theme.conf b/n1k0-casperjs-4f105a9/docs/_themes/casperjs/theme.conf new file mode 100644 index 0000000..89e03bb --- /dev/null +++ b/n1k0-casperjs-4f105a9/docs/_themes/casperjs/theme.conf @@ -0,0 +1,2 @@ +[theme] +inherit = basic diff --git a/n1k0-casperjs-4f105a9/docs/changelog.rst b/n1k0-casperjs-4f105a9/docs/changelog.rst new file mode 100644 index 0000000..8cc6b47 --- /dev/null +++ b/n1k0-casperjs-4f105a9/docs/changelog.rst @@ -0,0 +1,4 @@ +Changelog +========= + +The CasperJS changelog is `hosted on github `_. diff --git a/n1k0-casperjs-4f105a9/docs/cli.rst b/n1k0-casperjs-4f105a9/docs/cli.rst new file mode 100644 index 0000000..fa7fc3b --- /dev/null +++ b/n1k0-casperjs-4f105a9/docs/cli.rst @@ -0,0 +1,164 @@ +.. _cli: + +.. index:: Command line, CLI, PhantomJS, Shell, arguments, options + +====================== +Using the command line +====================== + +CasperJS ships with a built-in command line parser on top of PhantomJS' one, located in the ``cli`` module; it exposes passed arguments as **positional ones** and **named options** + +But no worries for manipulating the ``cli`` module parsing API, a ``Casper`` instance always contains a ready to use ``cli`` property, allowing easy access of all these parameters. + +Let's consider this simple casper script:: + + var casper = require("casper").create(); + + casper.echo("Casper CLI passed args:"); + require("utils").dump(casper.cli.args); + + casper.echo("Casper CLI passed options:"); + require("utils").dump(casper.cli.options); + + casper.exit(); + +.. note:: + + Please note the two ``casper-path`` and ``cli`` options; these are passed to the casper script through the ``casperjs`` Python executable. + +Execution results:: + + $ casperjs test.js arg1 arg2 arg3 --foo=bar --plop anotherarg + Casper CLI passed args: [ + "arg1", + "arg2", + "arg3", + "anotherarg" + ] + Casper CLI passed options: { + "casper-path": "/Users/niko/Sites/casperjs", + "cli": true, + "foo": "bar", + "plop": true + } + +Getting, checking or dropping parameters:: + + var casper = require("casper").create(); + casper.echo(casper.cli.has(0)); + casper.echo(casper.cli.get(0)); + casper.echo(casper.cli.has(3)); + casper.echo(casper.cli.get(3)); + casper.echo(casper.cli.has("foo")); + casper.echo(casper.cli.get("foo")); + casper.cli.drop("foo"); + casper.echo(casper.cli.has("foo")); + casper.echo(casper.cli.get("foo")); + casper.exit(); + +Execution results: + +.. code-block:: text + + $ casperjs test.js arg1 arg2 arg3 --foo=bar --plop anotherarg + true + arg1 + true + anotherarg + true + bar + false + undefined + +.. hint:: + + What if you want to check if any arg or option has been passed to your script? Here you go:: + + // removing default options passed by the Python executable + casper.cli.drop("cli"); + casper.cli.drop("casper-path"); + + if (casper.cli.args.length === 0 && Object.keys(casper.cli.options).length === 0) { + casper.echo("No arg nor option passed").exit(); + } + +`casperjs` native options +------------------------- + +.. versionadded:: 1.1 + +.. index:: Logging, log levels, SlimerJS + +The `casperjs` command has three available options: + +- ``--direct``: to prints out log messages to the console +- ``--log-level=[debug|info|warning|error]`` to set the :ref:`logging level ` +- ``--engine=[phantomjs|slimerjs]`` to select the browser engine you want to use. CasperJS + supports PhantomJS (default) that runs Webkit, and SlimerJS that runs Gecko. + +.. warning:: + + .. deprecated:: 1.1 + + ``--direct`` option has been renamed to ``--verbose``, though ``--direct`` will still works, while is to be considered deprecated. + +Example: + +.. code-block:: text + + $ casperjs --verbose --log-level=debug myscript.js + +Last but not least, you can still use all PhantomJS standard CLI options as you would do with any other phantomjs script: + +.. code-block:: text + + $ casperjs --web-security=no --cookies-file=/tmp/mycookies.txt myscript.js + +.. hint:: + + To remember what the native phantomjs available cli options are, run the ``phantomjs --help`` command. + SlimerJS supports almost same options as PhantomJS. + +.. index:: Raw values + +Raw parameter values +-------------------- + +.. versionadded:: 1.0 + +By default, the cli object will process every passed argument & cast them to the appropriate detected type; example script:: + + var casper = require('casper').create(); + var utils = require('utils'); + + utils.dump(casper.cli.get('foo')); + + casper.exit(); + +If you run this script: + +.. code-block:: text + + $ casperjs c.js --foo=01234567 + 1234567 + +As you can see, the ``01234567`` value has been cast to a *Number*. + +Sometimes, you just want the original string; then you can use the ``raw`` property of the ``cli`` object, which contains the raw values passed parameters:: + + var casper = require('casper').create(); + var utils = require('utils'); + + utils.dump(casper.cli.get('foo')); + utils.dump(casper.cli.raw.get('foo')); + + casper.exit(); + +Sample usage: + +.. code-block:: text + + $ casperjs c.js --foo=01234567 + 1234567 + "01234567" + diff --git a/n1k0-casperjs-4f105a9/docs/conf.py b/n1k0-casperjs-4f105a9/docs/conf.py new file mode 100644 index 0000000..d1513dc --- /dev/null +++ b/n1k0-casperjs-4f105a9/docs/conf.py @@ -0,0 +1,259 @@ +# -*- coding: utf-8 -*- +# +# CasperJS documentation +# +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.insert(0, os.path.abspath('.')) + +from datetime import date + +# -- General configuration ----------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = ['sphinx.ext.autodoc', 'sphinx.ext.extlinks'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +highlight_language = 'javascript' + +# The suffix of source filenames. +source_suffix = '.rst' + +# Prolog +rst_prolog = None + +# The encoding of source files. +source_encoding = 'utf-8' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'CasperJS' +copyright = (u'2011-%d Nicolas Perriault and contributors. CasperJS logo by Jeremy Forveille' + % date.today().year) + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '1.1' +# The full version, including alpha/beta/rc tags. +release = '1.1.0-DEV' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build', 'README.md'] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +#pygments_style = 'default' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + + +# -- Options for HTML output --------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'casperjs' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +html_theme_path = ['_themes'] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +html_favicon = 'casperjs-favicon.ico' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +html_sidebars = { + '*': [ + 'globaltoc.html', + 'relations.html', + 'sourcelink.html', + 'searchbox.html', + 'addon.html' + ], + 'modules/*': [ + 'localtoc.html', + 'globaltoc.html', + 'relations.html', + 'sourcelink.html', + 'searchbox.html', + 'addon.html' + ], +} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'casper-docs' + + +# -- Options for LaTeX output -------------------------------------------------- + +latex_elements = { +# The paper size ('letterpaper' or 'a4paper'). +'papersize': 'letterpaper', + +# The font size ('10pt', '11pt' or '12pt'). +'pointsize': '10pt', + +# Additional stuff for the LaTeX preamble. +#'preamble': '', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass [howto/manual]). +latex_documents = [ + ('index', 'casperjs.tex', 'CasperJs Documentation', + 'Nicolas Perriault', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output -------------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'casperjs', u'casperjs documentation', [u'Nicolas Perriault'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------------ + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('index', 'CasperJS', u'CasperJS Documentation', + u'Nicolas Perriault', 'CasperJS', 'CasperJS docs.', 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + + +extlinks = { + 'issue': ('https://github.com/n1k0/casperjs/issues/%s', '#'), + 'repo': ('https://github.com/n1k0/casperjs/%s', ''), +} diff --git a/n1k0-casperjs-4f105a9/docs/credits.rst b/n1k0-casperjs-4f105a9/docs/credits.rst new file mode 100644 index 0000000..f0131d5 --- /dev/null +++ b/n1k0-casperjs-4f105a9/docs/credits.rst @@ -0,0 +1,64 @@ +Credits +======= + +Author +------ + +CasperJS is mainly developed by `Nicolas Perriault `_ on its free time. + +If you want to thank him and/or sponsor the development of CasperJS, please consider donating (see links in the sidebar). + +Contributors +------------ + +These people have contributed to CasperJS: + +- Brikou CARRE +- Thomas Parisot +- Han Yu +- Chris Lorenzo +- Victor Yap +- Rob Barreca +- Tyler Ritchie +- Nick Rabinowitz +- Pascal Borreli +- Dave Lee +- Andrew Childs +- Solomon White +- Reina Sweet +- Jan Schaumann +- Elmar Langholz +- Clochix +- Donovan Hutchinson +- Julien Moulin +- Michael Geers +- Jason Funk +- Vladimir Chizhov +- Jean-Philippe Serafin +- snkashis +- Rafael +- Andrew de Andrade +- Ben Lowery +- Chris Winters +- Christophe Benz +- Harrison Reiser +- Jan Pochyla +- Jan-Martin Fruehwacht +- Julian Gruber +- Justin Slattery +- Justine Tunney +- KaroDidi +- Leandro Boscariol +- Maisons du monde +- Marcel Duran +- Mathieu Agopian +- Mehdi Kabab +- Mikko Peltonen +- Rafael Garcia +- Raphaël Benitte +- Tim Bunce + +Logo +---- + +CasperJS logo designed by `Jeremy Forveille `_ diff --git a/n1k0-casperjs-4f105a9/docs/debugging.rst b/n1k0-casperjs-4f105a9/docs/debugging.rst new file mode 100644 index 0000000..6cbbb4f --- /dev/null +++ b/n1k0-casperjs-4f105a9/docs/debugging.rst @@ -0,0 +1,111 @@ +.. _debugging: + +.. index:: Bugs, Debugging + +========= +Debugging +========= + +.. contents:: A few tips for debugging your casper scripts: + :local: + + +Use the :index:`verbose` mode +----------------------------- + +By default & by design, a ``Casper`` instance won't print anything to the console. This can be very limitating & frustrating when creating or debugging scripts, so a good practice is to always start coding a script using these :index:`settings`:: + + var casper = require('casper').create({ + verbose: true, + logLevel: "debug" + }); + +The ``verbose`` setting will tell Casper to write every logged message at the ``logLevel`` logging level onto the standard output, so you'll be able to trace every step made. + +.. warning:: + + Output will then be pretty verbose, and will potentially display sensitive informations onto the console. **Use with care on production.** + + +Hook in the deep using :index:`events` +-------------------------------------- + +:doc:`Events ` are a very powerful features of CasperJS, and you should probably give it a look if you haven't already. + +Some interesting events you may eventually use to debug your scripts: + +- The ``http.status.XXX`` event will be emitted everytime a resource is sent with the `HTTP code `_ corresponding to ``XXX``; +- The ``remote.alert`` everytime an ``alert()`` call is performed client-side; +- ``remote.message`` everytime a message is sent to the client-side console; +- ``step.added`` everytime a step is added to the stack; +- etc… + +Listening to an event is dead easy:: + + casper.on('http.status.404', function(resource) { + this.log('Hey, this one is 404: ' + resource.url, 'warning'); + }); + +Ensure to check the :ref:`full list ` of all the other available events. + + +.. _debugging_dump: + +Dump serialized values to the console +------------------------------------- + +Sometimes it's helpful to inspect a variable, especially Object contents. The :ref:`utils_dump() ` function can achieve just that:: + + require('utils').dump({ + foo: { + bar: 42 + }, + }); + +.. note:: + + :ref:`utils_dump() ` won't be able to serialize function nor complex cyclic structures though. + + +Localize yourself in modules +---------------------------- + +.. warning:: + + .. deprecated:: 1.1 + + As of 1.1, CasperJS uses PhantomJS' builtin `require` and won't expose the `__file__` variable anymore. + +If you're creating Casper modules, a cool thing to know is that there's a special built-in variable available in every module, ``__file__``, which contains the absolute path to current javascript file (the module file). + + +Name your closures +------------------ + +Probably one of the most easy but effective best practice, always name your closures: + +**Hard to track:** + +:: + + casper.start('http://foo.bar/', function() { + this.evaluate(function() { + // ... + }); + }); + +**Easier:** + +:: + + casper.start('http://foo.bar/', function afterStart() { + this.evaluate(function evaluateStuffAfterStart() { + // ... + }); + }); + +That way, everytime one is failing, its name will be printed out in the :index:`stack trace`, **so you can more easily locate it within your code**. + +.. note:: + + This one also applies for all your other Javascript works, of course ;) diff --git a/n1k0-casperjs-4f105a9/docs/events-filters.rst b/n1k0-casperjs-4f105a9/docs/events-filters.rst new file mode 100644 index 0000000..3299fa3 --- /dev/null +++ b/n1k0-casperjs-4f105a9/docs/events-filters.rst @@ -0,0 +1,591 @@ +.. _events_filters: + +Events & filters +================ + +CasperJS provides an `event handler <#events>`_ very similar to the `nodejs `_' `one `_; actually it borrows most of its codebase. CasperJS also adds `filters <#filters>`_, which are basically ways to alter values asynchronously. + + +.. index:: ! events + +Events +------ + +Using events is pretty much straightforward if you're a node developer, or if you worked with any evented system before:: + + var casper = require('casper').create(); + + casper.on('resource.received', function(resource) { + casper.echo(resource.url); + }); + +Emitting you own events ++++++++++++++++++++++++ + +Of course you can emit your own events, using the ``Casper.emit()`` method:: + + var casper = require('casper').create(); + + // listening to a custom event + casper.on('google.loaded', function() { + this.echo('Google page title is ' + this.getTitle()); + }); + + casper.start('http://google.com/', function() { + // emitting a custom event + this.emit('google.loaded'); + }); + + casper.run(); + +.. _events_list: + +Events reference +++++++++++++++++ + +``back`` +~~~~~~~~ + +**Arguments:** ``None`` + +Emitted when the embedded browser is asked to go back a step in its history. + +``capture.saved`` +~~~~~~~~~~~~~~~~~ + +**Arguments:** ``targetFile`` + +Emitted when a :index:`screenshot` image has been captured. + +.. index:: click + +``click`` +~~~~~~~~~ + +**Arguments:** ``selector`` + +Emitted when the ``Casper.click()`` method has been called. + +``complete.error`` +~~~~~~~~~~~~~~~~~~ + +**Arguments:** ``error`` + +.. versionadded:: 1.1 + +Emitted when a complete callback has errored. + +By default, CasperJS doesn't listen to this event, you have to declare your own listeners by hand:: + + casper.on('complete.error', function(err) { + this.die("Complete callback has failed: " + err); + }); + +``die`` +~~~~~~~ + +**Arguments:** ``message, status`` + +Emitted when the ``Casper.die()`` method has been called. + +.. index:: download + +``downloaded.file`` +~~~~~~~~~~~~~~~~~~~ + +**Arguments:** ``targetPath`` + +Emitted when a file has been downloaded by :ref:`Casper.download() `; ``target`` will contain the path to the downloaded file. + +.. index:: error + +``error`` +~~~~~~~~~ + +**Arguments:** ``msg, backtrace`` + +.. versionadded:: 0.6.9 + +Emitted when an error hasn't been explicitly caught within the CasperJS/PhantomJS environment. Do basically what PhantomJS' ``onError()`` native handler does. + +.. index:: exit + +``exit`` +~~~~~~~~ + +**Arguments:** ``status`` + +Emitted when the ``Casper.exit()`` method has been called. + +.. index:: fill + +``fill`` +~~~~~~~~ + +**Arguments:** ``selector, vals, submit`` + +Emitted when a form is filled using the ``Casper.fill()`` method. + +``forward`` +~~~~~~~~~~~ + +**Arguments:** ``None`` + +Emitted when the embedded browser is asked to go forward a step in its history. + +.. index:: auth + +``http.auth`` +~~~~~~~~~~~~~ + +**Arguments:** ``username, password`` + +Emitted when http authentication parameters are set. + +.. index:: HTTP + +``http.status.[code]`` +~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments:** ``resource`` + +Emitted when any given HTTP reponse is received with the status code specified by ``[code]``, eg.:: + + casper.on('http.status.404', function(resource) { + casper.echo(resource.url + ' is 404'); + }) + +``load.started`` +~~~~~~~~~~~~~~~~ + +**Arguments:** ``None`` + +Emitted when PhantomJS' ``WebPage.onLoadStarted`` event callback is called. + +``load.failed`` +~~~~~~~~~~~~~~~ + +**Arguments:** ``Object`` + +Emitted when PhantomJS' ``WebPage.onLoadFinished`` event callback has been called and failed. + +``load.finished`` +~~~~~~~~~~~~~~~~~ + +**Arguments:** ``status`` + +Emitted when PhantomJS' ``WebPage.onLoadFinished`` event callback is called. + +.. index:: log + +``log`` +~~~~~~~ + +**Arguments:** ``entry`` + +Emitted when the ``Casper.log()`` method has been called. The ``entry`` parameter is an Object like this:: + + { + level: "debug", + space: "phantom", + message: "A message", + date: "a javascript Date instance" + } + +..index:: click + +``mouse.click`` +~~~~~~~~~~~~~~~ + +**Arguments:** ``args`` + +Emitted when the mouse left-click something or somewhere. + +``mouse.down`` +~~~~~~~~~~~~~~ + +**Arguments:** ``args`` + +Emitted when the mouse presses on something or somewhere with the left button. + +``mouse.move`` +~~~~~~~~~~~~~~ + +**Arguments:** ``args`` + +Emitted when the mouse moves onto something or somewhere. + +``mouse.up`` +~~~~~~~~~~~~ + +**Arguments:** ``args`` + +Emitted when the mouse releases the left button over something or somewhere. + +``navigation.requested`` +~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments:** ``url, navigationType, navigationLocked, isMainFrame`` + +.. versionadded:: 1.0 + +Emitted each time a navigation operation has been requested. Available navigation types are: ``LinkClicked``, ``FormSubmitted``, ``BackOrForward``, ``Reload``, ``FormResubmitted`` and ``Other``. + +.. index:: HTTP + +``open`` +~~~~~~~~ + +``location, settings`` + +Emitted when an HTTP request is sent. First callback arg is the location, second one is a request settings Object of the form:: + + { + method: "post", + data: "foo=42&chuck=norris" + } + +``page.created`` +~~~~~~~~~~~~~~~~ + +**Arguments:** ``page`` + +Emitted when PhantomJS' ``WebPage`` object used by CasperJS has been created. + +``page.error`` +~~~~~~~~~~~~~~ + +**Arguments:** ``message, trace`` + +Emitted when retrieved page leaves a Javascript error uncaught:: + + casper.on("page.error", function(msg, trace) { + this.echo("Error: " + msg, "ERROR"); + }); + +``page.initialized`` +~~~~~~~~~~~~~~~~~~~~ + +**Arguments:** ``WebPage`` + +Emitted when PhantomJS' ``WebPage`` object used by CasperJS has been initialized. + +.. index:: HTTP + +``page.resource.received`` +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments:** ``response`` + +Emitted when the HTTP response corresponding to current required url has been received. + +.. index:: HTTP + +``page.resource.requested`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments:** ``request`` + +Emitted when a new HTTP request is performed to open the required url. + +.. versionadded:: 1.1 + +**Arguments:** ``requestData, request`` + +You can also abort requests:: + + casper.on('page.resource.requested', function(requestData, request) { + if (requestData.url.indexOf('http://adserver.com') === 0) { + request.abort(); + } + }); + +``popup.created`` +~~~~~~~~~~~~~~~~~ + +**Arguments:** ``WebPage`` + +Emitted when a new window has been opened. + +``popup.loaded`` +~~~~~~~~~~~~~~~~ + +**Arguments:** ``WebPage`` + +Emitted when a new window has been loaded. + +``popup.closed`` +~~~~~~~~~~~~~~~~ + +**Arguments:** ``WebPage`` + +Emitted when a new opened window has been closed. + +``popup.created`` +~~~~~~~~~~~~~~~~~ + +**Arguments:** ``WebPage`` + +Emitted when a new window has been opened. + +``remote.alert`` +~~~~~~~~~~~~~~~~ + +**Arguments:** ``message`` + +Emitted when a remote ``alert()`` call has been performed. + +``remote.callback`` +~~~~~~~~~~~~~~~~~~~ + +**Arguments:** ``data`` + +Emitted when a remote `window.callPhantom(data) `_ call has been performed. + +``remote.message`` +~~~~~~~~~~~~~~~~~~ + +**Arguments:** ``msg`` + +Emitted when any remote console logging call has been performed. + +``resource.error`` +~~~~~~~~~~~~~~~~~~~~~ + +**Arguments:** ``resourceError`` + +Emitted when any requested resource fails to load properly. The received ``resourceError`` object has the following properties: + +- ``errorCode``: HTTP status code received +- ``url``: resource url + +``resource.received`` +~~~~~~~~~~~~~~~~~~~~~ + +**Arguments:** ``resource`` + +Emitted when any resource has been received. + +``resource.requested`` +~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments:** ``request`` + +Emitted when any resource has been requested. + +``run.complete`` +~~~~~~~~~~~~~~~~ + +**Arguments:** ``None`` + +Emitted when the whole series of steps in the stack have been executed. + +``run.start`` +~~~~~~~~~~~~~ + +**Arguments:** ``None`` + +Emitted when ``Casper.run()`` is called. + +``starting`` +~~~~~~~~~~~~ + +**Arguments:** ``None`` + +Emitted when ``Casper.start()`` is called. + +``started`` +~~~~~~~~~~~ + +**Arguments:** ``None`` + +Emitted when Casper has been started using ``Casper.start()``. + +``step.added`` +~~~~~~~~~~~~~~ + +**Arguments:** ``step`` + +Emitted when a new navigation step has been added to the stack. + +``step.complete`` +~~~~~~~~~~~~~~~~~ + +**Arguments:** ``stepResult`` + +Emitted when a navigation step has been executed. + +``step.created`` +~~~~~~~~~~~~~~~~ + +**Arguments:** ``fn`` + +Emitted when a new navigation step has been created. + +``step.error`` +~~~~~~~~~~~~~~ + +**Arguments:** ``error`` + +.. versionadded:: 1.1 + +Emitted when a step function has errored. + +By default, CasperJS doesn't listen to this event, you have to declare your own listeners by hand:: + + casper.on('step.error', function(err) { + this.die("Step has failed: " + err); + }); + +``step.start`` +~~~~~~~~~~~~~~ + +**Arguments:** ``step`` + +Emitted when a navigation step has been started. + +``step.timeout`` +~~~~~~~~~~~~~~~~ + +**Arguments:** ``[step, timeout]`` + +Emitted when a navigation step has been executed. + +``timeout`` +~~~~~~~~~~~ + +**Arguments:** ``None`` + +Emitted when the execution time of the script has reached the ``Casper.options.timeout`` value. + +``url.changed`` +~~~~~~~~~~~~~~~ + +**Arguments:** ``url`` + +.. versionadded:: 1.0 + +Emitted each time the current page url changes. + +.. index:: viewport + +``viewport.changed`` +~~~~~~~~~~~~~~~~~~~~ + +**Arguments:** ``[width, height]`` + +Emitted when the viewport has been changed. + +``wait.done`` +~~~~~~~~~~~~~ + +**Arguments:** ``None`` + +Emitted when a ``Casper.wait()``\ *operation ends.* + +``wait.start`` +~~~~~~~~~~~~~~ + +**Arguments:** ``None`` + +Emitted when a ``Casper.wait()`` operation starts. + +``waitFor.timeout`` +~~~~~~~~~~~~~~~~~~~ + +**Arguments:** ``[timeout, details]`` + +Emitted when the execution time of a ``Casper.wait*()`` operation has exceeded the value of ``timeout``. + +``deatils`` is a property bag describing what was being waited on. For example, if ``waitForSelector`` timed out, ``details`` will have a ``selector`` string property that was the selector that did not show up in time. + + +.. index:: filters + +Filters +------- + +Filters allow you to alter some values asynchronously. Sounds obscure? Let's take a simple example and imagine you would like to alter every single url opened by CasperJS to append a ``foo=42`` query string parameter:: + + var casper = require('casper').create(); + + casper.setFilter('open.location', function(location) { + return /\?+/.test(location) ? location += "&foo=42" : location += "?foo=42"; + }); + +There you have it, every single requested url will have this appended. Let me bet you'll find far more interesting use cases than my silly one ;) + +Here'a the list of all available filters with their expected return value: + +Filters reference ++++++++++++++++++ + +.. index:: screenshot + +``capture.target_filename`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Arguments:** ``args`` + +**Return type:** ``String`` + +Allows to alter the value of the filename where a screen capture should be stored. + +``echo.message`` +~~~~~~~~~~~~~~~~ + +**Arguments:** ``message`` + +**Return type:** ``String`` + +Allows to alter every message written onto stdout. + +``log.message`` +~~~~~~~~~~~~~~~ + +**Arguments:** ``message`` + +**Return type:** ``String`` + +Allows to alter every log message. + +``open.location`` +~~~~~~~~~~~~~~~~~ + +**Arguments:** ``args`` + +**Return type:** ``String`` + +Allows to alter every url before it being opened. + +``page.confirm`` +~~~~~~~~~~~~~~~~ + +**Arguments:** ``message`` + +**Return type:** ``Boolean`` + +.. versionadded:: 1.0 + +Allows to react on a javascript ``confirm()`` call:: + + casper.setFilter("page.confirm", function(msg) { + return msg === "Do you like vbscript?" ? false : true; + }); + +``page.prompt`` +~~~~~~~~~~~~~~~ + +**Arguments:** ``message, value`` + +**Return type:** ``String`` + +.. versionadded:: 1.0 + +Allows to react on a javascript ``prompt()`` call:: + + casper.setFilter("page.prompt", function(msg, value) { + if (msg === "What's your name?") { + return "Chuck"; + } + }); diff --git a/n1k0-casperjs-4f105a9/docs/extending.rst b/n1k0-casperjs-4f105a9/docs/extending.rst new file mode 100644 index 0000000..2455a68 --- /dev/null +++ b/n1k0-casperjs-4f105a9/docs/extending.rst @@ -0,0 +1,138 @@ +.. _extending: + +.. index:: extending, inheritance, prototype + +========= +Extending +========= + +Sometimes it can be convenient to add your own methods to a ``Casper`` object instance; you can easily do so as illustrated in the example below:: + + var casper = require('casper').create({ + verbose: true, + logLevel: "debug" + }); + + var links = { + 'http://edition.cnn.com/': 0, + 'http://www.nytimes.com/': 0, + 'http://www.bbc.co.uk/': 0, + 'http://www.guardian.co.uk/': 0 + }; + + casper.countLinks = function() { + return this.evaluate(function() { + return __utils__.findAll('a[href]').length; + }); + }; + + casper.renderJSON = function(what) { + return this.echo(JSON.stringify(what, null, ' ')); + }; + + casper.start(); + + casper.each(Object.keys(links), function(casper, link) { + this.thenOpen(link, function() { + links[link] = this.countLinks(); + }); + }); + + casper.run(function() { + this.renderJSON(links).exit(); + }); + +But that's just plain old *monkey-patching* the ``casper`` object, and you may probably want a more OO approach… That's where the ``inherits()`` function from the ``utils`` module and ported from `nodejs `_ comes handy:: + + var Casper = require('casper').Casper; + var utils = require('utils'); + var links = { + 'http://edition.cnn.com/': 0, + 'http://www.nytimes.com/': 0, + 'http://www.bbc.co.uk/': 0, + 'http://www.guardian.co.uk/': 0 + }; + + function Fantomas() { + Fantomas.super_.apply(this, arguments); + } + + // Let's make our Fantomas class extending the Casper one + // please note that at this point, CHILD CLASS PROTOTYPE WILL BE OVERRIDEN + utils.inherits(Fantomas, Casper); + + Fantomas.prototype.countLinks = function() { + return this.evaluate(function() { + return __utils__.findAll('a[href]').length; + }); + }; + + Fantomas.prototype.renderJSON = function(what) { + return this.echo(JSON.stringify(what, null, ' ')); + }; + + var fantomas = new Fantomas({ + verbose: true, + logLevel: "debug" + }); + + fantomas.start(); + + Object.keys(links).forEach(function(url) { + fantomas.thenOpen(url, function() { + links[url] = this.countLinks(); + }); + }); + + fantomas.run(function() { + this.renderJSON(links).exit(); + }); + +.. note:: + + The use of the ``super_`` child class property which becomes available once its parent has been defined using ``inherits()``; it contains a reference to the parent constructor. + + **Don't forget to call ``Casper``'s parent constructor!** + + Of course this approach is bit more verbose than the easy *monkey-patching* one, so please ensure you're not just overengineering stuff by subclassing the ``Casper`` class. + + +.. index:: coffeescript + +Using CoffeeScript +~~~~~~~~~~~~~~~~~~ + +If you're writing your casper scripts using `CoffeeScript `_, extending casper is getting a bit more straightforward: + +.. code-block:: coffeescript + + links = + 'http://edition.cnn.com/': 0 + 'http://www.nytimes.com/': 0 + 'http://www.bbc.co.uk/': 0 + 'http://www.guardian.co.uk/': 0 + + class Fantomas extends require('casper').Casper + countLinks: -> + @evaluate -> + __utils__.findAll('a').length + + renderJSON: (what) -> + @echo JSON.stringify what, null, ' ' + + fantomas = new Fantomas + loadImages: false + logLevel: "debug" + verbose: true + + fantomas.start() + + for url of links + do (url) -> + fantomas.thenOpen url, -> + links[url] = @countLinks() + + fantomas.run -> + @renderJSON links + @exit() + diff --git a/n1k0-casperjs-4f105a9/docs/faq.rst b/n1k0-casperjs-4f105a9/docs/faq.rst new file mode 100644 index 0000000..43c5a40 --- /dev/null +++ b/n1k0-casperjs-4f105a9/docs/faq.rst @@ -0,0 +1,360 @@ +.. _faq: + +.. index:: FAQ, Help + +=== +FAQ +=== + +.. contents:: Here's a selection of the most frequently asked questions by CasperJS newcomers: + :local: + :backlinks: top + +.. index:: Node.js + +Is CasperJS a `node.js `_ library? +------------------------------------------------------ + +**No.** CasperJS is written on top of PhantomJS_, which is a node-independent Qt_/WebKit_ based library. If you try to run your CasperJS script with node, it just won't work out of the box. + +.. hint:: If you want to drive CasperJS from node, try `SpookyJS `_. + + +.. index:: Bugs, Contributing, error + +I'm stuck! I think there's a bug! What can I do? +------------------------------------------------ + +Before rage-tweeting: + +1. Read the `docs `_ +2. Check if an `issue `_ has been open about your problem already +3. Check you're running the `latest stable tag `_ +4. Check you're running the `latest version `_ of PhantomJS_ +5. Ask on the `project mailing list `_: + + a. try to post a reproducible, minimal test case + b. compare casperjs results with native phantomjs ones + c. if the problem also occurs with native phantomjs, ask on `phantomjs mailing list `_ + +6. Eventually, `file an issue `_. + + +.. index:: Testing + +The ``casper.test`` property is undefined, I can't write any test! +------------------------------------------------------------------ + +That's because as of 1.1, the ``casper.test`` property is only set to a :doc:`Tester ` instance when using the ``casperjs test`` subcommand. + +You may want to read the :doc:`testing documentation ` for more information. + + +.. index:: Code reuse + +I keep copy and pasting stuff in my test scripts, that's boring +--------------------------------------------------------------- + +Have a look at `this gist `_, it might help. + +Also, don't forget that CasperJS supports a `CommonJS-compliant module pattern `_ implementation. + +.. note:: + + CasperJS' implementation of ``require()`` differs a bit from the one provided by PhantomJS_, but I personnaly never really encountered any functional difference. + + +.. index:: Versionning + +What is the versioning policy of CasperJS? +------------------------------------------ + +Releases will follow the `SemVer standard `_; they +will be numbered with the follow format: + +.. code-block:: text + + ..[-] + +And constructed with the following guidelines: + +- Breaking backwards compatibility bumps the major +- New additions without breaking backwards compatibility bumps the minor +- Bug fixes and misc changes bump the patch +- Unstable, special and trunk versions will have a proper identifier + + +.. index:: jQuery + +Can I use jQuery with CasperJS? +------------------------------- + +Sure, you can use `jQuery `_, as every single other javascript library on Earth. + +A first solution is to inject it into the remote DOM environment by hand using the standard ``WebPage.injectJs()`` method:: + + casper.page.injectJs('/path/to/jquery.js'); + +If you need jQuery being available everytime, you can also make it being injected in every received response by setting the ``clientScripts`` option of CasperJS:: + + var casper = require('casper').create({ + clientScripts: ["includes/jquery.min.js"] + }); + +.. note:: + + You can't *inject* scripts using the HTTP protocol, you actually have to use a relative/absolute filesystem path to the script resource. + + +.. index:: Windows, Python, Ruby + +Can I use CasperJS without using the ``casperjs`` executable? +------------------------------------------------------------- + +Yes, you can call a CasperJS script directly with the ``phantomjs`` +executable, but if you do so, you must set the ``phantom.casperPath`` +property to the path where the library root is located on your system:: + + // casperscript.js + phantom.casperPath = '/path/to/casperjs'; + phantom.injectJs(phantom.casperPath + '/bin/bootstrap.js'); + + var casper = require('casper').create(); + // ... + +You can run such a script like any other standard PhantomJS_ script:: + + $ phantomjs casperscript.js + +**If you're on Windows**, this is the way you may manage to get casper +working the most easily:: + + phantom.casperPath = 'C:\\path\\to\\your\\repo\\lib\\casperjs-0.6.X'; + phantom.injectJs(phantom.casperPath + '\\bin\\bootstrap.js'); + + var casper = require('casper').create(); + + // do stuff + + +.. index:: HTTP + +How can I catch HTTP 404 and other status codes? +------------------------------------------------ + +You can define your own `HTTP status +code `_ handlers +by using the ``httpStatusHandlers`` option of the Casper object. You can +also catch other HTTP status codes as well, as demoed below:: + + var casper = require('casper').create(); + + casper.on('http.status.404', function(resource) { + this.echo('wait, this url is 404: ' + resource.url); + }); + + casper.on('http.status.500', function(resource) { + this.echo('woops, 500 error: ' + resource.url); + }); + + casper.start('http://mywebsite/404', function() { + this.echo('We suppose this url return an HTTP 404'); + }); + + casper.thenOpen('http://mywebsite/500', function() { + this.echo('We suppose this url return an HTTP 500'); + }); + + casper.run(function() { + this.echo('Done.').exit(); + }); + +.. hint:: + + Check out all the other cool :doc:`events ` you may use as well. + + +.. index:: log, Logging + +Where does CasperJS write its logfile? +-------------------------------------- + +Nowhere. CasperJS doesn't write logs on the filesystem. You have to implement this by yourself if needed. + + +.. index:: __utils__, AJAX + +What's this mysterious ``__utils__`` object? +-------------------------------------------- + +The ``__utils__`` object is actually a :ref:`ClientUtils object ` which have been automatically injected into the page DOM and is therefore alway available. + +So everytime to perform an :ref:`evaluate() ` call, you have this instance available to perform common operation like: + +- fetching nodes using CSS3 or XPath selectors, +- retrieving information about element properties (attributes, size, bounds, etc.), +- sending AJAX requests, +- triggering DOM events + +Check out the :doc:`whole API `. You even have :ref:`a bookmarklet ` to play around with this ``__utils__`` instance right within your browser console! + +.. note:: + + You're not obliged at all to use the ``__utils__`` instance in your scripts. It's just there because it's used by CasperJS internals. + + +.. index:: Step stack, Asynchronicity + +How does ``then()`` and the step stack work? +-------------------------------------------- + +Disclaimer This entry is based on an `answer I made on Stack Overflow `_. + +The ``then()`` method basically adds a new navigation step in a stack. A step is a javascript function which can do two different things: + +1. waiting for the previous step - if any - being executed +2. waiting for a requested url and related page to load + +Let's take a simple navigation scenario:: + + var casper = require('casper').create(); + + casper.start(); + + casper.then(function step1() { + this.echo('this is step one'); + }); + + casper.then(function step2() { + this.echo('this is step two'); + }); + + casper.thenOpen('http://google.com/', function step3() { + this.echo('this is step 3 (google.com is loaded)'); + }); + +You can print out all the created steps within the stack like this:: + + require('utils').dump(casper.steps.map(function(step) { + return step.toString(); + })); + +That gives:: + + $ casperjs test-steps.js + [ + "function step1() { this.echo('this is step one'); }", + "function step2() { this.echo('this is step two'); }", + "function _step() { this.open(location, settings); }", + "function step3() { this.echo('this is step 3 (google.com is loaded)'); }" + ] + +Notice the ``_step()`` function which has been added automatically by CasperJS to load the url for us; when the url is loaded, the next step available in the stack — which is ``step3()`` — is *then* called. + +When you have defined your navigation steps, ``run()`` executes them one by one sequentially:: + + casper.run(); + +.. note:: The callback/listener stuff is an implementation of the `Promise pattern `_. + +.. _faq_web_security: + +.. index:: Web security, download, CORS + +I'm having hard times downloading files using ``download()`` +------------------------------------------------------------ + +You should try to disable `web security`. Using the ``--web-security`` command line option: + +.. code-block:: text + + $ casperjs --web-security=no myscript.js + +Within code:: + + var casper = require('casper').create({ + pageSettings: { + webSecurityEnabled: false + } + }); + +Or anytime:: + + casper.page.settings.webSecurityEnabled = false; + +Is it possible to achieve parallel browsing using CasperJS? +----------------------------------------------------------- + +`Officially no `_, but you may want to try. + + +Can I access & manipulate DOM elements directly from the CasperJS environment? +------------------------------------------------------------------------------ + +No. Like in PhantomJS, you have to use :ref:`Casper#evaluate() ` to access actual page DOM and manipulate elements. + +For example, you **can't** do this:: + + // this won't work + casper.then(function() { + var titleNode = document.querySelector('h1'); + this.echo('Title is: ' + titleNode.textContent); + titleNode.textContent = 'New title'; + this.echo('Title is now: ' + titleNode.textContent); + }); + +You have to use the :ref:`Casper#evaluate() ` method in order to communicate with the page DOM:: + + // this will + casper.then(function() { + var titleText = this.evaluate(function() { + return document.querySelector('h1').textContent; + }); + this.echo('Title is: ' + titleText); + this.evaluate(function() { + document.querySelector('h1').textContent = 'New title'; + }); + this.echo('Title is now: ' + this.evaluate(function() { + return document.querySelector('h1').textContent; + })); + }); + +Of course, it's a whole lot more verbose, but Casper provides convenient methods to ease accessing elements properties, eg. :ref:`Casper#fetchText() ` and :ref:`Casper#getElementInfo() `:: + + // this will + casper.then(function() { + this.echo('Title is: ' + this.fetchText('h1')); + this.evaluate(function() { + document.querySelector('h1').textContent = 'New title'; + }); + this.echo('Element HTML is now: ' + this.getElementInfo('h1').html); + }); + +.. _faq_test_casper_instance: + +Why can't I create a new `casper` instance in a test environment? +----------------------------------------------------------------- + +The `casperjs test` :ref:`subcommand ` is a convenient utility which bootstraps and configures a :ref:`test environment ` for you, so a preconfigured `casper` object is already available in your test script when using this command. + +As of 1.1-beta3, you're prevented to override this preconfigured instance at this practice prevents the test runner to work properly. If you try to create a new casper instance in a test script, you'll get an error and CasperJS will exit with an error message with a link pointing to the documentation. + +One may argue this is mostly related to some hostorical bad design decision, and she might be true. This behavior is not likely exist anymore in a future 2.0. + +.. _faq_javascript: + +Okay, honestly, I'm stuck with Javascript. +------------------------------------------ + +Don't worry, you're not alone. Javascript is a great language, but it's far more difficult to master than one might expect at first look. + +Here are some great resources to get started efficiently with the language: + +- Learn and practice Javascript online at `Code Academy `_ +- `Eloquent Javascript `_ +- `JavaScript Enlightenment `_ (PDF) +- last, a `great tutorial on Advanced Javascript Techniques `_ by John Resig, the author of jQuery. If you master this one, you're almost done with the language. + +.. _PhantomJS: http://phantomjs.org/ +.. _Qt: http://qt.digia.com/ +.. _WebKit: http://www.webkit.org/ diff --git a/n1k0-casperjs-4f105a9/docs/index.rst b/n1k0-casperjs-4f105a9/docs/index.rst new file mode 100644 index 0000000..334dd7f --- /dev/null +++ b/n1k0-casperjs-4f105a9/docs/index.rst @@ -0,0 +1,46 @@ +====================== +CasperJS documentation +====================== + +CasperJS_ is a navigation scripting & testing utility for the PhantomJS_ (WebKit) and SlimerJS_ (Gecko) headless browsers, written in Javascript. + +.. figure:: _static/images/casperjs-logo.png + :align: right + +.. toctree:: + :maxdepth: 2 + + installation + quickstart + cli + selectors + testing + modules/index + writing_modules + events-filters + logging + extending + debugging + faq + changelog + upgrading/index + credits + license + +You can also search the :ref:`genindex` if you're looking for something particular. + +.. index:: Community, Contributing, Help, Support + +Community +--------- + +- `get the code `_ and `contribute `_ +- join the `mailing list `_ +- check out `the ecosystem `_ +- follow `@casperjs\_org `_ on Twitter +- there's also a `Google+ account `_ (not much updated though) + + +.. _CasperJS: http://casperjs.org/ +.. _PhantomJS: http://phantomjs.org/ +.. _SlimerJS: http://slimerjs.org/ diff --git a/n1k0-casperjs-4f105a9/docs/installation.rst b/n1k0-casperjs-4f105a9/docs/installation.rst new file mode 100644 index 0000000..4766a50 --- /dev/null +++ b/n1k0-casperjs-4f105a9/docs/installation.rst @@ -0,0 +1,187 @@ +.. _installation: +.. index:: Installation + +============ +Installation +============ + +CasperJS can be installed on Mac OSX, Windows and most Linuxes. + +Prerequisites +------------- + +.. index:: PhantomJS, Python, SlimerJS + +- PhantomJS_ 1.8.1 or greater. Installation instructions can be found `here `_ +- Python_ 2.6 or greater for ``casperjs`` in the ``bin/`` directory +- .NET Framework 3.5 or greater (or Mono_ 2.10.8 or greater) for ``casperjs.exe`` in the ``bin/`` directory + +.. versionadded:: 1.1 + +- **Experimental:** as of 1.1-beta1, SlimerJS_ 0.8 or greater to run your tests against Gecko (Firefox) instead of Webkit. To see PhantomJS API compatibility of SlimerJS, please `refer to this page `_. + +.. warning:: + + .. deprecated:: 1.1 + + The `Ruby `_ version of the ``casperjs`` executable also available in the ``rubybin/`` directory has been deprecated as of 1.1-beta, and is not compatible with SlimerJS_. + + The batch version of the ``casperjs`` executable also available in the ``batchbin/`` directory has been deprecated as of 1.1-beta, and is not compatible with SlimerJS_. + +.. index:: Homebrew + +Installing from Homebrew (OSX) +------------------------------ + +Installation of both PhantomJS and CasperJS can be achieved using Homebrew_, a popular package manager for Mac OS X. + +Above all, don't forget to update Formulaes:: + + $ brew update + +For the 1.1 development version (recommended):: + + $ brew install casperjs --devel + +For the 1.0.x stable version:: + + $ brew install casperjs + +If you have already installed casperjs and want to have the last release (stable|devel), use ``upgrade``:: + + $ brew upgrade casperjs + +Upgrade only update to the latest release branch (1.0.x|1.1-dev). + +.. index:: git + +Installing from git +------------------- + +Installation can be achieved using `git `_. The code is mainly hosted on `Github `_. + +From the master branch +~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: text + + $ git clone git://github.com/n1k0/casperjs.git + $ cd casperjs + $ ln -sf `pwd`/bin/casperjs /usr/local/bin/casperjs + +Once PhantomJS and CasperJS installed on your machine, you should obtain something like this: + +.. code-block:: text + + $ phantomjs --version + 1.8.1 + $ casperjs + CasperJS version 1.1.0-DEV at /Users/niko/Sites/casperjs, using phantomjs version 1.8.1 + # ... + +Or if SlimerJS is your thing: + +.. code-block:: text + + $ slimerjs --version + Innophi SlimerJS 0.8pre, Copyright 2012-2013 Laurent Jouanneau & Innophi + $ casperjs + CasperJS version 1.1.0-DEV at /Users/niko/Sites/casperjs, using slimerjs version 0.8.0 + +You are now ready to write your :doc:`first script `! + + +Installing from an archive +-------------------------- + +You can download tagged archives of CasperJS code: + +**Latest stable version:** + +- https://github.com/n1k0/casperjs/zipball/1.0.3 (zip) +- https://github.com/n1k0/casperjs/tarball/1.0.3 (tar.gz) + +**Latest development version (master branch):** + +- https://github.com/n1k0/casperjs/zipball/master (zip) +- https://github.com/n1k0/casperjs/tarball/master (tar.gz) + +Operations are then the same as with a git checkout. + + +.. index:: Windows + +CasperJS on Windows +------------------- + +Phantomjs installation additions +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- Append ``";C:\phantomjs"`` to your ``PATH`` environment variable. +- Modify this path appropriately if you installed PhantomJS to a different location. + +Casperjs installation additions +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**CasperJS, as of 1.1-beta3, ships with a .NET application so you don't need Python nor Ruby to use it.** + +.. versionadded:: 1.1-beta3 + +- Append ``";C:\casperjs\bin"`` to your ``PATH`` environment variable. +- Modify this path appropriately if you installed CasperJS to a different location. + +You can now run any regular casper scripts that way: + +.. code-block:: text + + C:> casperjs myscript.js + +Earlier versions of CasperJS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**CasperJS, as of 1.0.0-RC3, ships with a Batch script so you don't need Python nor Ruby to use it.** + +- Append ``";C:\casperjs\batchbin"`` to your ``PATH`` environment variable. +- Modify this path appropriately if you installed CasperJS to a different location. + +You can now run any regular casper scripts that way: + +.. code-block:: text + + C:> casperjs.bat myscript.js + +**Before 1.0.0-RC3, you had to setup your casper scripts that way::** + + phantom.casperPath = 'C:\\casperjs-1.1'; + phantom.injectJs(phantom.casperPath + '\\bin\\bootstrap.js'); + + var casper = require('casper').create(); + + // do stuff + +Run the script using the ``phantom.exe`` program: + +.. code-block:: text + + C:> phantomjs.exe myscript.js + +.. note:: + + .. versionadded:: 1.1-beta1 + + Windows users will get colorized output if ansicon_ is installed. + + +.. index:: Bugs, REPL + +Known Bugs & Limitations +------------------------ + +- Due to its asynchronous nature, CasperJS doesn't work well with `PhantomJS' REPL `_. + +.. _Homebrew: http://mxcl.github.com/homebrew/ +.. _PhantomJS: http://phantomjs.org/ +.. _Python: http://python.org/ +.. _SlimerJS: http://slimerjs.org/ +.. _ansicon: https://github.com/adoxa/ansicon +.. _Mono: http://www.mono-project.com/ diff --git a/n1k0-casperjs-4f105a9/docs/license.rst b/n1k0-casperjs-4f105a9/docs/license.rst new file mode 100644 index 0000000..ab826fb --- /dev/null +++ b/n1k0-casperjs-4f105a9/docs/license.rst @@ -0,0 +1,29 @@ +.. _license: + +.. index:: Licensing + +======= +License +======= + +`CasperJS `_ is released under the terms of the +`MIT license `_. + +:: + + Copyright (c) 2011-{{year}} Nicolas Perriault + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. diff --git a/n1k0-casperjs-4f105a9/docs/logging.rst b/n1k0-casperjs-4f105a9/docs/logging.rst new file mode 100644 index 0000000..6864f32 --- /dev/null +++ b/n1k0-casperjs-4f105a9/docs/logging.rst @@ -0,0 +1,69 @@ +.. _logging: + +.. index:: Logging, log levels + +======= +Logging +======= + +CasperJS allows logging using the :ref:`casper.log() ` method and these standard event levels: + +- ``debug`` +- ``info`` +- ``warning`` +- ``error`` + +Sample use:: + + var casper = require('casper').create(); + casper.log('plop', 'debug'); + casper.log('plip', 'warning'); + +.. index:: verbose + +Now, there are two things to distinguish: log *storage* and log *display*; by default CasperJS won't print the logs to the standard output. In order to do so, you must enable the ``verbose`` Casper option:: + + var casper = require('casper').create({ + verbose: true + }); + +Also, by default Casper is configured to filter logging which is under the ``error`` level; you can override this setting by configuring the ``logLevel`` option:: + + var casper = require('casper').create({ + verbose: true, + logLevel: 'debug' + }); + +You can also dump a JSON log of your Casper suite just by rendering the contents of the ``Casper.logs`` property:: + + var casper = require('casper').create({ + // ... + casper.run(function() { + require('utils').dump(this.logs); + this.exit(); + }); + +Last, if you print log messages to the standard output using the ``verbose`` option, you'll get some fancy colors:: + + var casper = require('casper').create({ + verbose: true, + logLevel: 'debug' + }) + casper.log('this is a debug message', 'debug'); + casper.log('and an informative one', 'info'); + casper.log('and a warning', 'warning'); + casper.log('and an error', 'error'); + casper.exit(); + +This will give the following output: + +.. figure:: _static/images/logoutput.png + :align: center + :alt: image + + image + + +.. hint:: + + CasperJS doesn't write logs on the filesystem. You have to implement this by yourself if needed. diff --git a/n1k0-casperjs-4f105a9/docs/modules/casper.rst b/n1k0-casperjs-4f105a9/docs/modules/casper.rst new file mode 100644 index 0000000..bdafbf4 --- /dev/null +++ b/n1k0-casperjs-4f105a9/docs/modules/casper.rst @@ -0,0 +1,2289 @@ +.. _casper_module: + +===================== +The ``casper`` module +===================== + +.. index:: Casper + +The ``Casper`` class +++++++++++++++++++++ + +The easiest way to get a casper instance is to use the module's ``create()`` method:: + + var casper = require('casper').create(); + +But you can also retrieve the main Function and instantiate it by yourself:: + + var casper = new require('casper').Casper(); + +.. hint:: + + Also, check out :doc:`how to extend Casper with your own methods <../extending>`. + +Both the ``Casper`` constructor and the ``create()`` function accept a single ``options`` argument which is a standard javascript object:: + + var casper = require('casper').create({ + verbose: true, + logLevel: "debug" + }); + +.. _casper_options: + +.. index:: Casper options, options + +``Casper.options`` +++++++++++++++++++ + +An ``options`` object can be passed to the ``Casper`` constructor, eg.:: + + var casper = require('casper').create({ + clientScripts: [ + 'includes/jquery.js', // These two scripts will be injected in remote + 'includes/underscore.js' // DOM on every request + ], + pageSettings: { + loadImages: false, // The WebPage instance used by Casper will + loadPlugins: false // use these settings + }, + logLevel: "info", // Only "info" level messages will be logged + verbose: true // log messages will be printed out to the console + }); + +You can also alter options at runtime:: + + var casper = require('casper').create(); + casper.options.waitTimeout = 1000; + +The whole list of available options is detailed below. + +.. index:: Client scripts + +.. _casper_option_clientscripts: + +``clientScripts`` +------------------------------------------------------------------------------- + +**Type:** ``Array`` + +**Default:** ``[]`` + +A collection of script filepaths to include in every page loaded + +.. index:: exit, error + +``exitOnError`` +------------------------------------------------------------------------------- + +**Type:** ``Boolean`` + +**Default:** ``true`` + +Sets if CasperJS must exit when an uncaught error has been thrown by the script. + +.. index:: HTTP + +``httpStatusHandlers`` +------------------------------------------------------------------------------- + +**Type:** ``Object`` + +**Default:** ``{}`` + +A javascript Object containing functions to call when a requested resource has a given HTTP status code. A dedicated sample is provided as an example. + +.. index:: Logging + +``logLevel`` +------------------------------------------------------------------------------- + +**Type:** ``String`` + +**Default:** ``"error"`` + +Logging level (see the logging section for more information) + +``onAlert`` +------------------------------------------------------------------------------- + +**Type:** ``Function`` + +**Default:** ``null`` + +A function to be called when a javascript alert() is triggered + +``onDie`` +------------------------------------------------------------------------------- + +**Type:** ``Function`` + +**Default:** ``null`` + +A function to be called when Casper#die() is called + +.. index:: error, Error handling + +``onError`` +------------------------------------------------------------------------------- + +**Type:** ``Function`` + +**Default:** ``null`` + +A function to be called when an "error" level event occurs + +.. index:: error, Error handling + +``onLoadError`` +------------------------------------------------------------------------------- + +**Type:** ``Function`` + +**Default:** ``null`` + +A function to be called when a requested resource cannot be loaded + +``onPageInitialized`` +------------------------------------------------------------------------------- + +**Type:** ``Function`` + +**Default:** ``null`` + +A function to be called after ``WebPage`` instance has been initialized + +.. index:: HTTP + +``onResourceReceived`` +------------------------------------------------------------------------------- + +**Type:** ``Function`` + +**Default:** ``null`` + +Proxy method for PhantomJS' ``WebPage#onResourceReceived()`` callback, but the current Casper instance is passed as first argument. + +.. index:: HTTP + +``onResourceRequested`` +------------------------------------------------------------------------------- + +**Type:** ``Function`` + +**Default:** ``null`` + +Proxy method for PhantomJS' WebPage#onResourceRequested() callback, but the current Casper instance is passed as first argument. + +.. index:: Step stack + +``onStepComplete`` +------------------------------------------------------------------------------- + +**Type:** ``Function`` + +**Default:** ``null`` + +A function to be executed when a step function execution is finished. + +.. index:: Step stack, Error handling, timeout + +``onStepTimeout`` +------------------------------------------------------------------------------- + +**Type:** ``Function`` + +**Default:** ``Function`` + +A function to be executed when a step function execution time exceeds the value of the stepTimeout option, if any has been set. + +By default, on timeout the script will exit displaying an error, except in test environment where it will just add a failure to the suite results. + +.. index:: Error handling, timeout + +``onTimeout`` +------------------------------------------------------------------------------- + +**Type:** ``Function`` + +**Default:** ``Function`` + +A function to be executed when script execution time exceeds the value of the timeout option, if any has been set. + +By default, on timeout the script will exit displaying an error, except in test environment where it will just add a failure to the suite results. + +.. index:: Error handling, timeout + +``onWaitTimeout`` +------------------------------------------------------------------------------- + +**Type:** ``Function`` + +**Default:** ``Function`` + +A function to be executed when a ``waitFor*`` function execution time exceeds the value of the waitTimeout option, if any has been set. + +By default, on timeout the script will exit displaying an error, except in test environment where it will just add a failure to the suite results. + +``page`` +------------------------------------------------------------------------------- + +**Type:** ``WebPage`` + +**Default:** ``null`` + +An existing PhantomJS ``WebPage`` instance + +.. index:: settings, PhantomJS, SSL, auth, XSS + +``pageSettings`` +------------------------------------------------------------------------------- + +**Type:** ``Object`` + +**Default:** ``{}`` + +PhantomJS's WebPage settings object. Available settings are: + +- ``javascriptEnabled`` defines whether to execute the script in the page or not (default to ``true``) +- ``loadImages`` defines whether to load the inlined images or not +- ``loadPlugins`` defines whether to load NPAPI plugins (Flash, Silverlight, …) or not +- ``localToRemoteUrlAccessEnabled`` defines whether local resource (e.g. from file) can access remote URLs or not (default to ``false``) +- ``userAgent`` defines the user agent sent to server when the web page requests resources +- ``userName`` sets the user name used for HTTP authentication +- ``password`` sets the password used for HTTP authentication +- ``XSSAuditingEnabled`` defines whether load requests should be monitored for cross-site scripting attempts (default to ``false``) + +.. index:: Remote scripts + +``remoteScripts`` +------------------------------------------------------------------------------- + +**Type:** ``Array`` + +**Default:** ``[]`` + +.. versionadded:: 1.0 + +A collection of remote script urls to include in every page loaded + +.. index:: Logging + +``safeLogs`` +------------------------------------------------------------------------------- + +**Type:** ``Boolean`` + +**Default:** ``true`` + +.. versionadded:: 1.0 + +When this option is set to true — which is the default, any password information entered in will be obfuscated in log messages. Set safeLogs to false to disclose passwords in plain text (not recommended). + +.. index:: Step stack, timeout + +``silentErrors`` +------------------------------------------------------------------------------- + +**Type:** ``Boolean`` + +**Default:** ``false`` + +When this option is enabled, caught step errors are not thrown (though related events are still emitted). Mostly used internally in a testing context. + +.. index:: timeout + +``stepTimeout`` +------------------------------------------------------------------------------- + +**Type:** ``Number`` + +**Default:** ``null`` + +Max step timeout in milliseconds; when set, every defined step function will have to execute before this timeout value has been reached. You can define the onStepTimeout() callback to catch such a case. By default, the script will die() with an error message. + +.. index:: timeout + +``timeout`` +------------------------------------------------------------------------------- + +**Type:** ``Number`` + +**Default:** ``null`` + +Max timeout in milliseconds + +.. index:: verbose + +``verbose`` +------------------------------------------------------------------------------- + +**Type:** ``Boolean`` + +**Default:** ``false`` + +Realtime output of log messages + +.. index:: viewport + +``viewportSize`` +------------------------------------------------------------------------------- + +**Type:** ``Object`` + +**Default:** ``null`` + +Viewport size, eg. ``{width: 800, height: 600}`` + +.. note:: + + PhantomJS ships with a default viewport of 400x300, and CasperJS won't override it by default. + +.. index:: timeout + +``retryTimeout`` +------------------------------------------------------------------------------- + +**Type:** ``Number`` + +**Default:** ``100`` + +Default delay between attempts, for ``wait*`` family functions. + +``waitTimeout`` +------------------------------------------------------------------------------- + +**Type:** ``Number`` + +**Default:** ``5000`` + +Default wait timeout, for ``wait*`` family functions. + + +``Casper`` prototype +++++++++++++++++++++ + +``back()`` +------------------------------------------------------------------------------- + +**Signature:** ``back()`` + +Moves back a step in browser's history:: + + casper.start('http://foo.bar/1') + casper.thenOpen('http://foo.bar/2'); + casper.thenOpen('http://foo.bar/3'); + casper.back(); + casper.run(function() { + console.log(this.getCurrentUrl()); // 'http://foo.bar/2' + }); + +Also have a look at `forward()`_. + +.. _casper_base64encode: + +.. index:: Base64 + +``base64encode()`` +------------------------------------------------------------------------------- + +**Signature:** ``base64encode(String url [, String method, Object data])`` + +Encodes a resource using the base64 algorithm synchronously using +client-side XMLHttpRequest. + +.. note:: + + We cannot use ``window.btoa()`` because it fails miserably in the version of WebKit shipping with PhantomJS. + +Example: retrieving google logo image encoded in base64:: + + var base64logo = null; + casper.start('http://www.google.fr/', function() { + base64logo = this.base64encode('http://www.google.fr/images/srpr/logo3w.png'); + }); + + casper.run(function() { + this.echo(base64logo).exit(); + }); + +You can also perform an HTTP POST request to retrieve the contents to +encode:: + + var base64contents = null; + casper.start('http://domain.tld/download.html', function() { + base64contents = this.base64encode('http://domain.tld/', 'POST', { + param1: 'foo', + param2: 'bar' + }); + }); + + casper.run(function() { + this.echo(base64contents).exit(); + }); + +.. index:: bypass, Step stack + +``bypass()`` +------------------------------------------------------------------------------- + +**Signature:** ``bypass(Numbr nb)`` + +.. versionadded:: 1.1 + +Bypasses a given number of defined navigation steps:: + + casper.start(); + casper.then(function() { + // This step will be executed + }); + casper.then(function() { + this.bypass(2); + }); + casper.then(function() { + // This test won't be executed + }); + casper.then(function() { + // Nor this one + }); + casper.run(); + +.. _casper_click: + +.. index:: click + +``click()`` +------------------------------------------------------------------------------- + +**Signature:** ``click(String selector)`` + +Performs a click on the element matching the provided :doc:`selector expression <../selectors>`. The method tries two strategies sequentially: + +1. trying to trigger a MouseEvent in Javascript +2. using native QtWebKit event if the previous attempt failed + +Example:: + + casper.start('http://google.fr/'); + + casper.thenEvaluate(function(term) { + document.querySelector('input[name="q"]').setAttribute('value', term); + document.querySelector('form[name="f"]').submit(); + }, 'CasperJS'); + + casper.then(function() { + // Click on 1st result link + this.click('h3.r a'); + }); + + casper.then(function() { + console.log('clicked ok, new location is ' + this.getCurrentUrl()); + }); + + casper.run(); + +.. index:: click + +``clickLabel()`` +------------------------------------------------------------------------------- + +**Signature:** ``clickLabel(String label[, String tag])`` + +.. versionadded:: 0.6.1 + +Clicks on the first DOM element found containing ``label`` text. Optionaly ensures that the element node name is ``tag``:: + + // My link is beautiful + casper.then(function() { + this.clickLabel('My link is beautiful', 'a'); + }); + + // + casper.then(function() { + this.clickLabel('But my button is sexier', 'button'); + }); + +.. index:: screenshot + +``capture()`` +------------------------------------------------------------------------------- + +**Signature:** ``capture(String targetFilepath, [Object clipRect, Object imgOptions])`` + +Proxy method for PhantomJS' ``WebPage#render``. Adds a ``clipRect`` parameter for automatically setting page ``clipRect`` setting and reverts it back once done:: + + casper.start('http://www.google.fr/', function() { + this.capture('google.png', { + top: 100, + left: 100, + width: 500, + height: 400 + }); + }); + + casper.run(); + +.. versionadded:: 1.1 + +The ``imgOptions`` object allows to specify two options: + +- ``format`` to set the image format manually, avoiding relying on the filename +- ``quality`` to set the image quality, from 1 to 100 + +Example:: + + casper.start('http://foo', function() { + this.capture('foo', undefined, { + format: 'jpg', + quality: 75 + }); + }); + +.. index:: screenshot, Base64 + +``captureBase64()`` +------------------------------------------------------------------------------- + +**Signature:** ``captureBase64(String format[, Mixed area])`` + +.. versionadded:: 0.6.5 + +Computes the `Base64 `_ representation of a binary image capture of the current page, or an area within the page, in a given format. + +Supported image formats are ``bmp``, ``jpg``, ``jpeg``, ``png``, ``ppm``, ``tiff``, ``xbm`` and ``xpm``. + +The ``area`` argument can be either of the following types: + +- ``String``: area is a CSS3 selector string, eg. ``div#plop form[name="form"] input[type="submit"]`` +- ``clipRect``: area is a clipRect object, eg. ``{"top":0,"left":0,"width":320,"height":200}`` +- ``Object``: area is a :doc:`selector object <../selectors>`, eg. an XPath selector + +Example:: + + casper.start('http://google.com', function() { + // selector capture + console.log(this.captureBase64('png', '#lga')); + // clipRect capture + console.log(this.captureBase64('png', { + top: 0, + left: 0, + width: 320, + height: 200 + })); + // whole page capture + console.log(this.captureBase64('png')); + }); + + casper.run(); + +.. _casper_captureselector: + +.. index:: screenshot + +``captureSelector()`` +------------------------------------------------------------------------------- + +**Signature:** ``captureSelector(String targetFile, String selector [, Object imgOptions])`` + +Captures the page area containing the provided selector and saves it to ``targetFile``:: + + casper.start('http://www.weather.com/', function() { + this.captureSelector('weather.png', '#wx-main'); + }); + + casper.run(); + +.. versionadded:: 1.1 + +The ``imgOptions`` object allows to specify two options: + +- ``format`` to set the image format manually, avoiding relying on the target filename +- ``quality`` to set the image quality, from 1 to 100 + +``clear()`` +------------------------------------------------------------------------------- + +**Signature:** ``clear()`` + +.. versionadded:: 0.6.5 + +Clears the current page execution environment context. Useful to avoid having previously loaded DOM contents being still active. + +Think of it as a way to stop javascript execution within the remote DOM environment:: + + casper.start('http://www.google.fr/', function() { + this.clear(); // javascript execution in this page has been stopped + }); + + casper.then(function() { + // ... + }); + + casper.run(); + +.. index:: Debugging + +``debugHTML()`` +------------------------------------------------------------------------------- + +**Signature:** ``debugHTML([String selector, Boolean outer])`` + +Outputs the results of `getHTML()`_ directly to the console. It takes the same arguments as ``getHTML()``. + +.. index:: Debugging + +``debugPage()`` +------------------------------------------------------------------------------- + +**Signature:** ``debugPage()`` + +Logs the textual contents of the current page directly to the standard output, for debugging purpose:: + + casper.start('http://www.google.fr/', function() { + this.debugPage(); + }); + + casper.run(); + +``die()`` +------------------------------------------------------------------------------- + +**Signature:** ``die(String message[, int status])`` + +Exits phantom with a logged error message and an optional exit status code:: + + casper.start('http://www.google.fr/', function() { + this.die("Fail.", 1); + }); + + casper.run(); + +.. _casper_download: + +.. index:: download + +``download()`` +------------------------------------------------------------------------------- + +**Signature:** ``download(String url, String target[, String method, Object data])`` + +Saves a remote resource onto the filesystem. You can optionally set the HTTP method using the ``method`` argument, and pass request arguments through the ``data`` object (see `base64encode()`_):: + + casper.start('http://www.google.fr/', function() { + var url = 'http://www.google.fr/intl/fr/about/corporate/company/'; + this.download(url, 'google_company.html'); + }); + + casper.run(function() { + this.echo('Done.').exit(); + }); + +.. note:: + + If you have some troubles downloading files, try to :ref:`disable web security `. + +``each()`` +------------------------------------------------------------------------------- + +**Signature:** ``each(Array array, Function fn)`` + +Iterates over provided array items and execute a callback:: + + var links = [ + 'http://google.com/', + 'http://yahoo.com/', + 'http://bing.com/' + ]; + + casper.start().each(links, function(self, link) { + self.thenOpen(link, function() { + this.echo(this.getTitle()); + }); + }); + + casper.run(); + +.. hint:: + + Have a look at the `googlematch.js `_ sample script for a concrete use case. + +``eachThen()`` +------------------------------------------------------------------------------- + +**Signature:** ``eachThen(Array array, Function then)`` + +.. versionadded:: 1.1 + +Iterates over provided array items and adds a step to the stack with current data attached to it:: + + casper.start().eachThen([1, 2, 3], function(response) { + this.echo(response.data); + }).run(); + +Here's an example for opening an array of urls:: + + var casper = require('casper').create(); + var urls = ['http://google.com/', 'http://yahoo.com/']; + + casper.start().eachThen(urls, function(response) { + this.thenOpen(response.data, function(response) { + console.log('Opened', response.url); + }); + }); + + casper.run(); + +.. note:: + + Current item will be stored in the ``response.data`` property. + +.. _casper_echo: + +.. index:: echo, Printing + +``echo()`` +------------------------------------------------------------------------------- + +**Signature:** ``echo(String message[, String style])`` + +Prints something to stdout, optionally with some fancy color (see the :ref:`colorizer module ` for more information):: + + casper.start('http://www.google.fr/', function() { + this.echo('Page title is: ' + this.evaluate(function() { + return document.title; + }), 'INFO'); // Will be printed in green on the console + }); + + casper.run(); + +.. index:: evaluate, DOM + +.. _casper_evaluate: + +``evaluate()`` +------------------------------------------------------------------------------- + +**Signature:** ``evaluate(Function fn[, arg1[, arg2[, …]]])`` + +Basically `PhantomJS' WebPage#evaluate `_ equivalent. Evaluates an expression **in the current page DOM context**:: + + casper.evaluate(function(username, password) { + document.querySelector('#username').value = username; + document.querySelector('#password').value = password; + document.querySelector('#submit').click(); + }, 'sheldon.cooper', 'b4z1ng4'); + +.. note:: + + For filling and submitting forms, rather use the `fill()`_ method. + +.. warning:: + + The pre-1.0 way of passing arguments using an object has been kept for BC purpose, though it may `not work in some case `_; so you're encouraged to use the method described above. + +.. topic:: Understanding ``evaluate()`` + + The concept behind this method is probably the most difficult to understand when discovering CasperJS. As a reminder, think of the ``evaluate()`` method as a *gate* between the CasperJS environment and the one of the page you have opened; everytime you pass a closure to ``evaluate()``, you're entering the page and execute code as if you were using the browser console. + + Here's a quickly drafted diagram trying to basically explain the separation of concerns: + + .. figure:: ../_static/images/evaluate-diagram.png + :align: center + +``evaluateOrDie()`` +------------------------------------------------------------------------------- + +**Signature:** ``evaluateOrDie(Function fn[, String message])`` + +Evaluates an expression within the current page DOM and ``die()`` if it returns anything but ``true``:: + + casper.start('http://foo.bar/home', function() { + this.evaluateOrDie(function() { + return /logged in/.match(document.title); + }, 'not authenticated'); + }); + + casper.run(); + +.. index:: exit + +``exit()`` +------------------------------------------------------------------------------- + +**Signature:** ``exit([int status])`` + +Exits PhantomJS with an optional exit status code. + +.. index:: DOM + +``exists()`` +------------------------------------------------------------------------------- + +**Signature:** ``exists(String selector)`` + +Checks if any element within remote DOM matches the provided :doc:`selector <../selectors>`:: + + casper.start('http://foo.bar/home', function() { + if (this.exists('#my_super_id')) { + this.echo('found #my_super_id', 'INFO'); + } else { + this.echo('#my_super_id not found', 'ERROR'); + } + }); + + casper.run(); + +.. _casper_fetchtext: + +``fetchText()`` +------------------------------------------------------------------------------- + +**Signature:** ``fetchText(String selector)`` + +Retrieves text contents matching a given :doc:`selector expression <../selectors>`. If you provide one matching more than one element, their textual contents will be concatenated:: + + casper.start('http://google.com/search?q=foo', function() { + this.echo(this.fetchText('h3')); + }).run(); + +``forward()`` +------------------------------------------------------------------------------- + +**Signature:** ``forward()`` + +Moves a step forward in browser's history:: + + casper.start('http://foo.bar/1') + casper.thenOpen('http://foo.bar/2'); + casper.thenOpen('http://foo.bar/3'); + casper.back(); // http://foo.bar/2 + casper.back(); // http://foo.bar/1 + casper.forward(); // http://foo.bar/2 + casper.run(); + +Also have a look at `back()`_. + +.. _casper_log: + +.. index:: Logging + +``log()`` +------------------------------------------------------------------------------- + +**Signature:** ``log(String message[, String level, String space])`` + +Logs a message with an optional level in an optional space. Available levels are ``debug``, ``info``, ``warning`` and ``error``. A space is a kind of namespace you can set for filtering your logs. By default, Casper logs messages in two distinct spaces: ``phantom`` and ``remote``, to distinguish what happens in the PhantomJS environment from the remote one:: + + casper.start('http://www.google.fr/', function() { + this.log("I'm logging an error", "error"); + }); + + casper.run(); + +.. _casper_fill: + +.. index:: Form + +``fill()`` +------------------------------------------------------------------------------- + +**Signature:** ``fill(String selector, Object values[, Boolean submit])`` + +Fills the fields of a form with given values and optionally submits it. Fields +are referenced by their ``name`` attribute. + +.. versionchanged:: 1.1 To use :doc:`CSS3 or XPath selectors <../selectors>` instead, check the `fillSelectors()`_ and `fillXPath()`_ methods. + +Example with this sample html form: + +.. code-block :: html + +
    + + + Mr + Mrs + + + + Receive a copy + +
    + +A script to fill and submit this form:: + + casper.start('http://some.tld/contact.form', function() { + this.fill('form#contact-form', { + 'subject': 'I am watching you', + 'content': 'So be careful.', + 'civility': 'Mr', + 'name': 'Chuck Norris', + 'email': 'chuck@norris.com', + 'cc': true, + 'attachment': '/Users/chuck/roundhousekick.doc' + }, true); + }); + + casper.then(function() { + this.evaluateOrDie(function() { + return /message sent/.test(document.body.innerText); + }, 'sending message failed'); + }); + + casper.run(function() { + this.echo('message sent').exit(); + }); + +.. warning:: + + 1. The ``fill()`` method currently can't fill **file fields using XPath selectors**; PhantomJS natively only allows the use of CSS3 selectors in its ``uploadFile()`` method, hence this limitation. + 2. Please Don't use CasperJS nor PhantomJS to send spam, or I'll be calling the Chuck. More seriously, please just don't. + +``fillSelectors()`` +------------------------------------------------------------------------------- + +**Signature:** ``fillSelectors(String selector, Object values[, Boolean submit])`` + +.. versionadded:: 1.1 + +Fills form fields with given values and optionally submits it. Fields +are referenced by ``CSS3`` selectors:: + + casper.start('http://some.tld/contact.form', function() { + this.fillSelectors('form#contact-form', { + 'input[name="subject"]': 'I am watching you', + 'input[name="content"]': 'So be careful.', + 'input[name="civility"]': 'Mr', + 'input[name="name"]': 'Chuck Norris', + 'input[name="email"]': 'chuck@norris.com', + 'input[name="cc"]': true, + 'input[name="attachment"]': '/Users/chuck/roundhousekick.doc' + }, true); + }); + + +``fillXPath()`` +------------------------------------------------------------------------------- + +**Signature:** ``fillXPath(String selector, Object values[, Boolean submit])`` + +.. versionadded:: 1.1 + +Fills form fields with given values and optionally submits it. While the ``form`` element is always referenced by a CSS3 selector, fields are referenced by ``XPath`` selectors:: + + casper.start('http://some.tld/contact.form', function() { + this.fillXPath('form#contact-form', { + '//input[@name="subject"]': 'I am watching you', + '//input[@name="content"]': 'So be careful.', + '//input[@name="civility"]': 'Mr', + '//input[@name="name"]': 'Chuck Norris', + '//input[@name="email"]': 'chuck@norris.com', + '//input[@name="cc"]': true, + }, true); + }); + +.. warning:: + + The ``fillXPath()`` method currently can't fill **file fields using XPath selectors**; PhantomJS natively only allows the use of CSS3 selectors in its ``uploadFile()`` method, hence this limitation. + +.. index:: URL + +``getCurrentUrl()`` +------------------------------------------------------------------------------- + +**Signature:** ``getCurrentUrl()`` + +Retrieves current page URL. Note that the url will be url-decoded:: + + casper.start('http://www.google.fr/', function() { + this.echo(this.getCurrentUrl()); // "http://www.google.fr/" + }); + + casper.run(); + +.. index:: DOM + +``getElementAttribute()`` +------------------------------------------------------------------------------- + +**Signature:** ``getElementAttribute(String selector, String attribute)`` + +.. versionadded:: 1.0 + +Retrieves the value of an attribute on the first element matching the provided :doc:`selector <../selectors>`:: + + var casper = require('casper').create(); + + casper.start('http://www.google.fr/', function() { + require('utils').dump(this.getElementAttribute('div[title="Google"]', 'title')); // "Google" + }); + + casper.run(); + +.. index:: DOM + +``getElementsAttribute()`` +------------------------------------------------------------------------------- + +**Signature:** ``getElementsAttribute(String selector, String attribute)`` + +.. versionadded:: 1.1 + +Retrieves the values of an attribute on each element matching the provided :doc:`selector <../selectors>`:: + + var casper = require('casper').create(); + + casper.start('http://www.google.fr/', function() { + require('utils').dump(this.getElementsAttribute('div[title="Google"]', 'title')); // "['Google']" + }); + + casper.run(); + +.. index:: DOM + +``getElementBounds()`` +------------------------------------------------------------------------------- + +**Signature:** ``getElementBounds(String selector)`` + +Retrieves boundaries for a DOM element matching the provided :doc:`selector <../selectors>`. + +It returns an Object with four keys: ``top``, ``left``, ``width`` and ``height``, or ``null`` if the selector doesn't exist:: + + var casper = require('casper').create(); + + casper.start('http://www.google.fr/', function() { + require('utils').dump(this.getElementBounds('div[title="Google"]')); + }); + + casper.run(); + +This will output something like:: + + { + "height": 95, + "left": 352, + "top": 16, + "width": 275 + } + +.. index:: DOM + +``getElementsBounds()`` +------------------------------------------------------------------------------- + +**Signature:** ``getElementsBounds(String selector)`` + +.. versionadded:: 1.0 + +Retrieves a list of boundaries for all DOM elements matching the provided :doc:`selector <../selectors>`. + +It returns an array of objects with four keys: ``top``, ``left``, ``width`` and ``height`` (see `getElementBounds()`_). + +.. _casper_getelementinfo: + +.. index:: DOM + +``getElementInfo()`` +------------------------------------------------------------------------------- + +**Signature:** ``getElementInfo(String selector)`` + +.. versionadded:: 1.0 + +Retrieves information about the first element matching the provided :doc:`selector <../selectors>`:: + + casper.start('http://google.fr/', function() { + require('utils').dump(this.getElementInfo('#hplogo')); + }); + +Gives something like:: + + { + "attributes": { + "align": "left", + "dir": "ltr", + "id": "hplogo", + "onload": "window.lol&&lol()", + "style": "height:110px;width:276px;background:url(/images/srpr/logo1w.png) no-repeat", + "title": "Google" + }, + "height": 110, + "html": "
    France
    ", + "nodeName": "div", + "tag": "
    France
    ", + "text": "France\n", + "visible": true, + "width": 276, + "x": 62, + "y": 76 + } + +.. index:: DOM + +``getElementsInfo()`` +------------------------------------------------------------------------------- + +**Signature:** ``getElementsInfo(String selector)`` + +.. versionadded:: 1.1 + +Retrieves information about all elements matching the provided :doc:`selector <../selectors>`:: + + casper.start('http://google.fr/', function() { + require('utils').dump(this.getElementsInfo('#hplogo')); + }); + +Gives something like:: + + [ + { + "attributes": { + "align": "left", + "dir": "ltr", + "id": "hplogo", + "onload": "window.lol&&lol()", + "style": "height:110px;width:276px;background:url(/images/srpr/logo1w.png) no-repeat", + "title": "Google" + }, + "height": 110, + "html": "
    France
    ", + "nodeName": "div", + "tag": "
    France
    ", + "text": "France\n", + "visible": true, + "width": 276, + "x": 62, + "y": 76 + } + ] + +.. index:: Form + +``getFormValues()`` +------------------------------------------------------------------------------- + +**Signature:** ``getFormValues(String selector)`` + +.. versionadded:: 1.0 + +Retrieves a given form all of its field values:: + + casper.start('http://www.google.fr/', function() { + this.fill('form', {q: 'plop'}, false); + this.echo(this.getFormValues('form').q); // 'plop' + }); + + casper.run(); + +.. index:: Globals, window + +``getGlobal()`` +------------------------------------------------------------------------------- + +**Signature:** ``getGlobal(String name)`` + +Retrieves a global variable value within the remote DOM environment by its name. Basically, ``getGlobal('foo')`` will retrieve the value of ``window.foo`` from the page:: + + casper.start('http://www.google.fr/', function() { + this.echo(this.getGlobal('innerWidth')); // 1024 + }); + + casper.run(); + +.. index:: Debugging + +``getHTML()`` +------------------------------------------------------------------------------- + +**Signature:** ``getHTML([String selector, Boolean outer])`` + +.. versionadded:: 1.0 + +Retrieves HTML code from the current page. By default, it outputs the whole page HTML contents:: + + casper.start('http://www.google.fr/', function() { + this.echo(this.getHTML()); + }); + + casper.run(); + +The ``getHTML()`` method can also dump HTML contents matching a given :doc:`selector <../selectors>`; for example with this HTML code: + +.. code-block:: html + + + +

    Plop

    + + + +You can fetch those contents using:: + + casper.start('http://www.site.tld/', function() { + this.echo(this.getHTML('h1#foobar')); // => 'Plop' + }); + +The ``outer`` argument allows to retrieve the outer HTML contents of the matching element:: + + casper.start('http://www.site.tld/', function() { + this.echo(this.getHTML('h1#foobar', true)); // => '

    Plop

    ' + }); + +``getPageContent()`` +------------------------------------------------------------------------------- + +**Signature:** ``getPageContent()`` + +.. versionadded:: 1.0 + +Retrieves current page contents, dealing with exotic other content types than HTML:: + + var casper = require('casper').create(); + + casper.start().then(function() { + this.open('http://search.twitter.com/search.json?q=casperjs', { + method: 'get', + headers: { + 'Accept': 'application/json' + } + }); + }); + + casper.run(function() { + require('utils').dump(JSON.parse(this.getPageContent())); + this.exit(); + }); + +.. index:: DOM + +``getTitle()`` +------------------------------------------------------------------------------- + +**Signature:** ``getTitle()`` + +Retrieves current page title:: + + casper.start('http://www.google.fr/', function() { + this.echo(this.getTitle()); // "Google" + }); + + casper.run(); + +.. _casper_mouseevent: + +.. index:: events + +``mouseEvent()`` +------------------------------------------------------------------------------- + +**Signature:** ``mouseEvent(String type, String selector)`` + +.. versionadded:: 0.6.9 + +Triggers a mouse event on the first element found matching the provided selector. + +Supported events are ``mouseup``, ``mousedown``, ``click``, ``mousemove``, ``mouseover`` and ``mouseout``:: + + casper.start('http://www.google.fr/', function() { + this.mouseEvent('click', 'h2 a'); + }); + + casper.run(); + +.. index:: HTTP, HTTP Request, HTTP Method, HTTP Headers + +``open()`` +------------------------------------------------------------------------------- + +**Signature:** ``open(String location, Object Settings)`` + +Performs an HTTP request for opening a given location. You can forge ``GET``, ``POST``, ``PUT``, ``DELETE`` and ``HEAD`` requests. + +Example for a standard ``GET`` request:: + + casper.start(); + + casper.open('http://www.google.com/').then(function() { + this.echo('GOT it.'); + }); + + casper.run(); + +Example for a ``POST`` request:: + + casper.start(); + + casper.open('http://some.testserver.com/post.php', { + method: 'post', + data: { + 'title': 'Plop', + 'body': 'Wow.' + } + }); + + casper.then(function() { + this.echo('POSTED it.'); + }); + + casper.run(); + +To pass nested parameters arrays:: + + casper.open('http://some.testserver.com/post.php', { + method: 'post', + data: { + 'standard_param': 'foo', + 'nested_param[]': [ // please note the use of square brackets! + 'Something', + 'Something else' + ] + } + }); + +.. versionadded:: 1.0 + +You can also set custom request headers to send when performing an outgoing request, passing the ``headers`` option:: + + casper.open('http://some.testserver.com/post.php', { + method: 'post', + data: { + 'title': 'Plop', + 'body': 'Wow.' + }, + headers: { + 'Accept-Language': 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3' + } + }); + +``reload()`` +------------------------------------------------------------------------------- + +**Signature:** ``reload([Function then])`` + +.. versionadded:: 1.0 + +Reloads current page location:: + + casper.start('http://google.com', function() { + this.echo("loaded"); + this.reload(function() { + this.echo("loaded again"); + }); + }); + + casper.run(); + +``repeat()`` +------------------------------------------------------------------------------- + +**Signature:** ``repeat(int times, Function then)`` + +Repeats a navigation step a given number of times:: + + casper.start().repeat(3, function() { + this.echo("Badger"); + }); + + casper.run(); + +.. _casper_resourceexists: + +.. index:: HTTP + +``resourceExists()`` +------------------------------------------------------------------------------- + +**Signature:** ``resourceExists(String|Function|RegExp test)`` + +Checks if a resource has been loaded. You can pass either a function, a string or a ``RegExp`` instance to perform the test:: + + casper.start('http://www.google.com/', function() { + if (this.resourceExists('logo3w.png')) { + this.echo('Google logo loaded'); + } else { + this.echo('Google logo not loaded', 'ERROR'); + } + }); + + casper.run(); + +.. note:: + + If you want to wait for a resource to be loaded, use the `waitForResource()`_ method. + +.. index:: Step stack, run + +``run()`` +------------------------------------------------------------------------------- + +**Signature:** ``run(fn onComplete[, int time])`` + +Runs the whole suite of steps and optionally executes a callback when they've all been done. Obviously, **calling this method is mandatory** in order to run the Casper navigation suite. + +Casper suite **won't run**:: + + casper.start('http://foo.bar/home', function() { + // ... + }); + + // hey, it's missing .run() here! + +Casper suite **will run**:: + + casper.start('http://foo.bar/home', function() { + // ... + }); + + casper.run(); + +``Casper.run()`` also accepts an ``onComplete`` callback, which you can consider as a custom final step to perform when all the other steps have been executed. Just don't forget to ``exit()`` Casper if you define one!:: + + casper.start('http://foo.bar/home', function() { + // ... + }); + + casper.then(function() { + // ... + }); + + casper.run(function() { + this.echo('So the whole suite ended.'); + this.exit(); // <--- don't forget me! + }); + +Binding a callback to ``complete.error`` will trigger when the ``onComplete`` callback fails. + +.. index:: Scroll + +``scrollTo()`` +------------------------------------------------------------------------------- + +**Signature:** ``scrollTo(Number x, Number y)`` + +.. versionadded:: 1.1-beta3 + +Scrolls current document to the coordinates defined by the value of ``x`` and ``y``:: + + casper.start('http://foo.bar/home', function() { + this.scrollTo(500, 300); + }); + +.. note:: This operation is synchronous. + +.. index:: Scroll + +``scrollToBottom()`` +------------------------------------------------------------------------------- + +**Signature:** ``scrollToBottom()`` + +.. versionadded:: 1.1-beta3 + +Scrolls current document to its bottom:: + + casper.start('http://foo.bar/home', function() { + this.scrollToBottom(); + }); + +.. note:: This operation is synchronous. + +.. index:: Form + +``sendKeys()`` +------------------------------------------------------------------------------- + +**Signature:** ``sendKeys(Selector selector, String keys[, Object options])`` + +.. versionadded:: 1.0 + +Sends native keyboard events to the element matching the provided :doc:`selector <../selectors>`:: + + casper.then(function() { + this.sendKeys('form.contact input#name', 'Duke'); + this.sendKeys('form.contact textarea#message', "Damn, I'm looking good."); + this.click('form.contact input[type="submit"]'); + }); + +.. versionadded:: 1.1 + +The currently supported HTMLElements that can receive keyboard events from ``sendKeys`` are ````, `` + + + + + + + + + + +
    + +
    + + + + diff --git a/n1k0-casperjs-4f105a9/tests/site/frame1.html b/n1k0-casperjs-4f105a9/tests/site/frame1.html new file mode 100644 index 0000000..0452449 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/site/frame1.html @@ -0,0 +1,10 @@ + + + + + CasperJS frame 1 + + +

    This is frame 1.

    + + diff --git a/n1k0-casperjs-4f105a9/tests/site/frame2.html b/n1k0-casperjs-4f105a9/tests/site/frame2.html new file mode 100644 index 0000000..0d34298 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/site/frame2.html @@ -0,0 +1,11 @@ + + + + + CasperJS frame 2 + + +

    This is frame 2.

    +

    frame 3

    + + diff --git a/n1k0-casperjs-4f105a9/tests/site/frame3.html b/n1k0-casperjs-4f105a9/tests/site/frame3.html new file mode 100644 index 0000000..874999c --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/site/frame3.html @@ -0,0 +1,11 @@ + + + + + CasperJS frame 3 + + +

    This is frame 3.

    +

    frame 2

    + + diff --git a/n1k0-casperjs-4f105a9/tests/site/frames.html b/n1k0-casperjs-4f105a9/tests/site/frames.html new file mode 100644 index 0000000..3c75ec3 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/site/frames.html @@ -0,0 +1,12 @@ + + + + + CasperJS test frames + + + + + + + diff --git a/n1k0-casperjs-4f105a9/tests/site/global.html b/n1k0-casperjs-4f105a9/tests/site/global.html new file mode 100644 index 0000000..7a4714a --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/site/global.html @@ -0,0 +1,14 @@ + + + + + + diff --git a/n1k0-casperjs-4f105a9/tests/site/images/phantom.png b/n1k0-casperjs-4f105a9/tests/site/images/phantom.png new file mode 100644 index 0000000000000000000000000000000000000000..0a9f5ee3663fadc427590c79d3035d19cdca5df9 GIT binary patch literal 4618 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 A0ssI2 literal 0 HcmV?d00001 diff --git a/n1k0-casperjs-4f105a9/tests/site/includes/include1.js b/n1k0-casperjs-4f105a9/tests/site/includes/include1.js new file mode 100644 index 0000000..aa21f21 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/site/includes/include1.js @@ -0,0 +1,7 @@ +(function() { + "use strict"; + var elem = document.createElement('div'); + elem.setAttribute('id', 'include1'); + elem.appendChild(document.createTextNode('include1')); + document.querySelector('body').appendChild(elem); +})(); diff --git a/n1k0-casperjs-4f105a9/tests/site/includes/include2.js b/n1k0-casperjs-4f105a9/tests/site/includes/include2.js new file mode 100644 index 0000000..8bbe0bb --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/site/includes/include2.js @@ -0,0 +1,7 @@ +(function() { + "use strict"; + var elem = document.createElement('div'); + elem.setAttribute('id', 'include2'); + elem.appendChild(document.createTextNode('include2')); + document.querySelector('body').appendChild(elem); +})(); diff --git a/n1k0-casperjs-4f105a9/tests/site/index.html b/n1k0-casperjs-4f105a9/tests/site/index.html new file mode 100644 index 0000000..c687926 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/site/index.html @@ -0,0 +1,20 @@ + + + + + CasperJS test index + + + + test + form +
      +
    • one
    • +
    • two
    • +
    • three
    • +
    + +

    Title

    + + + diff --git a/n1k0-casperjs-4f105a9/tests/site/mouse-events.html b/n1k0-casperjs-4f105a9/tests/site/mouse-events.html new file mode 100644 index 0000000..3336751 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/site/mouse-events.html @@ -0,0 +1,47 @@ + + + + + CasperJS test mouse events + + + test + test + test + test + test + test + test + test + + + diff --git a/n1k0-casperjs-4f105a9/tests/site/multiple-forms.html b/n1k0-casperjs-4f105a9/tests/site/multiple-forms.html new file mode 100644 index 0000000..3e9db35 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/site/multiple-forms.html @@ -0,0 +1,16 @@ + + + + Multiple forms test + + +
    + + +
    +
    + + +
    + + diff --git a/n1k0-casperjs-4f105a9/tests/site/page1.html b/n1k0-casperjs-4f105a9/tests/site/page1.html new file mode 100644 index 0000000..c3140e7 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/site/page1.html @@ -0,0 +1,8 @@ + + + + + CasperJS test page 1 + + Booh. + \ No newline at end of file diff --git a/n1k0-casperjs-4f105a9/tests/site/page2.html b/n1k0-casperjs-4f105a9/tests/site/page2.html new file mode 100644 index 0000000..3fe0f63 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/site/page2.html @@ -0,0 +1,8 @@ + + + + + CasperJS test page 2 + + Booh. + \ No newline at end of file diff --git a/n1k0-casperjs-4f105a9/tests/site/page3.html b/n1k0-casperjs-4f105a9/tests/site/page3.html new file mode 100644 index 0000000..c3140e7 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/site/page3.html @@ -0,0 +1,8 @@ + + + + + CasperJS test page 1 + + Booh. + \ No newline at end of file diff --git a/n1k0-casperjs-4f105a9/tests/site/popup.html b/n1k0-casperjs-4f105a9/tests/site/popup.html new file mode 100644 index 0000000..7f5b0c4 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/site/popup.html @@ -0,0 +1,18 @@ + + + + + CasperJS test popup + + + new window + close + + + diff --git a/n1k0-casperjs-4f105a9/tests/site/prompt.html b/n1k0-casperjs-4f105a9/tests/site/prompt.html new file mode 100644 index 0000000..291d86b --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/site/prompt.html @@ -0,0 +1,12 @@ + + + + + CasperJS test prompt + + + + + diff --git a/n1k0-casperjs-4f105a9/tests/site/resources.html b/n1k0-casperjs-4f105a9/tests/site/resources.html new file mode 100644 index 0000000..6c48e43 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/site/resources.html @@ -0,0 +1,15 @@ + + + + + CasperJS test resource + + + + + + diff --git a/n1k0-casperjs-4f105a9/tests/site/result.html b/n1k0-casperjs-4f105a9/tests/site/result.html new file mode 100644 index 0000000..de43655 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/site/result.html @@ -0,0 +1,11 @@ + + + + + CasperJS test form result + + +

    this is the result page

    +

    Return back home

    + + \ No newline at end of file diff --git a/n1k0-casperjs-4f105a9/tests/site/test.html b/n1k0-casperjs-4f105a9/tests/site/test.html new file mode 100644 index 0000000..d365c97 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/site/test.html @@ -0,0 +1,10 @@ + + + + + CasperJS test target + + + test form + + \ No newline at end of file diff --git a/n1k0-casperjs-4f105a9/tests/site/urls.html b/n1k0-casperjs-4f105a9/tests/site/urls.html new file mode 100644 index 0000000..726af18 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/site/urls.html @@ -0,0 +1,14 @@ + + + + + CasperJS url tests + + + + + diff --git a/n1k0-casperjs-4f105a9/tests/site/visible.html b/n1k0-casperjs-4f105a9/tests/site/visible.html new file mode 100644 index 0000000..d05da0b --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/site/visible.html @@ -0,0 +1,17 @@ + + + + + CasperJS test index + + + + + + + + diff --git a/n1k0-casperjs-4f105a9/tests/site/waitFor.html b/n1k0-casperjs-4f105a9/tests/site/waitFor.html new file mode 100644 index 0000000..a1d8994 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/site/waitFor.html @@ -0,0 +1,29 @@ + + + + + waitFor test + + + +
      +
    • one
    • +
    • two
    • +
    • three
    • +
    +
    + Loading... +
    +
    Voilà
    +

    I'm hidden.

    +

    I'm visible.

    + + + diff --git a/n1k0-casperjs-4f105a9/tests/suites/.casper b/n1k0-casperjs-4f105a9/tests/suites/.casper new file mode 100644 index 0000000..e69de29 diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/.casper b/n1k0-casperjs-4f105a9/tests/suites/casper/.casper new file mode 100644 index 0000000..e69de29 diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/agent.js b/n1k0-casperjs-4f105a9/tests/suites/casper/agent.js new file mode 100644 index 0000000..7dfd674 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/agent.js @@ -0,0 +1,32 @@ +/*global casper*/ +/*jshint strict:false*/ +function testUA(ua, match) { + casper.test.assertMatch( + ua, match, 'Default user agent matches ' + match + ); +} + +function fetchUA(requestData, request) { + var headers = requestData.headers.filter(function(header) { + return header.name === "User-Agent"; + }); + casper.test.assert(headers.length > 0); + testUA(headers.pop().value, /plop/); +} + +casper.test.begin('userAgent() tests', 3, { + originalUA: casper.options.pageSettings.userAgent, + + tearDown: function(test) { + casper.userAgent(this.originalUA); + }, + + test: function(test) { + testUA(casper.options.pageSettings.userAgent, /CasperJS/); + casper.start().userAgent('plop').once('resource.requested', fetchUA); + casper.thenOpen('tests/site/index.html').run(function() { + test.done(); + }); + } +}); + diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/alert.js b/n1k0-casperjs-4f105a9/tests/suites/casper/alert.js new file mode 100644 index 0000000..a0a6f85 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/alert.js @@ -0,0 +1,25 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('alert events', 1, { + ok: false, + + tearDown: function(test) { + casper.removeAllListeners('remote.alert'); + }, + + test: function(test) { + var self = this; + + casper.once('remote.alert', function(message) { + self.ok = (message === 'plop'); + }); + + casper.start('tests/site/alert.html', function() { + test.assert(self.ok, 'alert event has been intercepted'); + }); + + casper.run(function() { + test.done(); + }); + } +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/auth.js b/n1k0-casperjs-4f105a9/tests/suites/casper/auth.js new file mode 100644 index 0000000..d575eaf --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/auth.js @@ -0,0 +1,26 @@ +/*global casper*/ +/*jshint strict:false, maxstatements:99*/ + +casper.test.begin('HTTP authentication tests', 8, function(test) { + casper.start('tests/site/index.html'); + + casper.configureHttpAuth('http://localhost/'); + test.assertEquals(casper.page.settings.userName, undefined); + test.assertEquals(casper.page.settings.password, undefined); + + casper.configureHttpAuth('http://niko:plop@localhost/'); + test.assertEquals(casper.page.settings.userName, 'niko'); + test.assertEquals(casper.page.settings.password, 'plop'); + + casper.configureHttpAuth('http://localhost/', {username: 'john', password: 'doe'}); + test.assertEquals(casper.page.settings.userName, 'john'); + test.assertEquals(casper.page.settings.password, 'doe'); + + casper.configureHttpAuth('http://niko:plop@localhost/', {username: 'john', password: 'doe'}); + test.assertEquals(casper.page.settings.userName, 'niko'); + test.assertEquals(casper.page.settings.password, 'plop'); + + casper.run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/bypass.js b/n1k0-casperjs-4f105a9/tests/suites/casper/bypass.js new file mode 100644 index 0000000..486d2ed --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/bypass.js @@ -0,0 +1,107 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('Casper.bypass() can bypass a step', 1, function(test) { + casper.start(); + casper.then(function(){ + test.fail("This test should not be executed."); + }); + casper.bypass(1).run(function() { + test.pass("Step has been bypassed"); + test.done(); + }); +}); + +casper.test.begin('Casper.bypass() can bypass multiple steps', 1, function(test) { + casper.start(); + casper.then(function() { + test.pass("This test should be executed."); + }); + casper.then(function() { + this.bypass(2); + }); + casper.then(function() { + test.fail("This test should not be executed."); + }); + casper.then(function() { + test.fail("Nor this one."); + }); + casper.run(function() { + test.done(); + }); +}); + +casper.test.begin('Casper.thenBypass()', 1, function(test) { + casper. + thenBypass(1). + then(function() { + test.fail("This test should be bypassed."); + }). + then(function() { + test.pass("This test should be executed."); + }); + + casper.run(function() { + test.done(); + }); +}); + +casper.test.begin('Casper.thenBypassIf()', 3, function(test) { + casper. + thenBypassIf(true, 1, "Bypass if with function"). + then(function() { + test.fail("This test should be bypassed."); + }). + then(function() { + test.pass("This test should be executed."); + }). + thenBypassIf(function() { + return true; + }, 1, "Bypass if with function"). + then(function() { + test.fail("This test should be bypassed."); + }). + then(function() { + test.pass("This test should be executed."); + }). + thenBypassIf(function() { + return false; + }, 1, "Do not bypass if with function"). + then(function() { + test.pass("This test should be executed."); + }); + + casper.run(function() { + test.done(); + }); +}); + +casper.test.begin('Casper.thenBypassUnless()', 3, function(test) { + casper. + thenBypassUnless(false, 1, "Bypass unless with function"). + then(function() { + test.fail("This test should be bypassed."); + }). + then(function() { + test.pass("This test should be executed."); + }). + thenBypassUnless(function() { + return false; + }, 1, "Bypass unless with function"). + then(function() { + test.fail("This test should be bypassed."); + }). + then(function() { + test.pass("This test should be executed."); + }). + thenBypassUnless(function() { + return true; + }, 1, "Do not bypass unless with function"). + then(function() { + test.pass("This test should be executed."); + }); + + casper.run(function() { + test.done(); + }); +}); + diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/callback.js b/n1k0-casperjs-4f105a9/tests/suites/casper/callback.js new file mode 100644 index 0000000..e3be456 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/callback.js @@ -0,0 +1,25 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('callback events', 1, { + ok: false, + + tearDown: function(test) { + casper.removeAllListeners('remote.callback'); + }, + + test: function(test) { + var self = this; + + casper.once('remote.callback', function(data) { + self.ok = (data.hello === 'world'); + }); + + casper.start('tests/site/callback.html', function() { + test.assert(self.ok, 'callback event has been intercepted'); + }); + + casper.run(function() { + test.done(); + }); + } +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/callutils.js b/n1k0-casperjs-4f105a9/tests/suites/casper/callutils.js new file mode 100644 index 0000000..97e1237 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/callutils.js @@ -0,0 +1,23 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('Casper.callUtils()', 2, function(test) { + casper.start("tests/site/index.html", function(){ + this.evaluate(function() { + /*global __utils__*/ + __utils__.testCallUtils = function() { + return [].slice.call(arguments); + }; + }); + + test.assertEquals(casper.callUtils("testCallUtils", "a", "b", "c"), + ["a", "b", "c"], + "Casper.callUtils() invokes a client side utility"); + + test.assertThrows(casper.callUtils, ["xxx", "a", "b", "c"], + "Casper.callUtils() raises an error if used inappropriately"); + }); + + casper.run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/capture.js b/n1k0-casperjs-4f105a9/tests/suites/casper/capture.js new file mode 100644 index 0000000..b17cb8d --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/capture.js @@ -0,0 +1,50 @@ +/*global casper*/ +/*jshint strict:false*/ +var fs = require('fs'); + +casper.test.begin('Casper.capture() tests', 1, { + testFile: '/tmp/__casper_test_capture.png', + + setUp: function(test) { + if (fs.exists(this.testFile) && fs.isFile(this.testFile)) { + try { + fs.remove(this.testFile); + } catch (e) { + } + } + }, + + tearDown: function(test) { + try { + fs.remove(this.testFile); + } catch(e) { + } + }, + + test: function(test) { + var self = this; + + casper.start('tests/site/index.html', function() { + this.viewport(300, 200); + this.capture(self.testFile); + test.assert(fs.isFile(self.testFile), 'Casper.capture() captured a screenshot'); + }); + + casper.run(function() { + test.done(); + }); + } +}); + +casper.test.begin('Casper.captureBase64() tests', 3, function(test) { + casper.start('tests/site/index.html', function() { + test.assert(this.captureBase64('png').length > 0, + 'Casper.captureBase64() rendered a page capture as base64'); + test.assert(this.captureBase64('png', 'ul').length > 0, + 'Casper.captureBase64() rendered a capture from a selector as base64'); + test.assert(this.captureBase64('png', {top: 0, left: 0, width: 30, height: 30}).length > 0, + 'Casper.captureBase64() rendered a capture from a clipRect as base64'); + }).run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/click.js b/n1k0-casperjs-4f105a9/tests/suites/casper/click.js new file mode 100644 index 0000000..e92ca18 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/click.js @@ -0,0 +1,126 @@ +/*global casper*/ +/*jshint strict:false, maxstatements: 99*/ +var utils = require('utils'); + +casper.test.begin('click() tests', 2, function(test) { + casper.start('tests/site/index.html', function() { + this.click('a[href="test.html"]'); + }).then(function() { + test.assertTitle('CasperJS test target', 'Casper.click() can click on a link'); + }).thenClick('a', function() { + test.assertTitle('CasperJS test form', 'Casper.thenClick() can click on a link'); + }).run(function() { + test.done(); + }); +}); + +casper.test.begin('onclick variants tests', 8, function(test) { + casper.start('tests/site/click.html', function() { + test.assert(this.click('#test1'), 'Casper.click() can click an `href="javascript:` link'); + test.assert(this.click('#test2'), 'Casper.click() can click an `href="#"` link'); + test.assert(this.click('#test3'), 'Casper.click() can click an `onclick=".*; return false"` link'); + test.assert(this.click('#test4'), 'Casper.click() can click an unobstrusive js handled link'); + var results = this.getGlobal('results'); + if (phantom.casperEngine === 'slimerjs') { + // "javascript:" link in Gecko are executed asynchronously, so we don't have result at this time + test.skip(1) + } + else + test.assert(results.test1, 'Casper.click() has clicked an `href="javascript:` link'); + test.assert(results.test2, 'Casper.click() has clicked an `href="#"` link'); + test.assert(results.test3, 'Casper.click() has clicked an `onclick=".*; return false"` link'); + test.assert(results.test4, 'Casper.click() has clicked an unobstrusive js handled link'); + }).run(function() { + test.done(); + }); +}); + +casper.test.begin('clickLabel tests tests', 12, function(test) { + casper.start('tests/site/click.html', function() { + test.assert(this.clickLabel('test1'), + 'Casper.clickLabel() can click an `href="javascript:` link'); + test.assert(this.clickLabel('test2'), + 'Casper.clickLabel() can click an `href="#"` link'); + test.assert(this.clickLabel('test3'), + 'Casper.clickLabel() can click an `onclick=".*; return false"` link'); + test.assert(this.clickLabel('test4'), + 'Casper.clickLabel() can click an unobstrusive js handled link'); + test.assert(this.clickLabel('Label with double "quotes"'), + 'Casper.clickLabel() can click the link with double quotes in the label'); + test.assert(this.clickLabel("Label with single 'quotes'"), + 'Casper.clickLabel() can click the link with the single quotes in the label'); + var results = this.getGlobal('results'); + if (phantom.casperEngine === 'slimerjs') { + // "javascript:" link in Gecko are executed asynchronously, so we don't have result at this time + test.skip(1) + } + else + test.assert(results.test1, + 'Casper.clickLabel() has clicked an `href="javascript:` link'); + test.assert(results.test2, + 'Casper.clickLabel() has clicked an `href="#"` link'); + test.assert(results.test3, + 'Casper.clickLabel() has clicked an `onclick=".*; return false"` link'); + test.assert(results.test4, + 'Casper.clickLabel() has clicked an unobstrusive js handled link'); + test.assert(results.test6, + 'Casper.clickLabel() has clicked the link with double quotes in the label'); + test.assert(results.test7, + 'Casper.clickLabel() has clicked the link with single quotes in the label'); + }).run(function() { + test.done(); + }); +}); + +casper.test.begin('casper.mouse tests', 4, function(test) { + casper.start('tests/site/click.html', function() { + this.mouse.down(200, 100); + var results = this.getGlobal('results'); + test.assertEquals(results.testdown, [200, 100], + 'Mouse.down() has pressed button to the specified position'); + this.mouse.up(200, 100); + results = this.getGlobal('results'); + test.assertEquals(results.testup, [200, 100], + 'Mouse.up() has released button to the specified position'); + this.mouse.move(200, 100); + results = this.getGlobal('results'); + test.assertEquals(results.testmove, [200, 100], + 'Mouse.move() has moved to the specified position'); + if (utils.gteVersion(phantom.version, '1.8.0')) { + this.mouse.doubleclick(200, 100); + results = this.getGlobal('results'); + this.test.assertEquals(results.testdoubleclick, [200, 100], + 'Mouse.doubleclick() double-clicked the specified position'); + } else { + this.test.pass("Mouse.doubleclick() requires PhantomJS >= 1.8"); + } + }).run(function() { + test.done(); + }); +}); + +casper.test.begin('element focus on click', 1, function(test) { + casper.start().then(function() { + this.page.content = '
    ' + this.click('form input[name=foo]') + this.page.sendEvent('keypress', 'bar'); + test.assertEquals(this.getFormValues('form')['foo'], 'bar', + 'Casper.click() sets the focus on clicked element'); + }).run(function() { + test.done(); + }); +}); + +casper.test.begin('mouse events on click', 2, function(test) { + casper.start('tests/site/click.html', function() { + this.click('#test5'); + }).then(function() { + var results = this.getGlobal('results'); + test.assert(results.test5.indexOf('mousedown') !== -1, + 'Casper.click() triggers mousedown event'); + test.assert(results.test5.indexOf('mouseup') !== -1, + 'Casper.click() triggers mouseup event'); + }).run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/confirm.js b/n1k0-casperjs-4f105a9/tests/suites/casper/confirm.js new file mode 100644 index 0000000..fac3933 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/confirm.js @@ -0,0 +1,53 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('can confirm dialog', 2, { + received: undefined, + + setUp: function(test) { + var self = this; + casper.removeAllFilters('page.confirm'); + casper.setFilter('page.confirm', function(message) { + self.received = message; + return true; + }); + }, + + tearDown: function(test) { + casper.removeAllFilters('page.confirm'); + }, + + test: function(test) { + var self = this; + casper.start('tests/site/confirm.html', function() { + test.assert(this.getGlobal('confirmed'), 'confirmation dialog accepted'); + }).run(function() { + test.assertEquals(self.received, 'are you sure?', 'confirmation message is ok'); + test.done(); + }); + } +}); + +casper.test.begin('can cancel dialog', { + received: undefined, + + setUp: function(test) { + var self = this; + casper.removeAllFilters('page.confirm'); + casper.setFilter('page.confirm', function(message) { + return false; + }); + }, + + tearDown: function(test) { + casper.removeAllFilters('page.confirm'); + }, + + test: function(test) { + var self = this; + casper.start('tests/site/confirm.html', function() { + test.assertNot(this.getGlobal('confirmed'), 'confirmation dialog canceled'); + }).run(function() { + test.done(); + }); + } +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/content.js b/n1k0-casperjs-4f105a9/tests/suites/casper/content.js new file mode 100644 index 0000000..72fde2c --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/content.js @@ -0,0 +1,21 @@ +/*global casper*/ +/*jshint strict:false*/ +var fs = require("fs"); + +casper.test.begin("Casper.getPageContent() text/html content", 1, function(test) { + casper.start("tests/site/test.html", function() { + test.assertMatch(this.getPageContent(), /CasperJS test target/, + "Casper.getPageContent() retrieves text/html content"); + }).run(function() { + test.done(); + }); +}); + +casper.test.begin("Casper.getPageContent() non text/html content", 1, function(test) { + casper.start("tests/site/dummy.js", function() { + test.assertEquals(this.getPageContent(), "document.write('foo');", + "Casper.getPageContent() retrieves non text/html content"); + }).run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/debug.js b/n1k0-casperjs-4f105a9/tests/suites/casper/debug.js new file mode 100644 index 0000000..6095c28 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/debug.js @@ -0,0 +1,12 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('getHTML() tests', 2, function(test) { + casper.start('tests/site/index.html', function() { + test.assertEquals(this.getHTML('ul li'), 'one', + 'Casper.getHTML() retrieves inner HTML by default'); + test.assertEquals(this.getHTML('ul li', true), '<li>one</li>', + 'Casper.getHTML() can retrieve outer HTML'); + }).run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/elementattribute.js b/n1k0-casperjs-4f105a9/tests/suites/casper/elementattribute.js new file mode 100644 index 0000000..4a0885a --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/elementattribute.js @@ -0,0 +1,21 @@ +/*global casper*/ +/*jshint strict:false*/ +var x = require('casper').selectXPath; + +casper.test.begin('getElementAttribute() tests', 4, function(test) { + casper.start('tests/site/elementattribute.html', function() { + test.assertEquals(this.getElementAttribute('.testo', 'data-stuff'), + 'beautiful string', 'Casper.getElementAttribute() works with a CSS selector'); + test.assertEquals(this.getElementAttribute(x('//div[@class]'), 'data-stuff'), + 'beautiful string', 'Casper.getElementAttribute() works with a XPath selector'); + }).then(function() { + test.assertEquals(this.getElementsAttribute('.testo', 'data-stuff'), + ['beautiful string', 'not as beautiful string'], + 'Casper.getElementsAttribute() works with a CSS selector'); + test.assertEquals(this.getElementsAttribute(x('//div[@class]'), 'data-stuff'), + ['beautiful string', 'not as beautiful string'], + 'Casper.getElementsAttribute() works with a XPath selector'); + }).run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/encode.js b/n1k0-casperjs-4f105a9/tests/suites/casper/encode.js new file mode 100644 index 0000000..9c85d14 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/encode.js @@ -0,0 +1,19 @@ +/*global casper*/ +/*jshint strict:false*/ +var fs = require('fs'); + +casper.test.begin('base64encode() and download() tests', 2, function(test) { + // FIXME: https://github.com/ariya/phantomjs/pull/364 has been merged, update scheme + casper.start('file://' + phantom.casperPath + '/tests/site/index.html', function() { + var imageUrl = 'file://' + phantom.casperPath + '/tests/site/images/phantom.png', + image = this.base64encode(imageUrl); + test.assertEquals(image.length, 6160, 'Casper.base64encode() can retrieve base64 contents'); + this.download(imageUrl, '__test_logo.png'); + test.assert(fs.exists('__test_logo.png'), 'Casper.download() downloads a file'); + if (fs.exists('__test_logo.png')) { + fs.remove('__test_logo.png'); + } + }).run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/evaluate.js b/n1k0-casperjs-4f105a9/tests/suites/casper/evaluate.js new file mode 100644 index 0000000..43f58bd --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/evaluate.js @@ -0,0 +1,112 @@ +/*global casper*/ +/*jshint strict:false, maxparams:99*/ +casper.test.begin('mapping argument context', 1, function(test) { + casper.start(); + var context = { + "_boolean_true": true, + "_boolean_false": false, + "_int_number": 42, + "_float_number": 1337.42, + "_string": "plop! \"Ÿ£$\" 'no'", + "_array": [1, 2, 3], + "_object": {a: 1, b: 2}, + "_function": function(){console.log('ok');} + }; + var result = casper.evaluate(function(_boolean_true, _boolean_false, _int_number, + _float_number, _string, _array, _object, _function) { + return [].map.call(arguments, function(arg) { + return typeof(arg); + }); + }, context); + test.assertEquals( + result.toString(), + ['boolean', 'boolean', 'number', 'number', 'string', 'object', 'object', 'function'].toString(), + 'Casper.evaluate() handles passed argument context correcly' + ); + test.done(); +}); + +casper.test.begin('handling no argument context', 1, function(test) { + casper.start(); + test.assertEquals(casper.evaluate(function() { + return 42; + }), 42, 'Casper.evaluate() handles evaluation with no context passed'); + test.done(); +}); + +casper.test.begin('handling of object context (BC mode)', 3, function(test) { + casper.start(); + test.assertEquals(casper.evaluate(function(a) { + return [a]; + }, {a: "foo"}), ["foo"], 'Casper.evaluate() accepts an object as arguments context'); + test.assertEquals(casper.evaluate(function(a, b) { + return [a, b]; + }, {a: "foo", b: "bar"}), ["foo", "bar"], 'Casper.evaluate() accepts an object as arguments context'); + test.assertEquals(casper.evaluate(function(a, b, c) { + return [a, b, c]; + }, {a: "foo", b: "bar", c: "baz"}), ["foo", "bar", "baz"], 'Casper.evaluate() accepts an object as arguments context'); + test.done(); +}); + +casper.test.begin('handling of array context', 3, function(test) { + casper.start(); + test.assertEquals(casper.evaluate(function(a) { + return [a]; + }, ["foo"]), ["foo"], 'Casper.evaluate() accepts an array as arguments context'); + test.assertEquals(casper.evaluate(function(a, b) { + return [a, b]; + }, ["foo", "bar"]), ["foo", "bar"], 'Casper.evaluate() accepts an array as arguments context'); + test.assertEquals(casper.evaluate(function(a, b, c) { + return [a, b, c]; + }, ["foo", "bar", "baz"]), ["foo", "bar", "baz"], 'Casper.evaluate() accepts an array as arguments context'); + test.done(); +}); + +casper.test.begin('natural arguments context (phantomjs equivalent)', 3, function(test) { + casper.start(); + test.assertEquals(casper.evaluate(function(a) { + return [a]; + }, "foo"), ["foo"], 'Casper.evaluate() accepts natural arguments context'); + test.assertEquals(casper.evaluate(function(a, b) { + return [a, b]; + }, "foo", "bar"), ["foo", "bar"], 'Casper.evaluate() accepts natural arguments context'); + test.assertEquals(casper.evaluate(function(a, b, c) { + return [a, b, c]; + }, "foo", "bar", "baz"), ["foo", "bar", "baz"], 'Casper.evaluate() accepts natural arguments context'); + test.done(); +}); + +casper.test.begin('thenEvaluate() tests', 2, function(test) { + casper.start().thenEvaluate(function(a, b) { + window.a = a + window.b = b; + }, "foo", "bar"); + casper.then(function() { + test.assertEquals(this.getGlobal('a'), "foo", "Casper.thenEvaluate() sets args"); + test.assertEquals(this.getGlobal('b'), "bar", + "Casper.thenEvaluate() sets args the same way evaluate() does"); + }); + casper.run(function() { + test.done(); + }); +}); + +// https://github.com/n1k0/casperjs/issues/489 +// https://groups.google.com/forum/?fromgroups=#!topic/casperjs/95IgDMFnEKM +casper.test.begin("evaluate() returns a value which can be altered", 1, function(test) { + var list; + + casper.start().then(function() { + list = this.evaluate(function() { + return [{a: 1}, {b: 2}]; + }); + var first = list[0]; + first.a = 42; + test.assertEquals(list, [{a: 42}, {b: 2}], + 'evaluate() returns a cloned value which can be altered'); + }); + + casper.run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/events.js b/n1k0-casperjs-4f105a9/tests/suites/casper/events.js new file mode 100644 index 0000000..2a08b12 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/events.js @@ -0,0 +1,29 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('events', 2, function(test) { + casper.plopped = false; + casper.once("plop", function() { + this.plopped = true; + }); + test.assert(Object.keys(casper._events).some(function(i) { + return i === "plop"; + }), "on() has set an event handler"); + casper.emit("plop"); + test.assert(casper.plopped, "emit() emits an event"); + test.done(); +}); + +casper.test.begin('filters', 3, function(test) { + casper.foo = 0; + casper.setFilter("test", function(a) { + this.foo = 42; + return a + 1; + }); + test.assert(Object.keys(casper._filters).some(function(i) { + return i === "test"; + }), "setFilter() has set a filter"); + test.assertEquals(casper.filter("test", 1), 2, "filter() filters a value"); + test.assertEquals(casper.foo, 42, "filter() applies the correct context"); + delete casper.foo; + test.done(); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/exists.js b/n1k0-casperjs-4f105a9/tests/suites/casper/exists.js new file mode 100644 index 0000000..f60e617 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/exists.js @@ -0,0 +1,10 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('exists() tests', 2, function(test) { + casper.start('tests/site/index.html', function() { + test.assert(this.exists('a'), 'Casper.exists() can check if an element exists'); + test.assertNot(this.exists('chucknorriz'), 'Casper.exists() can check than an element does not exist') + }).run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/fetchtext.js b/n1k0-casperjs-4f105a9/tests/suites/casper/fetchtext.js new file mode 100644 index 0000000..57bbbf7 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/fetchtext.js @@ -0,0 +1,21 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('fetchText() basic tests', 1, function(test) { + casper.start('tests/site/index.html', function() { + test.assertEquals(this.fetchText('ul li'), 'onetwothree', + 'Casper.fetchText() can retrieve text contents'); + }).run(function() { + test.done(); + }); +}); + +casper.test.begin('fetchText() handles HTML entities', 1, function(test) { + casper.start().then(function() { + this.setContent('<html><body>Voilà</body></html>'); + test.assertEquals(this.fetchText('body'), 'Voilà', + 'Casper.fetchText() fetches decoded text'); + }); + casper.run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/flow.coffee b/n1k0-casperjs-4f105a9/tests/suites/casper/flow.coffee new file mode 100644 index 0000000..01473fb --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/flow.coffee @@ -0,0 +1,38 @@ +casper.test.begin 'handling waits and timeouts', 13, (test) -> + step = 0 + + casper.start "tests/site/resources.html", -> + test.assertEquals ++step, 1, "step 1" + @wait 400, -> + test.assertEquals ++step, 2, "step 1.1" + @wait 200, -> + test.assertEquals ++step, 3, "step 1.1.1" + @wait 200, -> + test.assertEquals ++step, 4, "step 1.1.1.1" + @then -> + test.assertEquals ++step, 5, "step 1.1.2.1" + @wait 400, -> + test.assertEquals ++step, 6, "step 1.2" + + casper.wait 200, -> + test.assertEquals ++step, 7, "step 2" + + casper.waitForSelector( + '#noneExistingSelector' + -> test.fail "should run into timeout" + -> test.assertEquals ++step, 8, "step 3 sucessfully timed out" + 1000 + ) + casper.then -> + test.assertEquals ++step, 9, "step 4" + @wait 300, -> + test.assertEquals ++step, 10, "step 4.1" + @wait 300, -> + test.assertEquals ++step, 11, "step 4.1.1" + @wait 100, -> + test.assertEquals ++step, 12, "step 5.2" + + casper.then -> + test.assertEquals ++step, 13, "last step" + + casper.run(-> test.done()) diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/formfill.js b/n1k0-casperjs-4f105a9/tests/suites/casper/formfill.js new file mode 100644 index 0000000..08d22c8 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/formfill.js @@ -0,0 +1,231 @@ +/*global casper, __utils__*/ +/*jshint strict:false*/ +var fs = require('fs'); + +function testFormValues(test) { + test.assertField('email', 'chuck@norris.com', + 'can fill an input[type=text] form field'); + test.assertField('password', 'chuck', + 'can fill an input[type=password] form field') + test.assertField('content', 'Am watching thou', + 'can fill a textarea form field'); + test.assertField('topic', 'bar', + 'can pick a value from a select form field'); + test.assertField('check', true, + 'can check a form checkbox'); + test.assertEvalEquals(function() { + return __utils__.findOne('input[name="choice"][value="no"]').checked; + }, true, 'can check a form radio button 1/2'); + test.assertEvalEquals(function() { + return __utils__.findOne('input[name="choice"][value="yes"]').checked; + }, false, 'can check a form radio button 2/2'); + test.assertEvalEquals(function() { + return (__utils__.findOne('input[name="checklist[]"][value="1"]').checked && + !__utils__.findOne('input[name="checklist[]"][value="2"]').checked && + __utils__.findOne('input[name="checklist[]"][value="3"]').checked); + }, true, 'can fill a list of checkboxes'); +} + +function testUrl(test) { + test.assertUrlMatch(/email=chuck@norris.com/, 'input[type=email] field was submitted'); + test.assertUrlMatch(/password=chuck/, 'input[type=password] field was submitted'); + test.assertUrlMatch(/content=Am\+watching\+thou/, 'textarea field was submitted'); + test.assertUrlMatch(/check=on/, 'input[type=checkbox] field was submitted'); + test.assertUrlMatch(/choice=no/, 'input[type=radio] field was submitted'); + test.assertUrlMatch(/topic=bar/, 'select field was submitted'); + test.assertUrlMatch(/strange=very/, 'strangely typed input field was submitted'); +} + +casper.test.begin('fill() & fillNames() tests', 16, function(test) { + var fpath = fs.pathJoin(phantom.casperPath, 'README.md'); + + casper.start('tests/site/form.html', function() { + this.fill('form[action="result.html"]', { + email: 'chuck@norris.com', + password: 'chuck', + content: 'Am watching thou', + check: true, + choice: 'no', + topic: 'bar', + file: fpath, + 'checklist[]': ['1', '3'], + strange: "very" + }); + testFormValues(test); + test.assertEvalEquals(function() { + return __utils__.findOne('input[name="file"]').files.length === 1; + }, true, 'can select a file to upload'); + }); + casper.thenClick('input[type="submit"]', function() { + testUrl(test); + }); + casper.run(function() { + test.done(); + }); +}); + +casper.test.begin('fillSelectors() tests', 16, function(test) { + var fpath = fs.pathJoin(phantom.casperPath, 'README.md'); + + casper.start('tests/site/form.html', function() { + this.fillSelectors('form[action="result.html"]', { + "input[name='email']": 'chuck@norris.com', + "input[name='password']": 'chuck', + "textarea[name='content']": 'Am watching thou', + "input[name='check']": true, + "input[name='choice']": 'no', + "select[name='topic']": 'bar', + "input[name='file']": fpath, + "input[name='checklist[]']": ['1', '3'], + "input[name='strange']": "very" + }); + testFormValues(test); + test.assertEvalEquals(function() { + return __utils__.findOne('input[name="file"]').files.length === 1; + }, true, 'can select a file to upload'); + }); + casper.thenClick('input[type="submit"]', function() { + testUrl(test); + }); + casper.run(function() { + test.done(); + }); +}); + +casper.test.begin('fillXPath() tests', 15, function(test) { + casper.start('tests/site/form.html', function() { + this.fillXPath('form[action="result.html"]', { + '//input[@name="email"]': 'chuck@norris.com', + '//input[@name="password"]': 'chuck', + '//textarea[@name="content"]': 'Am watching thou', + '//input[@name="check"]': true, + '//input[@name="choice"]': 'no', + '//select[@name="topic"]': 'bar', + '//input[@name="checklist[]"]': ['1', '3'], + '//input[@name="strange"]': "very" + }); + testFormValues(test); + // note: file inputs cannot be filled using XPath + }); + casper.thenClick('input[type="submit"]', function() { + testUrl(test); + }); + casper.run(function() { + test.done(); + }); +}); + +casper.test.begin('nonexistent fields', 1, function(test) { + casper.start('tests/site/form.html', function() { + test.assertRaises(this.fill, ['form[action="result.html"]', { + nonexistent: 42 + }, true], 'Casper.fill() raises an exception when unable to fill a form'); + }).run(function() { + test.done(); + }); +}); + +casper.test.begin('multiple forms', 2, function(test) { + casper.start('tests/site/multiple-forms.html', function() { + this.fill('form[name="f2"]', { + yo: "ok" + }, true); + }).then(function() { + test.assertUrlMatch(/\?f=f2&yo=ok$/, 'Casper.fill() handles multiple forms'); + }).then(function() { + this.fill('form[name="f2"]', { + yo: "ok" + }); + test.assertEquals(this.getFormValues('form[name="f2"]'), { + f: "f2", + yo: "ok" + }, 'Casper.getFormValues() retrieves filled values when multiple forms have same field names'); + }).run(function() { + test.done(); + }); +}); + +casper.test.begin('field array', 1, function(test) { + // issue #267: array syntax field names + casper.start('tests/site/field-array.html', function() { + this.fill('form', { + 'foo[bar]': "bar", + 'foo[baz]': "baz" + }, true); + }).then(function() { + test.assertUrlMatch('?foo[bar]=bar&foo[baz]=baz', + 'Casper.fill() handles array syntax field names'); + }).run(function() { + test.done(); + }); +}); + +casper.test.begin('getFormValues() tests', 2, function(test) { + var fpath = fs.pathJoin(phantom.casperPath, 'README.md'); + var fileValue = 'README.md'; + if (phantom.casperEngine === 'phantomjs') { + fileValue = 'C:\\fakepath\\README.md'; // phantomjs/webkit sets that; + } + + casper.start('tests/site/form.html', function() { + this.fill('form[action="result.html"]', { + email: 'chuck@norris.com', + password: 'chuck', + language: 'english', + content: 'Am watching thou', + check: true, + choice: 'no', + topic: 'bar', + file: fpath, + 'checklist[]': ['1', '3'], + strange: "very" + }); + }); + casper.then(function() { + test.assertEquals(this.getFormValues('form'), { + "check": true, + "checklist[]": ["1", "3"], + "choice": "no", + "content": "Am watching thou", + "email": "chuck@norris.com", + "file": fileValue, + "password": "chuck", + "submit": "submit", + "language": "english", + "topic": "bar", + "strange": "very" + }, 'Casper.getFormValues() retrieves filled values'); + }); + casper.then(function() { + this.fill('form[action="result.html"]', { + email: 'chuck@norris.com', + password: 'chuck', + language: 'english', + content: 'Am watching thou', + check: true, + choice: 'yes', + topic: 'bar', + file: fpath, + 'checklist[]': ['1', '3'], + strange: "very" + }); + }); + casper.then(function() { + test.assertEquals(this.getFormValues('form'), { + "check": true, + "checklist[]": ["1", "3"], + "choice": "yes", + "content": "Am watching thou", + "email": "chuck@norris.com", + "file": fileValue, + "password": "chuck", + "language": "english", + "submit": "submit", + "topic": "bar", + "strange": "very" + }, 'Casper.getFormValues() correctly retrieves values from radio inputs regardless of order'); + }); + casper.run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/frames.js b/n1k0-casperjs-4f105a9/tests/suites/casper/frames.js new file mode 100644 index 0000000..785be97 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/frames.js @@ -0,0 +1,45 @@ +/*global casper, __utils__*/ +/*jshint strict:false*/ +casper.test.begin('handling frames', 16, function(test) { + casper.start('tests/site/frames.html'); + + casper.withFrame('frame1', function() { + test.assertTitle('CasperJS frame 1'); + test.assertExists("#f1"); + test.assertDoesntExist("#f2"); + test.assertEval(function() { + return '__utils__' in window && 'getBinary' in __utils__; + }, '__utils__ object is available in child frame'); + test.assertMatches(this.page.frameContent, /This is frame 1/); + test.assertMatches(this.getHTML(), /This is frame 1/); + }); + + casper.withFrame('frame2', function() { + test.assertTitle('CasperJS frame 2'); + test.assertExists("#f2"); + test.assertDoesntExist("#f1"); + test.assertEval(function() { + return '__utils__' in window && 'getBinary' in __utils__; + }, '__utils__ object is available in other child frame'); + this.clickLabel('frame 3'); + }); + + casper.withFrame('frame2', function() { + test.assertTitle('CasperJS frame 3'); + }); + + casper.withFrame(0, function() { + test.assertTitle('CasperJS frame 1'); + test.assertExists("#f1"); + test.assertDoesntExist("#f2"); + }); + + casper.withFrame(1, function() { + test.assertTitle('CasperJS frame 3'); + }); + + casper.run(function() { + test.assertTitle('CasperJS test frames'); + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/global.js b/n1k0-casperjs-4f105a9/tests/suites/casper/global.js new file mode 100644 index 0000000..9e818e0 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/global.js @@ -0,0 +1,14 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('getGLobal() tests', 3, function(test) { + casper.start('tests/site/global.html', function() { + test.assertEquals(this.getGlobal('myGlobal'), 'awesome string', + 'Casper.getGlobal() can retrieve a remote global variable'); + test.assertEquals(this.getGlobal('myObject').foo.bar, 'baz', + 'Casper.getGlobal() can retrieves a serializable object'); + test.assertRaises(this.getGlobal, ['myUnencodableGlobal'], + 'Casper.getGlobal() does not fail trying to encode an unserializable global'); + }).run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/headers.js b/n1k0-casperjs-4f105a9/tests/suites/casper/headers.js new file mode 100644 index 0000000..8e5bbb4 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/headers.js @@ -0,0 +1,33 @@ +/*global casper*/ +/*jshint strict:false*/ +var server = require('webserver').create(); +var service = server.listen(8090, function(request, response) { + response.statusCode = 200; + response.headers = { + 'Content-Language': 'en', + 'Content-Type': 'text/html', + 'Date': new Date().toUTCString() + }; + response.write("ok"); + response.close(); +}); + +casper.test.begin('Casper.headers.get() using file protocol', 1, function(test) { + casper.start('file://' + phantom.casperPath + 'tests/site/index.html', function(response) { + test.assertEquals(response, {data: null}, 'Empty http response on local page'); + }).run(function() { + test.done(); + }) +}); + +casper.test.begin('Casper.headers.get() using http protocol', 3, function(test) { + casper.start('http://localhost:8090/', function(response) { + var headers = response.headers; + test.assertEquals(headers.get('Content-Language'), 'en', 'Checking existing header (case sensitive)'); + test.assertEquals(headers.get('content-language'), 'en', 'Checking existing header (case insensitive)'); + test.assertEquals(headers.get('X-Is-Troll'), null, 'Checking unexisting header'); + }).run(function() { + server.close(); + test.done(); + }) +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/history.js b/n1k0-casperjs-4f105a9/tests/suites/casper/history.js new file mode 100644 index 0000000..5c6b483 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/history.js @@ -0,0 +1,23 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('handling navigation history', 4, function(test) { + casper.start('tests/site/page1.html'); + casper.thenOpen('tests/site/page2.html'); + casper.thenOpen('tests/site/page3.html'); + casper.back(); + casper.then(function() { + test.assertMatch(this.getCurrentUrl(), /page2\.html$/, + 'Casper.back() can go back an history step'); + }); + casper.forward(); + casper.then(function() { + test.assertMatch(this.getCurrentUrl(), /page3\.html$/, + 'Casper.forward() can go forward an history step'); + }); + casper.run(function() { + test.assert(this.history.length > 0, 'Casper.history contains urls'); + test.assertMatch(this.history[0], /page1\.html$/, + 'Casper.history has the correct first url'); + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/hooks.js b/n1k0-casperjs-4f105a9/tests/suites/casper/hooks.js new file mode 100644 index 0000000..cc6a44b --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/hooks.js @@ -0,0 +1,65 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('onStepComplete() hook tests', 1, function(test) { + var stepResults = []; + casper.options.onStepComplete = function(self, stepResult) { + stepResults.push(stepResult); + }; + casper.start('tests/site/index.html', function() { + return 'ok'; + }); + casper.run(function() { + test.assert(stepResults.indexOf('ok') > -1, + 'Casper.options.onStepComplete() is called on step complete'); + this.options.onStepComplete = undefined; + test.done(); + }); +}); + +casper.test.begin('onResourceRequested() & onResourceReceived() hook tests', 6, function(test) { + var requests = [], responses = []; + casper.options.onResourceRequested = function(self, request) { + requests.push(request); + }; + casper.options.onResourceReceived = function(self, response) { + responses.push(response); + }; + casper.start('tests/site/index.html', function() { + test.assert(requests.some(function(request) { + return (/index\.html$/).test(request.url); + }), 'onResourceRequested() receives page requests'); + test.assert(requests.some(function(request) { + return (/phantom\.png$/).test(request.url); + }), 'onResourceRequested() receives image requests'); + test.assert(responses.some(function(response) { + return response.stage === 'start' && (/index\.html$/).test(response.url); + }), 'onResourceReceived() receives page response on load start'); + test.assert(responses.some(function(response) { + return response.stage === 'end' && (/index\.html$/).test(response.url); + }), 'onResourceReceived() receives page response on load end'); + test.assert(responses.some(function(response) { + return response.stage === 'start' && (/phantom\.png$/).test(response.url); + }), 'onResourceReceived() receives image response on load start'); + test.assert(responses.some(function(response) { + return response.stage === 'end' && (/phantom\.png$/).test(response.url); + }), 'onResourceReceived() receives image response on load end'); + }); + casper.run(function() { + this.options.onResourceReceived = this.options.onResourceRequested = undefined; + test.done(); + }); +}); + +casper.test.begin('onAlert() hook tests', 1, function(test) { + var message; + casper.options.onAlert = function(self, msg) { + message = msg; + }; + casper.start('tests/site/alert.html', function() { + test.assertEquals(message, 'plop', 'Casper.options.onAlert() can intercept an alert message'); + }); + casper.run(function() { + this.options.onAlert = null; + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/keys.js b/n1k0-casperjs-4f105a9/tests/suites/casper/keys.js new file mode 100644 index 0000000..1c292b7 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/keys.js @@ -0,0 +1,72 @@ +/*jshint strict:false*/ +/*global CasperError, casper, console, phantom, require*/ +var utils = require('utils'); + +casper.test.begin('sendKeys() tests', 4, function(test) { + casper.start('tests/site/form.html', function() { + this.sendKeys('input[name="email"]', 'duke@nuk.em'); + this.sendKeys('input[name="language"]', 'fr', {keepFocus: true}); + this.click('#autocomplete li:first-child'); + this.sendKeys('textarea', "Damn, I’m looking good."); + var values = this.getFormValues('form[action="result.html"]'); + test.assertEquals(values.email, 'duke@nuk.em', + 'Casper.sendKeys() sends keys to given input'); + test.assertEquals(values.language, 'french', + 'Casper.sendKeys() sends keys to given input and keeps focus afterweards'); + test.assertEquals(values.content, "Damn, I’m looking good.", + 'Casper.sendKeys() sends keys to given textarea'); + + this.sendKeys('input[name="notype"]', "I have no type."); + values = this.getFormValues('form#no-type-test-form'); + test.assertEquals(values.notype, "I have no type.", + 'Casper.sendKeys() sends keys to given input without type attribute'); + }).run(function() { + test.done(); + }); +}); + +casper.test.begin('sendKeys() works on content-editable elements', function(test) { + casper.start('tests/site/elementattribute.html', function() { + this.click('#content-editable-div'); + this.sendKeys('#content-editable-div', 'A Clockwork Orange'); + }).then(function() { + test.assertSelectorHasText('#content-editable-div','A Clockwork Orange'); + }).run(function() { + test.done(); + }); +}); + +if (utils.gteVersion(phantom.version, '1.9.0')) { + casper.test.begin('sendKeys() key modifiers tests', 1, function(test) { + casper.start().then(function() { + this.setContent([ + '<input>', + '<script>var keys = []; window.addEventListener("keypress", function(e) {', + ' keys.push({code: e.which, alt: e.altKey, ctrl: e.ctrlKey});', + '})</script>' + ].join('')); + this.sendKeys('input', 'k'); + this.sendKeys('input', 'k', {modifiers: "ctrl"}); + this.sendKeys('input', 'k', {modifiers: "ctrl+alt"}); + test.assertEquals(this.getGlobal('keys'), + [ + {code: 107, alt: false, ctrl: false}, + {code: 107, alt: false, ctrl: true}, + {code: 107, alt: true, ctrl: true} + ], 'sendKeys() uses key modifiers'); + }).run(function() { + test.done(); + }); + }); +} + +casper.test.begin('sendKeys() reset option', 1, function(test) { + casper.start('tests/site/form.html', function() { + this.sendKeys('textarea', 'foo'); + this.sendKeys('textarea', 'bar', {reset: true}); + var values = this.getFormValues('form[action="result.html"]'); + test.assertEquals(values.content, "bar"); + }).run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/location.js b/n1k0-casperjs-4f105a9/tests/suites/casper/location.js new file mode 100644 index 0000000..31cc875 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/location.js @@ -0,0 +1,23 @@ +/*jshint strict:false*/ +/*global CasperError, casper, console, phantom, require*/ +var utils = require('utils') + +if (utils.ltVersion(phantom.version, '1.8.0')) { + // https://github.com/n1k0/casperjs/issues/101 + casper.warn('document.location is broken under phantomjs < 1.8'); + casper.test.done(); +} else { + casper.test.begin('document.location tests', 1, function(test) { + casper.start('tests/site/index.html', function() { + this.evaluate(function() { + document.location = '/tests/site/form.html'; + }); + }); + casper.then(function() { + test.assertUrlMatches(/form\.html$/, 'document.location works as expected'); + }); + casper.run(function() { + test.done(); + }); + }); +} diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/logging.js b/n1k0-casperjs-4f105a9/tests/suites/casper/logging.js new file mode 100644 index 0000000..4537d8d --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/logging.js @@ -0,0 +1,41 @@ +/*jshint strict:false*/ +/*global casper, __utils__*/ +casper.test.begin('logging tests', 4, function(test) { + casper.start('tests/site/index.html'); + + var oldLevel = casper.options.logLevel; + + casper.options.logLevel = 'info'; + casper.options.verbose = false; + + casper.log('foo', 'info'); + casper.test.assert(casper.result.log.some(function(e) { + return e.message === 'foo' && e.level === 'info'; + }), 'Casper.log() adds a log entry'); + + casper.options.logLevel = oldLevel; + casper.options.verbose = true; + + casper.then(function() { + var oldLevel = casper.options.logLevel; + casper.options.logLevel = 'debug'; + casper.options.verbose = false; + casper.evaluate(function() { + __utils__.log('debug message'); + __utils__.log('info message', 'info'); + }); + test.assert(casper.result.log.some(function(e) { + return e.message === 'debug message' && e.level === 'debug' && e.space === 'remote'; + }), 'ClientUtils.log() adds a log entry'); + test.assert(casper.result.log.some(function(e) { + return e.message === 'info message' && e.level === 'info' && e.space === 'remote'; + }), 'ClientUtils.log() adds a log entry at a given level'); + casper.options.logLevel = oldLevel; + casper.options.verbose = true; + }); + + casper.run(function() { + test.assertEquals(this.result.log.length, 3, 'Casper.log() logged messages'); + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/mouseevents.js b/n1k0-casperjs-4f105a9/tests/suites/casper/mouseevents.js new file mode 100644 index 0000000..a5e5a84 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/mouseevents.js @@ -0,0 +1,30 @@ +/*global casper*/ +/*jshint strict:false, maxstatements:99*/ +casper.test.begin('mouseEvent() tests', 16, function(test) { + casper.start('tests/site/mouse-events.html', function() { + test.assert(this.mouseEvent('mousedown', '#test1'), 'Casper.mouseEvent() can dispatch a mousedown event'); + test.assert(this.mouseEvent('mousedown', '#test2'), 'Casper.mouseEvent() can dispatch a mousedown event handled by unobstrusive js'); + test.assert(this.mouseEvent('mouseup', '#test3'), 'Casper.mouseEvent() can dispatch a mouseup event'); + test.assert(this.mouseEvent('mouseup', '#test4'), 'Casper.mouseEvent() can dispatch a mouseup event handled by unobstrusive js'); + test.assert(this.mouseEvent('mouseover', '#test5'), 'Casper.mouseEvent() can dispatch a mouseover event'); + test.assert(this.mouseEvent('mouseover', '#test6'), 'Casper.mouseEvent() can dispatch a mouseover event handled by unobstrusive js'); + test.assert(this.mouseEvent('mouseout', '#test7'), 'Casper.mouseEvent() can dispatch a mouseout event'); + test.assert(this.mouseEvent('mouseout', '#test8'), 'Casper.mouseEvent() can dispatch a mouseout event handled by unobstrusive js'); + }); + + casper.then(function() { + var results = this.getGlobal('results'); + test.assert(results.test1, 'Casper.mouseEvent() triggered mousedown'); + test.assert(results.test2, 'Casper.mouseEvent() triggered mousedown via unobstrusive js'); + test.assert(results.test3, 'Casper.mouseEvent() triggered mouseup'); + test.assert(results.test4, 'Casper.mouseEvent() triggered mouseup via unobstrusive js'); + test.assert(results.test5, 'Casper.mouseEvent() triggered mouseover'); + test.assert(results.test6, 'Casper.mouseEvent() triggered mouseover via unobstrusive js'); + test.assert(results.test7, 'Casper.mouseEvent() triggered mouseout'); + test.assert(results.test8, 'Casper.mouseEvent() triggered mouseout via unobstrusive js'); + }); + + casper.run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/navigation.js b/n1k0-casperjs-4f105a9/tests/suites/casper/navigation.js new file mode 100644 index 0000000..f7b074c --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/navigation.js @@ -0,0 +1,50 @@ +/*global casper*/ +/*jshint strict:false*/ +var server = require('webserver').create(); +var service = server.listen(8090, function(request, response) { + response.statusCode = 200; + response.setHeader('Content-type', 'text/html'); + response.write('<a href="/link">a link</a>'); + response.write('<form action="/form" method="POST"><input type="submit" /></form>'); + response.close(); +}); + +casper.test.begin('Link Navigation updates response', function(test) { + casper.start('http://localhost:8090', function(response) { + casper.click('a'); + casper.then(function(response) { + test.assertUrlMatch( + /\/link$/, + 'URL matches anchor href' + ); + test.assertEquals( + response.url, + casper.page.url, + 'response is consistent with the internal page' + ); + + }); + }).run(function() { + test.done(); + }); +}); + +casper.test.begin('Form Submittal updates the response', function(test) { + casper.start('http://localhost:8090', function(response) { + casper.fill('form', {}, true); + casper.then(function(response) { + test.assertUrlMatch( + /\/form$/, + 'URL matches form action' + ); + test.assertEquals( + response.url, + casper.page.url, + 'response is consistent with the internal page' + ); + }); + }).run(function() { + test.done(); + server.close(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/onerror.js b/n1k0-casperjs-4f105a9/tests/suites/casper/onerror.js new file mode 100644 index 0000000..e22ec1a --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/onerror.js @@ -0,0 +1,25 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('page.error event tests', 2, function(test) { + var error = {}; + var expectedMessage; + if (phantom.casperEngine === 'phantomjs') { + expectedMessage = "ReferenceError: Can't find variable: plop"; + } + else { + expectedMessage = "ReferenceError: plop is not defined"; + } + casper.once("page.error", function onError(msg, trace) { + error.msg = msg; + error.trace = trace; + }); + casper.start('tests/site/error.html', function() { + test.assertEquals(error.msg, expectedMessage, + "page.error event has been caught OK"); + test.assertMatch(error.trace[0].file, /error.html/, + "page.error retrieves correct stack trace"); + }); + casper.run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/open.js b/n1k0-casperjs-4f105a9/tests/suites/casper/open.js new file mode 100644 index 0000000..3981163 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/open.js @@ -0,0 +1,264 @@ +/*global casper*/ +/*jshint strict:false*/ +var usedSettings; + +function onOpen(url, settings) { + usedSettings = settings; +} + +function setUp(test) { + casper.start().on('open', onOpen); +} + +function tearDown(test) { + usedSettings = undefined; + casper.removeListener('open', onOpen); +} + +casper.test.begin('open() GET tests', 2, { + setUp: setUp, + tearDown: tearDown, + test: function(test) { + casper.open('tests/site/index.html').then(function() { + test.pass("Casper.open() can open and load a location using GET"); + test.assertEquals(usedSettings, { + method: "get" + }, "Casper.open() used the expected GET settings"); + }); + + casper.run(function() { + test.done(); + }); + } +}); + +casper.test.begin('open() GET casing tests', 2, { + setUp: setUp, + tearDown: tearDown, + test: function(test) { + casper.open('tests/site/index.html', { + method: 'GET' + }).then(function() { + test.pass("Casper.open() can open and load a location using GET"); + test.assertEquals(usedSettings, { + method: "GET" + }, "Casper.open() used the expected GET settings"); + }); + + casper.run(function() { + test.done(); + }); + } +}); + +casper.test.begin('open() POST tests', 2, { + setUp: setUp, + tearDown: tearDown, + test: function(test) { + casper.open('tests/site/index.html', { + method: 'post', + data: { + plop: 42, + chuck: 'norris' + } + }).then(function() { + test.pass("Casper.open() can open and load a location using POST"); + test.assertEquals(usedSettings, { + method: "post", + data: "plop=42&chuck=norris" + }, "Casper.open() used the expected POST settings"); + }); + + casper.run(function() { + test.done(); + }); + } +}); + +casper.test.begin('open() POST casing tests', 2, { + setUp: setUp, + tearDown: tearDown, + test: function(test) { + casper.open('tests/site/index.html', { + method: 'POST', + data: { + plop: 42, + chuck: 'norris' + } + }).then(function() { + test.pass("Casper.open() can open and load a location using POST"); + test.assertEquals(usedSettings, { + method: "POST", + data: "plop=42&chuck=norris" + }, "Casper.open() used the expected POST settings"); + }); + + casper.run(function() { + test.done(); + }); + } +}); + +casper.test.begin('open() PUT tests', 2, { + setUp: setUp, + tearDown: tearDown, + test: function(test) { + casper.thenOpen('tests/site/index.html', { + method: 'put', + data: { + plop: 42, + chuck: 'norris' + } + }).then(function() { + test.pass("Casper.open() can open and load a location using PUT"); + test.assertEquals(usedSettings, { + method: "put", + data: "plop=42&chuck=norris" + }, "Casper.open() used the expected PUT settings"); + }); + + casper.run(function() { + test.done(); + }); + } +}); + +casper.test.begin('open() PUT casing tests', 2, { + setUp: setUp, + tearDown: tearDown, + test: function(test) { + casper.thenOpen('tests/site/index.html', { + method: 'PUT', + data: { + plop: 42, + chuck: 'norris' + } + }).then(function() { + test.pass("Casper.open() can open and load a location using PUT"); + test.assertEquals(usedSettings, { + method: "PUT", + data: "plop=42&chuck=norris" + }, "Casper.open() used the expected PUT settings"); + }); + + casper.run(function() { + test.done(); + }); + } +}); + +casper.test.begin('open() PUT tests', 2, { + setUp: setUp, + tearDown: tearDown, + test: function(test) { + // HTTP Auth + casper.thenOpen('tests/site/index.html', { + method: 'get', + username: 'bob', + password: 'sinclar' + }).then(function() { + test.pass("Casper.open() can open and load a location using HTTP auth"); + test.assertEquals(usedSettings, { + method: "get", + username: 'bob', + password: 'sinclar' + }, "Casper.open() used the expected HTTP auth settings"); + }); + + casper.run(function() { + test.done(); + }); + } +}); + +casper.test.begin('open() PUT tests', 2, { + setUp: setUp, + tearDown: tearDown, + test: function(test) { + // GET with thenOpen + casper.thenOpen('tests/site/index.html').then(function() { + test.pass("Casper.thenOpen() can open and load a location using GET"); + test.assertEquals(usedSettings, { + method: "get" + }, "Casper.thenOpen() used the expected GET settings"); + }); + + casper.run(function() { + test.done(); + }); + } +}); + +casper.test.begin('open() PUT tests', 2, { + setUp: setUp, + tearDown: tearDown, + test: function(test) { + // POST with thenOpen + casper.thenOpen('tests/site/index.html', { + method: 'post', + data: { + plop: 42, + chuck: 'norris' + } + }, function() { + test.pass("Casper.thenOpen() can open and load a location using POST"); + test.assertEquals(usedSettings, { + method: "post", + data: "plop=42&chuck=norris" + }, "Casper.thenOpen() used the expected POST settings"); + }); + + casper.run(function() { + test.done(); + }); + } +}); + +casper.test.begin('open() PUT tests', 2, { + setUp: setUp, + tearDown: tearDown, + test: function(test) { + // PUT with thenOpen + casper.thenOpen('tests/site/index.html', { + method: 'put', + data: { + plop: 42, + chuck: 'norris' + } + }, function() { + test.pass("Casper.thenOpen() can open and load a location using PUT"); + test.assertEquals(usedSettings, { + method: "put", + data: "plop=42&chuck=norris" + }, "Casper.thenOpen() used the expected PUT settings"); + }); + + casper.run(function() { + test.done(); + }); + } +}); + +casper.test.begin('open() PUT tests', 2, { + setUp: setUp, + tearDown: tearDown, + test: function(test) { + // HTTP Auth with thenOpen + casper.thenOpen('tests/site/index.html', { + method: 'get', + username: 'bob', + password: 'sinclar' + }, function() { + test.pass("Casper.thenOpen() can open and load a location using HTTP auth"); + test.assertEquals(usedSettings, { + method: "get", + username: 'bob', + password: 'sinclar' + }, "Casper.thenOpen() used the expected HTTP auth settings"); + }); + + casper.run(function() { + test.done(); + }); + } +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/popup.js b/n1k0-casperjs-4f105a9/tests/suites/casper/popup.js new file mode 100644 index 0000000..ba16a52 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/popup.js @@ -0,0 +1,91 @@ +/*jshint strict:false, maxstatements:99*/ +/*global CasperError, casper, console, phantom, require*/ +var utils = require('utils'); +var x = require('casper').selectXPath; + +casper.test.begin('popup tests', 22, function(test) { + casper.once('popup.created', function(popup) { + test.pass('"popup.created" event is fired'); + test.assert(utils.isWebPage(popup), + '"popup.created" event callback get a popup page instance'); + }); + + casper.once('popup.loaded', function(popup) { + test.pass('"popup.loaded" event is fired'); + test.assertEquals(popup.evaluate(function() { + return document.title; + }), 'CasperJS test index', + '"popup.loaded" is triggered when popup content is actually loaded'); + }); + + casper.once('popup.closed', function(popup) { + test.assertEquals(this.popups.length, 0, '"popup.closed" event is fired'); + }); + + casper.start('tests/site/popup.html'); + + casper.waitForPopup('index.html', function() { + test.pass('Casper.waitForPopup() waits for a popup being created'); + test.assertEquals(this.popups.length, 1, 'A popup has been added'); + test.assert(utils.isWebPage(this.popups[0]), 'A popup is a WebPage'); + }); + + casper.withPopup('index.html', function() { + test.assertTitle('CasperJS test index', + 'Casper.withPopup() found a popup with expected title'); + test.assertTextExists('three', + 'Casper.withPopup() found a popup with expected text'); + test.assertUrlMatches(/index\.html$/, + 'Casper.withPopup() switched to popup as current active one'); + test.assertEval(function() { + return '__utils__' in window; + }, 'Casper.withPopup() has client utils injected'); + test.assertExists('h1', + 'Casper.withPopup() can perform assertions on the DOM'); + test.assertExists(x('//h1'), + 'Casper.withPopup() can perform assertions on the DOM using XPath'); + }); + + casper.then(function() { + test.assertUrlMatches(/popup\.html$/, + 'Casper.withPopup() has reverted to main page after using the popup'); + }); + + casper.thenClick('.close', function() { + test.assertEquals(this.popups.length, 0, 'Popup is removed when closed'); + }); + + casper.thenOpen('tests/site/popup.html'); + + casper.waitForPopup(/index\.html$/, function() { + test.pass('Casper.waitForPopup() waits for a popup being created'); + }); + + casper.withPopup(/index\.html$/, function() { + test.assertTitle('CasperJS test index', + 'Casper.withPopup() can use a regexp to identify popup'); + }); + + casper.thenClick('.close', function() { + test.assertUrlMatches(/popup\.html$/, + 'Casper.withPopup() has reverted to main page after using the popup'); + test.assertEquals(this.popups.length, 0, 'Popup is removed when closed'); + this.removeAllListeners('popup.created'); + this.removeAllListeners('popup.loaded'); + this.removeAllListeners('popup.closed'); + }); + + casper.thenClick('a[target="_blank"]'); + + casper.waitForPopup('form.html', function() { + test.pass('Casper.waitForPopup() waits when clicked on a link with target=_blank'); + }); + + casper.withPopup('form.html', function() { + test.assertTitle('CasperJS test form'); + }); + + casper.run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/prompt.js b/n1k0-casperjs-4f105a9/tests/suites/casper/prompt.js new file mode 100644 index 0000000..f77a56d --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/prompt.js @@ -0,0 +1,12 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('prompt tests', 1, function(test) { + casper.setFilter('page.prompt', function(message, value) { + return 'Chuck ' + value; + }); + casper.start('tests/site/prompt.html', function() { + test.assertEquals(this.getGlobal('name'), 'Chuck Norris', 'prompted value has been received'); + }).run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/request.coffee b/n1k0-casperjs-4f105a9/tests/suites/casper/request.coffee new file mode 100644 index 0000000..8f0ad83 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/request.coffee @@ -0,0 +1,103 @@ +#global casper + +#jshint strict:false + +utils = require "utils" + +if utils.ltVersion(phantom.version, '1.9.0') + casper.test.skip(6, 'PhantomJS version <1.9.0 does not implement request.abort()') + casper.test.done() +else + SERVER = 'http://localhost:54321/' + ORIGINAL_URL = "tests/site/index.html" + CHANGED_URL = "tests/site/index.html?foo=bar" + + setToTrueOnResourceRequested = false + setToTrueOnResourceReceived = false + requestURLRequested = '' + requestURLReceived = '' + + onResourceRequested = (casper, requestData, request) -> + if requestData.url == (SERVER + ORIGINAL_URL) + setToTrueOnResourceRequested = true + requestURLRequested = requestData.url + + onResourceRequestedWithAbort = (casper, requestData, request) -> + if requestData.url == (SERVER + ORIGINAL_URL) + request.abort() + + onResourceRequestedWithChangeURL = (casper, requestData, request) -> + if requestData.url == (SERVER + ORIGINAL_URL) + request.changeUrl(SERVER + CHANGED_URL) + + onResourceReceived = (casper, response) -> + if response.url == (SERVER + ORIGINAL_URL) + setToTrueOnResourceReceived = true + requestURLReceived = response.url + + onResourceReceivedWithChangeURL = (casper, response) -> + if response.url == (SERVER + CHANGED_URL) + requestURLReceived = response.url + + setUp = (test) -> + casper.options.onResourceRequested = onResourceRequested + casper.options.onResourceReceived = onResourceReceived + casper.start() + + setUpWithAbort = (test) -> + casper.options.onResourceRequested = onResourceRequestedWithAbort + casper.options.onResourceReceived = onResourceReceived + casper.start() + + setUpWithChangeURL = (test) -> + casper.options.onResourceRequested = onResourceRequestedWithChangeURL + casper.options.onResourceReceived = onResourceReceivedWithChangeURL + casper.start() + + tearDown = (test) -> + setToTrueOnResourceRequested = false + setToTrueOnResourceReceived = false + casper.options.onResourceRequested = null + casper.options.onResourceReceived = null + + + casper.test.begin "onResourceRequested tests without abort/override", 4, + setUp: setUp + tearDown: tearDown + test: (test) -> + casper.open(ORIGINAL_URL).then -> + + casper.wait 200, -> + test.assertEquals setToTrueOnResourceRequested, true, "Casper.options.onResourceRequested called successfully" + test.assertEquals requestURLRequested, SERVER+ORIGINAL_URL, "request url successfully recorded" + test.assertEquals setToTrueOnResourceReceived, true, "Casper.options.onResourceReceived called successfully" + test.assertEquals requestURLReceived, SERVER+ORIGINAL_URL, "response url successfully recorded" + + casper.run -> + test.done() + + + casper.test.begin "onResourceRequested tests with request.abort()", 1, + setUp: setUpWithAbort + tearDown: tearDown + test: (test) -> + casper.open(ORIGINAL_URL).then -> + + casper.wait 200, -> + test.assertNotEquals setToTrueOnResourceReceived, true, "Casper.options.onResourceReceived correctly never called" + + casper.run -> + test.done() + + + casper.test.begin "onResourceRequested tests with request.changeUrl()", 1, + setUp: setUpWithChangeURL + tearDown: tearDown + test: (test) -> + casper.open(ORIGINAL_URL).then -> + + casper.wait 200, -> + test.assertEquals requestURLReceived, SERVER+CHANGED_URL, "response url successfully changed" + + casper.run -> + test.done() diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/request.js b/n1k0-casperjs-4f105a9/tests/suites/casper/request.js new file mode 100644 index 0000000..616faf5 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/request.js @@ -0,0 +1,48 @@ +/*global casper*/ +/*jshint strict:false*/ +var currentRequest; + +function onResourceRequested(requestData, request) { + currentRequest = requestData; +} + +function testHeader(header) { + return header.name === 'Accept' && header.value === 'application/json'; +} + +casper.test.begin('requests tests', 3, { + setUp: function() { + casper.on('page.resource.requested', onResourceRequested); + }, + + tearDown: function() { + currentRequest = undefined; + casper.removeListener('page.resource.requested', onResourceRequested); + }, + + test: function(test) { + casper.start('tests/site/index.html', function() { + test.assertNot(currentRequest.headers.some(testHeader), + "Casper.open() sets no custom header by default"); + }); + + casper.thenOpen('tests/site/index.html', { + headers: { + Accept: 'application/json' + } + }, function() { + test.assert(currentRequest.headers.some(testHeader), + "Casper.open() can set a custom header"); + }); + + casper.thenOpen('tests/site/index.html', function() { + test.assertNot(currentRequest.headers.some(testHeader), + "Casper.open() custom headers option is not persistent"); + }); + + casper.run(function() { + this.removeAllListeners('page.resource.requested'); + test.done(); + }); + } +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/resources.js b/n1k0-casperjs-4f105a9/tests/suites/casper/resources.js new file mode 100644 index 0000000..5805647 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/resources.js @@ -0,0 +1,35 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin("Basic resources tests", 5, function(test) { + casper.start("tests/site/resources.html", function() { + test.assertEquals(this.resources.length, 1, "only one resource found"); + }); + + casper.waitForResource("dummy.js", function() { + test.assertEquals(this.resources.length, 2, "two resources found"); + test.assertResourceExists(/dummy\.js/i, "phantom image found via test RegExp"); + test.assertResourceExists(function(res) { + return res.url.match("dummy.js"); + }, "phantom image found via test Function"); + test.assertResourceExists("dummy.js", "phantom image found via test String"); + }, function onTimeout() { + test.fail("waitForResource timeout occured"); + }); + + casper.run(function() { + test.done(); + }); +}); + +casper.test.begin('"resource.error" event', 3, function(test) { + casper.on("resource.error", function(error) { + test.assertType(error, "object", '"resource.error" triggered error information'); + test.assert(error.errorCode === 203, '"resource.error" error code is correct'); + test.assertMatch(error.url, /non-existant\.html$/, '"resource.error" url is correct'); + }); + + casper.start('tests/site/non-existant.html').run(function() { + casper.removeAllListeners("resource.error"); + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/scripts.js b/n1k0-casperjs-4f105a9/tests/suites/casper/scripts.js new file mode 100644 index 0000000..d0b44c9 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/scripts.js @@ -0,0 +1,34 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('remote script includes tests', 4, { + setUp: function() { + casper.options.remoteScripts = [ + 'includes/include1.js', // local includes are actually served + 'includes/include2.js' // through the local test webserver + ]; + }, + + tearDown: function() { + casper.options.remoteScripts = []; + }, + + test: function(test) { + casper.start('tests/site/index.html', function() { + test.assertSelectorHasText('#include1', 'include1', + 'Casper.includeRemoteScripts() includes a first remote script on start'); + test.assertSelectorHasText('#include2', 'include2', + 'Casper.includeRemoteScripts() includes a second remote script on start'); + }); + + casper.thenOpen('tests/site/form.html', function() { + test.assertSelectorHasText('#include1', 'include1', + 'Casper.includeRemoteScripts() includes a first remote script on second step'); + test.assertSelectorHasText('#include2', 'include2', + 'Casper.includeRemoteScripts() includes a second remote script on second step'); + }); + + casper.run(function() { + test.done(); + }); + } +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/scroll.js b/n1k0-casperjs-4f105a9/tests/suites/casper/scroll.js new file mode 100644 index 0000000..f9a62cb --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/scroll.js @@ -0,0 +1,30 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('Casper.scrollTo()', 2, function(test) { + casper.start().then(function() { + this.setContent('<div style="width:2000px;height:2000px">large div is large</div>'); + this.scrollTo(1000, 1000); + test.assertEquals(this.getGlobal("scrollX"), 1000, "scrollTo() scrolls to X position"); + test.assertEquals(this.getGlobal("scrollY"), 1000, "scrollTo() scrolls to Y position"); + }); + + casper.run(function() { + test.done(); + }); +}); + + +casper.test.begin('Casper.scrollToBottom()', 1, function(test) { + casper.start().then(function() { + this.setContent('<div style="height:2000px">long div is long</div>'); + this.scrollToBottom(); + test.assertEval(function() { + /*global __utils__*/ + return __utils__.getDocumentHeight() - window.innerHeight === window.scrollY; + }, "scrollToBottom() scrolls to max Y by default"); + }); + + casper.run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/start.js b/n1k0-casperjs-4f105a9/tests/suites/casper/start.js new file mode 100644 index 0000000..c80a2e5 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/start.js @@ -0,0 +1,17 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('start() tests', 4, function(test) { + casper.start('tests/site/index.html', function() { + test.pass('Casper.start() can chain a next step'); + test.assertTitle('CasperJS test index', 'Casper.start() opened the passed url'); + test.assertEval(function() { + return typeof(__utils__) === "object"; + }, 'Casper.start() injects ClientUtils instance within remote DOM'); + }); + + test.assert(casper.started, 'Casper.start() started'); + + casper.run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/steps.js b/n1k0-casperjs-4f105a9/tests/suites/casper/steps.js new file mode 100644 index 0000000..b4d020e --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/steps.js @@ -0,0 +1,54 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('steps tests', 8, function(test) { + casper.start('tests/site/index.html'); + + var nsteps = casper.steps.length; + + casper.then(function(response) { + test.assertTitle('CasperJS test index', + 'Casper.then() added a new step'); + }); + + test.assertEquals(casper.steps.length, nsteps + 1, + 'Casper.then() can add a new step'); + + casper.thenOpen('tests/site/test.html'); + + test.assertEquals(casper.steps.length, nsteps + 2, + 'Casper.thenOpen() can add a new step'); + + casper.thenOpen('tests/site/test.html', function() { + test.assertTitle('CasperJS test target', + 'Casper.thenOpen() opened a location and executed a step'); + }); + + test.assertEquals(casper.steps.length, nsteps + 4, + 'Casper.thenOpen() can add a new step for opening, plus another step'); + + casper.each([1, 2, 3], function(self, item, i) { + test.assertEquals(i, item - 1, + 'Casper.each() passes a contextualized index'); + }); + + casper.run(function() { + test.done(); + }); +}); + +casper.test.begin('eachThen() tests', 1, function(test) { + var received = []; + + casper.start().eachThen([1, 2, 3], function(response) { + if (!response) { + test.fail('No response received'); + } + received.push(response.data); + }); + + casper.run(function() { + test.assertEquals(received, [1, 2, 3], + 'Casper.eachThen() passes item to step data'); + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/urls.js b/n1k0-casperjs-4f105a9/tests/suites/casper/urls.js new file mode 100644 index 0000000..5d36b2a --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/urls.js @@ -0,0 +1,25 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('urls tests', 6, function(test) { + casper.start('tests/site/urls.html', function() { + this.clickLabel('raw unicode', 'a'); + }); + + casper.then(function() { + test.assertHttpStatus(200); + test.assertUrlMatches('Forlì', 'Casper.getCurrentUrl() retrieves a raw unicode URL'); + this.clickLabel('escaped', 'a'); + }); + + casper.then(function() { + test.assertHttpStatus(200); + test.assertUrlMatches('Forlì', 'Casper.getCurrentUrl() retrieves an escaped URL'); + this.clickLabel('uri encoded', 'a'); + }); + + casper.run(function() { + test.assertHttpStatus(200); + test.assertUrlMatches('Forlì', 'Casper.getCurrentUrl() retrieves a decoded URL'); + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/viewport.js b/n1k0-casperjs-4f105a9/tests/suites/casper/viewport.js new file mode 100644 index 0000000..c0df689 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/viewport.js @@ -0,0 +1,41 @@ +/*global casper*/ +/*jshint strict:false*/ +var utils = require('utils'); + +casper.test.begin('viewport() tests', 3, function(test) { + casper.start(); + casper.viewport(1337, 999); + test.assertEquals(casper.page.viewportSize.width, 1337, + 'Casper.viewport() can change the width of page viewport'); + test.assertEquals(casper.page.viewportSize.height, 999, + 'Casper.viewport() can change the height of page viewport'); + test.assertRaises(casper.viewport, ['a', 'b'], + 'Casper.viewport() validates viewport size data'); + test.done(); +}); + +casper.test.begin('viewport() asynchronous tests', 2, function(test) { + var screenshotData; + + casper.start('tests/site/index.html').viewport(800, 600, function() { + this.setContent(utils.format('<img src="data:image/png;base64,%s">', + this.captureBase64('png'))); + }); + + casper.then(function() { + var imgInfo = this.getElementInfo('img'); + if (phantom.casperEngine === "slimerjs" && imgInfo.width !== 800) { + // sometimes, setting viewport could take more time in slimerjs/gecko + // and the image is not still ready: :-/ + test.skip(2); + } + else { + test.assertEquals(imgInfo.width, 800, 'Casper.viewport() changes width asynchronously'); + test.assertEquals(imgInfo.height, 600, 'Casper.viewport() changes height asynchronously'); + } + }); + + casper.run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/visible.js b/n1k0-casperjs-4f105a9/tests/suites/casper/visible.js new file mode 100644 index 0000000..accc451 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/visible.js @@ -0,0 +1,19 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('visibility tests', 5, function(test) { + casper.start('tests/site/visible.html', function() { + test.assert(!this.visible('#img1'), 'Casper.visible() can detect if an element is invisible'); + test.assert(this.visible('#img2'), 'Casper.visible() can detect if an element is visible'); + test.assert(!this.visible('#img3'), 'Casper.visible() can detect if an element is invisible'); + test.assert(this.visible('img'), 'Casper.visible() can detect if an element is visible'); + this.waitWhileVisible('#img1', function() { + test.pass('Casper.waitWhileVisible() can wait while an element is visible'); + }, function() { + test.fail('Casper.waitWhileVisible() can wait while an element is visible'); + }, 2000); + }); + + casper.run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/wait.js b/n1k0-casperjs-4f105a9/tests/suites/casper/wait.js new file mode 100644 index 0000000..dcf0823 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/wait.js @@ -0,0 +1,170 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('wait() tests', 1, function(test) { + var waitStart; + + casper.start('tests/site/index.html', function() { + waitStart = new Date().getTime(); + }); + + casper.wait(250, function() { + test.assert(new Date().getTime() - waitStart > 250, + 'Casper.wait() can wait for a given amount of time'); + }); + + casper.run(function() { + test.done(); + }); +}); + +casper.test.begin('waitFor() tests', 2, function(test) { + casper.start('tests/site/waitFor.html'); + + casper.waitFor(function() { + return this.evaluate(function() { + return document.querySelectorAll('li').length === 4; + }); + }, function() { + test.pass('Casper.waitFor() can wait for something to happen'); + }, function() { + test.fail('Casper.waitFor() can wait for something to happen'); + }); + + casper.reload().waitFor(function(){ + return false; + }, function() { + test.fail('waitFor() processes onTimeout callback'); + }, function() { + test.pass('waitFor() processes onTimeout callback'); + }, 1000); + + casper.run(function() { + test.done(); + }); +}); + +casper.test.begin('waitForResource() tests', 2, function(test) { + casper.start('tests/site/waitFor.html'); + + casper.waitForResource('phantom.png', function() { + test.pass('Casper.waitForResource() waits for a resource'); + }, function() { + test.fail('Casper.waitForResource() waits for a resource'); + }); + + casper.reload().waitForResource(/phantom\.png$/, function() { + test.pass('Casper.waitForResource() waits for a resource using RegExp'); + }, function() { + test.fail('Casper.waitForResource() waits for a resource using RegExp'); + }); + + casper.run(function() { + test.done(); + }); +}); + +casper.test.begin('waitForSelector() tests', 1, function(test) { + casper.start('tests/site/waitFor.html'); + + casper.waitForSelector('li:nth-child(4)', function() { + test.pass('Casper.waitForSelector() waits for a selector to exist'); + }, function() { + test.fail('Casper.waitForSelector() waits for a selector to exist'); + }); + + casper.run(function() { + test.done(); + }); +}); + +casper.test.begin('waitForText() tests', 3, function(test) { + casper.start('tests/site/waitFor.html'); + + casper.waitForText('<li>four</li>', function() { + test.pass('Casper.waitForText() can wait for text'); + }, function() { + test.fail('Casper.waitForText() can wait for text'); + }); + + casper.reload().waitForText(/four/i, function() { + test.pass('Casper.waitForText() can wait for regexp'); + }, function() { + test.fail('Casper.waitForText() can wait for regexp'); + }); + + casper.reload().waitForText('Voilà', function() { + test.pass('Casper.waitForText() can wait for decoded HTML text'); + }, function() { + test.fail('Casper.waitForText() can wait for decoded HTML text'); + }, 1000); + + casper.run(function() { + test.done(); + }); +}); + +casper.test.begin('waitForSelectorTextChange() tests', 1, function(test) { + casper.start('tests/site/waitFor.html'); + + casper.waitForSelectorTextChange('#textChange', function() { + test.pass('Casper.waitForSelectorTextChange() can wait for text on a selector to change'); + }, function() { + test.fail('Casper.waitForSelectorTextChange() can wait for text on a selector to change'); + }); + + casper.run(function() { + test.done(); + }); +}); + +casper.test.begin('waitUntilVisible() tests', 2, function(test) { + casper.start('tests/site/waitFor.html'); + + casper.waitUntilVisible('li:nth-child(4)', function() { + test.pass('Casper.waitUntilVisible() waits for a selector being visible'); + }, function() { + test.fail('Casper.waitUntilVisible() waits for a selector being visible'); + }); + + casper.waitUntilVisible('p', function() { + test.pass('Casper.waitUntilVisible() waits for a selector being visible'); + }, function() { + test.fail('Casper.waitUntilVisible() waits for a selector being visible'); + }); + + casper.run(function() { + test.done(); + }); +}); + +casper.test.begin('waitForUrl() regexp tests', 1, function(test) { + casper.start().thenEvaluate(function() { + setTimeout(function() { + document.location = './form.html'; + }, 100); + }); + + casper.waitForUrl(/form\.html$/, function() { + test.pass('Casper.waitForUrl() waits for a given regexp url'); + }); + + casper.run(function() { + test.done(); + }); +}); + +casper.test.begin('waitForUrl() string tests', 1, function(test) { + casper.start().thenEvaluate(function() { + setTimeout(function() { + document.location = './form.html'; + }, 100); + }); + + casper.waitForUrl('form.html', function() { + test.pass('Casper.waitForUrl() waits for a given string url'); + }); + + casper.run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/casper/xpath.js b/n1k0-casperjs-4f105a9/tests/suites/casper/xpath.js new file mode 100644 index 0000000..81b08d7 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/casper/xpath.js @@ -0,0 +1,34 @@ +/*global casper, __utils__*/ +/*jshint strict:false*/ +var x = require('casper').selectXPath; + +casper.test.begin('XPath tests', 6, function(test) { + casper.start('tests/site/index.html', function() { + test.assertExists({ + type: 'xpath', + path: '/html/body/ul/li[2]' + }, 'XPath selector can find an element'); + test.assertDoesntExist({ + type: 'xpath', + path: '/html/body/ol/li[2]' + }, 'XPath selector does not retrieve a nonexistent element'); + test.assertExists(x('/html/body/ul/li[2]'), 'selectXPath() shortcut can find an element as well'); + test.assertEvalEquals(function() { + return __utils__.findAll({type: 'xpath', path: '/html/body/ul/li'}).length; + }, 3, 'Correct number of elements are found'); + }); + + casper.thenClick(x('/html/body/a[2]'), function() { + test.assertTitle('CasperJS test form', 'Clicking XPath works as expected'); + this.fill(x('/html/body/form'), { + email: 'chuck@norris.com' + }); + test.assertEvalEquals(function() { + return document.querySelector('input[name="email"]').value; + }, 'chuck@norris.com', 'Casper.fill() can fill an input[type=text] form field'); + }); + + casper.run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/cli.js b/n1k0-casperjs-4f105a9/tests/suites/cli.js new file mode 100644 index 0000000..feb6b28 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/cli.js @@ -0,0 +1,158 @@ +/*global casper*/ +/*jshint strict:false, maxstatements:99*/ +var cli = require('cli'); + +casper.test.begin('parsing an empty argument list', 12, function(test) { + var parsed = cli.parse([]); + // clean + test.assertEquals(parsed.args, [], 'parse() returns expected positional args array'); + test.assertEquals(parsed.options, {}, 'parse() returns expected options object'); + test.assertEquals(parsed.get(0), undefined, 'parse() does not return inexistant positional arg'); + test.assertEquals(parsed.get('blah'), undefined, 'parse() does not return inexistant option'); + test.assert(!parsed.has(0), 'has() checks if an arg is set'); + test.assert(!parsed.has('blah'), 'has() checks if an option is set'); + // raw + test.assertEquals(parsed.raw.args, [], 'parse() returns expected positional args array'); + test.assertEquals(parsed.raw.options, {}, 'parse() returns expected options object'); + test.assertEquals(parsed.raw.get(0), undefined, 'parse() does not return inexistant positional arg'); + test.assertEquals(parsed.raw.get('blah'), undefined, 'parse() does not return inexistant option'); + test.assert(!parsed.raw.has(0), 'has() checks if a raw arg is set'); + test.assert(!parsed.raw.has('blah'), 'has() checks if a raw option is set'); + test.done(); +}); + +casper.test.begin('parsing an basic argument list', 14, function(test) { + var parsed = cli.parse(['foo', 'bar']); + // clean + test.assertEquals(parsed.args, ['foo', 'bar'], 'parse() returns expected positional args array'); + test.assertEquals(parsed.options, {}, 'parse() returns expected options object'); + test.assertEquals(parsed.get(0), 'foo', 'parse() retrieve first positional arg'); + test.assertEquals(parsed.get(1), 'bar', 'parse() retrieve second positional arg'); + test.assert(parsed.has(0), 'has() checks if an arg is set'); + test.assert(parsed.has(1), 'has() checks if an arg is set'); + test.assert(!parsed.has(2), 'has() checks if an arg is not set'); + // raw + test.assertEquals(parsed.raw.args, ['foo', 'bar'], 'parse() returns expected positional raw args array'); + test.assertEquals(parsed.raw.options, {}, 'parse() returns expected raw options object'); + test.assertEquals(parsed.raw.get(0), 'foo', 'parse() retrieve first positional raw arg'); + test.assertEquals(parsed.raw.get(1), 'bar', 'parse() retrieve second positional raw arg'); + test.assert(parsed.raw.has(0), 'has() checks if a arw arg is set'); + test.assert(parsed.raw.has(1), 'has() checks if a arw arg is set'); + test.assert(!parsed.raw.has(2), 'has() checks if a arw arg is not set'); + test.done(); +}); + +casper.test.begin('parsing some options', 12, function(test) { + var parsed = cli.parse(['--foo=bar', '--baz']); + // clean + test.assertEquals(parsed.args, [], 'parse() returns expected positional args array'); + test.assertEquals(parsed.options, {foo: 'bar', baz: true}, 'parse() returns expected options object'); + test.assertEquals(parsed.get('foo'), 'bar', 'parse() retrieve an option value'); + test.assert(parsed.get('baz'), 'parse() retrieve boolean option flag'); + test.assert(parsed.has("foo"), 'has() checks if an option is set'); + test.assert(parsed.has("baz"), 'has() checks if an option is set'); + // raw + test.assertEquals(parsed.raw.args, [], 'parse() returns expected positional raw args array'); + test.assertEquals(parsed.raw.options, {foo: 'bar', baz: true}, 'parse() returns expected options raw object'); + test.assertEquals(parsed.raw.get('foo'), 'bar', 'parse() retrieve an option raw value'); + test.assert(parsed.raw.get('baz'), 'parse() retrieve boolean raw option flag'); + test.assert(parsed.raw.has("foo"), 'has() checks if a raw option is set'); + test.assert(parsed.raw.has("baz"), 'has() checks if a raw option is set'); + test.done(); +}); + +casper.test.begin('parsing an empty argument list', 8, function(test) { + var parsed = cli.parse(['--&é"à=42===42']); + // clean + test.assertEquals(parsed.args, [], 'parse() returns expected positional args array'); + test.assertEquals(parsed.options, { '&é"à': "42===42" }, 'parse() returns expected options object'); + test.assertEquals(parsed.get('&é"à'), "42===42", 'parse() handles options with exotic names'); + test.assert(parsed.has('&é"à'), 'has() checks if an option is set'); + // raw + test.assertEquals(parsed.raw.args, [], 'parse() returns expected positional raw args array'); + test.assertEquals(parsed.raw.options, { '&é"à': "42===42" }, 'parse() returns expected options raw object'); + test.assertEquals(parsed.raw.get('&é"à'), "42===42", 'parse() handles raw options with exotic names'); + test.assert(parsed.raw.has('&é"à'), 'has() checks if a raw option is set'); + test.done(); +}); + +casper.test.begin('parsing commands containing args and options', 34, function(test) { + var parsed = cli.parse(['foo & bar', 'baz & boz', '--universe=42', + '--lap=13.37', '--chucknorris', '--oops=false']); + // clean + test.assertEquals(parsed.args, ['foo & bar', 'baz & boz'], 'parse() returns expected positional args array'); + test.assertEquals(parsed.options, { + universe: 42, + lap: 13.37, + chucknorris: true, + oops: false }, 'parse() returns expected options object'); + test.assertEquals(parsed.get('universe'), 42, 'parse() can cast a numeric option value'); + test.assertEquals(parsed.get('lap'), 13.37, 'parse() can cast a float option value'); + test.assertType(parsed.get('lap'), "number", 'parse() can cast a boolean value'); + test.assert(parsed.get('chucknorris'), 'parse() can get a flag value by its option name'); + test.assertType(parsed.get('oops'), "boolean", 'parse() can cast a boolean value'); + test.assertEquals(parsed.get('oops'), false, 'parse() can cast a boolean value'); + test.assert(parsed.has(0), 'has() checks if an arg is set'); + test.assert(parsed.has(1), 'has() checks if an arg is set'); + test.assert(parsed.has("universe"), 'has() checks if an option is set'); + test.assert(parsed.has("lap"), 'has() checks if an option is set'); + test.assert(parsed.has("chucknorris"), 'has() checks if an option is set'); + test.assert(parsed.has("oops"), 'has() checks if an option is set'); + + // drop() + parsed.drop(0); + test.assertEquals(parsed.get(0), 'baz & boz', 'drop() dropped arg'); + parsed.drop("universe"); + test.assert(!parsed.has("universe"), 'drop() dropped option'); + test.assert(!parsed.raw.has("universe"), 'drop() dropped raw option'); + test.assertEquals(parsed.args, ["baz & boz"], 'drop() did not affect other args'); + test.assertEquals(parsed.options, { + lap: 13.37, + chucknorris: true, + oops: false + }, 'drop() did not affect other options'); + + // raw + test.assertEquals(parsed.args.length, parsed.raw.args.length, + 'parse() cast and raw args share same length'); + test.assertEquals(Object.keys(parsed.options).length, Object.keys(parsed.raw.options).length, + 'parse() cast and raw options share same length'); + test.assertEquals(parsed.raw.args, ['baz & boz'], + 'parse() returns expected positional raw args array'); + test.assertEquals(parsed.raw.options, { + lap: "13.37", + chucknorris: true, + oops: "false" + }, 'parse() returns expected options raw object'); + test.assertEquals(parsed.raw.get('lap'), "13.37", 'parse() does not cast a raw float option value'); + test.assertType(parsed.raw.get('lap'), "string", 'parse() does not cast a numeric value'); + test.assert(parsed.raw.get('chucknorris'), 'parse() can get a flag value by its option name'); + test.assertType(parsed.raw.get('oops'), "string", 'parse() can cast a boolean value'); + test.assertEquals(parsed.raw.get('oops'), "false", 'parse() can cast a boolean value'); + + // drop() for raw + parsed.raw.drop(0); + test.assertEquals(parsed.raw.get(0), undefined, 'drop() dropped raw arg'); + parsed.raw.drop("universe"); + test.assert(!parsed.raw.has("universe"), 'drop() dropped raw option'); + test.assertEquals(parsed.raw.args, [], 'drop() did not affect other raw args'); + test.assertEquals(parsed.raw.options, { + lap: "13.37", + chucknorris: true, + oops: "false" + }, 'drop() did not affect other raw options'); + parsed.raw.drop("lap"); + test.assert(!parsed.raw.has("lap"), 'drop() dropped raw option'); + test.assert(!parsed.has("lap"), 'drop() dropped cast option as well'); + + test.done(); +}); + +casper.test.begin('default values', 2, function(test) { + var parsed = cli.parse(['foo', '--bar']); + test.assertEquals(parsed.get(42, 'boz'), 'boz', + 'get() can return a default arg value'); + test.assertEquals(parsed.get('--zorg', 'boz'), 'boz', + 'get() can return a default option value'); + test.done(); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/clientutils.js b/n1k0-casperjs-4f105a9/tests/suites/clientutils.js new file mode 100644 index 0000000..5ba6977 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/clientutils.js @@ -0,0 +1,203 @@ +/*global casper*/ +/*jshint strict:false*/ +var fs = require('fs'); +var x = require('casper').selectXPath; + +function fakeDocument(html) { + window.document.body.innerHTML = html; +} + +casper.test.begin('ClientUtils.encode() tests', 6, function(test) { + var clientutils = require('clientutils').create(), + testCases = { + 'an empty string': '', + 'a word': 'plop', + 'a null char': 'a\u0000', + 'an utf8 string': 'ÀÁÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', + 'song lyrics': ("Voilà l'été, j'aperçois le soleil\n" + + "Les nuages filent et le ciel s'éclaircit\n" + + "Et dans ma tête qui bourdonnent?\n" + + "Les abeilles!"), + 'a file contents': fs.read(phantom.casperPath + '/tests/site/alert.html') + }; + for (var what in testCases) { + test.assertEquals( + clientutils.decode(clientutils.encode(testCases[what])), + testCases[what], + 'ClientUtils.encode() encodes and decodes ' + what + ); + } + test.done(); +}); + +casper.test.begin('ClientUtils.exists() tests', 5, function(test) { + var clientutils = require('clientutils').create(); + fakeDocument('<ul class="foo"><li>bar</li><li>baz</li></ul>'); + test.assert(clientutils.exists('ul'), + 'ClientUtils.exists() checks that an element exist'); + test.assertNot(clientutils.exists('ol'), + 'ClientUtils.exists() checks that an element exist'); + test.assert(clientutils.exists('ul.foo li'), + 'ClientUtils.exists() checks that an element exist'); + // xpath + test.assert(clientutils.exists(x('//ul')), + 'ClientUtils.exists() checks that an element exist using XPath'); + test.assertNot(clientutils.exists(x('//ol')), + 'ClientUtils.exists() checks that an element exist using XPath'); + fakeDocument(null); + test.done(); +}); + +casper.test.begin('ClientUtils.findAll() tests', 7, function(test) { + var clientutils = require('clientutils').create(); + fakeDocument('<ul class="foo"><li>bar</li><li>baz</li></ul>'); + test.assertType(clientutils.findAll('li'), 'array', + 'ClientUtils.findAll() can find matching DOM elements'); + test.assertEquals(clientutils.findAll('li').length, 2, + 'ClientUtils.findAll() can find matching DOM elements'); + test.assertType(clientutils.findAll('ol'), 'array', + 'ClientUtils.findAll() can find matching DOM elements'); + test.assertEquals(clientutils.findAll('ol').length, 0, + 'ClientUtils.findAll() can find matching DOM elements'); + // scoped + var scope = clientutils.findOne('ul'); + test.assertType(clientutils.findAll('li', scope), 'array', + 'ClientUtils.findAll() can find matching DOM elements within a given scope'); + test.assertEquals(clientutils.findAll('li', scope).length, 2, + 'ClientUtils.findAll() can find matching DOM elements within a given scope'); + test.assertType(clientutils.findAll(x('//li'), scope), 'array', + 'ClientUtils.findAll() can find matching DOM elements using XPath within a given scope'); + fakeDocument(null); + test.done(); +}); + +casper.test.begin('ClientUtils.findOne() tests', 4, function(test) { + var clientutils = require('clientutils').create(); + fakeDocument('<ul class="foo"><li>bar</li><li>baz</li></ul>'); + test.assertType(clientutils.findOne('ul'), 'htmlulistelement', + 'ClientUtils.findOne() can find a matching DOM element'); + test.assertNot(clientutils.findOne('ol'), + 'ClientUtils.findOne() can find a matching DOM element'); + // scoped + var scope = clientutils.findOne('ul'); + test.assertType(clientutils.findOne('li', scope), 'htmllielement', + 'ClientUtils.findOne() can find a matching DOM element within a given scope'); + test.assertType(clientutils.findOne(x('//li'), scope), 'htmllielement', + 'ClientUtils.findOne() can find a matching DOM element using XPath within a given scope'); + fakeDocument(null); + test.done(); +}); + + +casper.test.begin('ClientUtils.processSelector() tests', 6, function(test) { + var clientutils = require('clientutils').create(); + // CSS3 selector + var cssSelector = clientutils.processSelector('html body > ul.foo li'); + test.assertType(cssSelector, 'object', + 'ClientUtils.processSelector() can process a CSS3 selector'); + test.assertEquals(cssSelector.type, 'css', + 'ClientUtils.processSelector() can process a CSS3 selector'); + test.assertEquals(cssSelector.path, 'html body > ul.foo li', + 'ClientUtils.processSelector() can process a CSS3 selector'); + // XPath selector + var xpathSelector = clientutils.processSelector(x('//li[text()="blah"]')); + test.assertType(xpathSelector, 'object', + 'ClientUtils.processSelector() can process a XPath selector'); + test.assertEquals(xpathSelector.type, 'xpath', + 'ClientUtils.processSelector() can process a XPath selector'); + test.assertEquals(xpathSelector.path, '//li[text()="blah"]', + 'ClientUtils.processSelector() can process a XPath selector'); + test.done(); +}); + +casper.test.begin('ClientUtils.getElementBounds() tests', 3, function(test) { + casper.start().then(function() { + this.page.content = '<div id="b1" style="position:fixed;top:10px;left:11px;width:50px;height:60px"></div>'; + test.assertEquals( + this.getElementBounds('#b1'), + { top: 10, left: 11, width: 50, height: 60 }, + 'ClientUtils.getElementBounds() retrieves element boundaries' + ); + }); + casper.then(function() { + var html = '<div id="boxes">'; + html += ' <div style="position:fixed;top:10px;left:11px;width:50px;height:60px"></div>'; + html += ' <div style="position:fixed;top:20px;left:21px;width:70px;height:80px"></div>'; + html += '</div>'; + this.page.content = html; + var bounds = this.getElementsBounds('#boxes div'); + test.assertEquals( + bounds[0], + { top: 10, left: 11, width: 50, height: 60 }, + 'ClientUtils.getElementsBounds() retrieves multiple elements boundaries' + ); + test.assertEquals( + bounds[1], + { top: 20, left: 21, width: 70, height: 80 }, + 'ClientUtils.getElementsBounds() retrieves multiple elements boundaries' + ); + }); + casper.run(function() { + test.done(); + }); +}); + +casper.test.begin('ClientUtils.getElementInfo() tests', 10, function(test) { + casper.page.content = '<a href="plop" class="plip plup"><i>paf</i></a>'; + var info = casper.getElementInfo('a.plip'); + test.assertEquals(info.nodeName, 'a', 'ClientUtils.getElementInfo() retrieves element name'); + test.assertEquals(info.attributes, { + 'href': 'plop', + 'class': 'plip plup' + }, 'ClientUtils.getElementInfo() retrieves element attributes'); + test.assertEquals(info.html, '<i>paf</i>', 'ClientUtils.getElementInfo() retrieves element html content'); + test.assertEquals(info.text, 'paf', 'ClientUtils.getElementInfo() retrieves element text'); + test.assert(info.x > 0, 'ClientUtils.getElementInfo() retrieves element x pos'); + test.assert(info.y > 0, 'ClientUtils.getElementInfo() retrieves element y pos'); + test.assert(info.width > 0, 'ClientUtils.getElementInfo() retrieves element width'); + test.assert(info.height > 0, 'ClientUtils.getElementInfo() retrieves element height'); + test.assert(info.visible, 'ClientUtils.getElementInfo() retrieves element visibility'); + test.assertEquals(info.tag, '<a href="plop" class="plip plup"><i>paf</i></a>', + 'ClientUtils.getElementInfo() retrieves element whole tag contents'); + test.done(); +}); + +casper.test.begin('ClientUtils.getElementsInfo() first element tests', 10, function(test) { + casper.page.content = '<a href="plop" class="plip plup"><i>paf</i></a><a href="plap" class="plip plup"><i>puf</i></a>'; + var info = casper.getElementsInfo('a.plip'); + test.assertEquals(info[0].nodeName, 'a', 'ClientUtils.getElementsInfo() retrieves first element name'); + test.assertEquals(info[0].attributes, { + 'href': 'plop', + 'class': 'plip plup' + }, 'ClientUtils.getElementsInfo() retrieves first element attributes'); + test.assertEquals(info[0].html, '<i>paf</i>', 'ClientUtils.getElementsInfo() retrieves first element html content'); + test.assertEquals(info[0].text, 'paf', 'ClientUtils.getElementsInfo() retrieves first element text'); + test.assert(info[0].x > 0, 'ClientUtils.getElementsInfo() retrieves first element x pos'); + test.assert(info[0].y > 0, 'ClientUtils.getElementsInfo() retrieves first element y pos'); + test.assert(info[0].width > 0, 'ClientUtils.getElementsInfo() retrieves first element width'); + test.assert(info[0].height > 0, 'ClientUtils.getElementsInfo() retrieves first element height'); + test.assert(info[0].visible, 'ClientUtils.getElementsInfo() retrieves first element visibility'); + test.assertEquals(info[0].tag, '<a href="plop" class="plip plup"><i>paf</i></a>', + 'ClientUtils.getElementsInfo() retrieves first element whole tag contents'); + test.done(); +}); + +casper.test.begin('ClientUtils.getElementsInfo() second element tests', 10, function(test) { + casper.page.content = '<a href="plop" class="plip plup"><i>paf</i></a><a href="plap" class="plip plup"><i>puf</i></a>'; + var info = casper.getElementsInfo('a.plip'); + test.assertEquals(info[1].nodeName, 'a', 'ClientUtils.getElementsInfo() retrieves second element name'); + test.assertEquals(info[1].attributes, { + 'href': 'plap', + 'class': 'plip plup' + }, 'ClientUtils.getElementsInfo() retrieves second element attributes'); + test.assertEquals(info[1].html, '<i>puf</i>', 'ClientUtils.getElementsInfo() retrieves second element html content'); + test.assertEquals(info[1].text, 'puf', 'ClientUtils.getElementsInfo() retrieves second element text'); + test.assert(info[1].x > 0, 'ClientUtils.getElementsInfo() retrieves second element x pos'); + test.assert(info[1].y > 0, 'ClientUtils.getElementsInfo() retrieves second element y pos'); + test.assert(info[1].width > 0, 'ClientUtils.getElementsInfo() retrieves second element width'); + test.assert(info[1].height > 0, 'ClientUtils.getElementsInfo() retrieves second element height'); + test.assert(info[1].visible, 'ClientUtils.getElementsInfo() retrieves second element visibility'); + test.assertEquals(info[1].tag, '<a href="plap" class="plip plup"><i>puf</i></a>', + 'ClientUtils.getElementsInfo() retrieves second element whole tag contents'); + test.done(); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/coffee.coffee b/n1k0-casperjs-4f105a9/tests/suites/coffee.coffee new file mode 100644 index 0000000..9de230b --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/coffee.coffee @@ -0,0 +1,20 @@ +"A small subset of the run.js written in coffeescript" + +steps = 0 + +casper.options.onStepComplete = -> steps++ + +casper.test.begin "writing async tests in coffeescript", 4, (test) -> + casper.start "tests/site/index.html", -> + test.assertTitle "CasperJS test index", "Casper.start() casper can start itself an open an url" + test.assertEquals @fetchText("ul li"), "onetwothree", "Casper.fetchText() can retrieves text contents" + @click "a[href=\"test.html\"]" + + casper.then -> + test.assertTitle "CasperJS test target", "Casper.click() casper can click on a text link" + @click "a[href=\"form.html\"]" + + casper.run -> + test.assertEquals steps, 3, "Casper.options.onStepComplete() is called on step complete" + @options.onStepComplete = null + @test.done() diff --git a/n1k0-casperjs-4f105a9/tests/suites/fs.js b/n1k0-casperjs-4f105a9/tests/suites/fs.js new file mode 100644 index 0000000..46b5881 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/fs.js @@ -0,0 +1,35 @@ +/*global casper*/ +/*jshint strict:false*/ +var fs = require('fs'); + +casper.test.begin('fs.dirname() tests', 8, function(test) { + var tests = { + '/local/plop/foo.js': '/local/plop', + 'local/plop/foo.js': 'local/plop', + './local/plop/foo.js': './local/plop', + 'c:\\local\\plop\\foo.js': 'c:/local/plop', + 'D:\\local\\plop\\foo.js': 'D:/local/plop', + 'D:\\local\\plop\\': 'D:/local/plop', + 'c:\\': 'c:', + 'c:': 'c:' + }; + for (var testCase in tests) { + test.assertEquals(fs.dirname(testCase), tests[testCase], 'fs.dirname() does its job for ' + testCase); + } + test.done(); +}); + +casper.test.begin('fs.isWindows() tests', 6, function(test) { + var tests = { + '/': false, + '/local/plop/foo.js': false, + 'D:\\local\\plop\\': true, + 'c:\\': true, + 'c:': true, + '\\\\Server\\Plop': true + }; + for (var testCase in tests) { + test.assertEquals(fs.isWindows(testCase), tests[testCase], 'fs.isWindows() does its job for ' + testCase); + } + test.done(); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/http_status.js b/n1k0-casperjs-4f105a9/tests/suites/http_status.js new file mode 100644 index 0000000..a20947f --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/http_status.js @@ -0,0 +1,80 @@ +/*global casper*/ +/*jshint strict:false*/ +/** + * Special test server to test for HTTP status codes + * + */ +var fs = require('fs'); +var utils = require('utils'); + +casper.test.begin("HTTP status code handling", 163, { + setUp: function(test) { + this.server = require('webserver').create(); + this.server.listen(8090, function (request, response) { + response.statusCode = parseInt(/^\/(\d+)$/.exec(request.url)[1], 10); + response.write(""); + response.close(); + }); + var isGecko = (phantom.casperEngine === 'slimerjs'); + + this.testCodes = [ + 100, 101, 200, 201, 202, 203, 204, 205, 206, 207, 210, + 300, 301, 302, 303, 304, 305, 307, 310 + ]; + if (!isGecko) { + // it seems that the network layer of Gecko does not process these response + this.testCodes.push(102); + this.testCodes.push(118); + } + + if (utils.ltVersion(phantom.version, '1.9.0') || + utils.gteVersion(phantom.version, '1.9.2') || + isGecko) { + // https://github.com/ariya/phantomjs/issues/11163 + this.testCodes = this.testCodes.concat([ + 400, 401, 402, 403, 404, 405, 406, 407, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 422, 423, 424, 425, 426, 449, 450, + 500, 501, 502, 503, 504, 505, 507, 509 + ]); + if (!isGecko) { + // it seems that the network layer of Gecko has a different + // behavior for 408 than PhantomJS's webkit + this.testCodes.push(408); + } + } + if ((this.testCodes.length * 3) < 165 ) { + test.skip(163 - (this.testCodes.length * 3 - 2) ); + } + }, + + tearDown: function() { + this.server.close(); + }, + + test: function(test) { + casper.start(); + + // file protocol + casper.thenOpen('file://' + phantom.casperPath + '/tests/site/index.html', function() { + this.test.assertHttpStatus(null, 'file:// protocol does not set a HTTP status'); + }); + + casper.each(this.testCodes, function(self, code) { + if (code === 100) { + // HTTP 100 is CONTINUE, so don't expect a terminated response + return; + } + this.thenOpen('http://localhost:8090/' + code, function(resource) { + test.assertEquals(resource.status, code, + 'Status is stored in resource.status'); + test.assertEquals(this.currentHTTPStatus, code, + 'Status is stored in casper.currentHTTPStatus'); + test.assertHttpStatus(code, utils.format('HTTP %d handled' , code)); + }); + }); + + casper.run(function() { + this.test.done(); + }); + } +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/pagestack.js b/n1k0-casperjs-4f105a9/tests/suites/pagestack.js new file mode 100644 index 0000000..400bb65 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/pagestack.js @@ -0,0 +1,33 @@ +/*global casper*/ +/*jshint strict:false, maxstatements:99*/ +var pagestack = require('pagestack'); +var utils = require('utils'); +var webpage = require('webpage'); + +casper.test.begin('pagestack module tests', 14, function(test) { + var stack = pagestack.create(); + var page1 = webpage.create(); + page1.url = 'page1.html'; + stack.push(page1); + test.assertEquals(stack.length, 1); + test.assert(utils.isWebPage(stack[0])); + test.assertEquals(stack[0], page1); + test.assertEquals(stack.list().length, 1); + test.assertEquals(stack.list()[0], page1.url); + + var page2 = webpage.create(); + page2.url = 'page2.html'; + stack.push(page2); + test.assertEquals(stack.length, 2); + test.assert(utils.isWebPage(stack[1])); + test.assertEquals(stack[1], page2); + test.assertEquals(stack.list().length, 2); + test.assertEquals(stack.list()[1], page2.url); + + test.assertEquals(stack.clean(page1), 1); + test.assertEquals(stack[0], page2); + test.assertEquals(stack.list().length, 1); + test.assertEquals(stack.list()[0], page2.url); + + test.done(); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/require.js b/n1k0-casperjs-4f105a9/tests/suites/require.js new file mode 100644 index 0000000..62f7810 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/require.js @@ -0,0 +1,37 @@ +/*global casper*/ +/*jshint strict:false*/ +var fs = require('fs'); +var modroot = fs.pathJoin(phantom.casperPath, 'tests', 'sample_modules'); + +casper.test.begin('Javascript module loading', 1, function(test) { + var jsmod; + try { + jsmod = require(fs.pathJoin(modroot, 'jsmodule')); + test.assertTrue(jsmod.ok, 'require() patched version can load a js module'); + } catch (e) { + test.fail('require() patched version can load a js module'); + } + test.done(); +}); + +casper.test.begin('CoffeeScript module loading', 1, function(test) { + var csmod; + try { + csmod = require(fs.pathJoin(modroot, 'csmodule')); + test.assertTrue(csmod.ok, 'require() patched version can load a coffeescript module'); + } catch (e) { + test.fail('require() patched version can load a coffeescript module'); + } + test.done(); +}); + +casper.test.begin('JSON module loading', 1, function(test) { + var config; + try { + config = require(fs.pathJoin(modroot, 'config.json')); + test.assertTrue(config.ok, 'require() patched version can load a json module'); + } catch (e) { + test.fail('require() patched version can load a json module'); + } + test.done(); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/tester/.casper b/n1k0-casperjs-4f105a9/tests/suites/tester/.casper new file mode 100644 index 0000000..e69de29 diff --git a/n1k0-casperjs-4f105a9/tests/suites/tester/assert.js b/n1k0-casperjs-4f105a9/tests/suites/tester/assert.js new file mode 100644 index 0000000..3b87e40 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/tester/assert.js @@ -0,0 +1,222 @@ +/*global casper*/ +/*jshint strict:false, maxstatements:99*/ +var fs = require('fs'); + +casper.test.begin('Common assertions tests', 46, function(test) { + casper.start('tests/site/index.html', function() { + test.assertTextExists('form', 'Tester.assertTextExists() checks that page body contains text'); + test.assertTextExist('form', 'Tester.assertTextExist() checks that page body contains text [alias]'); + test.assertTextDoesntExist('blah', "Tester.assertTextDoesntExist() checks that page body doesn't contain provided text"); + test.assertSelectorHasText('h1', 'Title', 'Tester.assertSelectorHasText() works as expected'); + test.assertSelectorDoesntHaveText('h1', 'Subtitle', 'Tester.assertSelectorDoesntHaveText() works as expected'); + test.assert(true, 'Tester.assert() works as expected'); + test.assertTrue(true, 'Tester.assertTrue() works as expected [alias]'); + test.assertTruthy('1', 'Tester.assertTruthy() works as expected'); + test.assertFalsy('', 'Tester.assertFalsy() works as expected'); + test.assertNot(false, 'Tester.assertNot() works as expected'); + test.assertEquals(true, true, 'Tester.assertEquals() works as expected'); + test.assertEqual(true, true, 'Tester.assertEqual() works as expected [alias]'); + test.assertNotEquals(true, false, 'Tester.assertNotEquals() works as expected'); + test.assertEval(function() { + return true; + }, 'Tester.assertEval() works as expected'); + test.assertEvaluate(function() { + return true; + }, 'Tester.assertEvaluate() works as expected [alias]'); + test.assertEvalEquals(function() { + return 42; + }, 42, 'Tester.assertEvalEquals() works as expected'); + test.assertEvalEqual(function() { + return 42; + }, 42, 'Tester.assertEvalEqual() works as expected [alias]'); + test.assertElementCount('ul', 1, 'Tester.assertElementCount() works as expected'); + test.assertElementCount('li', 3, 'Tester.assertElementCount() works as expected'); + test.assertElementCount('address', 0, 'Tester.assertElementCount() works as expected'); + test.assertExists('body', 'Tester.assertExists() works as expected'); + test.assertExist('body', 'Tester.assertExist() works as expected [alias]'); + test.assertFail(function() { + test.assert(false); + }, 'Tester.assertFail() tests for a failing assertion'); + test.assertSelectorExists('body', 'Tester.assertSelectorExists() works as expected [alias]'); + test.assertSelectorExist('body', 'Tester.assertSelectorExist() works as expected [alias]'); + test.assertDoesntExist('foobar', 'Tester.assertDoesntExist() works as expected'); + test.assertDoesntExist('foobar', 'Tester.assertNotExist() works as expected [alias]'); + // using file:// protocol, HTTP status is always null + test.assertHttpStatus(200, 'Tester.assertHttpStatus() works as expected'); + test.assertMatch("the lazy dog", /lazy/, 'Tester.assertMatch() works as expected'); + test.assertMatches("the lazy dog", /lazy/, 'Tester.assertMatches() works as expected [alias]'); + test.assertRaises(function() { + throw new Error('plop'); + }, [], 'Tester.assertRaises() works as expected'); + test.assertRaise(function() { + throw new Error('plop'); + }, [], 'Tester.assertRaise() works as expected [alias]'); + test.assertThrows(function() { + throw new Error('plop'); + }, [], 'Tester.assertThrows() works as expected [alias]'); + test.assertResourceExists(/index\.html/, 'Tester.assertResourceExists() works as expected'); + test.assertResourceExist(/index\.html/, 'Tester.assertResourceExist() works as expected [alias]'); + test.assertTitle('CasperJS test index', 'Tester.assertTitle() works as expected'); + test.assertTitleMatch(/test index/, 'Tester.assertTitleMatch() works as expected'); + test.assertTitleMatches(/test index/, 'Tester.assertTitleMatches() works as expected [alias]'); + test.assertType("plop", "string", "Tester.assertType() works as expected"); + test.assertInstanceOf("plop", String, "Tester.assertInstanceOf() works as expected"); + test.assertUrlMatch(/index\.html$/, "Tester.assertUrlMatch() works as expected"); + test.assertUrlMatches(/index\.html$/, "Tester.assertUrlMatches() works as expected [alias]"); + test.assertVisible('img', 'Tester.assertVisible() works as expected'); + test.assertNotVisible('p#hidden', 'Tester.assertNotVisible() works as expected'); + test.assertInvisible('p#hidden', 'Tester.assertInvisible() works as expected [alias]'); + }).run(function() { + test.done(); + }); +}); + +casper.test.begin('Tester.assertField(): filled inputs', 7, function(test) { + casper.start('tests/site/form.html', function() { + this.fill('form[action="result.html"]', { + 'email': '', + 'content': '', + 'check': false, + 'choice': '', + 'topic': '', + 'file': '', + 'checklist[]': [] + }); + test.assertField('email', '', 'Tester.assertField() works as expected with inputs'); + test.assertField('content', '', 'Tester.assertField() works as expected with textarea'); + test.assertField('check', false, 'Tester.assertField() works as expected with checkboxes'); + test.assertField('choice', null, 'Tester.assertField() works as expected with radios'); + test.assertField('topic', 'foo', 'Tester.assertField() works as expected with selects'); + test.assertField('file', '', 'Tester.assertField() works as expected with file inputs'); + test.assertField('checklist[]', [], 'Tester.assertField() works as expected with check lists'); + }).run(function() { + test.done(); + }); +}); + +casper.test.begin('Tester.assertField(): unfilled inputs', 7, function(test) { + var fpath = fs.pathJoin(phantom.casperPath, 'README.md'); + var fileValue = 'README.md'; + if (phantom.casperEngine === 'phantomjs') { + fileValue = 'C:\\fakepath\\README.md'; // phantomjs/webkit sets that; + } + + casper.start('tests/site/form.html', function() { + this.fill('form[action="result.html"]', { + 'email': 'chuck@norris.com', + 'content': 'Am watching thou', + 'check': true, + 'choice': 'no', + 'topic': 'bar', + 'file': fpath, + 'checklist[]': ['1', '3'] + }); + test.assertField('email', 'chuck@norris.com', 'Tester.assertField() works as expected with inputs'); + test.assertField('content', 'Am watching thou', 'Tester.assertField() works as expected with textarea'); + test.assertField('check', true, 'Tester.assertField() works as expected with checkboxes'); + test.assertField('choice', 'no', 'Tester.assertField() works as expected with radios'); + test.assertField('topic', 'bar', 'Tester.assertField() works as expected with selects'); + test.assertField('file', fileValue, + 'Tester.assertField() works as expected with file inputs'); + test.assertField('checklist[]', ['1', '3'], 'Tester.assertField() works as expected with check lists'); + }).run(function() { + test.done(); + }); +}); + +casper.test.begin('Tester.assertField(): nonexistent fields', 2, function(test) { + casper.start('tests/site/form.html', function() { + test.assertFail(function() { + test.assertField('nonexistent', ''); + }, 'Tester.assertField() only checks for existing fields'); + }).run(function() { + test.done(); + }); +}); + +casper.test.begin('Tester.assertField(): CSS selectors', 1, function(test) { + casper.start('tests/site/form.html', function() { + this.fill('form[action="result.html"]', { + 'email': 'albert@camus.com' + }); + + test.assertField({ + type: 'css', + path: '#email' + }, + 'albert@camus.com', + 'Tester.assertField() works as expected with CSS selectors' + ); + }).run(function() { + test.done(); + }); +}); + +casper.test.begin('Tester.assertField(): XPath selectors', 1, function(test) { + casper.start('tests/site/form.html', function() { + this.fill('form[action="result.html"]', { + 'email': 'albert@camus.com' + }); + + test.assertField({ + type: 'xpath', + path: '/html/body/form[1]/input[1]' + }, + 'albert@camus.com', + 'Tester.assertField() works as expected with XPath selectors' + ); + }).run(function() { + test.done(); + }); +}); + +casper.test.begin('Tester.assertField(): invalid selectors', 1, function(test) { + casper.start('tests/site/form.html', function() { + this.fill('form[action="result.html"]', { + 'email': 'albert@camus.com' + }); + + test.assertRaise(function() { + test.assertField({ + type: 'albert' + }, + 'albert@camus.com', + 'Tester.assertField() works as expected with XPath selectors' + ); + }, [], 'should throw an error for an invalid selector'); + }).run(function() { + test.done(); + }); +}); + +casper.test.begin('Tester.assertFieldCSS(): CSS selectors', 1, function(test) { + casper.start('tests/site/form.html', function() { + this.fill('form[action="result.html"]', { + 'email': 'albert@camus.com' + }); + + test.assertFieldCSS( + '#email', + 'albert@camus.com', + 'Tester.assertFieldCSS() works as expected with CSS selectors' + ); + }).run(function() { + test.done(); + }); +}); + +casper.test.begin('Tester.assertFieldXPath(): XPath selectors', 1, function(test) { + casper.start('tests/site/form.html', function() { + this.fill('form[action="result.html"]', { + 'email': 'albert@camus.com' + }); + + test.assertFieldXPath( + '/html/body/form[1]/input[1]', + 'albert@camus.com', + 'Tester.assertFieldXPath() works as expected with XPath selectors' + ); + }).run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/tester/begin-config.js b/n1k0-casperjs-4f105a9/tests/suites/tester/begin-config.js new file mode 100644 index 0000000..67e1165 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/tester/begin-config.js @@ -0,0 +1,35 @@ +/*jshint strict:false, eqeqeq:false*/ +/*global CasperError, casper, console, phantom, require*/ +var steps = []; + +casper.test.begin('Tester.begin() configuration', 10, { + fixtures: [1, 2, 3], + + _this: function() { + return this; + }, + + setUp: function(test) { + steps.push('setUp'); + test.pass('config.setUp() has been called'); + test.assert(this == this._this(), 'config.setUp() is using the expected context'); + test.assertEquals(this.fixtures, [1, 2, 3], 'config.setUp() accesses fixtures'); + }, + + tearDown: function(test) { + steps.push('tearDown'); + test.pass('config.tearDown() has been called'); + test.assert(this == this._this(), 'config.test() is using the expected context'); + test.assertEquals(this.fixtures, [1, 2, 3], 'config.tearDown() accesses fixtures'); + test.assertEquals(steps, ['setUp', 'test', 'tearDown'], + 'Tester.begin() has processed the configuration in the expected order'); + }, + + test: function(test) { + steps.push('test'); + test.pass('config.test() has been called'); + test.assert(this == this._this(), 'config.tearDown() is using the expected context'); + test.assertEquals(this.fixtures, [1, 2, 3], 'config.test() accesses fixtures'); + test.done(); + } +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/tester/setup-teardown-async.js b/n1k0-casperjs-4f105a9/tests/suites/tester/setup-teardown-async.js new file mode 100644 index 0000000..6b65b23 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/tester/setup-teardown-async.js @@ -0,0 +1,31 @@ +/*global casper*/ +/*jshint strict:false*/ + +var setUp, tearDown; + +casper.test.setUp(function(done) { + setTimeout(function() { + setUp = true; + done(); + }, 50); +}); + +casper.test.tearDown(function(done) { + setTimeout(function() { + tearDown = true; + done(); + // reset + casper.test.setUp(); + casper.test.tearDown(); + }, 50); +}); + +casper.test.begin('setUp() tests', 1, function(test) { + test.assertTrue(setUp, 'Tester.setUp() executed the async setup function'); + test.done(); +}); + +casper.test.begin('tearDown() tests', 1, function(test) { + test.assertTrue(tearDown, 'Tester.tearDown() executed the async tear down function'); + test.done(); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/tester/setup-teardown.js b/n1k0-casperjs-4f105a9/tests/suites/tester/setup-teardown.js new file mode 100644 index 0000000..60ceba3 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/tester/setup-teardown.js @@ -0,0 +1,25 @@ +/*global casper*/ +/*jshint strict:false*/ + +var setUp, tearDown; + +casper.test.setUp(function() { + setUp = true; +}); + +casper.test.tearDown(function() { + tearDown = true; + // reset + casper.test.setUp(); + casper.test.tearDown(); +}); + +casper.test.begin('setUp() tests', 1, function(test) { + test.assertTrue(setUp, 'Tester.setUp() executed the setup function'); + test.done(); +}); + +casper.test.begin('tearDown() tests', 1, function(test) { + test.assertTrue(tearDown, 'Tester.tearDown() executed the tear down function'); + test.done(); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/tester/skip.js b/n1k0-casperjs-4f105a9/tests/suites/tester/skip.js new file mode 100644 index 0000000..361294b --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/tester/skip.js @@ -0,0 +1,23 @@ +/*global casper*/ +/*jshint strict:false*/ +casper.test.begin('Skip tests', 4, function(test) { + test.assert(true, 'First test executed'); + test.assert(true, 'Second test executed'); + test.skip(2, 'Two tests skipped'); + test.done(); +}); + +casper.test.begin('Skip tests after', 4, function(test) { + test.skip(2, 'Two tests skipped'); + test.assert(true, 'Third test executed'); + test.assert(true, 'Fourth test executed'); + test.done(); +}); + +casper.test.begin('Skip tests (asynchronous)', 1, function(test) { + casper.start('tests/site/index.html', function() { + test.skip(1); + }).run(function() { + test.done(); + }); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/tester/test-order.js b/n1k0-casperjs-4f105a9/tests/suites/tester/test-order.js new file mode 100644 index 0000000..aad399c --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/tester/test-order.js @@ -0,0 +1,21 @@ +/*jshint strict:false*/ +/*global CasperError, casper, console, phantom, require*/ +var fs = require('fs'); + +casper.test.begin('Tester.sortFiles()', 1, function suite(test) { + var testDirRoot = fs.pathJoin(phantom.casperPath, 'tests', 'testdir'); + var files = test.findTestFiles(testDirRoot); + var expected = [ + "01_a/abc.js", + "01_a/def.js", + "02_b/abc.js", + "03_a.js", + "03_b.js", + "04/01_init.js", + "04/02_do.js" + ].map(function(entry) { + return fs.pathJoin.apply(fs, [testDirRoot].concat(entry.split('/'))); + }); + test.assertEquals(files, expected, 'findTestFiles() find test files and sort them'); + test.done(); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/tester/testcase.js b/n1k0-casperjs-4f105a9/tests/suites/tester/testcase.js new file mode 100644 index 0000000..3a7bd3e --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/tester/testcase.js @@ -0,0 +1,50 @@ +/*jshint strict:false, maxstatements:99, maxcomplexity:99*/ +/*global CasperError, casper, console, phantom, require*/ + +var TestCaseResult = require('tester').TestCaseResult; + +casper.test.begin('TestCaseResult.constructor() tests', 4, function(test) { + var caseResult1 = new TestCaseResult(); + test.assertType(caseResult1.name, "undefined", 'TestCaseResult.constructor() name is undefined by default'); + test.assertType(caseResult1.file, "undefined", 'TestCaseResult.constructor() file is undefined by default'); + var caseResult2 = new TestCaseResult({name: 'foo', file: '/tmp/foo'}); + test.assertEquals(caseResult2.name, "foo", 'TestCaseResult.constructor() can set name'); + test.assertEquals(caseResult2.file, "/tmp/foo", 'TestCaseResult.constructor() can set file'); + test.done(); +}); + +casper.test.begin('TestCaseResult.addSuccess() and TestCaseResult.addFailure() tests', 22, function(test) { + var caseResult = new TestCaseResult({name: 'foo', file: '/tmp/foo'}); + test.assertEquals(caseResult.assertions, 0, 'test case result counts no assertion by default'); + test.assertEquals(caseResult.passed, 0, 'test case result counts no success by default'); + test.assertEquals(caseResult.failed, 0, 'test case result counts no failure by default'); + test.assertEquals(caseResult.calculateDuration(), 0, + 'TestCaseResult.calculateDuration() computes initial tests duration'); + var success = {}; + caseResult.addSuccess(success, 1337); + test.assertEquals(caseResult.assertions, 1, 'test case result counts one assertion'); + test.assertEquals(caseResult.passed, 1, 'test case result counts one success'); + test.assertEquals(caseResult.failed, 0, 'test case result counts no failure'); + test.assertEquals(caseResult.passes[0], success, 'TestCaseResult.addSuccess() added a success to the stack'); + test.assertEquals(caseResult.passes[0].time, 1337, 'TestCaseResult.addSuccess() added test duration'); + test.assertEquals(caseResult.passes[0].suite, 'foo', 'TestCaseResult.addSuccess() added suite name'); + test.assertEquals(caseResult.calculateDuration(), 1337, + 'TestCaseResult.calculateDuration() computes tests duration'); + var failure = {}; + caseResult.addFailure(failure, 42); + test.assertEquals(caseResult.assertions, 2, 'test case result counts two assertions'); + test.assertEquals(caseResult.passed, 1, 'test case result counts one success'); + test.assertEquals(caseResult.failed, 1, 'test case result counts no failure'); + test.assertEquals(caseResult.failures[0], failure, 'TestCaseResult.addFailure() added a failure to the stack'); + test.assertEquals(caseResult.failures[0].time, 42, 'TestCaseResult.addFailure() added test duration'); + test.assertEquals(caseResult.failures[0].suite, 'foo', 'TestCaseResult.addFailure() added suite name'); + test.assertEquals(caseResult.calculateDuration(), 1337 + 42, + 'TestCaseResult.calculateDuration() computes new tests duration'); + caseResult.addSuccess({}, 1000); + test.assertEquals(caseResult.assertions, 3, 'test case result counts three assertions'); + test.assertEquals(caseResult.passed, 2, 'test case result counts two successes'); + test.assertEquals(caseResult.failed, 1, 'test case result counts one failure'); + test.assertEquals(caseResult.calculateDuration(), 1337 + 42 + 1000, + 'TestCaseResult.calculateDuration() computes new tests duration'); + test.done(); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/tester/testsuite.js b/n1k0-casperjs-4f105a9/tests/suites/tester/testsuite.js new file mode 100644 index 0000000..ac2057b --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/tester/testsuite.js @@ -0,0 +1,56 @@ +/*jshint strict:false*/ +/*global CasperError, casper, console, phantom, require*/ + +var TestCaseResult = require('tester').TestCaseResult, + TestSuiteResult = require('tester').TestSuiteResult; + +function generateCaseResult(options) { + var i, + nPasses = options && ~~options.nPasses, + nFailures = options && ~~options.nFailures, + caseResult = new TestCaseResult(options); + for (i = 0; i < nFailures; i++) { + caseResult.addFailure({}, i * 1000); + } + for (i = 0; i < nPasses; i++) { + caseResult.addSuccess({}, i * 1000); + } + return caseResult; +} + +casper.test.begin('TestSuiteResult() basic tests', 8, function(test) { + var suiteResult = new TestSuiteResult(); + test.assertEquals(suiteResult.constructor.name, 'Array', 'TestSuiteResult() is derived from Array'); + test.assertEquals(suiteResult.countTotal(), 0); + test.assertEquals(suiteResult.countFailed(), 0); + test.assertEquals(suiteResult.countPassed(), 0); + test.assertEquals(suiteResult.getAllFailures(), []); + test.assertEquals(suiteResult.getAllPasses(), []); + test.assertEquals(suiteResult.getAllResults(), []); + test.assertEquals(suiteResult.calculateDuration(), 0); + test.done(); +}); + +casper.test.begin('TestSuiteResult() accumulation tests', 7, function(test) { + var suiteResult = new TestSuiteResult(); + suiteResult.push(generateCaseResult({ + name: 'foo', + file: '/tmp/foo', + nPasses: 4, + nFailures: 1 + })); + suiteResult.push(generateCaseResult({ + name: 'bar', + file: '/tmp/bar', + nPasses: 3, + nFailures: 0 + })); + test.assertEquals(suiteResult.countTotal(), 8); + test.assertEquals(suiteResult.countFailed(), 1); + test.assertEquals(suiteResult.countPassed(), 7); + test.assertEquals(suiteResult.getAllFailures().length, 1); + test.assertEquals(suiteResult.getAllPasses().length, 7); + test.assertEquals(suiteResult.getAllResults().length, 8); + test.assertEquals(suiteResult.calculateDuration(), 9000); + test.done(); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/utils.js b/n1k0-casperjs-4f105a9/tests/suites/utils.js new file mode 100644 index 0000000..3fdb754 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/utils.js @@ -0,0 +1,485 @@ +/*global casper*/ +/*jshint strict:false, maxstatements:99*/ +var utils = require('utils'), + t = casper.test, + x = require('casper').selectXPath; + +casper.test.begin('utils.betterTypeOf() tests', 10, function(test) { + var testCases = [ + {subject: 1, expected: 'number'}, + {subject: '1', expected: 'string'}, + {subject: {}, expected: 'object'}, + {subject: [], expected: 'array'}, + {subject: undefined, expected: 'undefined'}, + {subject: null, expected: 'null'}, + {subject: function(){}, expected: 'function'}, + {subject: window, expected: 'domwindow'}, + {subject: new Date(), expected: 'date'}, + {subject: new RegExp(), expected: 'regexp'} + ]; + testCases.forEach(function(testCase) { + test.assertEquals(utils.betterTypeOf(testCase.subject), testCase.expected, + utils.format('betterTypeOf() detects expected type "%s"', testCase.expected)); + }); + test.done(); +}); + +casper.test.begin('utils.betterInstanceOf() tests', 13, function(test) { + /*global XMLDocument*/ + // need two objects to test inheritance + function Cow(){} var daisy = new Cow(); + function SuperCow(){} SuperCow.prototype = new Cow(); var superDaisy = new SuperCow(); + var date = new Date(); var regex = new RegExp(); var xmlDoc = document.implementation.createDocument("<y>", "x", null); + var testCases = [ + {subject: 1, fn: Number, expected: true}, + {subject: '1', fn: String, expected: true}, + {subject: {}, fn: Object, expected: true}, + {subject: [], fn: Array, expected: true}, + {subject: undefined, fn: Array, expected: false}, + {subject: null, fn: Array, expected: false}, + {subject: function(){}, fn: Function, expected: true}, + {subject: date, fn: Date, expected: true}, + {subject: regex, fn: RegExp, expected: true}, + {subject: xmlDoc, fn: XMLDocument, expected: true}, + {subject: daisy, fn: Cow, expected: true}, + {subject: superDaisy, fn: SuperCow, expected: true}, + {subject: superDaisy, fn: Cow, expected: true} + ]; + testCases.forEach(function(testCase) { + test.assertEquals(utils.betterInstanceOf(testCase.subject, testCase.fn), testCase.expected, + utils.format('betterInstanceOf() detects expected constructor "%s"', testCase.fn.name)); + }); + test.done(); +}); + +casper.test.begin('utils.cleanUrl() tests', 11, function(test) { + var testCases = { + 'http://google.com/': 'http://google.com/', + 'http://google.com': 'http://google.com/', + 'http://www.google.com/': 'http://www.google.com/', + 'http://www.google.com/?plop=2': 'http://www.google.com/?plop=2', + 'https://google.com/': 'https://google.com/', + 'https://google.com': 'https://google.com/', + 'https://www.google.com/': 'https://www.google.com/', + 'https://www.google.com/?plop=2': 'https://www.google.com/?plop=2', + 'https://www.google.com?plop=2': 'https://www.google.com/?plop=2', + 'file:///Users/toto/toto.html': 'file:///Users/toto/toto.html', + '/100': '/100' + }; + for (var testCase in testCases) { + test.assertEquals(utils.cleanUrl(testCase), testCases[testCase], 'cleanUrl() cleans an URL'); + } + test.done(); +}); + +casper.test.begin('utils.clone() tests', 2, function(test) { + var a = {a: 1, b: 2, c: [1, 2]}; + test.assertEquals(utils.clone(a), a); + var b = [1, 2, 3, a]; + test.assertEquals(utils.clone(b), b); + test.done(); +}); + +if (utils.gteVersion(phantom.version, '1.9.0')) { + casper.test.begin('utils.computeModifier() tests', 7, function(test) { + var modifiers = require('webpage').create().event.modifier; + test.assertType(modifiers, "object"); + test.assertEquals(utils.computeModifier("", modifiers), 0, + 'computeModifier() computes a "none" modifier'); + test.assertEquals(utils.computeModifier("alt", modifiers), + modifiers.alt, + 'computeModifier() computes an "alt" modifier'); + test.assertEquals(utils.computeModifier("ctrl+alt", modifiers), + modifiers.ctrl | modifiers.alt, + 'computeModifier() computes a "ctrl+alt" modifier'); + test.assertEquals(utils.computeModifier("ctrl+alt+shift", modifiers), + modifiers.ctrl | modifiers.alt | modifiers.shift, + 'computeModifier() computes a "ctrl+alt+shift" modifier'); + test.assertThrows(utils.computeModifier, ["chucknorris", modifiers], + 'computeModifier() checks for a valid modifier'); + test.assertThrows(utils.computeModifier, ["chuck+norris", modifiers], + 'computeModifier() checks for a valid complex modifier'); + test.done(); + }); +} + +casper.test.begin('decodeUrl() tests', 4, function(test) { + /* global escape */ + test.assertEquals(utils.decodeUrl('foo'), 'foo'); + test.assertEquals(utils.decodeUrl('Forlì'), 'Forlì'); + test.assertEquals(utils.decodeUrl(encodeURIComponent('Forlì')), 'Forlì'); + test.assertEquals(utils.decodeUrl(escape('Forlì')), 'Forlì'); + test.done(); +}); + +casper.test.begin('equals() tests', 23, function(test) { + test.assert(utils.equals(null, null), 'equals() null equality'); + test.assertNot(utils.equals(null, undefined), 'equals() null vs. undefined inequality'); + test.assert(utils.equals("hi", "hi"), 'equals() string equality'); + test.assertNot(utils.equals("hi", "ih"), 'equals() string inequality'); + test.assert(utils.equals(5, 5), 'equals() number equality'); + test.assertNot(utils.equals("5", 5), 'equals() number equality without implicit cast'); + test.assert(utils.equals(5, 5.0), 'equals() number equality with cast'); + test.assertNot(utils.equals(5, 10), 'equals() number inequality'); + test.assert(utils.equals([], []), 'equals() empty array equality'); + test.assert(utils.equals([1,2], [1,2]), 'equals() array equality'); + test.assert(utils.equals([1,2,[1,2,function(){}]], [1,2,[1,2,function(){}]]), + 'equals() complex array equality'); + test.assertNot(utils.equals([1,2,[1,2,function(a){}]], [1,2,[1,2,function(b){}]]), + 'equals() complex array inequality'); + test.assertNot(utils.equals([1,2], [2,1]), 'equals() shuffled array inequality'); + test.assertNot(utils.equals([1,2], [1,2,3]), 'equals() array length inequality'); + test.assert(utils.equals({}, {}), 'equals() empty object equality'); + test.assert(utils.equals({a:1,b:2}, {a:1,b:2}), 'equals() object length equality'); + test.assert(utils.equals({a:1,b:2}, {b:2,a:1}), 'equals() shuffled object keys equality'); + test.assertNot(utils.equals({a:1,b:2}, {a:1,b:3}), 'equals() object inequality'); + test.assert(utils.equals({1:{name:"bob",age:28}, 2:{name:"john",age:26}}, + {1:{name:"bob",age:28}, 2:{name:"john",age:26}}), + 'equals() complex object equality'); + test.assertNot(utils.equals({1:{name:"bob",age:28}, 2:{name:"john",age:26}}, + {1:{name:"bob",age:28}, 2:{name:"john",age:27}}), + 'equals() complex object inequality'); + test.assert(utils.equals(function(x){return x;}, function(x){return x;}), + 'equals() function equality'); + test.assertNot(utils.equals(function(x){return x;}, function(y){return y+2;}), + 'equals() function inequality'); + test.assert(utils.equals([{a:1, b:2}, {c:3, d:4}], [{a:1, b:2}, {c:3, d:4}]), + 'equals() arrays of objects'); + test.done(); +}); + +casper.test.begin('fileExt() tests', 6, function(test) { + var testCases = { + 'foo.ext': 'ext', + 'FOO.EXT': 'ext', + 'a.ext': 'ext', + '.ext': 'ext', + 'toto.': '', + ' plop.ext ': 'ext' + }; + for (var testCase in testCases) { + test.assertEquals(utils.fileExt(testCase), testCases[testCase], + 'fileExt() extract file extension'); + } + test.done(); +}); + +casper.test.begin('fillBlanks() tests', 3, function(test) { + var testCases = { + 'foo': 'foo ', + ' foo bar ': ' foo bar ', + ' foo bar ': ' foo bar ' + }; + for (var testCase in testCases) { + test.assertEquals(utils.fillBlanks(testCase, 10), testCases[testCase], + 'fillBlanks() fills blanks'); + } + test.done(); +}); + +casper.test.begin('getPropertyPath() tests', 7, function(test) { + var testCases = [ + { + input: utils.getPropertyPath({}, 'a.b.c'), + output: undefined + }, + { + input: utils.getPropertyPath([1, 2, 3], 'a.b.c'), + output: undefined + }, + { + input: utils.getPropertyPath({ a: { b: { c: 1 } }, c: 2 }, 'a.b.c'), + output: 1 + }, + { + input: utils.getPropertyPath({ a: { b: { c: 1 } }, c: 2 }, 'a.b.x'), + output: undefined + }, + { + input: utils.getPropertyPath({ a: { b: { c: 1 } }, c: 2 }, 'a.b'), + output: { c: 1 } + }, + { + input: utils.getPropertyPath({ 'a-b': { 'c-d': 1} }, 'a-b.c-d'), + output: 1 + }, + { + input: utils.getPropertyPath({ 'a.b': { 'c.d': 1} }, 'a.b.c.d'), + output: undefined + } + ]; + testCases.forEach(function(testCase) { + test.assertEquals(testCase.input, testCase.output, + 'getPropertyPath() gets a property using a path'); + }); + test.done(); +}); + +casper.test.begin('isArray() tests', 3, function(test) { + test.assertEquals(utils.isArray([]), true, 'isArray() checks for an Array'); + test.assertEquals(utils.isArray({}), false, 'isArray() checks for an Array'); + test.assertEquals(utils.isArray("foo"), false, 'isArray() checks for an Array'); + test.done(); +}); + +casper.test.begin('isClipRect() tests', 5, function(test) { + var testCases = [ + [{}, false], + [{top: 2}, false], + [{top: 2, left: 2, width: 2, height: 2}, true], + [{top: 2, left: 2, height: 2, width: 2}, true], + [{top: 2, left: 2, width: 2, height: new Date()}, false] + ]; + testCases.forEach(function(testCase) { + test.assertEquals(utils.isClipRect(testCase[0]), testCase[1], + 'isClipRect() checks for a ClipRect'); + }); + test.done(); +}); + +casper.test.begin('isHTTPResource() tests', 6, function(test) { + var testCases = [ + [{}, false], + [{url: 'file:///var/www/i.html'}, false], + [{url: 'mailto:plop@plop.com'}, false], + [{url: 'ftp://ftp.plop.com'}, false], + [{url: 'HTTP://plop.com/'}, true], + [{url: 'https://plop.com/'}, true] + ]; + testCases.forEach(function(testCase) { + test.assertEquals(utils.isHTTPResource(testCase[0]), testCase[1], + 'isHTTPResource() checks for an HTTP resource'); + }); + test.done(); +}); + +casper.test.begin('isObject() tests', 8, function(test) { + test.assertEquals(utils.isObject({}), true, 'isObject() checks for an Object'); + test.assertEquals(utils.isObject([]), true, 'isObject() checks for an Object'); + test.assertEquals(utils.isObject(1), false, 'isObject() checks for an Object'); + test.assertEquals(utils.isObject("1"), false, 'isObject() checks for an Object'); + test.assertEquals(utils.isObject(function(){}), false, 'isObject() checks for an Object'); + test.assertEquals(utils.isObject(new Function('return {};')()), true, 'isObject() checks for an Object'); + test.assertEquals(utils.isObject(require('webpage').create()), true, 'isObject() checks for an Object'); + test.assertEquals(utils.isObject(null), false, 'isObject() checks for an Object'); + test.done(); +}); + +casper.test.begin('isValidSelector() tests', 10, function(test) { + t.assertEquals(utils.isValidSelector({}), false, + 'isValidSelector() checks for a valid selector'); + t.assertEquals(utils.isValidSelector(""), false, + 'isValidSelector() checks for a valid selector'); + t.assertEquals(utils.isValidSelector("a"), true, + 'isValidSelector() checks for a valid selector'); + t.assert( + utils.isValidSelector('div#plop form[name="form"] input[type="submit"]'), + 'isValidSelector() checks for a valid selector' + ); + t.assertEquals(utils.isValidSelector(x('//a')), true, + 'isValidSelector() checks for a valid selector'); + t.assertEquals(utils.isValidSelector({ + type: "css", + path: 'div#plop form[name="form"] input[type="submit"]' + }), true, 'isValidSelector() checks for a valid selector'); + t.assertEquals(utils.isValidSelector({ + type: "xpath", + path: '//a' + }), true, 'isValidSelector() checks for a valid selector'); + t.assertEquals(utils.isValidSelector({ + type: "css" + }), false, 'isValidSelector() checks for a valid selector'); + t.assertEquals(utils.isValidSelector({ + type: "xpath" + }), false, 'isValidSelector() checks for a valid selector'); + t.assertEquals(utils.isValidSelector({ + type: "css3", + path: "a" + }), false, 'isValidSelector() checks for a valid selector'); + test.done(); +}); + +casper.test.begin('isWebPage() tests', 3, function(test) { + var pageModule = require('webpage'); + test.assertEquals(utils.isWebPage(pageModule), false, + 'isWebPage() checks for a WebPage instance'); + test.assertEquals(utils.isWebPage(pageModule.create()), true, + 'isWebPage() checks for a WebPage instance'); + test.assertEquals(utils.isWebPage(null), false, + 'isWebPage() checks for a WebPage instance'); + test.done(); +}); + +casper.test.begin('isJsFile() tests', 5, function(test) { + var testCases = { + '': false, + 'toto.png': false, + 'plop': false, + 'gniii.coffee': true, + 'script.js': true + }; + for (var testCase in testCases) { + test.assertEquals(utils.isJsFile(testCase), testCases[testCase], + 'isJsFile() checks for js file'); + } + test.done(); +}); + + +casper.test.begin('mergeObjects() tests', 10, function(test) { + /* jshint eqeqeq:false */ + var testCases = [ + { + obj1: {a: 1}, obj2: {b: 2}, merged: {a: 1, b: 2} + }, + { + obj1: {}, obj2: {a: 1}, merged: {a: 1} + }, + { + obj1: {}, obj2: {a: {b: 2}}, merged: {a: {b: 2}} + }, + { + obj1: {a: 1}, obj2: {}, merged: {a: 1} + }, + { + obj1: {a: 1}, obj2: {a: 2}, merged: {a: 2} + }, + { + obj1: {x: 0, double: function(){return this.x*2;}}, + obj2: {triple: function(){return this.x*3;}}, + merged: { + x: 0, + double: function(){return this.x*2;}, + triple: function(){return this.x*3;} + } + } + ]; + testCases.forEach(function(testCase) { + test.assertEquals( + utils.mergeObjects(testCase.obj1, testCase.obj2), + testCase.merged, + 'mergeObjects() can merge objects' + ); + }); + var obj = {x: 1}, + qtruntimeobject = {foo: 'baz'}; + + var merged1 = utils.mergeObjects({}, {a: obj}); + merged1.a.x = 2; + test.assertEquals(obj.x, 1, 'mergeObjects() creates deep clones #1'); + + var merged2 = utils.mergeObjects({a: {}}, {a: obj}); + merged2.a.x = 2; + test.assertEquals(obj.x, 1, 'mergeObjects() creates deep clones #2'); + + var refObj = {a: qtruntimeobject}; + var merged3 = utils.mergeObjects({}, refObj, {keepReferences: false}); + test.assertFalsy(merged3.a == refObj.a, 'disabling references should not point to same object'); + + var merged4 = utils.mergeObjects({}, refObj, {keepReferences: true}); + test.assert(merged4.a == refObj.a, 'enabling references should point to same object'); + + test.done(); +}); + +casper.test.begin('objectValues() tests', 2, function(test) { + test.assertEquals(utils.objectValues({}), [], + 'objectValues() can extract object values'); + test.assertEquals(utils.objectValues({a: 1, b: 2}), [1, 2], + 'objectValues() can extract object values'); + test.done(); +}); + +casper.test.begin('quoteXPathAttributeString() tests', 2, function(test) { + casper.start('tests/site/click.html', function() { + var selector = utils.format('//a[text()=%s]', + utils.quoteXPathAttributeString('Label with double "quotes"')); + test.assertExists(x(selector), utils.format('Xpath selector "%s" is found on "tests/site/click.html" page', selector)); + selector = utils.format('//a[text()=%s]', + utils.quoteXPathAttributeString("Label with single 'quotes'")); + test.assertExists(x(selector), utils.format('Xpath selector "%s" is found on "tests/site/click.html" page', selector)); + }).run(function() { + test.done(); + }); +}); + +casper.test.begin('unique() tests', 4, function(test) { + var testCases = [ + { + input: [1,2,3], + output: [1,2,3] + }, + { + input: [1,2,3,2,1], + output: [1,2,3] + }, + { + input: ["foo", "bar", "foo"], + output: ["foo", "bar"] + }, + { + input: [], + output: [] + } + ]; + testCases.forEach(function(testCase) { + test.assertEquals(utils.unique(testCase.input), testCase.output, + 'unique() computes unique values of an array'); + }); + test.done(); +}); + +casper.test.begin('cmpVersion() tests', 10, function suite(test) { + test.assertEquals(utils.cmpVersion('1.0.0', '2.0.0'), -1, + 'cmpVersion() can compare version strings'); + test.assertEquals(utils.cmpVersion('1.0.0-DEV', '2.0.0-BOOM'), -1, + 'cmpVersion() can compare version strings'); + test.assertEquals(utils.cmpVersion('1.0.0', '1.1.0'), -1, + 'cmpVersion() can compare version strings'); + test.assertEquals(utils.cmpVersion('1.1.0', '1.0.0'), 1, + 'cmpVersion() can compare version strings'); + test.assertEquals(utils.cmpVersion('0.0.3', '0.0.4'), -1, + 'cmpVersion() can compare version strings'); + test.assertEquals(utils.cmpVersion('0.0.3', '1.0.3'), -1, + 'cmpVersion() can compare version strings'); + test.assertEquals(utils.cmpVersion('0.1', '1.0.3.8'), -1, + 'cmpVersion() can compare version strings'); + test.assertEquals(utils.cmpVersion({major: 1, minor: 2, patch: 3}, + {major: 1, minor: 2, patch: 4}), -1, + 'cmpVersion() can compare version objects'); + test.assertEquals(utils.cmpVersion({major: 2, minor: 0, patch: 3}, + {major: 1, minor: 0, patch: 4}), 1, + 'cmpVersion() can compare version objects'); + test.assertEquals(utils.cmpVersion({major: 0, minor: 0, patch: 3}, + {major: 1, minor: 0, patch: 3}), -1, + 'cmpVersion() can compare version objects'); + test.done(); +}); + +casper.test.begin('gteVersion() tests', 4, function suite(test) { + test.assert(utils.gteVersion('1.1.0', '1.0.0'), + 'gteVersion() checks for a greater or equal version'); + test.assertNot(utils.gteVersion('1.0.0', '1.1.0'), + 'gteVersion() checks for a greater or equal version'); + test.assert(utils.gteVersion({major: 1, minor: 1, patch: 0}, + {major: 1, minor: 0, patch: 0}), + 'gteVersion() checks for a greater or equal version'); + test.assertNot(utils.gteVersion({major: 1, minor: 0, patch: 0}, + {major: 1, minor: 1, patch: 0}), + 'gteVersion() checks for a greater or equal version'); + test.done(); +}); + +casper.test.begin('ltVersion() tests', 4, function suite(test) { + test.assert(utils.ltVersion('1.0.0', '1.1.0'), + 'ltVersion() checks for a lesser version'); + test.assertNot(utils.ltVersion('1.1.0', '1.0.0'), + 'ltVersion() checks for a lesser version'); + test.assert(utils.ltVersion({major: 1, minor: 0, patch: 0}, + {major: 1, minor: 1, patch: 0}), + 'ltVersion() checks for a lesser version'); + test.assertNot(utils.ltVersion({major: 1, minor: 1, patch: 0}, + {major: 1, minor: 0, patch: 0}), + 'ltVersion() checks for a lesser version'); + test.done(); +}); diff --git a/n1k0-casperjs-4f105a9/tests/suites/xunit.js b/n1k0-casperjs-4f105a9/tests/suites/xunit.js new file mode 100644 index 0000000..57077b7 --- /dev/null +++ b/n1k0-casperjs-4f105a9/tests/suites/xunit.js @@ -0,0 +1,77 @@ +/*global casper, __utils__*/ +/*jshint strict:false*/ +var tester = require('tester'); +var testpage = require('webpage').create(); + +casper.test.begin('XUnitReporter() initialization', 1, function suite(test) { + var xunit = require('xunit').create(); + var results = new tester.TestSuiteResult(); + xunit.setResults(results); + test.assertTruthy(xunit.getXML()); + test.done(); +}); + +casper.test.begin('XUnitReporter() can hold test suites', 4, function suite(test) { + var xunit = require('xunit').create(); + var results = new tester.TestSuiteResult(); + var suite1 = new tester.TestCaseResult({ + name: 'foo', + file: '/foo' + }); + results.push(suite1); + var suite2 = new tester.TestCaseResult({ + name: 'bar', + file: '/bar' + }); + results.push(suite2); + xunit.setResults(results); + casper.start().setContent(xunit.getXML()); + test.assertEvalEquals(function() { + return __utils__.findAll('testsuite').length; + }, 2); + test.assertExists('testsuites[time]'); + test.assertExists('testsuite[name="foo"][package="foo"]'); + test.assertExists('testsuite[name="bar"][package="bar"]'); + test.done(); +}); + +casper.test.begin('XUnitReporter() can hold a suite with a succesful test', 1, function suite(test) { + var xunit = require('xunit').create(); + var results = new tester.TestSuiteResult(); + var suite1 = new tester.TestCaseResult({ + name: 'foo', + file: '/foo' + }); + suite1.addSuccess({ + success: true, + type: "footype", + message: "footext", + file: "/foo" + }); + results.push(suite1); + xunit.setResults(results); + casper.start().setContent(xunit.getXML()); + test.assertExists('testsuite[name="foo"][package="foo"][tests="1"][failures="0"] testcase[name="footext"]'); + test.done(); +}); + +casper.test.begin('XUnitReporter() can handle a failed test', 2, function suite(test) { + var xunit = require('xunit').create(); + var results = new tester.TestSuiteResult(); + var suite1 = new tester.TestCaseResult({ + name: 'foo', + file: '/foo' + }); + suite1.addFailure({ + success: false, + type: "footype", + message: "footext", + file: "/foo" + }); + results.push(suite1); + xunit.setResults(results); + casper.start().setContent(xunit.getXML()); + test.assertExists('testsuite[name="foo"][package="foo"][tests="1"][failures="1"] testcase[name="footext"] failure[type="footype"]'); + test.assertEquals(casper.getElementInfo('failure[type="footype"]').text, 'footext'); + test.done(); +}); diff --git a/n1k0-casperjs-4f105a9/tests/testdir/01_a/abc.js b/n1k0-casperjs-4f105a9/tests/testdir/01_a/abc.js new file mode 100644 index 0000000..e69de29 diff --git a/n1k0-casperjs-4f105a9/tests/testdir/01_a/def.js b/n1k0-casperjs-4f105a9/tests/testdir/01_a/def.js new file mode 100644 index 0000000..e69de29 diff --git a/n1k0-casperjs-4f105a9/tests/testdir/02_b/abc.js b/n1k0-casperjs-4f105a9/tests/testdir/02_b/abc.js new file mode 100644 index 0000000..e69de29 diff --git a/n1k0-casperjs-4f105a9/tests/testdir/03_a.js b/n1k0-casperjs-4f105a9/tests/testdir/03_a.js new file mode 100644 index 0000000..e69de29 diff --git a/n1k0-casperjs-4f105a9/tests/testdir/03_b.js b/n1k0-casperjs-4f105a9/tests/testdir/03_b.js new file mode 100644 index 0000000..e69de29 diff --git a/n1k0-casperjs-4f105a9/tests/testdir/04/01_init.js b/n1k0-casperjs-4f105a9/tests/testdir/04/01_init.js new file mode 100644 index 0000000..e69de29 diff --git a/n1k0-casperjs-4f105a9/tests/testdir/04/02_do.js b/n1k0-casperjs-4f105a9/tests/testdir/04/02_do.js new file mode 100644 index 0000000..e69de29 diff --git a/phantomjs-1.9.7-windows/ChangeLog b/phantomjs-1.9.7-windows/ChangeLog new file mode 100644 index 0000000..5aef5da --- /dev/null +++ b/phantomjs-1.9.7-windows/ChangeLog @@ -0,0 +1,360 @@ +Please see also http://phantomjs.org/releases.html. + +2014-01-25: Version 1.9.7 + + * Reverted to GhostDriver 1.1.0 instead of 1.1.1 (issue 11915) + * Fixed another warning of obsolete userSpaceScaleFactor on OS X 10.9 (issue 11612) + +2014-01-20: Version 1.9.6 + + * Updated GhostDriver to version 1.1.1 (issue 11877, 11893) + +2014-01-19: Version 1.9.3 + + * Fixed CoreText performance note on OS X 10.9 (issue 11418) + * Fixed warning of obsolete userSpaceScaleFactor on OS X 10.9 (issue 11612) + +2013-09-06: Version 1.9.2 + + * Fixed graphical artifacts with transparent background on Windows (issue 11276, 11007, 11366) + * Updated GhostDriver to version 1.0.4 (issue 11452) + +2013-06-04: Version 1.9.1 + + Critical bug fixes: + + * Fixed problems with specifying proxy server (issue 10811, 11117) + * Fixed UTF-8 encoding with system.stdout and system.stderr (issue 11162) + * Ensured that onResourceReceived will be always invoked (issue 11163) + * Fixed module loading from an absolute path on Windows (issue 11165) + * Fixed typo in the command-line option for setting the cache size (11219) + * Fixed possible crash when handling network requests (issue 11252, 11388) + +2013-03-20: Version 1.9.0 "Sakura" + + New features + + * Added spawn and execFile to execute external programs (issue 10219) + * Added the ability to abort network requests (issue 10230) + * Added system access to stdin, stdout, and stderr (issue 10333) + * Added support for custom CA certificates location (issue 10916) + * Added seek function to the File stream (issue 10937) + * Implemented file read for a specified number of bytes (issue 10938) + * Added a callback to handle network error (issue 10954, 10997) + * Added custom encoding support when opening a page (issue 11043) + * Implemented require.stub() support for a factory function (issue 11044) + * Added page loading indicator and progress (issue 11091) + * Added a timeout option for network requests (issue 11129) + + Improvements + + * Fixed the build on FreeBSD (issue 10597) + * Ensured a consistent 72 dpi for Linux headless rendering (issue 10659) + * Fixed possible PDF error due to invalid CreationDate field (issue 10663) + * Fixed crash when uploading non existing files (issue 10941) + * Improved the autocomplete internal of the interactive/REPL mode (issue 10943) + * Fixed possible crash when accessing inline frames (issue 10947) + * Changed Linux binary package setup to be built on CentOS 5 (issue 10963) + * Extended SSL ignore setting to synchronous XHR (issue 10985) + * Added convenient constants for modifier keys (issue 11056) + * Fixed incorrect date handling in the cookies (issue 11068) + * Updated GhostDriver to version 1.0.3 (issue 11146) + + Examples + + * Fixed invalid data URI in the netsniff example (issue 10740) + * Implemented a new weather example (issue 10794) + * Fixed rendering issues in render_multi_url (issue 11021) + * Fixed proper event sequence in page_events example (issue 11028) + * Miscellanous tweaks (issue 11082) + +2013-03-02: Version 1.8.2 + + Critical bug fixes: + + * Fixed possible PDF error due to invalid CreationDate field (issue 663) + * Fixed crash when uploading non existing files (issue 941) + * Fixed possible crash when accessing inline frames (issue 947) + * Extended SSL ignore setting to synchronous XHR (issue 985) + * Fixed incorrect date handling in the cookies (issue 1068) + +2013-01-06: Version 1.8.1 + + Critical bug fix: + + * Mac OS X: Fix possible crash when using some TrueType fonts (issue 690) + +2012-12-21: Version 1.8.0 "Blue Winter Rose" + + New features + + * Integrated GhostDriver as the WebDriver implementation (issue 49) + * Added an option to specify the SSL protocol (issue 174) + * Added encoding support for WebServer's response (issue 505) + * Added process ID (PID) to the System module (issue 769) + * Added properties to obtain page and frame title (issue 799) + * Added page navigation methods (issue 808) + * Added support for modifier keys in keyboard events (issue 835) + * Added onFilePicker callback for more generic file upload API (issue 843) + * Added the ability to set the page content and location (issue 909) + + Improvements + + * Fixed date parsing in ISO8601 format (issue 187, 267) + * Fixed window.location (issue 530, 632) + * Deregistered multiple callback handler (issue 807) + * Fixed sending of double-click events (issue 848) + * Increases maximum number of redirects (issue 849) + * Fixed keycodes sent for lowercase characters (issue 852) + * Fixed a regression in table row page break (issue 880) + * Completed the CoffeeScript version of the examples (issue 907) + * Updated Qt to version 4.8.4 (issue 918) + * Fixed potential hang in some example scripts (issue 922) + +2012-09-22: Version 1.7.0 "Blazing Star" + + New features + + * Added a module system modelled after CommonJS/Node.js (issue 47) + * Added support for window pop-up (issue 151) + * Static build on Linux (issue 413) + * Added run-time detection of SSL support (issue 484) + * Added more events support (issue 492, 712) + * Added support for disabling automatic proxy detection (issue 580) + * Provided page closing callback (issue 678) + * Added methods to access URL, frames URL, frame Content (issue 758) + * Added more cookies-related API (issue 761) + + Improvements + + * Refactored command-line options handling (issue 55) + * Improved the workflow for producing release builds (issue 599) + * Improved cookies API and implementation (issue 603, 761) + * Improved frame switching API (issue 654) + * Fixed iframe handling regression (issue 683) + * Fixed OS version number with Windows 8 and Mountain Lion (issue 684, 688) + * Fixed HAR navigation info in the netsniff example (issue 733) + * Fixed compile warnings with Visual Studio (issue 744) + * Removed hacks for static linking on Windows (issue 753) + * Added ICO image handling on Windows (issue 779) + * Fixed font antialiasing on Windows (issue 785) + * Improved Jasmine test runner for Jasmine 1.2 (issue 792) + +2012-07-22: Version 1.6.1 + + Bug fixes + + * Don't build the deploy in debug mode (issue 599) + * Fixed building on Windows (issue 424) + * Fixed remote inspector when building statically (issue 430) + +2012-06-20: Version 1.6.0 "Lavender" + + New features + + * Added support for passing arguments to WebPage's evaluate (issue 132) + * Added callbacks for JavaScript onConfirm and onPrompt (issue 133) + * Added stack trace when error occurs (issue 166) + * Added support for local storage path and quota (issue 300) + * Added initial support for cookies handling (issue 354) + * Added support for header footer when printing the page (issue 410, 512) + * Added headers support in the loading request (issue 452) + * Added support to render the web page as base64-encoded string (issue 547) + * Added hooks for navigation event (issue 562) + * Added command-line option to show debug messages (issue 575) + * Added support for the zoom factor for web page rendering (issue 579) + * Added crash reporter for Mac OS X and Linux, based on Google Breakpad (issue 576) + * Added 'os' object to the system module (issue 585) + * Added support for asynchronous evaluation (issue 593) + + Improvements + + * Fixed remote debugging to work on Mac OS X and Windows (issue 430) + * Fixed web server getting the dropped connection for empty response (issue 451) + * Fixed text rendered as boxes (squares) on headless Linux (issue 460) + * Updated Qt to version 4.8.2 (issue 495) + * Updated CoffeeScript compiler to version 1.3.3 (issue 496) + * Fixed the build script to detect and use MAKEFLAGS (issue 503) + * Fixed the build script to properly pass Qt config flags (issue 507) + * Changed Info.plist to be embedded in Mac OS X executable (issue 528) + * Fixed wrong module require in the imagebin example (issue 536) + * Fixed example scripts to exit with the right exit code (issue 544) + * Fixed build failure with glib 2.31.0+ (issue 559) + * Fixed error handler failures in some cases (issue 589) + * Fixed Twitter-related examples to work with the new site (issue 609) + +2012-03-20: Version 1.5.0 "Ghost Flower" + + New features + + * Added interactive mode, also known as REPL (issue 252) + * Added setting for web security, to allow cross domain XHR (issue 28) + * Added error handler for WebPage object (issue 166) + * Added support for custom HTTP header in the network request (issue 77) + * Added support for read write encoding in the file system module (issue 367) + * Added remote debugging support on Linux (issue 6) + * Added support for proxy authentication (issue 105) + * Added System module, to retrieve environment variables (issue 271) and arguments (issue 276) + * Added fs.readLink function (issue 329) + * Added support for reading and writing binary data (issue 400) + * Added support to retrieve request data in the WebServer? module (issue 340) + * Added support for individual top/bottom/left/right print margins (issue 388) + * Added command-line option --help (issue 347) + * Added short command-line options -v and -h (issue 408) + * Removed support for Flash and other plugins (issue 418) + + Bug fixes + + * Fixed multiple console.log arguments (issue 36) + * Fixed file upload (issue 307) + * Fixed the web server instance to be asynchronous (issue 326) and still support Keep Alive (issue 416) + * Workaround Qt 4.8.0 crash due to empty URL scheme (issue 365) + * Fixed a Content-Type problem where POST does not work (issue 337) + * Fixed reading body request in the web server even without specific Content-Type (issue 439) + * Fixed Jasmine test runner with Jasmine 1.1 (issue 402) + * Fixed request URL formatting in the web server (issue 437) + * Don't display debugging and warning messages (issue 323) + +2011-12-31: Version 1.4.1 + + Bug fixes + + * Fix setting the proxy type (issue 266) + * Workaround for file upload regression (issue 307) + * Fix extraneous messsages in non-debug mode (issue 323) + +2011-12-22: Version 1.4.0 "Glory of the Snow" + + New features + + * Added embedded HTTP server (issue 115) + * Added convenient build script for Linux (issue 197) + * Added support for SOCKS5 proxy (issue 266) + * Updated CoffeeScript compiler to version 1.2 (issue 312) + + Bug fixes + + * Fix potential crash in QUrl with Qt 4.8 (issue 304) + * Fix bug in CookieJar with QSettings and string (PyPhantomJS issue 10) + * Prevent showing the icon on Mac OS X Dock (issue 281) + + Examples + + * Added a new example to detect browsers sniffing (issue 263) + * Added HTTP server example (issue 115) + +2011-09-23: Version 1.3.0 "Water Lily" + + Bug fixes + + * Fixed open() and POST method, without specifying the finished handler + * Fixed script execution warning dialog (issue 165) + * Added WebPage.release() to free the web page from memory (issue 154) + * Added special handling of about:blank (issue 235) + * Made a separate network access manager for each page (issue 190) + + New features + + * Introduced file system API based on CommonJS Filesystem proposal (issue 129) + * Added support for persistent cookies (issue 91) + * Added event handling, currently only for mouse events (issue 234) + * Added page scroll position (issue 162) + * Added HTTP authentication support (issue 45) + * Added callback for page initialization (issue 143) + * Added support to specify script and output encoding (issue 186) + * Added option to allow local content to do cross-domain access (issue 28) + * Added support to apply configurations from a JSON file (issue 180) + * Added a convenient WebPage initialization construction (issue 206) + * Added option to limit the size of disk cache (issue 220) + + Examples + + * Added a new example on using Modernizr to detect features (issue 144) + * Fixed pizza.js example to use Mobile Yelp (issue 200) + * Fixed netsniff.coffee example due to wrong indentation (issue 225) + * Added an example to show live network traffic (issue 227) + * Added an example demonstrating different output encodings (issue 186) + +2011-06-21: Version 1.2.0 "Birds of Paradise" + + Version 1.2.0 is a major update. It introduces a whole set of new API. + + Bug fixes + + * Fixed rendering a very large web page (issue 54) + * Fixed reporting of CoffeeScript compile error (issue 125) + + New features + + * Added callback for console message (issue 12) + * Improved security model via WebPage object (issue 41) + * Added support for POST, HEAD, PUT, and DELETE (issue 88) + * Scripts filename is now passed as phantom.scriptName + * Added callback to capture resource requests and responses (issue 2) + * Added the ability to load external JavaScript (issue 32) + + Examples + + * Ported examples to use WebPage object + * Added a new example to upload an image to imagebin.org + * Added a new example to show HTTP POST feature + * Added a new example to sniff network traffic and save it in HAR format + + +2011-04-27: Version 1.1.0 "Cherry Blossom" + + Fixed the script loading to use UTF-8 encoding (Yasuhiro Matsumoto). + + Added check for system proxy setting (Yasuhiro Matsumoto). + + Fixed building with Cygwin and Qt 4.5 (John Dalton). + + Added a new example: driver for QUnit tests (Łukasz Korecki). + + Fixed issue #20: problem with JPG transparent color (Alessandro Portale). + + Fixed issue #9: ignore first line starting with #! (Matthias, aka fourplusone). + + Fixed issue #7: support for file upload for form submission (Matthias, aka fourplusone). + + Fixed issue #35: support for disabling images loading (Ariya Hidayat). + + Fixed issue #14: enable or disable plugins (Ariya Hidayat). + + Added a new example: using Canvas to produce the color wheel (Ariya Hidayat). + + Added support for rasterizing as GIF image (Ariya Hidayat). + + Added support for CoffeeScript (Ariya Hidayat). + + Fixed issue #19: option for setting the proxy (Clint Berry, Ariya Hidayat). + + Python implementation using PyQt (James Roe). + + Fixed issue #17: Specify paper size for PDF export (Alessandro Portale). + + Fixed issue #60: Win32 and OS/2 icon files (Salvador Parra Camacho). + + Added clipping rectangle to the render function (Wouter de Bie). + + Added an example on sychronous waiting (Gabor Torok). + + Added command line option to use disk cache (Jon Turner). + + Added text extracting example (Weston Ruter). + + Fixed issue #93: Build with Qt < 4.7 (Ariya Hidayat). + + Ported all examples to CoffeeScript (Robert Gieseke). + +2011-01-17: Version 1.0.0 + + Initial launch. + + The API is centralized at the 'phantom' object (as child of + window object) which has the properties: args, content, + loadStatus, state, userAgent, version, viewportSize, and + the following functions: exit, open, render, sleep. + + Several examples are included, among others: web page rasterizer, + weather service, headless test framework driver, and many others. diff --git a/phantomjs-1.9.7-windows/LICENSE.BSD b/phantomjs-1.9.7-windows/LICENSE.BSD new file mode 100644 index 0000000..d5dfdd1 --- /dev/null +++ b/phantomjs-1.9.7-windows/LICENSE.BSD @@ -0,0 +1,22 @@ +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the <organization> nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/phantomjs-1.9.7-windows/README.md b/phantomjs-1.9.7-windows/README.md new file mode 100644 index 0000000..752d6fc --- /dev/null +++ b/phantomjs-1.9.7-windows/README.md @@ -0,0 +1,45 @@ +# [PhantomJS](http://phantomjs.org) - Scriptable Headless WebKit + +PhantomJS ([www.phantomjs.org](http://phantomjs.org)) is a headless WebKit scriptable with JavaScript or CoffeeScript. It is used by hundreds of [developers](https://github.com/ariya/phantomjs/wiki/Buzz) and dozens of [organizations](https://github.com/ariya/phantomjs/wiki/Users) for web-related development workflow. + +The latest [stable release](http://phantomjs.org/release-1.9.html) is version 1.9 (codenamed <a href="http://phantomjs.org/release-names.html">"Sakura"</a>). Follow the official Twitter stream [@PhantomJS](http://twitter.com/PhantomJS) to get the frequent development updates. + +**Note**: Please **do not** create a GitHub pull request **without** reading the [Contribution Guide](https://github.com/ariya/phantomjs/blob/master/CONTRIBUTING.md) first. Failure to do so may result in the rejection of the pull request. + +## Use Cases + +- **Headless web testing**. Lightning-fast testing without the browser is now possible! Various [test frameworks](https://github.com/ariya/phantomjs/wiki/Headless-Testing) such as Jasmine, Capybara, QUnit, Mocha, WebDriver, YUI Test, BusterJS, FuncUnit, Robot Framework, and many others are supported. +- **Page automation**. [Access and manipulate](https://github.com/ariya/phantomjs/wiki/Page-Automation) web pages with the standard DOM API, or with usual libraries like jQuery. +- **Screen capture**. Programmatically [capture web contents](https://github.com/ariya/phantomjs/wiki/Screen-Capture), including CSs, SVG and Canvas. Build server-side web graphics apps, from a screenshot service to a vector chart rasterizer. +- **Network monitoring**. Automate performance analysis, track [page loading](https://github.com/ariya/phantomjs/wiki/Network-Monitoring) and export as standard HAR format. + +## Features + +- **Multiplatform**, available on major operating systems: Windows, Mac OS X, Linux, other Unices. +- **Fast and native implementation** of web standards: DOM, CSS, JavaScript, Canvas, SVG. No emulation! +- **Pure headless (no X11) on Linux**, ideal for continuous integration systems. Also runs on Amazon EC2, Heroku, Iron.io. +- **Easy to install**: [Download](http://phantomjs.org/download.html), unpack, and start having fun in just 5 minutes. + +## Ecosystem + +PhantomJS needs not be used only as a stand-alone tool. Check also some excellent related projects: + +- [CasperJS](http://casperjs.org) enables easy navigation scripting and common high-level testing. +- [Poltergeist](https://github.com/jonleighton/poltergeist) allows running Capybara tests headlessly. +- [Guard::Jasmine](https://github.com/netzpirat/guard-jasmine) automatically tests Jasmine specs on Rails when files are modified. +- [GhostDriver](http://github.com/detro/ghostdriver/) complements Selenium tests with a PhantomJS WebDriver implementation. +- [PhantomRobot](https://github.com/datakurre/phantomrobot) runs Robot Framework acceptance tests in the background via PhantomJS. +- [Mocha-PhantomJS](https://github.com/metaskills/mocha-phantomjs) run Mocha tests using PhantomJS. + +and many others [related projects](https://github.com/ariya/phantomjs/wiki/Related-Projects). + +## Questions? + +- Explore the complete [documentation](https://github.com/ariya/phantomjs/wiki) +- Read tons of [user articles](https://github.com/ariya/phantomjs/wiki/Buzz) on using PhantomJS. +- Join the [mailing-list](http://groups.google.com/group/phantomjs) and discuss with other PhantomJS fans. + +PhantomJS is free software/open source, and is distributed under the [BSD license](http://opensource.org/licenses/BSD-3-Clause). It contains third-party code, see the included `third-party.txt` file for the license information on third-party code. + +PhantomJS is created and maintained by [Ariya Hidayat](http://ariya.ofilabs.com/about) (Twitter: [@ariyahidayat](http://twitter.com/ariyahidayat)), with the help of [many contributors](https://github.com/ariya/phantomjs/contributors). + diff --git a/phantomjs-1.9.7-windows/examples/arguments.coffee b/phantomjs-1.9.7-windows/examples/arguments.coffee new file mode 100644 index 0000000..9502439 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/arguments.coffee @@ -0,0 +1,7 @@ +system = require 'system' +if system.args.length is 1 + console.log 'Try to pass some args when invoking this script!' +else + for arg, i in system.args + console.log i + ': ' + arg +phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/arguments.js b/phantomjs-1.9.7-windows/examples/arguments.js new file mode 100644 index 0000000..c6d1ee4 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/arguments.js @@ -0,0 +1,9 @@ +var system = require('system'); +if (system.args.length === 1) { + console.log('Try to pass some args when invoking this script!'); +} else { + system.args.forEach(function (arg, i) { + console.log(i + ': ' + arg); + }); +} +phantom.exit(); diff --git a/phantomjs-1.9.7-windows/examples/child_process-examples.coffee b/phantomjs-1.9.7-windows/examples/child_process-examples.coffee new file mode 100644 index 0000000..47e9b50 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/child_process-examples.coffee @@ -0,0 +1,20 @@ +{spawn, execFile} = require "child_process" + +child = spawn "ls", ["-lF", "/rooot"] + +child.stdout.on "data", (data) -> + console.log "spawnSTDOUT:", JSON.stringify data + +child.stderr.on "data", (data) -> + console.log "spawnSTDERR:", JSON.stringify data + +child.on "exit", (code) -> + console.log "spawnEXIT:", code + +#child.kill "SIGKILL" + +execFile "ls", ["-lF", "/usr"], null, (err, stdout, stderr) -> + console.log "execFileSTDOUT:", JSON.stringify stdout + console.log "execFileSTDERR:", JSON.stringify stderr + +setTimeout (-> phantom.exit 0), 2000 diff --git a/phantomjs-1.9.7-windows/examples/child_process-examples.js b/phantomjs-1.9.7-windows/examples/child_process-examples.js new file mode 100644 index 0000000..a4970d1 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/child_process-examples.js @@ -0,0 +1,27 @@ +var spawn = require("child_process").spawn +var execFile = require("child_process").execFile + +var child = spawn("ls", ["-lF", "/rooot"]) + +child.stdout.on("data", function (data) { + console.log("spawnSTDOUT:", JSON.stringify(data)) +}) + +child.stderr.on("data", function (data) { + console.log("spawnSTDERR:", JSON.stringify(data)) +}) + +child.on("exit", function (code) { + console.log("spawnEXIT:", code) +}) + +//child.kill("SIGKILL") + +execFile("ls", ["-lF", "/usr"], null, function (err, stdout, stderr) { + console.log("execFileSTDOUT:", JSON.stringify(stdout)) + console.log("execFileSTDERR:", JSON.stringify(stderr)) +}) + +setTimeout(function () { + phantom.exit(0) +}, 2000) diff --git a/phantomjs-1.9.7-windows/examples/colorwheel.coffee b/phantomjs-1.9.7-windows/examples/colorwheel.coffee new file mode 100644 index 0000000..74866e1 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/colorwheel.coffee @@ -0,0 +1,46 @@ +page = require('webpage').create() + +page.viewportSize = { width: 400, height : 400 } +page.content = '<html><body><canvas id="surface"></canvas></body></html>' + +page.evaluate -> + el = document.getElementById 'surface' + context = el.getContext '2d' + width = window.innerWidth + height = window.innerHeight + cx = width / 2 + cy = height / 2 + radius = width / 2.3 + i = 0 + + el.width = width + el.height = height + imageData = context.createImageData(width, height) + pixels = imageData.data + + for y in [0...height] + for x in [0...width] + i = i + 4 + rx = x - cx + ry = y - cy + d = rx * rx + ry * ry + if d < radius * radius + hue = 6 * (Math.atan2(ry, rx) + Math.PI) / (2 * Math.PI) + sat = Math.sqrt(d) / radius + g = Math.floor(hue) + f = hue - g + u = 255 * (1 - sat) + v = 255 * (1 - sat * f) + w = 255 * (1 - sat * (1 - f)) + pixels[i] = [255, v, u, u, w, 255, 255][g] + pixels[i + 1] = [w, 255, 255, v, u, u, w][g] + pixels[i + 2] = [u, u, w, 255, 255, v, u][g] + pixels[i + 3] = 255 + + context.putImageData imageData, 0, 0 + document.body.style.backgroundColor = 'white' + document.body.style.margin = '0px' + +page.render('colorwheel.png') + +phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/colorwheel.js b/phantomjs-1.9.7-windows/examples/colorwheel.js new file mode 100644 index 0000000..44fb7bf --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/colorwheel.js @@ -0,0 +1,51 @@ +var page = require('webpage').create(); +page.viewportSize = { width: 400, height : 400 }; +page.content = '<html><body><canvas id="surface"></canvas></body></html>'; +page.evaluate(function() { + var el = document.getElementById('surface'), + context = el.getContext('2d'), + width = window.innerWidth, + height = window.innerHeight, + cx = width / 2, + cy = height / 2, + radius = width / 2.3, + imageData, + pixels, + hue, sat, value, + i = 0, x, y, rx, ry, d, + f, g, p, u, v, w, rgb; + + el.width = width; + el.height = height; + imageData = context.createImageData(width, height); + pixels = imageData.data; + + for (y = 0; y < height; y = y + 1) { + for (x = 0; x < width; x = x + 1, i = i + 4) { + rx = x - cx; + ry = y - cy; + d = rx * rx + ry * ry; + if (d < radius * radius) { + hue = 6 * (Math.atan2(ry, rx) + Math.PI) / (2 * Math.PI); + sat = Math.sqrt(d) / radius; + g = Math.floor(hue); + f = hue - g; + u = 255 * (1 - sat); + v = 255 * (1 - sat * f); + w = 255 * (1 - sat * (1 - f)); + pixels[i] = [255, v, u, u, w, 255, 255][g]; + pixels[i + 1] = [w, 255, 255, v, u, u, w][g]; + pixels[i + 2] = [u, u, w, 255, 255, v, u][g]; + pixels[i + 3] = 255; + } + } + } + + context.putImageData(imageData, 0, 0); + document.body.style.backgroundColor = 'white'; + document.body.style.margin = '0px'; +}); + +page.render('colorwheel.png'); + +phantom.exit(); diff --git a/phantomjs-1.9.7-windows/examples/countdown.coffee b/phantomjs-1.9.7-windows/examples/countdown.coffee new file mode 100644 index 0000000..821fc9f --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/countdown.coffee @@ -0,0 +1,8 @@ +t = 10 +interval = setInterval -> + if t > 0 + console.log t-- + else + console.log 'BLAST OFF!' + phantom.exit() +, 1000 diff --git a/phantomjs-1.9.7-windows/examples/countdown.js b/phantomjs-1.9.7-windows/examples/countdown.js new file mode 100644 index 0000000..7f5e156 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/countdown.js @@ -0,0 +1,9 @@ +var t = 10, + interval = setInterval(function(){ + if ( t > 0 ) { + console.log(t--); + } else { + console.log("BLAST OFF!"); + phantom.exit(); + } + }, 1000); diff --git a/phantomjs-1.9.7-windows/examples/detectsniff.coffee b/phantomjs-1.9.7-windows/examples/detectsniff.coffee new file mode 100644 index 0000000..b8d2719 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/detectsniff.coffee @@ -0,0 +1,42 @@ +page = require('webpage').create() +system = require 'system' + +page.onInitialized = -> + page.evaluate -> + userAgent = window.navigator.userAgent + platform = window.navigator.platform + window.navigator = + appCodeName: 'Mozilla' + appName: 'Netscape' + cookieEnabled: false + sniffed: false + + window.navigator.__defineGetter__ 'userAgent', -> + window.navigator.sniffed = true + userAgent + + window.navigator.__defineGetter__ 'platform', -> + window.navigator.sniffed = true + platform + +if system.args.length is 1 + console.log 'Usage: detectsniff.coffee <some URL>' + phantom.exit 1 +else + address = system.args[1] + console.log 'Checking ' + address + '...' + page.open address, (status) -> + if status isnt 'success' + console.log 'FAIL to load the address' + phantom.exit() + else + window.setTimeout -> + sniffed = page.evaluate(-> + navigator.sniffed + ) + if sniffed + console.log 'The page tried to sniff the user agent.' + else + console.log 'The page did not try to sniff the user agent.' + phantom.exit() + , 1500 diff --git a/phantomjs-1.9.7-windows/examples/detectsniff.js b/phantomjs-1.9.7-windows/examples/detectsniff.js new file mode 100644 index 0000000..e23c410 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/detectsniff.js @@ -0,0 +1,59 @@ +// Detect if a web page sniffs the user agent or not. + +var page = require('webpage').create(), + system = require('system'), + sniffed, + address; + +page.onInitialized = function () { + page.evaluate(function () { + + (function () { + var userAgent = window.navigator.userAgent, + platform = window.navigator.platform; + + window.navigator = { + appCodeName: 'Mozilla', + appName: 'Netscape', + cookieEnabled: false, + sniffed: false + }; + + window.navigator.__defineGetter__('userAgent', function () { + window.navigator.sniffed = true; + return userAgent; + }); + + window.navigator.__defineGetter__('platform', function () { + window.navigator.sniffed = true; + return platform; + }); + })(); + }); +}; + +if (system.args.length === 1) { + console.log('Usage: detectsniff.js <some URL>'); + phantom.exit(1); +} else { + address = system.args[1]; + console.log('Checking ' + address + '...'); + page.open(address, function (status) { + if (status !== 'success') { + console.log('FAIL to load the address'); + phantom.exit(); + } else { + window.setTimeout(function () { + sniffed = page.evaluate(function () { + return navigator.sniffed; + }); + if (sniffed) { + console.log('The page tried to sniff the user agent.'); + } else { + console.log('The page did not try to sniff the user agent.'); + } + phantom.exit(); + }, 1500); + } + }); +} diff --git a/phantomjs-1.9.7-windows/examples/direction.coffee b/phantomjs-1.9.7-windows/examples/direction.coffee new file mode 100644 index 0000000..85a1cff --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/direction.coffee @@ -0,0 +1,30 @@ +# Get driving direction using Google Directions API. + +page = require('webpage').create() +system = require 'system' + +if system.args.length < 3 + console.log 'Usage: direction.coffee origin destination' + console.log 'Example: direction.coffee "San Diego" "Palo Alto"' + phantom.exit 1 +else + origin = system.args[1] + dest = system.args[2] + page.open encodeURI('http://maps.googleapis.com/maps/api/directions/xml?origin=' + origin + + '&destination=' + dest + '&units=imperial&mode=driving&sensor=false'), + (status) -> + if status isnt 'success' + console.log 'Unable to access network' + else + steps = page.content.match(/<html_instructions>(.*)<\/html_instructions>/ig) + if not steps + console.log 'No data available for ' + origin + ' to ' + dest + else + for ins in steps + ins = ins.replace(/\</ig, '<').replace(/\>/ig, '>') + ins = ins.replace(/\<div/ig, '\n<div') + ins = ins.replace(/<.*?>/g, '') + console.log(ins) + console.log '' + console.log page.content.match(/<copyrights>.*<\/copyrights>/ig).join('').replace(/<.*?>/g, '') + phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/direction.js b/phantomjs-1.9.7-windows/examples/direction.js new file mode 100644 index 0000000..77044e3 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/direction.js @@ -0,0 +1,35 @@ +// Get driving direction using Google Directions API. + +var page = require('webpage').create(), + system = require('system'), + origin, dest, steps; + +if (system.args.length < 3) { + console.log('Usage: direction.js origin destination'); + console.log('Example: direction.js "San Diego" "Palo Alto"'); + phantom.exit(1); +} else { + origin = system.args[1]; + dest = system.args[2]; + page.open(encodeURI('http://maps.googleapis.com/maps/api/directions/xml?origin=' + origin + + '&destination=' + dest + '&units=imperial&mode=driving&sensor=false'), function (status) { + if (status !== 'success') { + console.log('Unable to access network'); + } else { + steps = page.content.match(/<html_instructions>(.*)<\/html_instructions>/ig); + if (steps == null) { + console.log('No data available for ' + origin + ' to ' + dest); + } else { + steps.forEach(function (ins) { + ins = ins.replace(/\</ig, '<').replace(/\>/ig, '>'); + ins = ins.replace(/\<div/ig, '\n<div'); + ins = ins.replace(/<.*?>/g, ''); + console.log(ins); + }); + console.log(''); + console.log(page.content.match(/<copyrights>.*<\/copyrights>/ig).join('').replace(/<.*?>/g, '')); + } + } + phantom.exit(); + }); +} diff --git a/phantomjs-1.9.7-windows/examples/echoToFile.coffee b/phantomjs-1.9.7-windows/examples/echoToFile.coffee new file mode 100644 index 0000000..e886f93 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/echoToFile.coffee @@ -0,0 +1,19 @@ +# echoToFile.coffee - Write in a given file all the parameters passed on the CLI +fs = require 'fs' +system = require 'system' + +if system.args.length < 3 + console.log "Usage: echoToFile.coffee DESTINATION_FILE <arguments to echo...>" + phantom.exit 1 +else + content = "" + f = null + i = 2 + while i < system.args.length + content += system.args[i] + (if i == system.args.length - 1 then "" else " ") + ++i + try + fs.write system.args[1], content, "w" + catch e + console.log e + phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/echoToFile.js b/phantomjs-1.9.7-windows/examples/echoToFile.js new file mode 100644 index 0000000..924a703 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/echoToFile.js @@ -0,0 +1,23 @@ +// echoToFile.js - Write in a given file all the parameters passed on the CLI +var fs = require('fs'), + system = require('system'); + +if (system.args.length < 3) { + console.log("Usage: echoToFile.js DESTINATION_FILE <arguments to echo...>"); + phantom.exit(1); +} else { + var content = '', + f = null, + i; + for ( i= 2; i < system.args.length; ++i ) { + content += system.args[i] + (i === system.args.length-1 ? '' : ' '); + } + + try { + fs.write(system.args[1], content, 'w'); + } catch(e) { + console.log(e); + } + + phantom.exit(); +} diff --git a/phantomjs-1.9.7-windows/examples/features.coffee b/phantomjs-1.9.7-windows/examples/features.coffee new file mode 100644 index 0000000..829beeb --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/features.coffee @@ -0,0 +1,23 @@ +feature = undefined +supported = [] +unsupported = [] +phantom.injectJs "modernizr.js" +console.log "Detected features (using Modernizr " + Modernizr._version + "):" +for feature of Modernizr + if Modernizr.hasOwnProperty(feature) + if feature[0] isnt "_" and typeof Modernizr[feature] isnt "function" and feature isnt "input" and feature isnt "inputtypes" + if Modernizr[feature] + supported.push feature + else + unsupported.push feature +console.log "" +console.log "Supported:" +supported.forEach (e) -> + console.log " " + e + +console.log "" +console.log "Not supported:" +unsupported.forEach (e) -> + console.log " " + e + +phantom.exit() \ No newline at end of file diff --git a/phantomjs-1.9.7-windows/examples/features.js b/phantomjs-1.9.7-windows/examples/features.js new file mode 100644 index 0000000..a60643c --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/features.js @@ -0,0 +1,30 @@ +var feature, supported = [], unsupported = []; + +phantom.injectJs('modernizr.js'); +console.log('Detected features (using Modernizr ' + Modernizr._version + '):'); +for (feature in Modernizr) { + if (Modernizr.hasOwnProperty(feature)) { + if (feature[0] !== '_' && typeof Modernizr[feature] !== 'function' && + feature !== 'input' && feature !== 'inputtypes') { + if (Modernizr[feature]) { + supported.push(feature); + } else { + unsupported.push(feature); + } + } + } +} + +console.log(''); +console.log('Supported:'); +supported.forEach(function (e) { + console.log(' ' + e); +}); + +console.log(''); +console.log('Not supported:'); +unsupported.forEach(function (e) { + console.log(' ' + e); +}); +phantom.exit(); + diff --git a/phantomjs-1.9.7-windows/examples/fibo.coffee b/phantomjs-1.9.7-windows/examples/fibo.coffee new file mode 100644 index 0000000..d9f9178 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/fibo.coffee @@ -0,0 +1,8 @@ +fibs = [0, 1] +f = -> + console.log fibs[fibs.length - 1] + fibs.push fibs[fibs.length - 1] + fibs[fibs.length - 2] + if fibs.length > 10 + window.clearInterval ticker + phantom.exit() +ticker = window.setInterval(f, 300) diff --git a/phantomjs-1.9.7-windows/examples/fibo.js b/phantomjs-1.9.7-windows/examples/fibo.js new file mode 100644 index 0000000..aa5d7ea --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/fibo.js @@ -0,0 +1,9 @@ +var fibs = [0, 1]; +var ticker = window.setInterval(function () { + console.log(fibs[fibs.length - 1]); + fibs.push(fibs[fibs.length - 1] + fibs[fibs.length - 2]); + if (fibs.length > 10) { + window.clearInterval(ticker); + phantom.exit(); + } +}, 300); diff --git a/phantomjs-1.9.7-windows/examples/follow.coffee b/phantomjs-1.9.7-windows/examples/follow.coffee new file mode 100644 index 0000000..4a7fbd4 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/follow.coffee @@ -0,0 +1,33 @@ +# List following and followers from several accounts + +users = [ + 'PhantomJS' + 'ariyahidayat' + 'detronizator' + 'KDABQt' + 'lfranchi' + 'jonleighton' + '_jamesmgreene' + 'Vitalliumm' + ] + +follow = (user, callback) -> + page = require('webpage').create() + page.open 'http://mobile.twitter.com/' + user, (status) -> + if status is 'fail' + console.log user + ': ?' + else + data = page.evaluate -> document.querySelector('div.profile td.stat.stat-last div.statnum').innerText; + console.log user + ': ' + data + page.close() + callback.apply() + +process = () -> + if (users.length > 0) + user = users[0] + users.splice(0, 1) + follow(user, process) + else + phantom.exit() + +process() diff --git a/phantomjs-1.9.7-windows/examples/follow.js b/phantomjs-1.9.7-windows/examples/follow.js new file mode 100644 index 0000000..7d826f7 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/follow.js @@ -0,0 +1,38 @@ +// List following and followers from several accounts + +var users = ['PhantomJS', + 'ariyahidayat', + 'detronizator', + 'KDABQt', + 'lfranchi', + 'jonleighton', + '_jamesmgreene', + 'Vitalliumm']; + +function follow(user, callback) { + var page = require('webpage').create(); + page.open('http://mobile.twitter.com/' + user, function (status) { + if (status === 'fail') { + console.log(user + ': ?'); + } else { + var data = page.evaluate(function () { + return document.querySelector('div.profile td.stat.stat-last div.statnum').innerText; + }); + console.log(user + ': ' + data); + } + page.close(); + callback.apply(); + }); +} + +function process() { + if (users.length > 0) { + var user = users[0]; + users.splice(0, 1); + follow(user, process); + } else { + phantom.exit(); + } +} + +process(); diff --git a/phantomjs-1.9.7-windows/examples/hello.coffee b/phantomjs-1.9.7-windows/examples/hello.coffee new file mode 100644 index 0000000..1776a06 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/hello.coffee @@ -0,0 +1,2 @@ +console.log 'Hello, world!' +phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/hello.js b/phantomjs-1.9.7-windows/examples/hello.js new file mode 100644 index 0000000..e273a97 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/hello.js @@ -0,0 +1,2 @@ +console.log('Hello, world!'); +phantom.exit(); diff --git a/phantomjs-1.9.7-windows/examples/imagebin.coffee b/phantomjs-1.9.7-windows/examples/imagebin.coffee new file mode 100644 index 0000000..fdd8455 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/imagebin.coffee @@ -0,0 +1,20 @@ +# Upload an image to imagebin.org + +page = require('webpage').create() +system = require 'system' + +if system.args.length isnt 2 + console.log 'Usage: imagebin.coffee filename' + phantom.exit 1 +else + fname = system.args[1] + page.open 'http://imagebin.org/index.php?page=add', -> + page.uploadFile 'input[name=image]', fname + page.evaluate -> + document.querySelector('input[name=nickname]').value = 'phantom' + document.querySelector('input[name=disclaimer_agree]').click() + document.querySelector('form').submit() + + window.setTimeout -> + phantom.exit() + , 3000 diff --git a/phantomjs-1.9.7-windows/examples/imagebin.js b/phantomjs-1.9.7-windows/examples/imagebin.js new file mode 100644 index 0000000..5446b92 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/imagebin.js @@ -0,0 +1,23 @@ +// Upload an image to imagebin.org + +var page = require('webpage').create(), + system = require('system'), + fname; + +if (system.args.length !== 2) { + console.log('Usage: imagebin.js filename'); + phantom.exit(1); +} else { + fname = system.args[1]; + page.open("http://imagebin.org/index.php?page=add", function () { + page.uploadFile('input[name=image]', fname); + page.evaluate(function () { + document.querySelector('input[name=nickname]').value = 'phantom'; + document.querySelector('input[name=disclaimer_agree]').click() + document.querySelector('form').submit(); + }); + window.setTimeout(function () { + phantom.exit(); + }, 3000); + }); +} diff --git a/phantomjs-1.9.7-windows/examples/injectme.coffee b/phantomjs-1.9.7-windows/examples/injectme.coffee new file mode 100644 index 0000000..ae4927d --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/injectme.coffee @@ -0,0 +1,23 @@ +# Use 'page.injectJs()' to load the script itself in the Page context + +if phantom? + page = require('webpage').create() + + # Route "console.log()" calls from within the Page context to the main + # Phantom context (i.e. current "this") + page.onConsoleMessage = (msg) -> console.log(msg) + + page.onAlert = (msg) -> console.log(msg) + + console.log "* Script running in the Phantom context." + console.log "* Script will 'inject' itself in a page..." + page.open "about:blank", (status) -> + if status is "success" + if page.injectJs("injectme.coffee") + console.log "... done injecting itself!" + else + console.log "... fail! Check the $PWD?!" + phantom.exit() +else + alert "* Script running in the Page context." + diff --git a/phantomjs-1.9.7-windows/examples/injectme.js b/phantomjs-1.9.7-windows/examples/injectme.js new file mode 100644 index 0000000..d1f21b9 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/injectme.js @@ -0,0 +1,25 @@ +// Use 'page.injectJs()' to load the script itself in the Page context + +if ( typeof(phantom) !== "undefined" ) { + var page = require('webpage').create(); + + // Route "console.log()" calls from within the Page context to the main Phantom context (i.e. current "this") + page.onConsoleMessage = function(msg) { + console.log(msg); + }; + + page.onAlert = function(msg) { + console.log(msg); + }; + + console.log("* Script running in the Phantom context."); + console.log("* Script will 'inject' itself in a page..."); + page.open("about:blank", function(status) { + if ( status === "success" ) { + console.log(page.injectJs("injectme.js") ? "... done injecting itself!" : "... fail! Check the $PWD?!"); + } + phantom.exit(); + }); +} else { + alert("* Script running in the Page context."); +} diff --git a/phantomjs-1.9.7-windows/examples/ipgeocode.coffee b/phantomjs-1.9.7-windows/examples/ipgeocode.coffee new file mode 100644 index 0000000..d36d6aa --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/ipgeocode.coffee @@ -0,0 +1,13 @@ +# Give the estimated location based on the IP address. + +window.cb = (data) -> + loc = data.city + if data.region_name.length > 0 + loc = loc + ', ' + data.region_name + console.log 'IP address: ' + data.ip + console.log 'Estimated location: ' + loc + phantom.exit() + +el = document.createElement 'script' +el.src = 'http://freegeoip.net/json/?callback=window.cb' +document.body.appendChild el diff --git a/phantomjs-1.9.7-windows/examples/ipgeocode.js b/phantomjs-1.9.7-windows/examples/ipgeocode.js new file mode 100644 index 0000000..aff5a20 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/ipgeocode.js @@ -0,0 +1,14 @@ +// Give the estimated location based on the IP address. + +cb = function (data) { + var loc = data.city; + if (data.region_name.length > 0) + loc = loc + ', ' + data.region_name; + console.log('IP address: ' + data.ip); + console.log('Estimated location: ' + loc); + phantom.exit(); +}; + +var el = document.createElement('script'); +el.src = 'http://freegeoip.net/json/?callback=cb'; +document.body.appendChild(el); diff --git a/phantomjs-1.9.7-windows/examples/loadspeed.coffee b/phantomjs-1.9.7-windows/examples/loadspeed.coffee new file mode 100644 index 0000000..a4c6aa7 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/loadspeed.coffee @@ -0,0 +1,18 @@ +page = require('webpage').create() +system = require 'system' + +if system.args.length is 1 + console.log 'Usage: loadspeed.coffee <some URL>' + phantom.exit 1 +else + t = Date.now() + address = system.args[1] + page.open address, (status) -> + if status isnt 'success' + console.log('FAIL to load the address') + else + t = Date.now() - t + console.log('Page title is ' + page.evaluate( (-> document.title) )) + console.log('Loading time ' + t + ' msec') + phantom.exit() + diff --git a/phantomjs-1.9.7-windows/examples/loadspeed.js b/phantomjs-1.9.7-windows/examples/loadspeed.js new file mode 100644 index 0000000..a775e77 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/loadspeed.js @@ -0,0 +1,23 @@ +var page = require('webpage').create(), + system = require('system'), + t, address; + +if (system.args.length === 1) { + console.log('Usage: loadspeed.js <some URL>'); + phantom.exit(1); +} else { + t = Date.now(); + address = system.args[1]; + page.open(address, function (status) { + if (status !== 'success') { + console.log('FAIL to load the address'); + } else { + t = Date.now() - t; + console.log('Page title is ' + page.evaluate(function () { + return document.title; + })); + console.log('Loading time ' + t + ' msec'); + } + phantom.exit(); + }); +} diff --git a/phantomjs-1.9.7-windows/examples/loadurlwithoutcss.coffee b/phantomjs-1.9.7-windows/examples/loadurlwithoutcss.coffee new file mode 100644 index 0000000..36143c8 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/loadurlwithoutcss.coffee @@ -0,0 +1,20 @@ +page = require("webpage").create() +system = require("system") + +if system.args.length < 2 + console.log "Usage: loadurlwithoutcss.js URL" + phantom.exit() + +address = system.args[1] + +page.onResourceRequested = (requestData, request) -> + if (/http:\/\/.+?\.css/g).test(requestData["url"]) or requestData["Content-Type"] is "text/css" + console.log "The url of the request is matching. Aborting: " + requestData["url"] + request.abort() + +page.open address, (status) -> + if status is "success" + phantom.exit() + else + console.log "Unable to load the address!" + phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/loadurlwithoutcss.js b/phantomjs-1.9.7-windows/examples/loadurlwithoutcss.js new file mode 100644 index 0000000..c7a4733 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/loadurlwithoutcss.js @@ -0,0 +1,25 @@ +var page = require('webpage').create(), + system = require('system'); + +if (system.args.length < 2) { + console.log('Usage: loadurlwithoutcss.js URL'); + phantom.exit(); +} + +var address = system.args[1]; + +page.onResourceRequested = function(requestData, request) { + if ((/http:\/\/.+?\.css/gi).test(requestData['url']) || requestData['Content-Type'] == 'text/css') { + console.log('The url of the request is matching. Aborting: ' + requestData['url']); + request.abort(); + } +}; + +page.open(address, function(status) { + if (status === 'success') { + phantom.exit(); + } else { + console.log('Unable to load the address!'); + phantom.exit(); + } +}); \ No newline at end of file diff --git a/phantomjs-1.9.7-windows/examples/modernizr.js b/phantomjs-1.9.7-windows/examples/modernizr.js new file mode 100644 index 0000000..f9e57c8 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/modernizr.js @@ -0,0 +1,1116 @@ +/*! + * Modernizr v2.0.6 + * http://www.modernizr.com + * + * Copyright (c) 2009-2011 Faruk Ates, Paul Irish, Alex Sexton + * Dual-licensed under the BSD or MIT licenses: www.modernizr.com/license/ + */ + +/* + * Modernizr tests which native CSS3 and HTML5 features are available in + * the current UA and makes the results available to you in two ways: + * as properties on a global Modernizr object, and as classes on the + * <html> element. This information allows you to progressively enhance + * your pages with a granular level of control over the experience. + * + * Modernizr has an optional (not included) conditional resource loader + * called Modernizr.load(), based on Yepnope.js (yepnopejs.com). + * To get a build that includes Modernizr.load(), as well as choosing + * which tests to include, go to www.modernizr.com/download/ + * + * Authors Faruk Ates, Paul Irish, Alex Sexton, + * Contributors Ryan Seddon, Ben Alman + */ + +window.Modernizr = (function( window, document, undefined ) { + + var version = '2.0.6', + + Modernizr = {}, + + // option for enabling the HTML classes to be added + enableClasses = true, + + docElement = document.documentElement, + docHead = document.head || document.getElementsByTagName('head')[0], + + /** + * Create our "modernizr" element that we do most feature tests on. + */ + mod = 'modernizr', + modElem = document.createElement(mod), + mStyle = modElem.style, + + /** + * Create the input element for various Web Forms feature tests. + */ + inputElem = document.createElement('input'), + + smile = ':)', + + toString = Object.prototype.toString, + + // List of property values to set for css tests. See ticket #21 + prefixes = ' -webkit- -moz- -o- -ms- -khtml- '.split(' '), + + // Following spec is to expose vendor-specific style properties as: + // elem.style.WebkitBorderRadius + // and the following would be incorrect: + // elem.style.webkitBorderRadius + + // Webkit ghosts their properties in lowercase but Opera & Moz do not. + // Microsoft foregoes prefixes entirely <= IE8, but appears to + // use a lowercase `ms` instead of the correct `Ms` in IE9 + + // More here: http://github.com/Modernizr/Modernizr/issues/issue/21 + domPrefixes = 'Webkit Moz O ms Khtml'.split(' '), + + ns = {'svg': 'http://www.w3.org/2000/svg'}, + + tests = {}, + inputs = {}, + attrs = {}, + + classes = [], + + featureName, // used in testing loop + + + // Inject element with style element and some CSS rules + injectElementWithStyles = function( rule, callback, nodes, testnames ) { + + var style, ret, node, + div = document.createElement('div'); + + if ( parseInt(nodes, 10) ) { + // In order not to give false positives we create a node for each test + // This also allows the method to scale for unspecified uses + while ( nodes-- ) { + node = document.createElement('div'); + node.id = testnames ? testnames[nodes] : mod + (nodes + 1); + div.appendChild(node); + } + } + + // <style> elements in IE6-9 are considered 'NoScope' elements and therefore will be removed + // when injected with innerHTML. To get around this you need to prepend the 'NoScope' element + // with a 'scoped' element, in our case the soft-hyphen entity as it won't mess with our measurements. + // http://msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx + style = ['­', '<style>', rule, '</style>'].join(''); + div.id = mod; + div.innerHTML += style; + docElement.appendChild(div); + + ret = callback(div, rule); + div.parentNode.removeChild(div); + + return !!ret; + + }, + + + // adapted from matchMedia polyfill + // by Scott Jehl and Paul Irish + // gist.github.com/786768 + testMediaQuery = function( mq ) { + + if ( window.matchMedia ) { + return matchMedia(mq).matches; + } + + var bool; + + injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) { + bool = (window.getComputedStyle ? + getComputedStyle(node, null) : + node.currentStyle)['position'] == 'absolute'; + }); + + return bool; + + }, + + + /** + * isEventSupported determines if a given element supports the given event + * function from http://yura.thinkweb2.com/isEventSupported/ + */ + isEventSupported = (function() { + + var TAGNAMES = { + 'select': 'input', 'change': 'input', + 'submit': 'form', 'reset': 'form', + 'error': 'img', 'load': 'img', 'abort': 'img' + }; + + function isEventSupported( eventName, element ) { + + element = element || document.createElement(TAGNAMES[eventName] || 'div'); + eventName = 'on' + eventName; + + // When using `setAttribute`, IE skips "unload", WebKit skips "unload" and "resize", whereas `in` "catches" those + var isSupported = eventName in element; + + if ( !isSupported ) { + // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element + if ( !element.setAttribute ) { + element = document.createElement('div'); + } + if ( element.setAttribute && element.removeAttribute ) { + element.setAttribute(eventName, ''); + isSupported = is(element[eventName], 'function'); + + // If property was created, "remove it" (by setting value to `undefined`) + if ( !is(element[eventName], undefined) ) { + element[eventName] = undefined; + } + element.removeAttribute(eventName); + } + } + + element = null; + return isSupported; + } + return isEventSupported; + })(); + + // hasOwnProperty shim by kangax needed for Safari 2.0 support + var _hasOwnProperty = ({}).hasOwnProperty, hasOwnProperty; + if ( !is(_hasOwnProperty, undefined) && !is(_hasOwnProperty.call, undefined) ) { + hasOwnProperty = function (object, property) { + return _hasOwnProperty.call(object, property); + }; + } + else { + hasOwnProperty = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */ + return ((property in object) && is(object.constructor.prototype[property], undefined)); + }; + } + + /** + * setCss applies given styles to the Modernizr DOM node. + */ + function setCss( str ) { + mStyle.cssText = str; + } + + /** + * setCssAll extrapolates all vendor-specific css strings. + */ + function setCssAll( str1, str2 ) { + return setCss(prefixes.join(str1 + ';') + ( str2 || '' )); + } + + /** + * is returns a boolean for if typeof obj is exactly type. + */ + function is( obj, type ) { + return typeof obj === type; + } + + /** + * contains returns a boolean for if substr is found within str. + */ + function contains( str, substr ) { + return !!~('' + str).indexOf(substr); + } + + /** + * testProps is a generic CSS / DOM property test; if a browser supports + * a certain property, it won't return undefined for it. + * A supported CSS property returns empty string when its not yet set. + */ + function testProps( props, prefixed ) { + for ( var i in props ) { + if ( mStyle[ props[i] ] !== undefined ) { + return prefixed == 'pfx' ? props[i] : true; + } + } + return false; + } + + /** + * testPropsAll tests a list of DOM properties we want to check against. + * We specify literally ALL possible (known and/or likely) properties on + * the element including the non-vendor prefixed one, for forward- + * compatibility. + */ + function testPropsAll( prop, prefixed ) { + + var ucProp = prop.charAt(0).toUpperCase() + prop.substr(1), + props = (prop + ' ' + domPrefixes.join(ucProp + ' ') + ucProp).split(' '); + + return testProps(props, prefixed); + } + + /** + * testBundle tests a list of CSS features that require element and style injection. + * By bundling them together we can reduce the need to touch the DOM multiple times. + */ + /*>>testBundle*/ + var testBundle = (function( styles, tests ) { + var style = styles.join(''), + len = tests.length; + + injectElementWithStyles(style, function( node, rule ) { + var style = document.styleSheets[document.styleSheets.length - 1], + // IE8 will bork if you create a custom build that excludes both fontface and generatedcontent tests. + // So we check for cssRules and that there is a rule available + // More here: https://github.com/Modernizr/Modernizr/issues/288 & https://github.com/Modernizr/Modernizr/issues/293 + cssText = style.cssRules && style.cssRules[0] ? style.cssRules[0].cssText : style.cssText || "", + children = node.childNodes, hash = {}; + + while ( len-- ) { + hash[children[len].id] = children[len]; + } + + /*>>touch*/ Modernizr['touch'] = ('ontouchstart' in window) || hash['touch'].offsetTop === 9; /*>>touch*/ + /*>>csstransforms3d*/ Modernizr['csstransforms3d'] = hash['csstransforms3d'].offsetLeft === 9; /*>>csstransforms3d*/ + /*>>generatedcontent*/Modernizr['generatedcontent'] = hash['generatedcontent'].offsetHeight >= 1; /*>>generatedcontent*/ + /*>>fontface*/ Modernizr['fontface'] = /src/i.test(cssText) && + cssText.indexOf(rule.split(' ')[0]) === 0; /*>>fontface*/ + }, len, tests); + + })([ + // Pass in styles to be injected into document + /*>>fontface*/ '@font-face {font-family:"font";src:url("https://")}' /*>>fontface*/ + + /*>>touch*/ ,['@media (',prefixes.join('touch-enabled),('),mod,')', + '{#touch{top:9px;position:absolute}}'].join('') /*>>touch*/ + + /*>>csstransforms3d*/ ,['@media (',prefixes.join('transform-3d),('),mod,')', + '{#csstransforms3d{left:9px;position:absolute}}'].join('')/*>>csstransforms3d*/ + + /*>>generatedcontent*/,['#generatedcontent:after{content:"',smile,'";visibility:hidden}'].join('') /*>>generatedcontent*/ + ], + [ + /*>>fontface*/ 'fontface' /*>>fontface*/ + /*>>touch*/ ,'touch' /*>>touch*/ + /*>>csstransforms3d*/ ,'csstransforms3d' /*>>csstransforms3d*/ + /*>>generatedcontent*/,'generatedcontent' /*>>generatedcontent*/ + + ]);/*>>testBundle*/ + + + /** + * Tests + * ----- + */ + + tests['flexbox'] = function() { + /** + * setPrefixedValueCSS sets the property of a specified element + * adding vendor prefixes to the VALUE of the property. + * @param {Element} element + * @param {string} property The property name. This will not be prefixed. + * @param {string} value The value of the property. This WILL be prefixed. + * @param {string=} extra Additional CSS to append unmodified to the end of + * the CSS string. + */ + function setPrefixedValueCSS( element, property, value, extra ) { + property += ':'; + element.style.cssText = (property + prefixes.join(value + ';' + property)).slice(0, -property.length) + (extra || ''); + } + + /** + * setPrefixedPropertyCSS sets the property of a specified element + * adding vendor prefixes to the NAME of the property. + * @param {Element} element + * @param {string} property The property name. This WILL be prefixed. + * @param {string} value The value of the property. This will not be prefixed. + * @param {string=} extra Additional CSS to append unmodified to the end of + * the CSS string. + */ + function setPrefixedPropertyCSS( element, property, value, extra ) { + element.style.cssText = prefixes.join(property + ':' + value + ';') + (extra || ''); + } + + var c = document.createElement('div'), + elem = document.createElement('div'); + + setPrefixedValueCSS(c, 'display', 'box', 'width:42px;padding:0;'); + setPrefixedPropertyCSS(elem, 'box-flex', '1', 'width:10px;'); + + c.appendChild(elem); + docElement.appendChild(c); + + var ret = elem.offsetWidth === 42; + + c.removeChild(elem); + docElement.removeChild(c); + + return ret; + }; + + // On the S60 and BB Storm, getContext exists, but always returns undefined + // http://github.com/Modernizr/Modernizr/issues/issue/97/ + + tests['canvas'] = function() { + var elem = document.createElement('canvas'); + return !!(elem.getContext && elem.getContext('2d')); + }; + + tests['canvastext'] = function() { + return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function')); + }; + + // This WebGL test may false positive. + // But really it's quite impossible to know whether webgl will succeed until after you create the context. + // You might have hardware that can support a 100x100 webgl canvas, but will not support a 1000x1000 webgl + // canvas. So this feature inference is weak, but intentionally so. + + // It is known to false positive in FF4 with certain hardware and the iPad 2. + + tests['webgl'] = function() { + return !!window.WebGLRenderingContext; + }; + + /* + * The Modernizr.touch test only indicates if the browser supports + * touch events, which does not necessarily reflect a touchscreen + * device, as evidenced by tablets running Windows 7 or, alas, + * the Palm Pre / WebOS (touch) phones. + * + * Additionally, Chrome (desktop) used to lie about its support on this, + * but that has since been rectified: http://crbug.com/36415 + * + * We also test for Firefox 4 Multitouch Support. + * + * For more info, see: http://modernizr.github.com/Modernizr/touch.html + */ + + tests['touch'] = function() { + return Modernizr['touch']; + }; + + /** + * geolocation tests for the new Geolocation API specification. + * This test is a standards compliant-only test; for more complete + * testing, including a Google Gears fallback, please see: + * http://code.google.com/p/geo-location-javascript/ + * or view a fallback solution using google's geo API: + * http://gist.github.com/366184 + */ + tests['geolocation'] = function() { + return !!navigator.geolocation; + }; + + // Per 1.6: + // This used to be Modernizr.crosswindowmessaging but the longer + // name has been deprecated in favor of a shorter and property-matching one. + // The old API is still available in 1.6, but as of 2.0 will throw a warning, + // and in the first release thereafter disappear entirely. + tests['postmessage'] = function() { + return !!window.postMessage; + }; + + // Web SQL database detection is tricky: + + // In chrome incognito mode, openDatabase is truthy, but using it will + // throw an exception: http://crbug.com/42380 + // We can create a dummy database, but there is no way to delete it afterwards. + + // Meanwhile, Safari users can get prompted on any database creation. + // If they do, any page with Modernizr will give them a prompt: + // http://github.com/Modernizr/Modernizr/issues/closed#issue/113 + + // We have chosen to allow the Chrome incognito false positive, so that Modernizr + // doesn't litter the web with these test databases. As a developer, you'll have + // to account for this gotcha yourself. + tests['websqldatabase'] = function() { + var result = !!window.openDatabase; + /* if (result){ + try { + result = !!openDatabase( mod + "testdb", "1.0", mod + "testdb", 2e4); + } catch(e) { + } + } */ + return result; + }; + + // Vendors had inconsistent prefixing with the experimental Indexed DB: + // - Webkit's implementation is accessible through webkitIndexedDB + // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB + // For speed, we don't test the legacy (and beta-only) indexedDB + tests['indexedDB'] = function() { + for ( var i = -1, len = domPrefixes.length; ++i < len; ){ + if ( window[domPrefixes[i].toLowerCase() + 'IndexedDB'] ){ + return true; + } + } + return !!window.indexedDB; + }; + + // documentMode logic from YUI to filter out IE8 Compat Mode + // which false positives. + tests['hashchange'] = function() { + return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7); + }; + + // Per 1.6: + // This used to be Modernizr.historymanagement but the longer + // name has been deprecated in favor of a shorter and property-matching one. + // The old API is still available in 1.6, but as of 2.0 will throw a warning, + // and in the first release thereafter disappear entirely. + tests['history'] = function() { + return !!(window.history && history.pushState); + }; + + tests['draganddrop'] = function() { + return isEventSupported('dragstart') && isEventSupported('drop'); + }; + + // Mozilla is targeting to land MozWebSocket for FF6 + // bugzil.la/659324 + tests['websockets'] = function() { + for ( var i = -1, len = domPrefixes.length; ++i < len; ){ + if ( window[domPrefixes[i] + 'WebSocket'] ){ + return true; + } + } + return 'WebSocket' in window; + }; + + + // http://css-tricks.com/rgba-browser-support/ + tests['rgba'] = function() { + // Set an rgba() color and check the returned value + + setCss('background-color:rgba(150,255,150,.5)'); + + return contains(mStyle.backgroundColor, 'rgba'); + }; + + tests['hsla'] = function() { + // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally, + // except IE9 who retains it as hsla + + setCss('background-color:hsla(120,40%,100%,.5)'); + + return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla'); + }; + + tests['multiplebgs'] = function() { + // Setting multiple images AND a color on the background shorthand property + // and then querying the style.background property value for the number of + // occurrences of "url(" is a reliable method for detecting ACTUAL support for this! + + setCss('background:url(https://),url(https://),red url(https://)'); + + // If the UA supports multiple backgrounds, there should be three occurrences + // of the string "url(" in the return value for elemStyle.background + + return /(url\s*\(.*?){3}/.test(mStyle.background); + }; + + + // In testing support for a given CSS property, it's legit to test: + // `elem.style[styleName] !== undefined` + // If the property is supported it will return an empty string, + // if unsupported it will return undefined. + + // We'll take advantage of this quick test and skip setting a style + // on our modernizr element, but instead just testing undefined vs + // empty string. + + + tests['backgroundsize'] = function() { + return testPropsAll('backgroundSize'); + }; + + tests['borderimage'] = function() { + return testPropsAll('borderImage'); + }; + + + // Super comprehensive table about all the unique implementations of + // border-radius: http://muddledramblings.com/table-of-css3-border-radius-compliance + + tests['borderradius'] = function() { + return testPropsAll('borderRadius'); + }; + + // WebOS unfortunately false positives on this test. + tests['boxshadow'] = function() { + return testPropsAll('boxShadow'); + }; + + // FF3.0 will false positive on this test + tests['textshadow'] = function() { + return document.createElement('div').style.textShadow === ''; + }; + + + tests['opacity'] = function() { + // Browsers that actually have CSS Opacity implemented have done so + // according to spec, which means their return values are within the + // range of [0.0,1.0] - including the leading zero. + + setCssAll('opacity:.55'); + + // The non-literal . in this regex is intentional: + // German Chrome returns this value as 0,55 + // https://github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632 + return /^0.55$/.test(mStyle.opacity); + }; + + + tests['cssanimations'] = function() { + return testPropsAll('animationName'); + }; + + + tests['csscolumns'] = function() { + return testPropsAll('columnCount'); + }; + + + tests['cssgradients'] = function() { + /** + * For CSS Gradients syntax, please see: + * http://webkit.org/blog/175/introducing-css-gradients/ + * https://developer.mozilla.org/en/CSS/-moz-linear-gradient + * https://developer.mozilla.org/en/CSS/-moz-radial-gradient + * http://dev.w3.org/csswg/css3-images/#gradients- + */ + + var str1 = 'background-image:', + str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));', + str3 = 'linear-gradient(left top,#9f9, white);'; + + setCss( + (str1 + prefixes.join(str2 + str1) + prefixes.join(str3 + str1)).slice(0, -str1.length) + ); + + return contains(mStyle.backgroundImage, 'gradient'); + }; + + + tests['cssreflections'] = function() { + return testPropsAll('boxReflect'); + }; + + + tests['csstransforms'] = function() { + return !!testProps(['transformProperty', 'WebkitTransform', 'MozTransform', 'OTransform', 'msTransform']); + }; + + + tests['csstransforms3d'] = function() { + + var ret = !!testProps(['perspectiveProperty', 'WebkitPerspective', 'MozPerspective', 'OPerspective', 'msPerspective']); + + // Webkit’s 3D transforms are passed off to the browser's own graphics renderer. + // It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in + // some conditions. As a result, Webkit typically recognizes the syntax but + // will sometimes throw a false positive, thus we must do a more thorough check: + if ( ret && 'webkitPerspective' in docElement.style ) { + + // Webkit allows this media query to succeed only if the feature is enabled. + // `@media (transform-3d),(-o-transform-3d),(-moz-transform-3d),(-ms-transform-3d),(-webkit-transform-3d),(modernizr){ ... }` + ret = Modernizr['csstransforms3d']; + } + return ret; + }; + + + tests['csstransitions'] = function() { + return testPropsAll('transitionProperty'); + }; + + + /*>>fontface*/ + // @font-face detection routine by Diego Perini + // http://javascript.nwbox.com/CSSSupport/ + tests['fontface'] = function() { + return Modernizr['fontface']; + }; + /*>>fontface*/ + + // CSS generated content detection + tests['generatedcontent'] = function() { + return Modernizr['generatedcontent']; + }; + + + + // These tests evaluate support of the video/audio elements, as well as + // testing what types of content they support. + // + // We're using the Boolean constructor here, so that we can extend the value + // e.g. Modernizr.video // true + // Modernizr.video.ogg // 'probably' + // + // Codec values from : http://github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845 + // thx to NielsLeenheer and zcorpan + + // Note: in FF 3.5.1 and 3.5.0, "no" was a return value instead of empty string. + // Modernizr does not normalize for that. + + tests['video'] = function() { + var elem = document.createElement('video'), + bool = false; + + // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224 + try { + if ( bool = !!elem.canPlayType ) { + bool = new Boolean(bool); + bool.ogg = elem.canPlayType('video/ogg; codecs="theora"'); + + // Workaround required for IE9, which doesn't report video support without audio codec specified. + // bug 599718 @ msft connect + var h264 = 'video/mp4; codecs="avc1.42E01E'; + bool.h264 = elem.canPlayType(h264 + '"') || elem.canPlayType(h264 + ', mp4a.40.2"'); + + bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"'); + } + + } catch(e) { } + + return bool; + }; + + tests['audio'] = function() { + var elem = document.createElement('audio'), + bool = false; + + try { + if ( bool = !!elem.canPlayType ) { + bool = new Boolean(bool); + bool.ogg = elem.canPlayType('audio/ogg; codecs="vorbis"'); + bool.mp3 = elem.canPlayType('audio/mpeg;'); + + // Mimetypes accepted: + // https://developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements + // http://bit.ly/iphoneoscodecs + bool.wav = elem.canPlayType('audio/wav; codecs="1"'); + bool.m4a = elem.canPlayType('audio/x-m4a;') || elem.canPlayType('audio/aac;'); + } + } catch(e) { } + + return bool; + }; + + + // Firefox has made these tests rather unfun. + + // In FF4, if disabled, window.localStorage should === null. + + // Normally, we could not test that directly and need to do a + // `('localStorage' in window) && ` test first because otherwise Firefox will + // throw http://bugzil.la/365772 if cookies are disabled + + // However, in Firefox 4 betas, if dom.storage.enabled == false, just mentioning + // the property will throw an exception. http://bugzil.la/599479 + // This looks to be fixed for FF4 Final. + + // Because we are forced to try/catch this, we'll go aggressive. + + // FWIW: IE8 Compat mode supports these features completely: + // http://www.quirksmode.org/dom/html5.html + // But IE8 doesn't support either with local files + + tests['localstorage'] = function() { + try { + return !!localStorage.getItem; + } catch(e) { + return false; + } + }; + + tests['sessionstorage'] = function() { + try { + return !!sessionStorage.getItem; + } catch(e){ + return false; + } + }; + + + tests['webworkers'] = function() { + return !!window.Worker; + }; + + + tests['applicationcache'] = function() { + return !!window.applicationCache; + }; + + + // Thanks to Erik Dahlstrom + tests['svg'] = function() { + return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect; + }; + + // specifically for SVG inline in HTML, not within XHTML + // test page: paulirish.com/demo/inline-svg + tests['inlinesvg'] = function() { + var div = document.createElement('div'); + div.innerHTML = '<svg/>'; + return (div.firstChild && div.firstChild.namespaceURI) == ns.svg; + }; + + // Thanks to F1lt3r and lucideer, ticket #35 + tests['smil'] = function() { + return !!document.createElementNS && /SVG/.test(toString.call(document.createElementNS(ns.svg, 'animate'))); + }; + + tests['svgclippaths'] = function() { + // Possibly returns a false positive in Safari 3.2? + return !!document.createElementNS && /SVG/.test(toString.call(document.createElementNS(ns.svg, 'clipPath'))); + }; + + // input features and input types go directly onto the ret object, bypassing the tests loop. + // Hold this guy to execute in a moment. + function webforms() { + // Run through HTML5's new input attributes to see if the UA understands any. + // We're using f which is the <input> element created early on + // Mike Taylr has created a comprehensive resource for testing these attributes + // when applied to all input types: + // http://miketaylr.com/code/input-type-attr.html + // spec: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary + + // Only input placeholder is tested while textarea's placeholder is not. + // Currently Safari 4 and Opera 11 have support only for the input placeholder + // Both tests are available in feature-detects/forms-placeholder.js + Modernizr['input'] = (function( props ) { + for ( var i = 0, len = props.length; i < len; i++ ) { + attrs[ props[i] ] = !!(props[i] in inputElem); + } + return attrs; + })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' ')); + + // Run through HTML5's new input types to see if the UA understands any. + // This is put behind the tests runloop because it doesn't return a + // true/false like all the other tests; instead, it returns an object + // containing each input type with its corresponding true/false value + + // Big thanks to @miketaylr for the html5 forms expertise. http://miketaylr.com/ + Modernizr['inputtypes'] = (function(props) { + + for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) { + + inputElem.setAttribute('type', inputElemType = props[i]); + bool = inputElem.type !== 'text'; + + // We first check to see if the type we give it sticks.. + // If the type does, we feed it a textual value, which shouldn't be valid. + // If the value doesn't stick, we know there's input sanitization which infers a custom UI + if ( bool ) { + + inputElem.value = smile; + inputElem.style.cssText = 'position:absolute;visibility:hidden;'; + + if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) { + + docElement.appendChild(inputElem); + defaultView = document.defaultView; + + // Safari 2-4 allows the smiley as a value, despite making a slider + bool = defaultView.getComputedStyle && + defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' && + // Mobile android web browser has false positive, so must + // check the height to see if the widget is actually there. + (inputElem.offsetHeight !== 0); + + docElement.removeChild(inputElem); + + } else if ( /^(search|tel)$/.test(inputElemType) ){ + // Spec doesnt define any special parsing or detectable UI + // behaviors so we pass these through as true + + // Interestingly, opera fails the earlier test, so it doesn't + // even make it here. + + } else if ( /^(url|email)$/.test(inputElemType) ) { + // Real url and email support comes with prebaked validation. + bool = inputElem.checkValidity && inputElem.checkValidity() === false; + + } else if ( /^color$/.test(inputElemType) ) { + // chuck into DOM and force reflow for Opera bug in 11.00 + // github.com/Modernizr/Modernizr/issues#issue/159 + docElement.appendChild(inputElem); + docElement.offsetWidth; + bool = inputElem.value != smile; + docElement.removeChild(inputElem); + + } else { + // If the upgraded input compontent rejects the :) text, we got a winner + bool = inputElem.value != smile; + } + } + + inputs[ props[i] ] = !!bool; + } + return inputs; + })('search tel url email datetime date month week time datetime-local number range color'.split(' ')); + } + + + // End of test definitions + // ----------------------- + + + + // Run through all tests and detect their support in the current UA. + // todo: hypothetically we could be doing an array of tests and use a basic loop here. + for ( var feature in tests ) { + if ( hasOwnProperty(tests, feature) ) { + // run the test, throw the return value into the Modernizr, + // then based on that boolean, define an appropriate className + // and push it into an array of classes we'll join later. + featureName = feature.toLowerCase(); + Modernizr[featureName] = tests[feature](); + + classes.push((Modernizr[featureName] ? '' : 'no-') + featureName); + } + } + + // input tests need to run. + Modernizr.input || webforms(); + + + /** + * addTest allows the user to define their own feature tests + * the result will be added onto the Modernizr object, + * as well as an appropriate className set on the html element + * + * @param feature - String naming the feature + * @param test - Function returning true if feature is supported, false if not + */ + Modernizr.addTest = function ( feature, test ) { + if ( typeof feature == "object" ) { + for ( var key in feature ) { + if ( hasOwnProperty( feature, key ) ) { + Modernizr.addTest( key, feature[ key ] ); + } + } + } else { + + feature = feature.toLowerCase(); + + if ( Modernizr[feature] !== undefined ) { + // we're going to quit if you're trying to overwrite an existing test + // if we were to allow it, we'd do this: + // var re = new RegExp("\\b(no-)?" + feature + "\\b"); + // docElement.className = docElement.className.replace( re, '' ); + // but, no rly, stuff 'em. + return; + } + + test = typeof test == "boolean" ? test : !!test(); + + docElement.className += ' ' + (test ? '' : 'no-') + feature; + Modernizr[feature] = test; + + } + + return Modernizr; // allow chaining. + }; + + + // Reset modElem.cssText to nothing to reduce memory footprint. + setCss(''); + modElem = inputElem = null; + + //>>BEGIN IEPP + // Enable HTML 5 elements for styling (and printing) in IE. + if ( window.attachEvent && (function(){ var elem = document.createElement('div'); + elem.innerHTML = '<elem></elem>'; + return elem.childNodes.length !== 1; })() ) { + + // iepp v2 by @jon_neal & afarkas : github.com/aFarkas/iepp/ + (function(win, doc) { + win.iepp = win.iepp || {}; + var iepp = win.iepp, + elems = iepp.html5elements || 'abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video', + elemsArr = elems.split('|'), + elemsArrLen = elemsArr.length, + elemRegExp = new RegExp('(^|\\s)('+elems+')', 'gi'), + tagRegExp = new RegExp('<(\/*)('+elems+')', 'gi'), + filterReg = /^\s*[\{\}]\s*$/, + ruleRegExp = new RegExp('(^|[^\\n]*?\\s)('+elems+')([^\\n]*)({[\\n\\w\\W]*?})', 'gi'), + docFrag = doc.createDocumentFragment(), + html = doc.documentElement, + head = html.firstChild, + bodyElem = doc.createElement('body'), + styleElem = doc.createElement('style'), + printMedias = /print|all/, + body; + function shim(doc) { + var a = -1; + while (++a < elemsArrLen) + // Use createElement so IE allows HTML5-named elements in a document + doc.createElement(elemsArr[a]); + } + + iepp.getCSS = function(styleSheetList, mediaType) { + if(styleSheetList+'' === undefined){return '';} + var a = -1, + len = styleSheetList.length, + styleSheet, + cssTextArr = []; + while (++a < len) { + styleSheet = styleSheetList[a]; + //currently no test for disabled/alternate stylesheets + if(styleSheet.disabled){continue;} + mediaType = styleSheet.media || mediaType; + // Get css from all non-screen stylesheets and their imports + if (printMedias.test(mediaType)) cssTextArr.push(iepp.getCSS(styleSheet.imports, mediaType), styleSheet.cssText); + //reset mediaType to all with every new *not imported* stylesheet + mediaType = 'all'; + } + return cssTextArr.join(''); + }; + + iepp.parseCSS = function(cssText) { + var cssTextArr = [], + rule; + while ((rule = ruleRegExp.exec(cssText)) != null){ + // Replace all html5 element references with iepp substitute classnames + cssTextArr.push(( (filterReg.exec(rule[1]) ? '\n' : rule[1]) +rule[2]+rule[3]).replace(elemRegExp, '$1.iepp_$2')+rule[4]); + } + return cssTextArr.join('\n'); + }; + + iepp.writeHTML = function() { + var a = -1; + body = body || doc.body; + while (++a < elemsArrLen) { + var nodeList = doc.getElementsByTagName(elemsArr[a]), + nodeListLen = nodeList.length, + b = -1; + while (++b < nodeListLen) + if (nodeList[b].className.indexOf('iepp_') < 0) + // Append iepp substitute classnames to all html5 elements + nodeList[b].className += ' iepp_'+elemsArr[a]; + } + docFrag.appendChild(body); + html.appendChild(bodyElem); + // Write iepp substitute print-safe document + bodyElem.className = body.className; + bodyElem.id = body.id; + // Replace HTML5 elements with <font> which is print-safe and shouldn't conflict since it isn't part of html5 + bodyElem.innerHTML = body.innerHTML.replace(tagRegExp, '<$1font'); + }; + + + iepp._beforePrint = function() { + // Write iepp custom print CSS + styleElem.styleSheet.cssText = iepp.parseCSS(iepp.getCSS(doc.styleSheets, 'all')); + iepp.writeHTML(); + }; + + iepp.restoreHTML = function(){ + // Undo everything done in onbeforeprint + bodyElem.innerHTML = ''; + html.removeChild(bodyElem); + html.appendChild(body); + }; + + iepp._afterPrint = function(){ + // Undo everything done in onbeforeprint + iepp.restoreHTML(); + styleElem.styleSheet.cssText = ''; + }; + + + + // Shim the document and iepp fragment + shim(doc); + shim(docFrag); + + // + if(iepp.disablePP){return;} + + // Add iepp custom print style element + head.insertBefore(styleElem, head.firstChild); + styleElem.media = 'print'; + styleElem.className = 'iepp-printshim'; + win.attachEvent( + 'onbeforeprint', + iepp._beforePrint + ); + win.attachEvent( + 'onafterprint', + iepp._afterPrint + ); + })(window, document); + } + //>>END IEPP + + // Assign private properties to the return object with prefix + Modernizr._version = version; + + // expose these for the plugin API. Look in the source for how to join() them against your input + Modernizr._prefixes = prefixes; + Modernizr._domPrefixes = domPrefixes; + + // Modernizr.mq tests a given media query, live against the current state of the window + // A few important notes: + // * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false + // * A max-width or orientation query will be evaluated against the current state, which may change later. + // * You must specify values. Eg. If you are testing support for the min-width media query use: + // Modernizr.mq('(min-width:0)') + // usage: + // Modernizr.mq('only screen and (max-width:768)') + Modernizr.mq = testMediaQuery; + + // Modernizr.hasEvent() detects support for a given event, with an optional element to test on + // Modernizr.hasEvent('gesturestart', elem) + Modernizr.hasEvent = isEventSupported; + + // Modernizr.testProp() investigates whether a given style property is recognized + // Note that the property names must be provided in the camelCase variant. + // Modernizr.testProp('pointerEvents') + Modernizr.testProp = function(prop){ + return testProps([prop]); + }; + + // Modernizr.testAllProps() investigates whether a given style property, + // or any of its vendor-prefixed variants, is recognized + // Note that the property names must be provided in the camelCase variant. + // Modernizr.testAllProps('boxSizing') + Modernizr.testAllProps = testPropsAll; + + + + // Modernizr.testStyles() allows you to add custom styles to the document and test an element afterwards + // Modernizr.testStyles('#modernizr { position:absolute }', function(elem, rule){ ... }) + Modernizr.testStyles = injectElementWithStyles; + + + // Modernizr.prefixed() returns the prefixed or nonprefixed property name variant of your input + // Modernizr.prefixed('boxSizing') // 'MozBoxSizing' + + // Properties must be passed as dom-style camelcase, rather than `box-sizing` hypentated style. + // Return values will also be the camelCase variant, if you need to translate that to hypenated style use: + // + // str.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-'); + + // If you're trying to ascertain which transition end event to bind to, you might do something like... + // + // var transEndEventNames = { + // 'WebkitTransition' : 'webkitTransitionEnd', + // 'MozTransition' : 'transitionend', + // 'OTransition' : 'oTransitionEnd', + // 'msTransition' : 'msTransitionEnd', // maybe? + // 'transition' : 'transitionEnd' + // }, + // transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ]; + + Modernizr.prefixed = function(prop){ + return testPropsAll(prop, 'pfx'); + }; + + + + // Remove "no-js" class from <html> element, if it exists: + docElement.className = docElement.className.replace(/\bno-js\b/, '') + + // Add the new classes to the <html> element. + + (enableClasses ? ' js ' + classes.join(' ') : ''); + + return Modernizr; + +})(this, this.document); diff --git a/phantomjs-1.9.7-windows/examples/module.coffee b/phantomjs-1.9.7-windows/examples/module.coffee new file mode 100644 index 0000000..5278b51 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/module.coffee @@ -0,0 +1,4 @@ +universe = require './universe' +universe.start() +console.log 'The answer is' + universe.answer +phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/module.js b/phantomjs-1.9.7-windows/examples/module.js new file mode 100644 index 0000000..82e1c64 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/module.js @@ -0,0 +1,4 @@ +var universe = require('./universe'); +universe.start(); +console.log('The answer is' + universe.answer); +phantom.exit(); diff --git a/phantomjs-1.9.7-windows/examples/movies.coffee b/phantomjs-1.9.7-windows/examples/movies.coffee new file mode 100644 index 0000000..86fb5b0 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/movies.coffee @@ -0,0 +1,13 @@ +# List movies from kids-in-mind.com + +window.cbfunc = (data) -> + globaldata = data + list = data.query.results.movie + for item in list + console.log item.title + ' [' + item.rating.MPAA.content + ']' + phantom.exit() + +el = document.createElement 'script' +el.src = +"http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20movies.kids-in-mind&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=window.cbfunc" +document.body.appendChild el diff --git a/phantomjs-1.9.7-windows/examples/movies.js b/phantomjs-1.9.7-windows/examples/movies.js new file mode 100644 index 0000000..73c61a7 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/movies.js @@ -0,0 +1,14 @@ +// List movies from kids-in-mind.com + +var cbfunc = function (data) { + globaldata= data; + var list = data.query.results.movie; + list.forEach(function (item) { + console.log(item.title + ' [' + item.rating.MPAA.content + ']'); + }); + phantom.exit(); +}; + +var el = document.createElement('script'); +el.src = 'http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20movies.kids-in-mind&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=cbfunc'; +document.body.appendChild(el); diff --git a/phantomjs-1.9.7-windows/examples/netlog.coffee b/phantomjs-1.9.7-windows/examples/netlog.coffee new file mode 100644 index 0000000..d6e5c35 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/netlog.coffee @@ -0,0 +1,18 @@ +page = require('webpage').create() +system = require 'system' + +if system.args.length is 1 + console.log 'Usage: netlog.coffee <some URL>' + phantom.exit 1 +else + address = system.args[1] + page.onResourceRequested = (req) -> + console.log 'requested ' + JSON.stringify(req, undefined, 4) + + page.onResourceReceived = (res) -> + console.log 'received ' + JSON.stringify(res, undefined, 4) + + page.open address, (status) -> + if status isnt 'success' + console.log 'FAIL to load the address' + phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/netlog.js b/phantomjs-1.9.7-windows/examples/netlog.js new file mode 100644 index 0000000..4f83f4d --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/netlog.js @@ -0,0 +1,25 @@ +var page = require('webpage').create(), + system = require('system'), + address; + +if (system.args.length === 1) { + console.log('Usage: netlog.js <some URL>'); + phantom.exit(1); +} else { + address = system.args[1]; + + page.onResourceRequested = function (req) { + console.log('requested: ' + JSON.stringify(req, undefined, 4)); + }; + + page.onResourceReceived = function (res) { + console.log('received: ' + JSON.stringify(res, undefined, 4)); + }; + + page.open(address, function (status) { + if (status !== 'success') { + console.log('FAIL to load the address'); + } + phantom.exit(); + }); +} diff --git a/phantomjs-1.9.7-windows/examples/netsniff.coffee b/phantomjs-1.9.7-windows/examples/netsniff.coffee new file mode 100644 index 0000000..092f2d2 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/netsniff.coffee @@ -0,0 +1,114 @@ +if not Date::toISOString + Date::toISOString = -> + pad = (n) -> + if n < 10 then '0' + n else n + ms = (n) -> + if n < 10 then '00' + n else (if n < 100 then '0' + n else n) + @getFullYear() + '-' + + pad(@getMonth() + 1) + '-' + + pad(@getDate()) + 'T' + + pad(@getHours()) + ':' + + pad(@getMinutes()) + ':' + + pad(@getSeconds()) + '.' + + ms(@getMilliseconds()) + 'Z' + +createHAR = (address, title, startTime, resources) -> + entries = [] + + resources.forEach (resource) -> + request = resource.request + startReply = resource.startReply + endReply = resource.endReply + + if not request or not startReply or not endReply + return + + entries.push + startedDateTime: request.time.toISOString() + time: endReply.time - request.time + request: + method: request.method + url: request.url + httpVersion: 'HTTP/1.1' + cookies: [] + headers: request.headers + queryString: [] + headersSize: -1 + bodySize: -1 + + response: + status: endReply.status + statusText: endReply.statusText + httpVersion: 'HTTP/1.1' + cookies: [] + headers: endReply.headers + redirectURL: '' + headersSize: -1 + bodySize: startReply.bodySize + content: + size: startReply.bodySize + mimeType: endReply.contentType + + cache: {} + timings: + blocked: 0 + dns: -1 + connect: -1 + send: 0 + wait: startReply.time - request.time + receive: endReply.time - startReply.time + ssl: -1 + pageref: address + + log: + version: '1.2' + creator: + name: 'PhantomJS' + version: phantom.version.major + '.' + phantom.version.minor + '.' + phantom.version.patch + + pages: [ + startedDateTime: startTime.toISOString() + id: address + title: title + pageTimings: + onLoad: page.endTime - page.startTime + ] + entries: entries + +page = require('webpage').create() +system = require 'system' + +if system.args.length is 1 + console.log 'Usage: netsniff.coffee <some URL>' + phantom.exit 1 +else + page.address = system.args[1] + page.resources = [] + + page.onLoadStarted = -> + page.startTime = new Date() + + page.onResourceRequested = (req) -> + page.resources[req.id] = + request: req + startReply: null + endReply: null + + page.onResourceReceived = (res) -> + if res.stage is 'start' + page.resources[res.id].startReply = res + if res.stage is 'end' + page.resources[res.id].endReply = res + + page.open page.address, (status) -> + if status isnt 'success' + console.log 'FAIL to load the address' + phantom.exit(1) + else + page.endTime = new Date() + page.title = page.evaluate -> + document.title + + har = createHAR page.address, page.title, page.startTime, page.resources + console.log JSON.stringify har, undefined, 4 + phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/netsniff.js b/phantomjs-1.9.7-windows/examples/netsniff.js new file mode 100644 index 0000000..b702543 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/netsniff.js @@ -0,0 +1,143 @@ +if (!Date.prototype.toISOString) { + Date.prototype.toISOString = function () { + function pad(n) { return n < 10 ? '0' + n : n; } + function ms(n) { return n < 10 ? '00'+ n : n < 100 ? '0' + n : n } + return this.getFullYear() + '-' + + pad(this.getMonth() + 1) + '-' + + pad(this.getDate()) + 'T' + + pad(this.getHours()) + ':' + + pad(this.getMinutes()) + ':' + + pad(this.getSeconds()) + '.' + + ms(this.getMilliseconds()) + 'Z'; + } +} + +function createHAR(address, title, startTime, resources) +{ + var entries = []; + + resources.forEach(function (resource) { + var request = resource.request, + startReply = resource.startReply, + endReply = resource.endReply; + + if (!request || !startReply || !endReply) { + return; + } + + // Exclude Data URI from HAR file because + // they aren't included in specification + if (request.url.match(/(^data:image\/.*)/i)) { + return; + } + + entries.push({ + startedDateTime: request.time.toISOString(), + time: endReply.time - request.time, + request: { + method: request.method, + url: request.url, + httpVersion: "HTTP/1.1", + cookies: [], + headers: request.headers, + queryString: [], + headersSize: -1, + bodySize: -1 + }, + response: { + status: endReply.status, + statusText: endReply.statusText, + httpVersion: "HTTP/1.1", + cookies: [], + headers: endReply.headers, + redirectURL: "", + headersSize: -1, + bodySize: startReply.bodySize, + content: { + size: startReply.bodySize, + mimeType: endReply.contentType + } + }, + cache: {}, + timings: { + blocked: 0, + dns: -1, + connect: -1, + send: 0, + wait: startReply.time - request.time, + receive: endReply.time - startReply.time, + ssl: -1 + }, + pageref: address + }); + }); + + return { + log: { + version: '1.2', + creator: { + name: "PhantomJS", + version: phantom.version.major + '.' + phantom.version.minor + + '.' + phantom.version.patch + }, + pages: [{ + startedDateTime: startTime.toISOString(), + id: address, + title: title, + pageTimings: { + onLoad: page.endTime - page.startTime + } + }], + entries: entries + } + }; +} + +var page = require('webpage').create(), + system = require('system'); + +if (system.args.length === 1) { + console.log('Usage: netsniff.js <some URL>'); + phantom.exit(1); +} else { + + page.address = system.args[1]; + page.resources = []; + + page.onLoadStarted = function () { + page.startTime = new Date(); + }; + + page.onResourceRequested = function (req) { + page.resources[req.id] = { + request: req, + startReply: null, + endReply: null + }; + }; + + page.onResourceReceived = function (res) { + if (res.stage === 'start') { + page.resources[res.id].startReply = res; + } + if (res.stage === 'end') { + page.resources[res.id].endReply = res; + } + }; + + page.open(page.address, function (status) { + var har; + if (status !== 'success') { + console.log('FAIL to load the address'); + phantom.exit(1); + } else { + page.endTime = new Date(); + page.title = page.evaluate(function () { + return document.title; + }); + har = createHAR(page.address, page.title, page.startTime, page.resources); + console.log(JSON.stringify(har, undefined, 4)); + phantom.exit(); + } + }); +} diff --git a/phantomjs-1.9.7-windows/examples/outputEncoding.coffee b/phantomjs-1.9.7-windows/examples/outputEncoding.coffee new file mode 100644 index 0000000..9d212ca --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/outputEncoding.coffee @@ -0,0 +1,12 @@ +helloWorld = () -> console.log phantom.outputEncoding + ": こんにちは、世界!" + +console.log "Using default encoding..." +helloWorld() + +console.log "\nUsing other encodings..." +for enc in ["euc-jp", "sjis", "utf8", "System"] + do (enc) -> + phantom.outputEncoding = enc + helloWorld() + +phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/outputEncoding.js b/phantomjs-1.9.7-windows/examples/outputEncoding.js new file mode 100644 index 0000000..968a6ee --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/outputEncoding.js @@ -0,0 +1,16 @@ +function helloWorld() { + console.log(phantom.outputEncoding + ": こんにちは、世界!"); +} + +console.log("Using default encoding..."); +helloWorld(); + +console.log("\nUsing other encodings..."); + +var encodings = ["euc-jp", "sjis", "utf8", "System"]; +for (var i = 0; i < encodings.length; i++) { + phantom.outputEncoding = encodings[i]; + helloWorld(); +} + +phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/page_events.coffee b/phantomjs-1.9.7-windows/examples/page_events.coffee new file mode 100644 index 0000000..87e433b --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/page_events.coffee @@ -0,0 +1,132 @@ +# The purpose of this is to show how and when events fire, considering 5 steps +# happening as follows: +# +# 1. Load URL +# 2. Load same URL, but adding an internal FRAGMENT to it +# 3. Click on an internal Link, that points to another internal FRAGMENT +# 4. Click on an external Link, that will send the page somewhere else +# 5. Close page +# +# Take particular care when going through the output, to understand when +# things happen (and in which order). Particularly, notice what DOESN'T +# happen during step 3. +# +# If invoked with "-v" it will print out the Page Resources as they are +# Requested and Received. +# +# NOTE.1: The "onConsoleMessage/onAlert/onPrompt/onConfirm" events are +# registered but not used here. This is left for you to have fun with. +# NOTE.2: This script is not here to teach you ANY JavaScript. It's aweful! +# NOTE.3: Main audience for this are people new to PhantomJS. +printArgs = -> + i = undefined + ilen = undefined + i = 0 + ilen = arguments_.length + + while i < ilen + console.log " arguments[" + i + "] = " + JSON.stringify(arguments_[i]) + ++i + console.log "" +sys = require("system") +page = require("webpage").create() +logResources = false +step1url = "http://en.wikipedia.org/wiki/DOM_events" +step2url = "http://en.wikipedia.org/wiki/DOM_events#Event_flow" +logResources = true if sys.args.length > 1 and sys.args[1] is "-v" + +#////////////////////////////////////////////////////////////////////////////// +page.onInitialized = -> + console.log "page.onInitialized" + printArgs.apply this, arguments_ + +page.onLoadStarted = -> + console.log "page.onLoadStarted" + printArgs.apply this, arguments_ + +page.onLoadFinished = -> + console.log "page.onLoadFinished" + printArgs.apply this, arguments_ + +page.onUrlChanged = -> + console.log "page.onUrlChanged" + printArgs.apply this, arguments_ + +page.onNavigationRequested = -> + console.log "page.onNavigationRequested" + printArgs.apply this, arguments_ + +if logResources is true + page.onResourceRequested = -> + console.log "page.onResourceRequested" + printArgs.apply this, arguments_ + + page.onResourceReceived = -> + console.log "page.onResourceReceived" + printArgs.apply this, arguments_ +page.onClosing = -> + console.log "page.onClosing" + printArgs.apply this, arguments_ + + +# window.console.log(msg); +page.onConsoleMessage = -> + console.log "page.onConsoleMessage" + printArgs.apply this, arguments_ + + +# window.alert(msg); +page.onAlert = -> + console.log "page.onAlert" + printArgs.apply this, arguments_ + + +# var confirmed = window.confirm(msg); +page.onConfirm = -> + console.log "page.onConfirm" + printArgs.apply this, arguments_ + + +# var user_value = window.prompt(msg, default_value); +page.onPrompt = -> + console.log "page.onPrompt" + printArgs.apply this, arguments_ + + +#////////////////////////////////////////////////////////////////////////////// +setTimeout (-> + console.log "" + console.log "### STEP 1: Load '" + step1url + "'" + page.open step1url +), 0 +setTimeout (-> + console.log "" + console.log "### STEP 2: Load '" + step2url + "' (load same URL plus FRAGMENT)" + page.open step2url +), 5000 +setTimeout (-> + console.log "" + console.log "### STEP 3: Click on page internal link (aka FRAGMENT)" + page.evaluate -> + ev = document.createEvent("MouseEvents") + ev.initEvent "click", true, true + document.querySelector("a[href='#Event_object']").dispatchEvent ev + +), 10000 +setTimeout (-> + console.log "" + console.log "### STEP 4: Click on page external link" + page.evaluate -> + ev = document.createEvent("MouseEvents") + ev.initEvent "click", true, true + document.querySelector("a[title='JavaScript']").dispatchEvent ev + +), 15000 +setTimeout (-> + console.log "" + console.log "### STEP 5: Close page and shutdown (with a delay)" + page.close() + setTimeout (-> + phantom.exit() + ), 100 +), 20000 \ No newline at end of file diff --git a/phantomjs-1.9.7-windows/examples/page_events.js b/phantomjs-1.9.7-windows/examples/page_events.js new file mode 100644 index 0000000..266b404 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/page_events.js @@ -0,0 +1,142 @@ +// The purpose of this is to show how and when events fire, considering 5 steps +// happening as follows: +// +// 1. Load URL +// 2. Load same URL, but adding an internal FRAGMENT to it +// 3. Click on an internal Link, that points to another internal FRAGMENT +// 4. Click on an external Link, that will send the page somewhere else +// 5. Close page +// +// Take particular care when going through the output, to understand when +// things happen (and in which order). Particularly, notice what DOESN'T +// happen during step 3. +// +// If invoked with "-v" it will print out the Page Resources as they are +// Requested and Received. +// +// NOTE.1: The "onConsoleMessage/onAlert/onPrompt/onConfirm" events are +// registered but not used here. This is left for you to have fun with. +// NOTE.2: This script is not here to teach you ANY JavaScript. It's aweful! +// NOTE.3: Main audience for this are people new to PhantomJS. + +var sys = require("system"), + page = require("webpage").create(), + logResources = false, + step1url = "http://en.wikipedia.org/wiki/DOM_events", + step2url = "http://en.wikipedia.org/wiki/DOM_events#Event_flow"; + +if (sys.args.length > 1 && sys.args[1] === "-v") { + logResources = true; +} + +function printArgs() { + var i, ilen; + for (i = 0, ilen = arguments.length; i < ilen; ++i) { + console.log(" arguments[" + i + "] = " + JSON.stringify(arguments[i])); + } + console.log(""); +} + +//////////////////////////////////////////////////////////////////////////////// + +page.onInitialized = function() { + console.log("page.onInitialized"); + printArgs.apply(this, arguments); +}; +page.onLoadStarted = function() { + console.log("page.onLoadStarted"); + printArgs.apply(this, arguments); +}; +page.onLoadFinished = function() { + console.log("page.onLoadFinished"); + printArgs.apply(this, arguments); +}; +page.onUrlChanged = function() { + console.log("page.onUrlChanged"); + printArgs.apply(this, arguments); +}; +page.onNavigationRequested = function() { + console.log("page.onNavigationRequested"); + printArgs.apply(this, arguments); +}; + +if (logResources === true) { + page.onResourceRequested = function() { + console.log("page.onResourceRequested"); + printArgs.apply(this, arguments); + }; + page.onResourceReceived = function() { + console.log("page.onResourceReceived"); + printArgs.apply(this, arguments); + }; +} + +page.onClosing = function() { + console.log("page.onClosing"); + printArgs.apply(this, arguments); +}; + +// window.console.log(msg); +page.onConsoleMessage = function() { + console.log("page.onConsoleMessage"); + printArgs.apply(this, arguments); +}; + +// window.alert(msg); +page.onAlert = function() { + console.log("page.onAlert"); + printArgs.apply(this, arguments); +}; +// var confirmed = window.confirm(msg); +page.onConfirm = function() { + console.log("page.onConfirm"); + printArgs.apply(this, arguments); +}; +// var user_value = window.prompt(msg, default_value); +page.onPrompt = function() { + console.log("page.onPrompt"); + printArgs.apply(this, arguments); +}; + +//////////////////////////////////////////////////////////////////////////////// + +setTimeout(function() { + console.log(""); + console.log("### STEP 1: Load '" + step1url + "'"); + page.open(step1url); +}, 0); + +setTimeout(function() { + console.log(""); + console.log("### STEP 2: Load '" + step2url + "' (load same URL plus FRAGMENT)"); + page.open(step2url); +}, 5000); + +setTimeout(function() { + console.log(""); + console.log("### STEP 3: Click on page internal link (aka FRAGMENT)"); + page.evaluate(function() { + var ev = document.createEvent("MouseEvents"); + ev.initEvent("click", true, true); + document.querySelector("a[href='#Event_object']").dispatchEvent(ev); + }); +}, 10000); + +setTimeout(function() { + console.log(""); + console.log("### STEP 4: Click on page external link"); + page.evaluate(function() { + var ev = document.createEvent("MouseEvents"); + ev.initEvent("click", true, true); + document.querySelector("a[title='JavaScript']").dispatchEvent(ev); + }); +}, 15000); + +setTimeout(function() { + console.log(""); + console.log("### STEP 5: Close page and shutdown (with a delay)"); + page.close(); + setTimeout(function(){ + phantom.exit(); + }, 100); +}, 20000); diff --git a/phantomjs-1.9.7-windows/examples/pagecallback.coffee b/phantomjs-1.9.7-windows/examples/pagecallback.coffee new file mode 100644 index 0000000..1af7a79 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/pagecallback.coffee @@ -0,0 +1,16 @@ +p = require("webpage").create() + +p.onConsoleMessage = (msg) -> + console.log msg + +# Calls to "callPhantom" within the page 'p' arrive here +p.onCallback = (msg) -> + console.log "Received by the 'phantom' main context: " + msg + "Hello there, I'm coming to you from the 'phantom' context instead" + +p.evaluate -> + # Return-value of the "onCallback" handler arrive here + callbackResponse = window.callPhantom "Hello, I'm coming to you from the 'page' context" + console.log "Received by the 'page' context: " + callbackResponse + +phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/pagecallback.js b/phantomjs-1.9.7-windows/examples/pagecallback.js new file mode 100644 index 0000000..20c13b6 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/pagecallback.js @@ -0,0 +1,17 @@ +var p = require("webpage").create(); + +p.onConsoleMessage = function(msg) { console.log(msg); }; + +// Calls to "callPhantom" within the page 'p' arrive here +p.onCallback = function(msg) { + console.log("Received by the 'phantom' main context: "+msg); + return "Hello there, I'm coming to you from the 'phantom' context instead"; +}; + +p.evaluate(function() { + // Return-value of the "onCallback" handler arrive here + var callbackResponse = window.callPhantom("Hello, I'm coming to you from the 'page' context"); + console.log("Received by the 'page' context: "+callbackResponse); +}); + +phantom.exit(); diff --git a/phantomjs-1.9.7-windows/examples/phantomwebintro.coffee b/phantomjs-1.9.7-windows/examples/phantomwebintro.coffee new file mode 100644 index 0000000..0c89ca7 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/phantomwebintro.coffee @@ -0,0 +1,13 @@ +# Read the Phantom webpage '#intro' element text using jQuery and "includeJs" + +page = require('webpage').create() + +page.onConsoleMessage = (msg) -> console.log msg + +page.open "http://www.phantomjs.org", (status) -> + if status is "success" + page.includeJs "http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", -> + page.evaluate -> + console.log "$(\"#intro\").text() -> " + $("#intro").text() + phantom.exit() + diff --git a/phantomjs-1.9.7-windows/examples/phantomwebintro.js b/phantomjs-1.9.7-windows/examples/phantomwebintro.js new file mode 100644 index 0000000..6bf5a9f --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/phantomwebintro.js @@ -0,0 +1,19 @@ +// Read the Phantom webpage '#intro' element text using jQuery and "includeJs" + +var page = require('webpage').create(); + +page.onConsoleMessage = function(msg) { + console.log(msg); +}; + +page.open("http://www.phantomjs.org", function(status) { + if ( status === "success" ) { + page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() { + page.evaluate(function() { + console.log("$(\"#intro\").text() -> " + $("#intro").text()); + }); + phantom.exit(); + }); + } +}); + diff --git a/phantomjs-1.9.7-windows/examples/pizza.coffee b/phantomjs-1.9.7-windows/examples/pizza.coffee new file mode 100644 index 0000000..6e97db7 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/pizza.coffee @@ -0,0 +1,18 @@ +# Find pizza in Mountain View using Yelp + +page = require('webpage').create() +url = 'http://lite.yelp.com/search?find_desc=pizza&find_loc=94040&find_submit=Search' + +page.open url, + (status) -> + if status isnt 'success' + console.log 'Unable to access network' + else + results = page.evaluate -> + pizza = [] + list = document.querySelectorAll 'address' + for item in list + pizza.push(item.innerText) + return pizza + console.log results.join('\n') + phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/pizza.js b/phantomjs-1.9.7-windows/examples/pizza.js new file mode 100644 index 0000000..3e1af15 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/pizza.js @@ -0,0 +1,20 @@ +// Find pizza in Mountain View using Yelp + +var page = require('webpage').create(), + url = 'http://lite.yelp.com/search?find_desc=pizza&find_loc=94040&find_submit=Search'; + +page.open(url, function (status) { + if (status !== 'success') { + console.log('Unable to access network'); + } else { + var results = page.evaluate(function() { + var list = document.querySelectorAll('address'), pizza = [], i; + for (i = 0; i < list.length; i++) { + pizza.push(list[i].innerText); + } + return pizza; + }); + console.log(results.join('\n')); + } + phantom.exit(); +}); diff --git a/phantomjs-1.9.7-windows/examples/post.coffee b/phantomjs-1.9.7-windows/examples/post.coffee new file mode 100644 index 0000000..c3c5787 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/post.coffee @@ -0,0 +1,12 @@ +# Example using HTTP POST operation + +page = require('webpage').create() +server = 'http://posttestserver.com/post.php?dump' +data = 'universe=expanding&answer=42' + +page.open server, 'post', data, (status) -> + if status isnt 'success' + console.log 'Unable to post!' + else + console.log page.content + phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/post.js b/phantomjs-1.9.7-windows/examples/post.js new file mode 100644 index 0000000..3868915 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/post.js @@ -0,0 +1,14 @@ +// Example using HTTP POST operation + +var page = require('webpage').create(), + server = 'http://posttestserver.com/post.php?dump', + data = 'universe=expanding&answer=42'; + +page.open(server, 'post', data, function (status) { + if (status !== 'success') { + console.log('Unable to post!'); + } else { + console.log(page.content); + } + phantom.exit(); +}); diff --git a/phantomjs-1.9.7-windows/examples/postserver.coffee b/phantomjs-1.9.7-windows/examples/postserver.coffee new file mode 100644 index 0000000..2dcd507 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/postserver.coffee @@ -0,0 +1,25 @@ +# Example using HTTP POST operation +page = require("webpage").create() +server = require("webserver").create() +system = require("system") +data = "universe=expanding&answer=42" +if system.args.length isnt 2 + console.log "Usage: postserver.js <portnumber>" + phantom.exit 1 +port = system.args[1] +service = server.listen(port, (request, response) -> + console.log "Request received at " + new Date() + response.statusCode = 200 + response.headers = + Cache: "no-cache" + "Content-Type": "text/plain;charset=utf-8" + + response.write JSON.stringify(request, null, 4) + response.close() +) +page.open "http://localhost:" + port + "/", "post", data, (status) -> + if status isnt "success" + console.log "Unable to post!" + else + console.log page.plainText + phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/postserver.js b/phantomjs-1.9.7-windows/examples/postserver.js new file mode 100644 index 0000000..e3dd19f --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/postserver.js @@ -0,0 +1,34 @@ +// Example using HTTP POST operation + +var page = require('webpage').create(), + server = require('webserver').create(), + system = require('system'), + data = 'universe=expanding&answer=42'; + +if (system.args.length !== 2) { + console.log('Usage: postserver.js <portnumber>'); + phantom.exit(1); +} + +var port = system.args[1]; + +service = server.listen(port, function (request, response) { + console.log('Request received at ' + new Date()); + + response.statusCode = 200; + response.headers = { + 'Cache': 'no-cache', + 'Content-Type': 'text/plain;charset=utf-8' + }; + response.write(JSON.stringify(request, null, 4)); + response.close(); +}); + +page.open('http://localhost:' + port + '/', 'post', data, function (status) { + if (status !== 'success') { + console.log('Unable to post!'); + } else { + console.log(page.plainText); + } + phantom.exit(); +}); diff --git a/phantomjs-1.9.7-windows/examples/printenv.coffee b/phantomjs-1.9.7-windows/examples/printenv.coffee new file mode 100644 index 0000000..80ec5f0 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/printenv.coffee @@ -0,0 +1,6 @@ +system = require("system") +env = system.env +key = undefined +for key of env + console.log key + "=" + env[key] if env.hasOwnProperty(key) +phantom.exit() \ No newline at end of file diff --git a/phantomjs-1.9.7-windows/examples/printenv.js b/phantomjs-1.9.7-windows/examples/printenv.js new file mode 100644 index 0000000..6baea03 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/printenv.js @@ -0,0 +1,10 @@ +var system = require('system'), + env = system.env, + key; + +for (key in env) { + if (env.hasOwnProperty(key)) { + console.log(key + '=' + env[key]); + } +} +phantom.exit(); diff --git a/phantomjs-1.9.7-windows/examples/printheaderfooter.coffee b/phantomjs-1.9.7-windows/examples/printheaderfooter.coffee new file mode 100644 index 0000000..fd82b34 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/printheaderfooter.coffee @@ -0,0 +1,88 @@ +someCallback = (pageNum, numPages) -> + "<h1> someCallback: " + pageNum + " / " + numPages + "</h1>" +page = require("webpage").create() +system = require("system") +if system.args.length < 3 + console.log "Usage: printheaderfooter.js URL filename" + phantom.exit 1 +else + address = system.args[1] + output = system.args[2] + page.viewportSize = + width: 600 + height: 600 + + page.paperSize = + format: "A4" + margin: "1cm" + + # default header/footer for pages that don't have custom overwrites (see below) + header: + height: "1cm" + contents: phantom.callback((pageNum, numPages) -> + return "" if pageNum is 1 + "<h1>Header <span style='float:right'>" + pageNum + " / " + numPages + "</span></h1>" + ) + + footer: + height: "1cm" + contents: phantom.callback((pageNum, numPages) -> + return "" if pageNum is numPages + "<h1>Footer <span style='float:right'>" + pageNum + " / " + numPages + "</span></h1>" + ) + + page.open address, (status) -> + if status isnt "success" + console.log "Unable to load the address!" + else + + # check whether the loaded page overwrites the header/footer setting, + # i.e. whether a PhantomJSPriting object exists. Use that then instead + # of our defaults above. + # + # example: + # <html> + # <head> + # <script type="text/javascript"> + # var PhantomJSPrinting = { + # header: { + # height: "1cm", + # contents: function(pageNum, numPages) { return pageNum + "/" + numPages; } + # }, + # footer: { + # height: "1cm", + # contents: function(pageNum, numPages) { return pageNum + "/" + numPages; } + # } + # }; + # </script> + # </head> + # <body><h1>asdfadsf</h1><p>asdfadsfycvx</p></body> + # </html> + # + if page.evaluate(-> + typeof PhantomJSPrinting is "object" + ) + paperSize = page.paperSize + paperSize.header.height = page.evaluate(-> + PhantomJSPrinting.header.height + ) + paperSize.header.contents = phantom.callback((pageNum, numPages) -> + page.evaluate ((pageNum, numPages) -> + PhantomJSPrinting.header.contents pageNum, numPages + ), pageNum, numPages + ) + paperSize.footer.height = page.evaluate(-> + PhantomJSPrinting.footer.height + ) + paperSize.footer.contents = phantom.callback((pageNum, numPages) -> + page.evaluate ((pageNum, numPages) -> + PhantomJSPrinting.footer.contents pageNum, numPages + ), pageNum, numPages + ) + page.paperSize = paperSize + console.log page.paperSize.header.height + console.log page.paperSize.footer.height + window.setTimeout (-> + page.render output + phantom.exit() + ), 200 diff --git a/phantomjs-1.9.7-windows/examples/printheaderfooter.js b/phantomjs-1.9.7-windows/examples/printheaderfooter.js new file mode 100644 index 0000000..01f8a01 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/printheaderfooter.js @@ -0,0 +1,89 @@ +var page = require('webpage').create(), + system = require('system'); + +function someCallback(pageNum, numPages) { + return "<h1> someCallback: " + pageNum + " / " + numPages + "</h1>"; +} + +if (system.args.length < 3) { + console.log('Usage: printheaderfooter.js URL filename'); + phantom.exit(1); +} else { + var address = system.args[1]; + var output = system.args[2]; + page.viewportSize = { width: 600, height: 600 }; + page.paperSize = { + format: 'A4', + margin: "1cm", + /* default header/footer for pages that don't have custom overwrites (see below) */ + header: { + height: "1cm", + contents: phantom.callback(function(pageNum, numPages) { + if (pageNum == 1) { + return ""; + } + return "<h1>Header <span style='float:right'>" + pageNum + " / " + numPages + "</span></h1>"; + }) + }, + footer: { + height: "1cm", + contents: phantom.callback(function(pageNum, numPages) { + if (pageNum == numPages) { + return ""; + } + return "<h1>Footer <span style='float:right'>" + pageNum + " / " + numPages + "</span></h1>"; + }) + } + }; + page.open(address, function (status) { + if (status !== 'success') { + console.log('Unable to load the address!'); + } else { + /* check whether the loaded page overwrites the header/footer setting, + i.e. whether a PhantomJSPriting object exists. Use that then instead + of our defaults above. + + example: + <html> + <head> + <script type="text/javascript"> + var PhantomJSPrinting = { + header: { + height: "1cm", + contents: function(pageNum, numPages) { return pageNum + "/" + numPages; } + }, + footer: { + height: "1cm", + contents: function(pageNum, numPages) { return pageNum + "/" + numPages; } + } + }; + </script> + </head> + <body><h1>asdfadsf</h1><p>asdfadsfycvx</p></body> + </html> + */ + if (page.evaluate(function(){return typeof PhantomJSPrinting == "object";})) { + paperSize = page.paperSize; + paperSize.header.height = page.evaluate(function() { + return PhantomJSPrinting.header.height; + }); + paperSize.header.contents = phantom.callback(function(pageNum, numPages) { + return page.evaluate(function(pageNum, numPages){return PhantomJSPrinting.header.contents(pageNum, numPages);}, pageNum, numPages); + }); + paperSize.footer.height = page.evaluate(function() { + return PhantomJSPrinting.footer.height; + }); + paperSize.footer.contents = phantom.callback(function(pageNum, numPages) { + return page.evaluate(function(pageNum, numPages){return PhantomJSPrinting.footer.contents(pageNum, numPages);}, pageNum, numPages); + }); + page.paperSize = paperSize; + console.log(page.paperSize.header.height); + console.log(page.paperSize.footer.height); + } + window.setTimeout(function () { + page.render(output); + phantom.exit(); + }, 200); + } + }); +} diff --git a/phantomjs-1.9.7-windows/examples/printmargins.coffee b/phantomjs-1.9.7-windows/examples/printmargins.coffee new file mode 100644 index 0000000..5be7ced --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/printmargins.coffee @@ -0,0 +1,33 @@ +page = require("webpage").create() +system = require("system") +if system.args.length < 7 + console.log "Usage: printmargins.js URL filename LEFT TOP RIGHT BOTTOM" + console.log " margin examples: \"1cm\", \"10px\", \"7mm\", \"5in\"" + phantom.exit 1 +else + address = system.args[1] + output = system.args[2] + marginLeft = system.args[3] + marginTop = system.args[4] + marginRight = system.args[5] + marginBottom = system.args[6] + page.viewportSize = + width: 600 + height: 600 + + page.paperSize = + format: "A4" + margin: + left: marginLeft + top: marginTop + right: marginRight + bottom: marginBottom + + page.open address, (status) -> + if status isnt "success" + console.log "Unable to load the address!" + else + window.setTimeout (-> + page.render output + phantom.exit() + ), 200 diff --git a/phantomjs-1.9.7-windows/examples/printmargins.js b/phantomjs-1.9.7-windows/examples/printmargins.js new file mode 100644 index 0000000..89b48b4 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/printmargins.js @@ -0,0 +1,35 @@ +var page = require('webpage').create(), + system = require('system'); + +if (system.args.length < 7) { + console.log('Usage: printmargins.js URL filename LEFT TOP RIGHT BOTTOM'); + console.log(' margin examples: "1cm", "10px", "7mm", "5in"'); + phantom.exit(1); +} else { + var address = system.args[1]; + var output = system.args[2]; + var marginLeft = system.args[3]; + var marginTop = system.args[4]; + var marginRight = system.args[5]; + var marginBottom = system.args[6]; + page.viewportSize = { width: 600, height: 600 }; + page.paperSize = { + format: 'A4', + margin: { + left: marginLeft, + top: marginTop, + right: marginRight, + bottom: marginBottom + } + }; + page.open(address, function (status) { + if (status !== 'success') { + console.log('Unable to load the address!'); + } else { + window.setTimeout(function () { + page.render(output); + phantom.exit(); + }, 200); + } + }); +} diff --git a/phantomjs-1.9.7-windows/examples/rasterize.coffee b/phantomjs-1.9.7-windows/examples/rasterize.coffee new file mode 100644 index 0000000..aa06dbd --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/rasterize.coffee @@ -0,0 +1,23 @@ +page = require('webpage').create() +system = require 'system' + +if system.args.length < 3 or system.args.length > 4 + console.log 'Usage: rasterize.coffee URL filename [paperwidth*paperheight|paperformat]' + console.log ' paper (pdf output) examples: "5in*7.5in", "10cm*20cm", "A4", "Letter"' + phantom.exit 1 +else + address = system.args[1] + output = system.args[2] + page.viewportSize = { width: 600, height: 600 } + if system.args.length is 4 and system.args[2].substr(-4) is ".pdf" + size = system.args[3].split '*' + if size.length is 2 + page.paperSize = { width: size[0], height: size[1], border: '0px' } + else + page.paperSize = { format: system.args[3], orientation: 'portrait', border: '1cm' } + page.open address, (status) -> + if status isnt 'success' + console.log 'Unable to load the address!' + phantom.exit() + else + window.setTimeout (-> page.render output; phantom.exit()), 200 diff --git a/phantomjs-1.9.7-windows/examples/rasterize.js b/phantomjs-1.9.7-windows/examples/rasterize.js new file mode 100644 index 0000000..165bcfa --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/rasterize.js @@ -0,0 +1,32 @@ +var page = require('webpage').create(), + system = require('system'), + address, output, size; + +if (system.args.length < 3 || system.args.length > 5) { + console.log('Usage: rasterize.js URL filename [paperwidth*paperheight|paperformat] [zoom]'); + console.log(' paper (pdf output) examples: "5in*7.5in", "10cm*20cm", "A4", "Letter"'); + phantom.exit(1); +} else { + address = system.args[1]; + output = system.args[2]; + page.viewportSize = { width: 600, height: 600 }; + if (system.args.length > 3 && system.args[2].substr(-4) === ".pdf") { + size = system.args[3].split('*'); + page.paperSize = size.length === 2 ? { width: size[0], height: size[1], margin: '0px' } + : { format: system.args[3], orientation: 'portrait', margin: '1cm' }; + } + if (system.args.length > 4) { + page.zoomFactor = system.args[4]; + } + page.open(address, function (status) { + if (status !== 'success') { + console.log('Unable to load the address!'); + phantom.exit(); + } else { + window.setTimeout(function () { + page.render(output); + phantom.exit(); + }, 200); + } + }); +} diff --git a/phantomjs-1.9.7-windows/examples/render_multi_url.coffee b/phantomjs-1.9.7-windows/examples/render_multi_url.coffee new file mode 100644 index 0000000..29afa48 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/render_multi_url.coffee @@ -0,0 +1,60 @@ +# Render Multiple URLs to file + +system = require("system") + +# Render given urls +# @param array of URLs to render +# @param callbackPerUrl Function called after finishing each URL, including the last URL +# @param callbackFinal Function called after finishing everything +RenderUrlsToFile = (urls, callbackPerUrl, callbackFinal) -> + urlIndex = 0 # only for easy file naming + webpage = require("webpage") + page = null + getFilename = -> + "rendermulti-" + urlIndex + ".png" + + next = (status, url, file) -> + page.close() + callbackPerUrl status, url, file + retrieve() + + retrieve = -> + if urls.length > 0 + url = urls.shift() + urlIndex++ + page = webpage.create() + page.viewportSize = + width: 800 + height: 600 + + page.settings.userAgent = "Phantom.js bot" + page.open "http://" + url, (status) -> + file = getFilename() + if status is "success" + window.setTimeout (-> + page.render file + next status, url, file + ), 200 + else + next status, url, file + + else + callbackFinal() + + retrieve() +arrayOfUrls = null +if system.args.length > 1 + arrayOfUrls = Array::slice.call(system.args, 1) +else + # Default (no args passed) + console.log "Usage: phantomjs render_multi_url.js [domain.name1, domain.name2, ...]" + arrayOfUrls = ["www.google.com", "www.bbc.co.uk", "www.phantomjs.org"] + +RenderUrlsToFile arrayOfUrls, ((status, url, file) -> + if status isnt "success" + console.log "Unable to render '" + url + "'" + else + console.log "Rendered '" + url + "' at '" + file + "'" +), -> + phantom.exit() + diff --git a/phantomjs-1.9.7-windows/examples/render_multi_url.js b/phantomjs-1.9.7-windows/examples/render_multi_url.js new file mode 100644 index 0000000..df09813 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/render_multi_url.js @@ -0,0 +1,73 @@ +// Render Multiple URLs to file + +var RenderUrlsToFile, arrayOfUrls, system; + +system = require("system"); + +/* +Render given urls +@param array of URLs to render +@param callbackPerUrl Function called after finishing each URL, including the last URL +@param callbackFinal Function called after finishing everything +*/ +RenderUrlsToFile = function(urls, callbackPerUrl, callbackFinal) { + var getFilename, next, page, retrieve, urlIndex, webpage; + urlIndex = 0; + webpage = require("webpage"); + page = null; + getFilename = function() { + return "rendermulti-" + urlIndex + ".png"; + }; + next = function(status, url, file) { + page.close(); + callbackPerUrl(status, url, file); + return retrieve(); + }; + retrieve = function() { + var url; + if (urls.length > 0) { + url = urls.shift(); + urlIndex++; + page = webpage.create(); + page.viewportSize = { + width: 800, + height: 600 + }; + page.settings.userAgent = "Phantom.js bot"; + return page.open("http://" + url, function(status) { + var file; + file = getFilename(); + if (status === "success") { + return window.setTimeout((function() { + page.render(file); + return next(status, url, file); + }), 200); + } else { + return next(status, url, file); + } + }); + } else { + return callbackFinal(); + } + }; + return retrieve(); +}; + +arrayOfUrls = null; + +if (system.args.length > 1) { + arrayOfUrls = Array.prototype.slice.call(system.args, 1); +} else { + console.log("Usage: phantomjs render_multi_url.js [domain.name1, domain.name2, ...]"); + arrayOfUrls = ["www.google.com", "www.bbc.co.uk", "www.phantomjs.org"]; +} + +RenderUrlsToFile(arrayOfUrls, (function(status, url, file) { + if (status !== "success") { + return console.log("Unable to render '" + url + "'"); + } else { + return console.log("Rendered '" + url + "' at '" + file + "'"); + } +}), function() { + return phantom.exit(); +}); diff --git a/phantomjs-1.9.7-windows/examples/run-jasmine.coffee b/phantomjs-1.9.7-windows/examples/run-jasmine.coffee new file mode 100644 index 0000000..22fb932 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/run-jasmine.coffee @@ -0,0 +1,61 @@ +system = require 'system' + +## +# Wait until the test condition is true or a timeout occurs. Useful for waiting +# on a server response or for a ui change (fadeIn, etc.) to occur. +# +# @param testFx javascript condition that evaluates to a boolean, +# it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or +# as a callback function. +# @param onReady what to do when testFx condition is fulfilled, +# it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or +# as a callback function. +# @param timeOutMillis the max amount of time to wait. If not specified, 3 sec is used. +## +waitFor = (testFx, onReady, timeOutMillis=3000) -> + start = new Date().getTime() + condition = false + f = -> + if (new Date().getTime() - start < timeOutMillis) and not condition + # If not time-out yet and condition not yet fulfilled + condition = (if typeof testFx is 'string' then eval testFx else testFx()) #< defensive code + else + if not condition + # If condition still not fulfilled (timeout but condition is 'false') + console.log "'waitFor()' timeout" + phantom.exit 1 + else + # Condition fulfilled (timeout and/or condition is 'true') + console.log "'waitFor()' finished in #{new Date().getTime() - start}ms." + if typeof onReady is 'string' then eval onReady else onReady() #< Do what it's supposed to do once the condition is fulfilled + clearInterval interval #< Stop this interval + interval = setInterval f, 100 #< repeat check every 100ms + +if system.args.length isnt 2 + console.log 'Usage: run-jasmine.coffee URL' + phantom.exit 1 + +page = require('webpage').create() + +# Route "console.log()" calls from within the Page context to the main Phantom context (i.e. current "this") +page.onConsoleMessage = (msg) -> + console.log msg + +page.open system.args[1], (status) -> + if status isnt 'success' + console.log 'Unable to access network' + phantom.exit() + else + waitFor -> + page.evaluate -> + if document.body.querySelector '.finished-at' + return true + return false + , -> + page.evaluate -> + console.log document.body.querySelector('.description').innerText + list = document.body.querySelectorAll('.failed > .description, .failed > .messages > .resultMessage') + for el in list + console.log el.innerText + + phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/run-jasmine.js b/phantomjs-1.9.7-windows/examples/run-jasmine.js new file mode 100644 index 0000000..3872824 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/run-jasmine.js @@ -0,0 +1,86 @@ +var system = require('system'); + +/** + * Wait until the test condition is true or a timeout occurs. Useful for waiting + * on a server response or for a ui change (fadeIn, etc.) to occur. + * + * @param testFx javascript condition that evaluates to a boolean, + * it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or + * as a callback function. + * @param onReady what to do when testFx condition is fulfilled, + * it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or + * as a callback function. + * @param timeOutMillis the max amount of time to wait. If not specified, 3 sec is used. + */ +function waitFor(testFx, onReady, timeOutMillis) { + var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 3001, //< Default Max Timeout is 3s + start = new Date().getTime(), + condition = false, + interval = setInterval(function() { + if ( (new Date().getTime() - start < maxtimeOutMillis) && !condition ) { + // If not time-out yet and condition not yet fulfilled + condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()); //< defensive code + } else { + if(!condition) { + // If condition still not fulfilled (timeout but condition is 'false') + console.log("'waitFor()' timeout"); + phantom.exit(1); + } else { + // Condition fulfilled (timeout and/or condition is 'true') + console.log("'waitFor()' finished in " + (new Date().getTime() - start) + "ms."); + typeof(onReady) === "string" ? eval(onReady) : onReady(); //< Do what it's supposed to do once the condition is fulfilled + clearInterval(interval); //< Stop this interval + } + } + }, 100); //< repeat check every 100ms +}; + + +if (system.args.length !== 2) { + console.log('Usage: run-jasmine.js URL'); + phantom.exit(1); +} + +var page = require('webpage').create(); + +// Route "console.log()" calls from within the Page context to the main Phantom context (i.e. current "this") +page.onConsoleMessage = function(msg) { + console.log(msg); +}; + +page.open(system.args[1], function(status){ + if (status !== "success") { + console.log("Unable to access network"); + phantom.exit(); + } else { + waitFor(function(){ + return page.evaluate(function(){ + return document.body.querySelector('.symbolSummary .pending') === null + }); + }, function(){ + var exitCode = page.evaluate(function(){ + console.log(''); + console.log(document.body.querySelector('.description').innerText); + var list = document.body.querySelectorAll('.results > #details > .specDetail.failed'); + if (list && list.length > 0) { + console.log(''); + console.log(list.length + ' test(s) FAILED:'); + for (i = 0; i < list.length; ++i) { + var el = list[i], + desc = el.querySelector('.description'), + msg = el.querySelector('.resultMessage.fail'); + console.log(''); + console.log(desc.innerText); + console.log(msg.innerText); + console.log(''); + } + return 1; + } else { + console.log(document.body.querySelector('.alert > .passingAlert.bar').innerText); + return 0; + } + }); + phantom.exit(exitCode); + }); + } +}); diff --git a/phantomjs-1.9.7-windows/examples/run-qunit.coffee b/phantomjs-1.9.7-windows/examples/run-qunit.coffee new file mode 100644 index 0000000..dcb24b9 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/run-qunit.coffee @@ -0,0 +1,64 @@ +system = require 'system' + +## +# Wait until the test condition is true or a timeout occurs. Useful for waiting +# on a server response or for a ui change (fadeIn, etc.) to occur. +# +# @param testFx javascript condition that evaluates to a boolean, +# it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or +# as a callback function. +# @param onReady what to do when testFx condition is fulfilled, +# it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or +# as a callback function. +# @param timeOutMillis the max amount of time to wait. If not specified, 3 sec is used. +## +waitFor = (testFx, onReady, timeOutMillis=3000) -> + start = new Date().getTime() + condition = false + f = -> + if (new Date().getTime() - start < timeOutMillis) and not condition + # If not time-out yet and condition not yet fulfilled + condition = (if typeof testFx is 'string' then eval testFx else testFx()) #< defensive code + else + if not condition + # If condition still not fulfilled (timeout but condition is 'false') + console.log "'waitFor()' timeout" + phantom.exit 1 + else + # Condition fulfilled (timeout and/or condition is 'true') + console.log "'waitFor()' finished in #{new Date().getTime() - start}ms." + if typeof onReady is 'string' then eval onReady else onReady() #< Do what it's supposed to do once the condition is fulfilled + clearInterval interval #< Stop this interval + interval = setInterval f, 100 #< repeat check every 100ms + +if system.args.length isnt 2 + console.log 'Usage: run-qunit.coffee URL' + phantom.exit 1 + +page = require('webpage').create() + +# Route "console.log()" calls from within the Page context to the main Phantom context (i.e. current "this") +page.onConsoleMessage = (msg) -> + console.log msg + +page.open system.args[1], (status) -> + if status isnt 'success' + console.log 'Unable to access network' + phantom.exit 1 + else + waitFor -> + page.evaluate -> + el = document.getElementById 'qunit-testresult' + if el and el.innerText.match 'completed' + return true + return false + , -> + failedNum = page.evaluate -> + el = document.getElementById 'qunit-testresult' + console.log el.innerText + try + return el.getElementsByClassName('failed')[0].innerHTML + catch e + return 10000 + + phantom.exit if parseInt(failedNum, 10) > 0 then 1 else 0 diff --git a/phantomjs-1.9.7-windows/examples/run-qunit.js b/phantomjs-1.9.7-windows/examples/run-qunit.js new file mode 100644 index 0000000..d7df0c3 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/run-qunit.js @@ -0,0 +1,76 @@ +var system = require('system'); + +/** + * Wait until the test condition is true or a timeout occurs. Useful for waiting + * on a server response or for a ui change (fadeIn, etc.) to occur. + * + * @param testFx javascript condition that evaluates to a boolean, + * it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or + * as a callback function. + * @param onReady what to do when testFx condition is fulfilled, + * it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or + * as a callback function. + * @param timeOutMillis the max amount of time to wait. If not specified, 3 sec is used. + */ +function waitFor(testFx, onReady, timeOutMillis) { + var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 3001, //< Default Max Timout is 3s + start = new Date().getTime(), + condition = false, + interval = setInterval(function() { + if ( (new Date().getTime() - start < maxtimeOutMillis) && !condition ) { + // If not time-out yet and condition not yet fulfilled + condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()); //< defensive code + } else { + if(!condition) { + // If condition still not fulfilled (timeout but condition is 'false') + console.log("'waitFor()' timeout"); + phantom.exit(1); + } else { + // Condition fulfilled (timeout and/or condition is 'true') + console.log("'waitFor()' finished in " + (new Date().getTime() - start) + "ms."); + typeof(onReady) === "string" ? eval(onReady) : onReady(); //< Do what it's supposed to do once the condition is fulfilled + clearInterval(interval); //< Stop this interval + } + } + }, 100); //< repeat check every 250ms +}; + + +if (system.args.length !== 2) { + console.log('Usage: run-qunit.js URL'); + phantom.exit(1); +} + +var page = require('webpage').create(); + +// Route "console.log()" calls from within the Page context to the main Phantom context (i.e. current "this") +page.onConsoleMessage = function(msg) { + console.log(msg); +}; + +page.open(system.args[1], function(status){ + if (status !== "success") { + console.log("Unable to access network"); + phantom.exit(1); + } else { + waitFor(function(){ + return page.evaluate(function(){ + var el = document.getElementById('qunit-testresult'); + if (el && el.innerText.match('completed')) { + return true; + } + return false; + }); + }, function(){ + var failedNum = page.evaluate(function(){ + var el = document.getElementById('qunit-testresult'); + console.log(el.innerText); + try { + return el.getElementsByClassName('failed')[0].innerHTML; + } catch (e) { } + return 10000; + }); + phantom.exit((parseInt(failedNum, 10) > 0) ? 1 : 0); + }); + } +}); diff --git a/phantomjs-1.9.7-windows/examples/scandir.coffee b/phantomjs-1.9.7-windows/examples/scandir.coffee new file mode 100644 index 0000000..0ee4ffc --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/scandir.coffee @@ -0,0 +1,16 @@ +# List all the files in a Tree of Directories +system = require 'system' + +if system.args.length != 2 + console.log "Usage: phantomjs scandir.coffee DIRECTORY_TO_SCAN" + phantom.exit 1 +scanDirectory = (path) -> + fs = require 'fs' + if fs.exists(path) and fs.isFile(path) + console.log path + else if fs.isDirectory(path) + fs.list(path).forEach (e) -> + scanDirectory path + "/" + e if e != "." and e != ".." + +scanDirectory system.args[1] +phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/scandir.js b/phantomjs-1.9.7-windows/examples/scandir.js new file mode 100644 index 0000000..0b9f9e1 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/scandir.js @@ -0,0 +1,22 @@ +// List all the files in a Tree of Directories +var system = require('system'); + +if (system.args.length !== 2) { + console.log("Usage: phantomjs scandir.js DIRECTORY_TO_SCAN"); + phantom.exit(1); +} + +var scanDirectory = function (path) { + var fs = require('fs'); + if (fs.exists(path) && fs.isFile(path)) { + console.log(path); + } else if (fs.isDirectory(path)) { + fs.list(path).forEach(function (e) { + if ( e !== "." && e !== ".." ) { //< Avoid loops + scanDirectory(path + '/' + e); + } + }); + } +}; +scanDirectory(system.args[1]); +phantom.exit(); diff --git a/phantomjs-1.9.7-windows/examples/seasonfood.coffee b/phantomjs-1.9.7-windows/examples/seasonfood.coffee new file mode 100644 index 0000000..5228c26 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/seasonfood.coffee @@ -0,0 +1,17 @@ +# Show BBC seasonal food list. + +window.cbfunc = (data) -> + list = data.query.results.results.result + names = ['January', 'February', 'March', + 'April', 'May', 'June', + 'July', 'August', 'September', + 'October', 'November', 'December'] + for item in list + console.log [item.name.replace(/\s/ig, ' '), ':', + names[item.atItsBestUntil], 'to', + names[item.atItsBestFrom]].join(' ') + phantom.exit() + +el = document.createElement 'script' +el.src = 'http://query.yahooapis.com/v1/public/yql?q=SELECT%20*%20FROM%20bbc.goodfood.seasonal%3B&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=window.cbfunc' +document.body.appendChild el diff --git a/phantomjs-1.9.7-windows/examples/seasonfood.js b/phantomjs-1.9.7-windows/examples/seasonfood.js new file mode 100644 index 0000000..f827d46 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/seasonfood.js @@ -0,0 +1,19 @@ +// Show BBC seasonal food list. + +var cbfunc = function (data) { + var list = data.query.results.results.result, + names = ['January', 'February', 'March', + 'April', 'May', 'June', + 'July', 'August', 'September', + 'October', 'November', 'December']; + list.forEach(function (item) { + console.log([item.name.replace(/\s/ig, ' '), ':', + names[item.atItsBestUntil], 'to', + names[item.atItsBestFrom]].join(' ')); + }); + phantom.exit(); +}; + +var el = document.createElement('script'); +el.src = 'http://query.yahooapis.com/v1/public/yql?q=SELECT%20*%20FROM%20bbc.goodfood.seasonal%3B&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=cbfunc'; +document.body.appendChild(el); diff --git a/phantomjs-1.9.7-windows/examples/server.coffee b/phantomjs-1.9.7-windows/examples/server.coffee new file mode 100644 index 0000000..96abdb9 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/server.coffee @@ -0,0 +1,45 @@ +page = require("webpage").create() +server = require("webserver").create() +system = require("system") +host = undefined +port = undefined +if system.args.length isnt 2 + console.log "Usage: server.js <some port>" + phantom.exit 1 +else + port = system.args[1] + listening = server.listen(port, (request, response) -> + console.log "GOT HTTP REQUEST" + console.log JSON.stringify(request, null, 4) + + # we set the headers here + response.statusCode = 200 + response.headers = + Cache: "no-cache" + "Content-Type": "text/html" + + + # this is also possible: + response.setHeader "foo", "bar" + + # now we write the body + # note: the headers above will now be sent implictly + response.write "<html><head><title>YES!" + + # note: writeBody can be called multiple times + response.write "

    pretty cool :)" + response.close() + ) + unless listening + console.log "could not create web server listening on port " + port + phantom.exit() + url = "http://localhost:" + port + "/foo/bar.php?asdf=true" + console.log "SENDING REQUEST TO:" + console.log url + page.open url, (status) -> + if status isnt "success" + console.log "FAIL to load the address" + else + console.log "GOT REPLY FROM SERVER:" + console.log page.content + phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/server.js b/phantomjs-1.9.7-windows/examples/server.js new file mode 100644 index 0000000..fd725d7 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/server.js @@ -0,0 +1,43 @@ +var page = require('webpage').create(); +var server = require('webserver').create(); +var system = require('system'); +var host, port; + +if (system.args.length !== 2) { + console.log('Usage: server.js '); + phantom.exit(1); +} else { + port = system.args[1]; + var listening = server.listen(port, function (request, response) { + console.log("GOT HTTP REQUEST"); + console.log(JSON.stringify(request, null, 4)); + + // we set the headers here + response.statusCode = 200; + response.headers = {"Cache": "no-cache", "Content-Type": "text/html"}; + // this is also possible: + response.setHeader("foo", "bar"); + // now we write the body + // note: the headers above will now be sent implictly + response.write("YES!"); + // note: writeBody can be called multiple times + response.write("

    pretty cool :)"); + response.close(); + }); + if (!listening) { + console.log("could not create web server listening on port " + port); + phantom.exit(); + } + var url = "http://localhost:" + port + "/foo/bar.php?asdf=true"; + console.log("SENDING REQUEST TO:"); + console.log(url); + page.open(url, function (status) { + if (status !== 'success') { + console.log('FAIL to load the address'); + } else { + console.log("GOT REPLY FROM SERVER:"); + console.log(page.content); + } + phantom.exit(); + }); +} diff --git a/phantomjs-1.9.7-windows/examples/serverkeepalive.coffee b/phantomjs-1.9.7-windows/examples/serverkeepalive.coffee new file mode 100644 index 0000000..ed33224 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/serverkeepalive.coffee @@ -0,0 +1,32 @@ +port = undefined +server = undefined +service = undefined +system = require("system") +if system.args.length isnt 2 + console.log "Usage: serverkeepalive.js " + phantom.exit 1 +else + port = system.args[1] + server = require("webserver").create() + service = server.listen(port, + keepAlive: true + , (request, response) -> + console.log "Request at " + new Date() + console.log JSON.stringify(request, null, 4) + body = JSON.stringify(request, null, 4) + response.statusCode = 200 + response.headers = + Cache: "no-cache" + "Content-Type": "text/plain" + Connection: "Keep-Alive" + "Keep-Alive": "timeout=5, max=100" + "Content-Length": body.length + + response.write body + response.close() + ) + if service + console.log "Web server running on port " + port + else + console.log "Error: Could not create web server listening on port " + port + phantom.exit() \ No newline at end of file diff --git a/phantomjs-1.9.7-windows/examples/serverkeepalive.js b/phantomjs-1.9.7-windows/examples/serverkeepalive.js new file mode 100644 index 0000000..ed474d8 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/serverkeepalive.js @@ -0,0 +1,34 @@ +var port, server, service, + system = require('system'); + +if (system.args.length !== 2) { + console.log('Usage: serverkeepalive.js '); + phantom.exit(1); +} else { + port = system.args[1]; + server = require('webserver').create(); + + service = server.listen(port, { keepAlive: true }, function (request, response) { + console.log('Request at ' + new Date()); + console.log(JSON.stringify(request, null, 4)); + + var body = JSON.stringify(request, null, 4); + response.statusCode = 200; + response.headers = { + 'Cache': 'no-cache', + 'Content-Type': 'text/plain', + 'Connection': 'Keep-Alive', + 'Keep-Alive': 'timeout=5, max=100', + 'Content-Length': body.length + }; + response.write(body); + response.close(); + }); + + if (service) { + console.log('Web server running on port ' + port); + } else { + console.log('Error: Could not create web server listening on port ' + port); + phantom.exit(); + } +} diff --git a/phantomjs-1.9.7-windows/examples/simpleserver.coffee b/phantomjs-1.9.7-windows/examples/simpleserver.coffee new file mode 100644 index 0000000..9b4cf7a --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/simpleserver.coffee @@ -0,0 +1,38 @@ +system = require 'system' + +if system.args.length is 1 + console.log "Usage: simpleserver.coffee " + phantom.exit 1 +else + port = system.args[1] + server = require("webserver").create() + + service = server.listen(port, (request, response) -> + + console.log "Request at " + new Date() + console.log JSON.stringify(request, null, 4) + + response.statusCode = 200 + response.headers = + Cache: "no-cache" + "Content-Type": "text/html" + + response.write "" + response.write "" + response.write "Hello, world!" + response.write "" + response.write "" + response.write "

    This is from PhantomJS web server.

    " + response.write "

    Request data:

    " + response.write "
    "
    +    response.write JSON.stringify(request, null, 4)
    +    response.write "
    " + response.write "" + response.write "" + response.close() + ) + if service + console.log "Web server running on port " + port + else + console.log "Error: Could not create web server listening on port " + port + phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/simpleserver.js b/phantomjs-1.9.7-windows/examples/simpleserver.js new file mode 100644 index 0000000..d1eb845 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/simpleserver.js @@ -0,0 +1,42 @@ +var port, server, service, + system = require('system'); + +if (system.args.length !== 2) { + console.log('Usage: simpleserver.js '); + phantom.exit(1); +} else { + port = system.args[1]; + server = require('webserver').create(); + + service = server.listen(port, function (request, response) { + + console.log('Request at ' + new Date()); + console.log(JSON.stringify(request, null, 4)); + + response.statusCode = 200; + response.headers = { + 'Cache': 'no-cache', + 'Content-Type': 'text/html' + }; + response.write(''); + response.write(''); + response.write('Hello, world!'); + response.write(''); + response.write(''); + response.write('

    This is from PhantomJS web server.

    '); + response.write('

    Request data:

    '); + response.write('
    ');
    +        response.write(JSON.stringify(request, null, 4));
    +        response.write('
    '); + response.write(''); + response.write(''); + response.close(); + }); + + if (service) { + console.log('Web server running on port ' + port); + } else { + console.log('Error: Could not create web server listening on port ' + port); + phantom.exit(); + } +} diff --git a/phantomjs-1.9.7-windows/examples/sleepsort.coffee b/phantomjs-1.9.7-windows/examples/sleepsort.coffee new file mode 100644 index 0000000..863ad14 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/sleepsort.coffee @@ -0,0 +1,20 @@ +### +Sort integers from the command line in a very ridiculous way: leveraging timeouts :P +### + +system = require 'system' + +if system.args.length < 2 + console.log "Usage: phantomjs sleepsort.coffee PUT YOUR INTEGERS HERE SEPARATED BY SPACES" + phantom.exit 1 +else + sortedCount = 0 + args = Array.prototype.slice.call(system.args, 1) + for int in args + setTimeout (do (int) -> + -> + console.log int + ++sortedCount + phantom.exit() if sortedCount is args.length), + int + diff --git a/phantomjs-1.9.7-windows/examples/sleepsort.js b/phantomjs-1.9.7-windows/examples/sleepsort.js new file mode 100644 index 0000000..6f0f9a3 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/sleepsort.js @@ -0,0 +1,25 @@ +// sleepsort.js - Sort integers from the commandline in a very ridiculous way: leveraging timeouts :P +var system = require('system'); + +function sleepSort(array, callback) { + var sortedCount = 0, + i, len; + for ( i = 0, len = array.length; i < len; ++i ) { + setTimeout((function(j){ + return function() { + console.log(array[j]); + ++sortedCount; + (len === sortedCount) && callback(); + }; + }(i)), array[i]); + } +} + +if ( system.args < 2 ) { + console.log("Usage: phantomjs sleepsort.js PUT YOUR INTEGERS HERE SEPARATED BY SPACES"); + phantom.exit(1); +} else { + sleepSort(Array.prototype.slice.call(system.args, 1), function() { + phantom.exit(); + }); +} \ No newline at end of file diff --git a/phantomjs-1.9.7-windows/examples/stdin-stdout-stderr.coffee b/phantomjs-1.9.7-windows/examples/stdin-stdout-stderr.coffee new file mode 100644 index 0000000..60723e0 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/stdin-stdout-stderr.coffee @@ -0,0 +1,18 @@ +system = require 'system' + +system.stdout.write 'Hello, system.stdout.write!' +system.stdout.writeLine '\nHello, system.stdout.writeLine!' + +system.stderr.write 'Hello, system.stderr.write!' +system.stderr.writeLine '\nHello, system.stderr.writeLine!' + +system.stdout.writeLine 'system.stdin.readLine(): ' +line = system.stdin.readLine() +system.stdout.writeLine JSON.stringify line + +# This is essentially a `readAll` +system.stdout.writeLine 'system.stdin.read(5): (ctrl+D to end)' +input = system.stdin.read 5 +system.stdout.writeLine JSON.stringify input + +phantom.exit 0 diff --git a/phantomjs-1.9.7-windows/examples/stdin-stdout-stderr.js b/phantomjs-1.9.7-windows/examples/stdin-stdout-stderr.js new file mode 100644 index 0000000..80a43d3 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/stdin-stdout-stderr.js @@ -0,0 +1,18 @@ +var system = require('system'); + +system.stdout.write('Hello, system.stdout.write!'); +system.stdout.writeLine('\nHello, system.stdout.writeLine!'); + +system.stderr.write('Hello, system.stderr.write!'); +system.stderr.writeLine('\nHello, system.stderr.writeLine!'); + +system.stdout.writeLine('system.stdin.readLine(): '); +var line = system.stdin.readLine(); +system.stdout.writeLine(JSON.stringify(line)); + +// This is essentially a `readAll` +system.stdout.writeLine('system.stdin.read(5): (ctrl+D to end)'); +var input = system.stdin.read(5); +system.stdout.writeLine(JSON.stringify(input)); + +phantom.exit(0); diff --git a/phantomjs-1.9.7-windows/examples/technews.coffee b/phantomjs-1.9.7-windows/examples/technews.coffee new file mode 100644 index 0000000..7a9807e --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/technews.coffee @@ -0,0 +1,17 @@ +page = require('webpage').create() + +page.viewportSize = { width: 320, height: 480 } + +page.open 'http://news.google.com/news/i/section?&topic=t', + (status) -> + if status isnt 'success' + console.log 'Unable to access the network!' + else + page.evaluate -> + body = document.body + body.style.backgroundColor = '#fff' + body.querySelector('div#title-block').style.display = 'none' + body.querySelector('form#edition-picker-form') + .parentElement.parentElement.style.display = 'none' + page.render 'technews.png' + phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/technews.js b/phantomjs-1.9.7-windows/examples/technews.js new file mode 100644 index 0000000..ba7cd94 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/technews.js @@ -0,0 +1,16 @@ +var page = require('webpage').create(); +page.viewportSize = { width: 320, height: 480 }; +page.open('http://news.google.com/news/i/section?&topic=t', function (status) { + if (status !== 'success') { + console.log('Unable to access the network!'); + } else { + page.evaluate(function () { + var body = document.body; + body.style.backgroundColor = '#fff'; + body.querySelector('div#title-block').style.display = 'none'; + body.querySelector('form#edition-picker-form').parentElement.parentElement.style.display = 'none'; + }); + page.render('technews.png'); + } + phantom.exit(); +}); diff --git a/phantomjs-1.9.7-windows/examples/tweets.coffee b/phantomjs-1.9.7-windows/examples/tweets.coffee new file mode 100644 index 0000000..a6c064c --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/tweets.coffee @@ -0,0 +1,31 @@ +# Get twitter status for given account (or for the default one, "PhantomJS") + +page = require('webpage').create() +system = require 'system' +twitterId = 'PhantomJS' #< default value + +# Route "console.log()" calls from within the Page context to the main Phantom context (i.e. current "this") +page.onConsoleMessage = (msg) -> + console.log msg + +# Print usage message, if no twitter ID is passed +if system.args.length < 2 + console.log 'Usage: tweets.coffee [twitter ID]' +else + twitterId = system.args[1] + +# Heading +console.log "*** Latest tweets from @#{twitterId} ***\n" + +# Open Twitter Mobile and, onPageLoad, do... +page.open encodeURI("http://mobile.twitter.com/#{twitterId}"), (status) -> + # Check for page load success + if status isnt 'success' + console.log 'Unable to access network' + else + # Execute some DOM inspection within the page context + page.evaluate -> + list = document.querySelectorAll 'div.tweet-text' + for i, j in list + console.log "#{j + 1}: #{i.innerText}" + phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/tweets.js b/phantomjs-1.9.7-windows/examples/tweets.js new file mode 100644 index 0000000..d3f18c5 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/tweets.js @@ -0,0 +1,37 @@ +// Get twitter status for given account (or for the default one, "PhantomJS") + +var page = require('webpage').create(), + system = require('system'), + twitterId = "PhantomJS"; //< default value + +// Route "console.log()" calls from within the Page context to the main Phantom context (i.e. current "this") +page.onConsoleMessage = function(msg) { + console.log(msg); +}; + +// Print usage message, if no twitter ID is passed +if (system.args.length < 2) { + console.log("Usage: tweets.js [twitter ID]"); +} else { + twitterId = system.args[1]; +} + +// Heading +console.log("*** Latest tweets from @" + twitterId + " ***\n"); + +// Open Twitter Mobile and, onPageLoad, do... +page.open(encodeURI("http://mobile.twitter.com/" + twitterId), function (status) { + // Check for page load success + if (status !== "success") { + console.log("Unable to access network"); + } else { + // Execute some DOM inspection within the page context + page.evaluate(function() { + var list = document.querySelectorAll('div.tweet-text'); + for (var i = 0; i < list.length; ++i) { + console.log((i + 1) + ": " + list[i].innerText); + } + }); + } + phantom.exit(); +}); diff --git a/phantomjs-1.9.7-windows/examples/universe.js b/phantomjs-1.9.7-windows/examples/universe.js new file mode 100644 index 0000000..214dbc9 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/universe.js @@ -0,0 +1,10 @@ +// This is to be used by "module.js" (and "module.coffee") example(s). +// There should NOT be a "universe.coffee" as only 1 of the 2 would +// ever be loaded unless the file extension was specified. + +exports.answer = 42; + +exports.start = function () { + console.log('Starting the universe....'); +} + diff --git a/phantomjs-1.9.7-windows/examples/unrandomize.coffee b/phantomjs-1.9.7-windows/examples/unrandomize.coffee new file mode 100644 index 0000000..841ffc7 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/unrandomize.coffee @@ -0,0 +1,18 @@ +# Modify global object at the page initialization. +# In this example, effectively Math.random() always returns 0.42. + +page = require('webpage').create() +page.onInitialized = -> + page.evaluate -> + Math.random = -> + 42 / 100 + +page.open "http://ariya.github.com/js/random/", (status) -> + if status != "success" + console.log "Network error." + else + console.log page.evaluate(-> + document.getElementById("numbers").textContent + ) + phantom.exit() + diff --git a/phantomjs-1.9.7-windows/examples/unrandomize.js b/phantomjs-1.9.7-windows/examples/unrandomize.js new file mode 100644 index 0000000..2aa2f81 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/unrandomize.js @@ -0,0 +1,24 @@ +// Modify global object at the page initialization. +// In this example, effectively Math.random() always returns 0.42. + +var page = require('webpage').create(); + +page.onInitialized = function () { + page.evaluate(function () { + Math.random = function() { + return 42 / 100; + }; + }); +}; + +page.open('http://ariya.github.com/js/random/', function (status) { + var result; + if (status !== 'success') { + console.log('Network error.'); + } else { + console.log(page.evaluate(function () { + return document.getElementById('numbers').textContent; + })); + } + phantom.exit(); +}); diff --git a/phantomjs-1.9.7-windows/examples/useragent.coffee b/phantomjs-1.9.7-windows/examples/useragent.coffee new file mode 100644 index 0000000..d401c7f --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/useragent.coffee @@ -0,0 +1,11 @@ +page = require('webpage').create() + +console.log 'The default user agent is ' + page.settings.userAgent + +page.settings.userAgent = 'SpecialAgent' +page.open 'http://www.httpuseragent.org', (status) -> + if status isnt 'success' + console.log 'Unable to access network' + else + console.log page.evaluate -> document.getElementById('myagent').innerText + phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/useragent.js b/phantomjs-1.9.7-windows/examples/useragent.js new file mode 100644 index 0000000..60f537e --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/useragent.js @@ -0,0 +1,14 @@ +var page = require('webpage').create(); +console.log('The default user agent is ' + page.settings.userAgent); +page.settings.userAgent = 'SpecialAgent'; +page.open('http://www.httpuseragent.org', function (status) { + if (status !== 'success') { + console.log('Unable to access network'); + } else { + var ua = page.evaluate(function () { + return document.getElementById('myagent').innerText; + }); + console.log(ua); + } + phantom.exit(); +}); diff --git a/phantomjs-1.9.7-windows/examples/version.coffee b/phantomjs-1.9.7-windows/examples/version.coffee new file mode 100644 index 0000000..ce20269 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/version.coffee @@ -0,0 +1,5 @@ +console.log 'using PhantomJS version ' + + phantom.version.major + '.' + + phantom.version.minor + '.' + + phantom.version.patch +phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/version.js b/phantomjs-1.9.7-windows/examples/version.js new file mode 100644 index 0000000..49e41ed --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/version.js @@ -0,0 +1,5 @@ +console.log('using PhantomJS version ' + + phantom.version.major + '.' + + phantom.version.minor + '.' + + phantom.version.patch); +phantom.exit(); diff --git a/phantomjs-1.9.7-windows/examples/waitfor.coffee b/phantomjs-1.9.7-windows/examples/waitfor.coffee new file mode 100644 index 0000000..90773c6 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/waitfor.coffee @@ -0,0 +1,48 @@ +## +# Wait until the test condition is true or a timeout occurs. Useful for waiting +# on a server response or for a ui change (fadeIn, etc.) to occur. +# +# @param testFx javascript condition that evaluates to a boolean, +# it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or +# as a callback function. +# @param onReady what to do when testFx condition is fulfilled, +# it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or +# as a callback function. +# @param timeOutMillis the max amount of time to wait. If not specified, 3 sec is used. +## +waitFor = (testFx, onReady, timeOutMillis=3000) -> + start = new Date().getTime() + condition = false + f = -> + if (new Date().getTime() - start < timeOutMillis) and not condition + # If not time-out yet and condition not yet fulfilled + condition = (if typeof testFx is 'string' then eval testFx else testFx()) #< defensive code + else + if not condition + # If condition still not fulfilled (timeout but condition is 'false') + console.log "'waitFor()' timeout" + phantom.exit 1 + else + # Condition fulfilled (timeout and/or condition is 'true') + console.log "'waitFor()' finished in #{new Date().getTime() - start}ms." + if typeof onReady is 'string' then eval onReady else onReady() #< Do what it's supposed to do once the condition is fulfilled + clearInterval interval #< Stop this interval + interval = setInterval f, 250 #< repeat check every 250ms + + +page = require('webpage').create() + +# Open Twitter on 'sencha' profile and, onPageLoad, do... +page.open 'http://twitter.com/#!/sencha', (status) -> + # Check for page load success + if status isnt 'success' + console.log 'Unable to access network' + else + # Wait for 'signin-dropdown' to be visible + waitFor -> + # Check in the page if a specific element is now visible + page.evaluate -> + $('#signin-dropdown').is ':visible' + , -> + console.log 'The sign-in dialog should be visible now.' + phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/waitfor.js b/phantomjs-1.9.7-windows/examples/waitfor.js new file mode 100644 index 0000000..6c5ecb8 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/waitfor.js @@ -0,0 +1,57 @@ +/** + * Wait until the test condition is true or a timeout occurs. Useful for waiting + * on a server response or for a ui change (fadeIn, etc.) to occur. + * + * @param testFx javascript condition that evaluates to a boolean, + * it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or + * as a callback function. + * @param onReady what to do when testFx condition is fulfilled, + * it can be passed in as a string (e.g.: "1 == 1" or "$('#bar').is(':visible')" or + * as a callback function. + * @param timeOutMillis the max amount of time to wait. If not specified, 3 sec is used. + */ +function waitFor(testFx, onReady, timeOutMillis) { + var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 3000, //< Default Max Timout is 3s + start = new Date().getTime(), + condition = false, + interval = setInterval(function() { + if ( (new Date().getTime() - start < maxtimeOutMillis) && !condition ) { + // If not time-out yet and condition not yet fulfilled + condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()); //< defensive code + } else { + if(!condition) { + // If condition still not fulfilled (timeout but condition is 'false') + console.log("'waitFor()' timeout"); + phantom.exit(1); + } else { + // Condition fulfilled (timeout and/or condition is 'true') + console.log("'waitFor()' finished in " + (new Date().getTime() - start) + "ms."); + typeof(onReady) === "string" ? eval(onReady) : onReady(); //< Do what it's supposed to do once the condition is fulfilled + clearInterval(interval); //< Stop this interval + } + } + }, 250); //< repeat check every 250ms +}; + + +var page = require('webpage').create(); + +// Open Twitter on 'sencha' profile and, onPageLoad, do... +page.open("http://twitter.com/#!/sencha", function (status) { + // Check for page load success + if (status !== "success") { + console.log("Unable to access network"); + } else { + // Wait for 'signin-dropdown' to be visible + waitFor(function() { + // Check in the page if a specific element is now visible + return page.evaluate(function() { + return $("#signin-dropdown").is(":visible"); + }); + }, function() { + console.log("The sign-in dialog should be visible now."); + phantom.exit(); + }); + } +}); + diff --git a/phantomjs-1.9.7-windows/examples/walk_through_frames.coffee b/phantomjs-1.9.7-windows/examples/walk_through_frames.coffee new file mode 100644 index 0000000..1838fa2 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/walk_through_frames.coffee @@ -0,0 +1,66 @@ +pageTitle = (page) -> + page.evaluate -> + window.document.title +setPageTitle = (page, newTitle) -> + page.evaluate ((newTitle) -> + window.document.title = newTitle + ), newTitle +p = require("webpage").create() +p.open "../test/webpage-spec-frames/index.html", (status) -> + console.log "pageTitle(): " + pageTitle(p) + console.log "currentFrameName(): " + p.currentFrameName() + console.log "childFramesCount(): " + p.childFramesCount() + console.log "childFramesName(): " + p.childFramesName() + console.log "setPageTitle(CURRENT TITLE+'-visited')" + setPageTitle p, pageTitle(p) + "-visited" + console.log "" + console.log "p.switchToChildFrame(\"frame1\"): " + p.switchToChildFrame("frame1") + console.log "pageTitle(): " + pageTitle(p) + console.log "currentFrameName(): " + p.currentFrameName() + console.log "childFramesCount(): " + p.childFramesCount() + console.log "childFramesName(): " + p.childFramesName() + console.log "setPageTitle(CURRENT TITLE+'-visited')" + setPageTitle p, pageTitle(p) + "-visited" + console.log "" + console.log "p.switchToChildFrame(\"frame1-2\"): " + p.switchToChildFrame("frame1-2") + console.log "pageTitle(): " + pageTitle(p) + console.log "currentFrameName(): " + p.currentFrameName() + console.log "childFramesCount(): " + p.childFramesCount() + console.log "childFramesName(): " + p.childFramesName() + console.log "setPageTitle(CURRENT TITLE+'-visited')" + setPageTitle p, pageTitle(p) + "-visited" + console.log "" + console.log "p.switchToParentFrame(): " + p.switchToParentFrame() + console.log "pageTitle(): " + pageTitle(p) + console.log "currentFrameName(): " + p.currentFrameName() + console.log "childFramesCount(): " + p.childFramesCount() + console.log "childFramesName(): " + p.childFramesName() + console.log "setPageTitle(CURRENT TITLE+'-visited')" + setPageTitle p, pageTitle(p) + "-visited" + console.log "" + console.log "p.switchToChildFrame(0): " + p.switchToChildFrame(0) + console.log "pageTitle(): " + pageTitle(p) + console.log "currentFrameName(): " + p.currentFrameName() + console.log "childFramesCount(): " + p.childFramesCount() + console.log "childFramesName(): " + p.childFramesName() + console.log "setPageTitle(CURRENT TITLE+'-visited')" + setPageTitle p, pageTitle(p) + "-visited" + console.log "" + console.log "p.switchToMainFrame()" + p.switchToMainFrame() + console.log "pageTitle(): " + pageTitle(p) + console.log "currentFrameName(): " + p.currentFrameName() + console.log "childFramesCount(): " + p.childFramesCount() + console.log "childFramesName(): " + p.childFramesName() + console.log "setPageTitle(CURRENT TITLE+'-visited')" + setPageTitle p, pageTitle(p) + "-visited" + console.log "" + console.log "p.switchToChildFrame(\"frame2\"): " + p.switchToChildFrame("frame2") + console.log "pageTitle(): " + pageTitle(p) + console.log "currentFrameName(): " + p.currentFrameName() + console.log "childFramesCount(): " + p.childFramesCount() + console.log "childFramesName(): " + p.childFramesName() + console.log "setPageTitle(CURRENT TITLE+'-visited')" + setPageTitle p, pageTitle(p) + "-visited" + console.log "" + phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/walk_through_frames.js b/phantomjs-1.9.7-windows/examples/walk_through_frames.js new file mode 100644 index 0000000..35c2bb9 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/walk_through_frames.js @@ -0,0 +1,73 @@ +var p = require("webpage").create(); + +function pageTitle(page) { + return page.evaluate(function(){ + return window.document.title; + }); +} + +function setPageTitle(page, newTitle) { + page.evaluate(function(newTitle){ + window.document.title = newTitle; + }, newTitle); +} + +p.open("../test/webpage-spec-frames/index.html", function(status) { + console.log("pageTitle(): " + pageTitle(p)); + console.log("currentFrameName(): "+p.currentFrameName()); + console.log("childFramesCount(): "+p.childFramesCount()); + console.log("childFramesName(): "+p.childFramesName()); + console.log("setPageTitle(CURRENT TITLE+'-visited')"); setPageTitle(p, pageTitle(p) + "-visited"); + console.log(""); + + console.log("p.switchToChildFrame(\"frame1\"): "+p.switchToChildFrame("frame1")); + console.log("pageTitle(): " + pageTitle(p)); + console.log("currentFrameName(): "+p.currentFrameName()); + console.log("childFramesCount(): "+p.childFramesCount()); + console.log("childFramesName(): "+p.childFramesName()); + console.log("setPageTitle(CURRENT TITLE+'-visited')"); setPageTitle(p, pageTitle(p) + "-visited"); + console.log(""); + + console.log("p.switchToChildFrame(\"frame1-2\"): "+p.switchToChildFrame("frame1-2")); + console.log("pageTitle(): " + pageTitle(p)); + console.log("currentFrameName(): "+p.currentFrameName()); + console.log("childFramesCount(): "+p.childFramesCount()); + console.log("childFramesName(): "+p.childFramesName()); + console.log("setPageTitle(CURRENT TITLE+'-visited')"); setPageTitle(p, pageTitle(p) + "-visited"); + console.log(""); + + console.log("p.switchToParentFrame(): "+p.switchToParentFrame()); + console.log("pageTitle(): " + pageTitle(p)); + console.log("currentFrameName(): "+p.currentFrameName()); + console.log("childFramesCount(): "+p.childFramesCount()); + console.log("childFramesName(): "+p.childFramesName()); + console.log("setPageTitle(CURRENT TITLE+'-visited')"); setPageTitle(p, pageTitle(p) + "-visited"); + console.log(""); + + console.log("p.switchToChildFrame(0): "+p.switchToChildFrame(0)); + console.log("pageTitle(): " + pageTitle(p)); + console.log("currentFrameName(): "+p.currentFrameName()); + console.log("childFramesCount(): "+p.childFramesCount()); + console.log("childFramesName(): "+p.childFramesName()); + console.log("setPageTitle(CURRENT TITLE+'-visited')"); setPageTitle(p, pageTitle(p) + "-visited"); + console.log(""); + + console.log("p.switchToMainFrame()"); p.switchToMainFrame(); + console.log("pageTitle(): " + pageTitle(p)); + console.log("currentFrameName(): "+p.currentFrameName()); + console.log("childFramesCount(): "+p.childFramesCount()); + console.log("childFramesName(): "+p.childFramesName()); + console.log("setPageTitle(CURRENT TITLE+'-visited')"); setPageTitle(p, pageTitle(p) + "-visited"); + console.log(""); + + console.log("p.switchToChildFrame(\"frame2\"): "+p.switchToChildFrame("frame2")); + console.log("pageTitle(): " + pageTitle(p)); + console.log("currentFrameName(): "+p.currentFrameName()); + console.log("childFramesCount(): "+p.childFramesCount()); + console.log("childFramesName(): "+p.childFramesName()); + console.log("setPageTitle(CURRENT TITLE+'-visited')"); setPageTitle(p, pageTitle(p) + "-visited"); + console.log(""); + + phantom.exit(); +}); + diff --git a/phantomjs-1.9.7-windows/examples/weather.coffee b/phantomjs-1.9.7-windows/examples/weather.coffee new file mode 100644 index 0000000..d8da90d --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/weather.coffee @@ -0,0 +1,29 @@ +page = require('webpage').create() +system = require 'system' + +city = 'Mountain View, California'; # default +if system.args.length > 1 + city = Array.prototype.slice.call(system.args, 1).join(' ') +url = encodeURI 'http://api.openweathermap.org/data/2.1/find/name?q=' + city + +console.log 'Checking weather condition for', city, '...' + +page.open url, (status) -> + if status isnt 'success' + console.log 'Error: Unable to access network!' + else + result = page.evaluate -> + return document.body.innerText + try + data = JSON.parse result + data = data.list[0] + console.log '' + console.log 'City:', data.name + console.log 'Condition:', data.weather.map (entry) -> + return entry.main + console.log 'Temperature:', Math.round(data.main.temp - 273.15), 'C' + console.log 'Humidity:', Math.round(data.main.humidity), '%' + catch e + console.log 'Error:', e.toString() + + phantom.exit() diff --git a/phantomjs-1.9.7-windows/examples/weather.js b/phantomjs-1.9.7-windows/examples/weather.js new file mode 100644 index 0000000..2b4e611 --- /dev/null +++ b/phantomjs-1.9.7-windows/examples/weather.js @@ -0,0 +1,37 @@ +var page = require('webpage').create(), + system = require('system'), + city, + url; + +city = 'Mountain View, California'; // default +if (system.args.length > 1) { + city = Array.prototype.slice.call(system.args, 1).join(' '); +} +url = encodeURI('http://api.openweathermap.org/data/2.1/find/name?q=' + city); + +console.log('Checking weather condition for', city, '...'); + +page.open(url, function(status) { + var result, data; + if (status !== 'success') { + console.log('Error: Unable to access network!'); + } else { + result = page.evaluate(function () { + return document.body.innerText; + }); + try { + data = JSON.parse(result); + data = data.list[0]; + console.log(''); + console.log('City:', data.name); + console.log('Condition:', data.weather.map(function(entry) { + return entry.main; + }).join(', ')); + console.log('Temperature:', Math.round(data.main.temp - 273.15), 'C'); + console.log('Humidity:', Math.round(data.main.humidity), '%'); + } catch (e) { + console.log('Error:', e.toString()); + } + } + phantom.exit(); +}); diff --git a/phantomjs-1.9.7-windows/phantomjs.exe b/phantomjs-1.9.7-windows/phantomjs.exe new file mode 100644 index 0000000000000000000000000000000000000000..78fdcc3d6b37c6e8f9f1614f07eaa3dc45792246 GIT binary patch literal 7009792 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
    *u1$dBaJRoESf~g=O+JlBC3T~#a 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øvsGp_7D`d5_Bhy?qx)Qsg=v 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 z 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�KiJXEETxX-ND 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%0A2TId~+lnqVHofdTgOf7?j)d ztTOCXfTMToPqHH!XjM|a4N*$f7|i1Bu40BQ!+!GN?{=;JK~Q4Je~7)A z#qz{s3K=h3D#vDX&R17!-iPsL>=4SN{o8VZJ8ApqIzZ&0dwe(i;)`n-Boai&JnzT% z;x{twW<69@+lac(z?VsCZX{%(H^hc$jQJMn2J#@z_8gYJQcNb-wnaKoC<;_6jV8rw zi?p(06x2S`iW>A#@EB*Y3~9NResSdyCEnfSn=QMF3v9ZCCD><3Y#h{t0FY4M*(4xHsn3|wwDB%SMKof!=Po&tIzUT~|#cUNhf zRW$JAs@80XKHe^y+50$HK~K`j~x|2S90V;>HuG^+?edFgmx>p9On z_$qBDXCjAZ#n9XDvvhU|z-p!B@Jb-8`C-_Sp%0di@**(sxnSbb zOwevq-_sa|Dvldg--g5E{ov7`^bRg828Z@q%dvwF65M$u@)xMp`WfljMyc=`wqIg_ zm@=m21)O#`Zx-eV?wtNDCx}V?g`*OhJ|JG7d|>t&1v?oD z>*HGP7LITmhf2SSF(g<+HAvX1p-=lPOLnKDTTBpw_yLCO6$yxkgH8&(Y^Z_DJMN9C zjISU6H1^6*=>D`Qlw#*W$6xNrrpzXH7aM*wh$<{wPbHvVL=OD4CKNt~%JzK0Vnj@ibsrO*PC9KwQ3@u_t$#6h1KM;>+d7U60?|Lv z(}5V^U0X)UQAS2RRg!(C6nI{5)wnfTFI~R9pa#I*{)!<-9KG(fo3AR|nH!&cC1Kgq z=HAeo6`~x%7Zn`;Jn?#wj8A3*Cw- zIjo524gA5<_mQ&i8SwJ|J*5Yv+H9Yf%b=t!t z$Iay(%P;7h)cJfZN0v53S)s^W!#P7L=;*=y%r>~2j|?~v($FfJeII~3D9j>o?~^WD zAKXbz!Uf;@QtWC_(6VtdM9 z27bxi{p~U;2rv&{!h;j$X|wm4z8zxrZfihVmWSJGW>mSxI8a(r9YP>MHf1#E6>eWK zeZSQ#VE(}7d|OGWvm-Bp-jp0I&+_tLQ_uLTGCj^jq{}?b))I?aa1##ygduapY_WRI^IgA{%!g1ht363GvRsMTmr=TWm{p)}bO-(o*vFXRH6epk<^<26AXMHgx zT7wxyz#FnOqF&l(&n-Y~1b7&*Cxa#b2tnu!IlSj)O9lX+6Q2{0nZn%1d*#GKriL#W z&YrR%w#CVafF}7*@`DzmkXD&D_u@>27#f~>#vApFPiVZ;cp;5>!} z?Pu2DHSrbv8LCY9^SO2F0iLB^^he`{K=_=+^npuRX-vQ(Es7%AU08~7@Nh8QGoSO0 zi&gOQLtXddJSlMw>uvP`z7zCIg@|mz_chdPK;5<47V*Sdh^+sF8!LN8;3!rG!LkFT z_xLdx=PWCW7n^706@&i%pkt|1(`Q+3;F$xyqJjb~w_EK#H3G3$I`;mHIfq!D4m<*J zqXiVqn2Foqx?4EkoU!Sj{Vk=B-MWtzH%O^cmGHv(_%aS~wx}5cJ14Cs#Uh8`Ll0Zn z64DSB!C?H}y>`t7cHi@un~%`~){&h%S0R1!;U6qQDYF2qT>)MxSfH zB9b4ERHC(80loq0QsI?P6#OUA%8Y5@BmG_y6ckAOq09K7W+FTE6HnA^1XqPg@CS+zvwf{5Yc4is2Z=A!P~V-Q4!DPruI=dyCdA zk$|9a-9w6#`fjE|LPNckcN`s3x*bILEBLfAa&K>46|us*gD&4JM!aw_wuJ~XG3TbgD>gvM3kIuF! zAa7HM5J_5P0hKaa`wU_>LWR(*o-xL98v&<@&w}vC-A$Bf!LEh#sLAj)+gW;WMl1cN z$?ycAQNa+vGzwaa%99MRl&JF-t3QqMV~o7+#U~Yyr&gQ=wwb!SL$Jecwg+A_46Up4 zQ4b&%fy!rhYxEr;Q7ehDqGLiux<+(sS67qarne93ReYGAiP^BuK3`VX zaXttCu97Rnufmd$8-gGBmbh{+U>fng?zs8k=AT15aEQF`6zrRl!=@VShC<;|iwx_b zM&3_&O7}k|;tRFb!9qPybqjxje*d_Gp$8YSD@K8*`$?L)3|4oE*q4EQ;~gtYG>~Zb z5-|FTd!^$f>g6~p^up25At^z93=Fu=e@rvSkN&t%z^pYp9*CZQlrEuUsq30^+O0`0Yd^Mw%A0CxSOZ*);g7_8jlIFM} z0B3H%X&c}dG!GrkGaoE3Kxu#rU{&qq@?zMe!*SrceC+0@1~|=MuC>BrNN`rCc4{R?>YYfT5+@9KEm!0w=;4<7)^<%W^wD)9Jsl3^|Ac~w2JtLNAGIB^t0NG~-4L)I!Un<0+hoa46aryBLx4hBSZvvcu zNGOSFCCRge;{^_e!mj{|9Q)J|Ys#H+$?D+457*We|6^!cl-RQ$aHehHS5Oo#X;JsF zx81pKTnMBCl{xgl5OAJ-;Q15icsL~Gt4qTT3;qBPoSX6EC#rinR4znfXGtCT>@>F5 zV3Z@j+$ZmM;nUITB{DR9{5u^!?=6UAyKF$<(adB+x%$!%$})3>$`5o^X}~@D{NM&g zZ$9fme?!lI!{80YS@geuWnTKhYRTqb5pc=$;cLg{cctz8{|Xnzz7uws%pX3#XY5$) zA?VbM!@%iwQisQ4r96>CLMiG;M$T+~#Mo0IEg)P5!H`%7LYWoUFy0#aq?kNWM12k#*M`JFo5IN4IYC$B;i zwwToiEsz_5o_EqJHx3*50HPl3Oe{FuKpVsxFAZ6nMea!rbBxN5w5(5xeT8#WEJ;q) zN6}A!_TLl~afd{1N8WLC{`6@1q(#rybmW?z>^5qxh<|z(5tG_$KiUY&+sGDW7lGct z_FeA2lo|Or;1oQz=7UId^}6?OJ|RJlkFnw!Rx3!eB2vw#4B27dvlD?QZJ#B3PGuVc-E4E=~N4$kgcmu>|=a!pEvHx3q?xhV$i3erh$qnhB4{*iTm$< zI)huV<6A_md`^()9>h^uUr|Z#%$%CsXH5m3lqA5u;+R+ZJ$O|e5=e7(gX}cfF^~Y_ zg<$#w+MEFcodFe(Ds$AqsRJO$jwfQTSkpHYZtx44qaxG9F z^`T%BFq*l zE9G}u#~_G~>&!JGzZ0MpSXz`vJa9FV43UA`vG|%i&H%^NBIIDys?1VRKEK(K?A&|& z@7lh)>J4)#V@iIW+!w<`Szy`W=1C;(r~v3?;(%lMmXc~0^6artE2WUvO1Gn+D6=cF zk#Fz4zGbVUiuu{kPdv}PV%3v=TVBI4m#%hQv?K+?RK{7JYn4b|Zm=1QV^&FbWp8tr7P&&~ z+(~*1MT$l7;ib^47Sl!66dbNks&s1O$cXv)Nb_4@xuv??vxl&27~BQ1;}RoSgVUEf zp{Ftq%&b&_CK>5BNk;2ptg$4a9|w;P2FZJzFtac9cZ4Vu%63JlfPHDeTbN!3-XKJc zP88r82{hgO5E9(qchYr#Yp+3DDYv5N`Qm=wXne3 zH1ga3WKVgCq_(|-aIzPbvyZ}gYwElwY3Fk-4`bA-R8O}{TD@{N5NFuWkY7QB$ce9D z`n3UISp}u#V9g!_BWmQ6`W) zj!rs9(49XQN7v3XSSyvYy9(WBXkE(HR?~xV#MTB6vXCDlvOlB*D8lI6+MX{$9^3)F z3GbXwX@2fUfftQy2aacZeh92eccaiup0kCxl!H@3%MNp?ueFB%)n4}fN-Uv+Hcu$+ zq&kC~Wu7khk_u7cnXpLJIas^$G!*^@r}`;kPWoqOJB9wNf}_caOGdsA#dBv%4xF;i68<#rsX zm*GBc?5#xK&HtN5-ZQmM-NR8Z9|TP-Ac>;Q;=PD1f@fR*i*-Rr|I4gNe6i@UnK=RC zSn3lud|g#x%iU(g25ZZ*A{|Uwc1&%FySaUMB+<1{u-@i-rlH|)O${2`g!@zJHQb!7 zgJ5eH0m+6)wz>dwaxB%?|2&iaE+FG1ndKGR@C@(ArNH9TJJTPoI6B>{YhyO^p za!23&We{&=$;M_Wy>;fgu|BE9b(#As;3zb0Lor4L1i{wNu0!s++$L+ztQ0WD?_^hr zC@-ag4tL{KO?*{jk9M~Z45M|5j5|GKQRQ(q&h&bFcgsp;TNe}$D&aXne!}5T9Zq-@ z)S-{C+>`WO2+o81!+$)8?{Es5cZ!7zy&AQ~1ZD;`{0F3!?_%Xm9fmZvRJHhYPT*fDU%Kn8T1*BfkO^4fj02Su>(0~=Z$1@Wb7>`Hr*Dj& zwfU`1xtV@-1Z^KM(!O9qNDN~@=-ASv=kSx-A;%=XbLSNX3WaPsDUB`Jc)f|VePf%~ z=?Ou@LPv`JaHWyGR|J31)r5C%Br!#<7J=#!-FI~xM?cD7M@xGSr9Urid0B#8b;a;=&(`#vO~P{3Fm>`$?s+6d&jxU*MoPLlZZk_*4;hl03c>lkHVfn$*mJe z95vm{%R&vUyp|6$cdU8&DYqgZ@hG^l1OkfAk!Etka!S9=*1Ai}qHuEoOKgV$(|MN4 zRZBA%z#+w@z|3Xn7s2kiNPlj}m!jREGX{(bM{7&x8!{&MP4%_KgVW99j$P_1v-%~J z(JD4w^w(4kko9*2BiI}2d3|T}G#>!;$z+uJ+uOZ%a@NsnAz**^nROQb)b!zytC)G; zX+i!-s>Y)y=roeNd}dCYcL-(4BzDr_#I8*uCJme~u&FU!!nOe|jBqW~Z~CP#J89ZK zSOP_JqfQY%TI@4sT={c_O`ZyQ1`$sxN|%lW#qz^p<4!e_Oj3-^IH3wT*2o8gTiI4RR)TI?;#k+z>a{s}VlORtGzWrw- zf}P`Y$XskDc|o6KZr1EZ?Rg2yO#Ucve5)Ph=lzMwbXR2p##^HgxxR!ef#D|s#E=aC ztSqWfnTrVrbGv6o{;>&BlZk;EA|3&@99aBn!Jx4^dRk}nti@h z&OmhDx39C-8GD024Gu;Da~fcT(?B#D;PMR<$b6flXqiHlS)4UOTCZ6(D1S>ReQzm) zlzFn}0j=~fOFkDcr@xBC$;tW&j|1W9vYT;d83}z29kEe`z=lZ!goga+cm?*@K)_cN zw3sy(bj!Nyg6`TGv{!{hc|5^=V84@)d%)ljTSO>4=8gI2nyOaWp&OSf5W&h02y&q^ zKjo8X_KXN@x=Z&PUENF7f@463O)CkCKaY$oj<(Od9dr3Qdurpm3fmk3N#3UY{-@=N zQZ^L^F|kW;X3I&vHg@Z~?!%mIE>+K1R_}KCMHyB0Fa*-w6?p9xoSOpF-jagh9jg?c z&O3ut6+qfv;>k}Od`iS+|3NsUr9BIN-3dJR=RuBgp#xAXl3lAk#gPWZaM0ib!?(`$ z8~+SXl=wbL`4ur^_WL)-xX>La#^z{;8&7hSRKdTDul|hZNI|%G!83`fe=Vejjzf(( zkgKm`<=>#ZoQzjMq%j3{HL_1e*jB>Ad93J*2c{c;1fkb_api||3ec7=SO_s;P4g}! zm**Z?_{^6rnoecQQAhaB{`?ddq5-tFqI2FA#6)ROWj|(fX^o?9b=SEXJfLsSb^Q|* z8B8%XN+k}_eorVQMq7n?AUO&}fVty2A-RQ$qTVWS|IF*9)UfuFMNtMj%<*Vt z<{2BtX{!A%7v}fRg(%UYlX8Z*N2Kxt9RC1Op#RN=@?><01sV?q(i8(rvrRL={vk3zwFKnZo_i0PGvW{Fhu zpNecmApo+F@!Q~&{&#a<@P9!AKphU|s=3{cUa5st3PX{lpBA|9s8gV+1K6liP0ml7 z8KKHO8n8$7mp#D}sc<(eK?oy3!ulmH%cOM?%msTT4P6I}hv*QX!W*O$&qN@=8en7n z$4_xcaxP&-*s)odxA|0~GG#2+^}@wK$YliQP$9;Ie&@@Ny+S_=6CestJV4_f=M7}4$*81)Z$Sq95Hx2Vqjco5F zp<-Sk-!xm{E%@^_;*a4HvZw5+&1``J(RdSb? zt~oT<#(;#2Dl@L&fSbw38MJP(Q%qxv8k0P0lx9W~FNb8SVdZll!aNP6edd%5g)$f> zKaTKqufh@?Qazx|SK*L9v*ZjV5eN$HG)s2EVE;cJ{^ZJ&i6jy6_9OiG^iRdMZKkq+ z!At)%fG)@Z_m2RiLMnx(?sAwVEB*xHYjKomox+{hoYH8w=gEnEaN&F|kWCmbxH++; zNZnWD;J}8+o_*#(N|Kr4)Vq|vdpI--*B@-7jzS;F;ktlKErKeza~(GO zcSVrx%mTkwU%U*o4n#Be^cLUh?0!{}3J1<*4zIly7&&C8p|g=~#=L&ET9ol=G8N1+ zrkG=F^D(OBK1l*;-&jdfm?2#M^M(5YPV#LWWHxxA0TvE}i~W9i`;53ln6ZwLo?*Lxs?}Yek<=X5RGW^SLLx zX-?dD8*t4&Hy+a3A=L6;Vx*gL*RFJg@E;{kK*@>swtH+d##@<=TUNsV#I~xUF;^+N zCjSx{QD=O`{DkQes6Pz?r$)gVQ&~f>WNiH1uZhJU>VvbLC#WJlze~Fm=X8m!utQHS z@P?M3i=z2o@ZQKeft-759g{3JvyEGBQ?+^g6q?nwhm3HF6|MKf5%Rd?i7jTx#5J?Y zr0K5whVCb?AkM}mF$VmF5qr57|LBRl>DnPLy=U;B5z5G|wi!f-(%|5V5O4Wy)>5f6 zpKXmZ=fM@IyZm>CpNz$tpbAyR)luW8w;zas5E`iVd=NgsO1?BWC=hT=UgNd9gkZSs zBd_@AFP;x0gJjO2G>r(SIgBvKDmRte|L5Gu4=MHMsFp zkXI1*{Ri73>z@V91~xPE9&mZP{v_#L{PY{)c*I5-N{yJw_fCZmOTsI@zm_5DgGDai zXpLNEvhW@-)_D>!+dpS;QVHbb-p*MbygfC%#LyOK!N8?|tsnp2mcZY3n{qJ2zjtJHT7IV?EAAL6DG5T zeWw?8A

    _qxX*jXQ4D@@{9b`+b8F6@IhDpJn{dS_(qg25_6R-ri#Yafu1cdI?5%fzpo4R**BQE-mGx z*FqWrSak%u}uMRe$;@;^r)1xMas%yZ7xemSAs;6bi;OU5jRrT3F) zUyChtj)^QiNPXR78{Bkj{fnQ~h(B@&WM$5NfA%HJ@7K3~O*Od0j~ZqTL0LONJ2nBvrG}y(vJRjvYOhu|}e7f#%xB&AVT~wu1S8!0VyFX^x<+q;OPvJNT!7l7% z8W2EEMqk<6$LYf4cg4$M_0D9L{U=mnsF1eghauz*)xfq4paDuK zHlS-F`7MEsCrn>hvTBm3g86)*7M)NZx6uPI$Pfcfv>R>LEpWm(dDW~9W+xP=`z?dE z5U%;syw$Aa2zOn`DDxe-CkJWZq=IXiic}U^7Hh|1l(*s=k_}O(o%8H@?WHkkE)9?` zc71)oRf5KSCMx-NoOz$^g(9kM%om8sXCuKN;tNtK{G}h^b_T$C*!QDP!rHrpToaHOuk7uZM2n7e zA;Dlcs>cZ&3L|%0oqSYk+A zAAEiTAEBbjc%hHRt%%|eSCtS&1%Pc~LCb+NTr<~o{G}ZIRepHy%Msxwf%Km{sy!~g zwq$49A|bmtjF!tbT5({t9EaN4K=gkPX5EjFdQ^I_C#PyT{959MRJf494kEq~DMviK zKJ>~|k^S;u*E7ODF*b}V+H?#lPO1nPnw@?ren-(AHuks8O2(P)+eP4VLX^d$cH3PB0^nd^#o zEp9&fWdx59dm#?`fdmn;R?UGstyo{K{bHU3=d%wz1F8g0ocs|%xcOp zI~&+t7UP74-JTDPtr$R?YKvU` z)f`~u=o&a4?-w^Iy{6h{*klu&z*d9w19I_l-f)W|uT-XZ%#CPvKD^ph&m<7jvf~G% z6!Gb5PCjvPu=27++Xq4&!pr#>KE7_XmcHl;Rd@VQ2%Uai>o$nUcOCn9^ulF2dR7h8 z5f8;4YT@%@9|&{`MB&Z1aMuBFBX>JGU*+C*se2TiLvz-z+XE zn!Qr<4k@QxR>faj%~cv8(zF^8mvH>gEFf6>%ffkoGN~5{szDIx$XmY$t8no$I80H9 zgT2)O(RineIbJy|*jV;k0lV7N@UKXnI<@9jl>yT^WVTewPr(?h>(Yav3vWg=to}@4 zONRtB7@Ak}P8}M}n!1GcP&gTlD0OHZqVb_9nEC?p-ji^L?iX)d_qE(aTwjQq=+*)E zv8-3Acmwy)ByZB74{rc{S@#y`tmeF<#*jA&{#_aO>MAlbx&hT&AuR9oWrfFvA-u! z@H^k7cj-^jwuKvL*KRN-X=BCd3mtng^i{cZC8m{S5scCrt3^X@^71uMZ|u%FqPmd0 z$s<987UqpeVSyom5LHHev_*WvY3D_0?|68{-OV33mW`GQ8bboT4waU~HN2y3OMXOI z)ci-IK=hsp$2>-7Ic#QT761p>#~(f8Ur=VqGH^mAu<|xbLMD;C3P?epc7$iC*zN$B zju3l62fm}2JbLNrGA$>^37%o7XGWIw6<6KB88l2+b6j-$yuf~qf;DB}K)|_oJ ztusL9r7jB!EStEfs_kOSCc!EAWh|!7&$%9j#-LGD#jN6e_yF!Mmyl(?u4+;}#2d3E z?08)(mZ_%_v&mOPmsviOL-e~u z262xGQ(X%#Rzv$>4ioi3aOqnYm0DbHrgMACY?lZSGP-?hVyw&j7pi5U@`=|uUlKFY zF@k&+MBzz11FWi)8uLFcCvFx*m25^?GvCzs%kM|~F_K<2?Wi{#+f#}JSc|m2EmJWs zd*$9Q_kQATvzg-qB`o+$8|Bhg><9MYErKD?Cj7B(zIK+3^*M1;bN0)qmE-p7na+`h zNx~*a|5Kz}XZ}$5W1Sl5^SHnek;vG1hsG%9Du@#bo^riK8hYZ=hi@zcZIqrSdDred zm<`Wnu~_f|mXrIIh?9Yr74tVaTgh7YU@yo<0}DxDKAF0jD~mkh3bF4~(xeBqL+qC` zvKh2DWVGSoGmQ7Jlh>27^%uChGqP2tft<&7)2s0R<(2E znER(iAgi<=R3vmc`*_bcc!bb#OpYy*MEx#6&5*#xf?ZG$nD8E-QO7LWaZdb4Woe03 zHyHwoI`a`aycckzR0wI(7s!NNyK#i(2>am&D_zL_k0rP*DR(w`Is)eX-LkYSqiQH= z>YhN|#0n>%fK?lD2nL(pKOm>>>f$tA<`-7aUzSHdgwZ1pOawDVYYtCP% zeh}B}@{Dl&3vh;VlwS%5oePZGSI;M|=xcdA)NzxEBy-F{a7g?@1T~_s%n#rUH~lNl z1}$G{JBBC_m-t?-T|}07WN_KO`kP;X=HkJkr!}@TlQDF5;K(ex@DBE zrJ}wdk|4i+7&>d9(=QFMSBRnKV<-WAJt`zEwJ``Opld@XCL}U6xuepLyftM@?DhEL z?N)A+r}G~Zf)SiA$!OYxDQa*}0PshV*3NxDP7nR&>}*IYODu6ywf4xqgU{0S@*!HB z&-Lx{%K*#NtNwO8DMM9jpm4{pTT`Ht6PwtKN)kve{Ey)Hfawm`+*nb)(Yg3i`nc_H zta@oT+o8_QnIzYH>A`Docn%|PTjQ^{XFd6FK`-dyD#Pnk1@S?sUw_1M%VlZl7lgCE znR#It?CA^L89_Foa{*OEZ)akcT8%Wf>lVLG=O-zkuGCvqtB(&`J#;I-0{Lb!Qs58b zz9&2*SSPLpM+DWl+Iu+><1Og_Wwd_v82^7?q+rbgaksanjd2v8wum_43tpnjSxW5Pr-ZCp^#DrJvNON)AiX2|8C}0Uxb1)Dl%2>Tm!Oj+F85@MVY4$3*IHa0mrcGbdVn_&qSK zU+g6d?!Dj0tx$SGD*b;HoqIgf{~yJ7!#2Y(48t(@VKFrsHiluC`*Iy2_eQRz%>7<- zza*DJ6h)~dWiH933%a>qN*C!uSAA1{et&-c{=6Qq$Ln$4=RA*0XANk_5-P$D zxHJAkKiIOw&5(;x|IHovnb-%<7tfWZT1&+Kbn+h-Q9C|0l^}kKONlyLblg$E4wLw! zg#FWvr+}g|&4zb(Golp8=5exQ)i|jUL4E5Dv9NEFi;7cB@rU3|<+Q~Sxy`s^mn7;` z-{(VDLJxbeQisgkxu?3F@~KKy5?AJaW(aJ5^7f2_QMe>cGs=bu_rDT@%n|SXOb}5` zBKMEzCu1N*-DE34))Cqn{R{c;Oq{UXt*g0LpFwg(Db|z4I-4uG2*E-QnHu=>oA%>I zF87CV_b9}2&~U$%_*DlF#b`H(55$0l%agU%tmwWmT56jtJd!dbA?p?4Y>XNG47MK> zmpqb2y*J1N^(`afJ763&9j#(s5jxOEaOn&b0lfQSqLKcxVAK{Cq>hREy^IC9ckPq2?e7wa-0^?TdtK;YZ-J%&cj|aBkd4+@ zp004=Ew`x}q|;WUaQ|pKtRS}6j-e1V008mtgWL%QK33N$Ur!$?Ni7_-&a7%VC0tfE z0u*x{)Dm|Fc0YPo)W&^71!W9~Q^)+gXs#x-1DUFQ*gpTsY1C^53f_RmYI{`i@8)#o zQ!KjLSd`J6h0AFJSm*M7u6?CB;0z;-ykGqWt4nIo!`)x|h{7Ojjn<9;?7{^Jqp0cH zHmkey0FP>U1Ya$v*O&tnDNY5PwA0ET5SrHe*a^^sUSedSjw?X zAi?8-6^tFo9J+;K0}6%w0V50C8`@JbWyBD5MaiuJ#Hzo2$60$+;P3W_l7k+SMsvwm zNFJCY{jxL$9r*P+(^>lYg8SFunA5T(uRi5K9$bl7hFyaPM|!AC9P|U8HA+L}Uckcr zf_HF5k+GoPwwfvQYQVk5!|T9?Pb$cNFK(Eex{uA^BvqaSsAKQm{j_u+B=@7jrwM+) zDC)9=Qe#&sJ9Jwtmss}xheSTFcvd~?;r@?W*_bAc z&d^ecjbRW7nbzOsBuViC`9U9Su@GbGC2-@I3RLoE_QJoDpKcxucOKXdCe-Ut%%e($ z=F0>j6aj4aVdBs30?g0};Ms;>oALTEvDZ{6{m86T_?3v`N*@)(8eugEIR7u>S-!_T zW*KiuZrlNYLj3aD^iLJ>B)BW^w9Kx#o@A zKP~2nFWVoXrbty#sj~*L=c}e4ErECb7Av6qiaJRiKCn=G=>ArTt=WS~=S>F0H_b#V zWHhergoYBd>JMr5+VcZ*l;*P={U_~bVwiu`-r1-b$7YBm;2aJ7`e3AKTF3t`~xQQa0r#AwG95 zOJ-2)>XfI0Ou?k|Q~Y2)N|qhh!hR@*Ph@NcQKVtAsEkqN95hC>=)N@%o8GK=O2{BKIUVEl5UYq~7dpKBE$ zn|i9T@O<;P{rV4^z786kfJ6baf@={jQ3h8wN9|#0N!r{x-o?TAsXzOsFBpdD%37Rj z;kp)^d%D6sNW&5EXi3Bw$bim-FbT7fp(VGg^hUOl~wv}mZsx75zyt{2QsDU!k8jK2`nK`C;S_-(JE@H%Hg#_f)3bE z73Yn^a&lEpt*{771NEytw8OiY*Mzl;OYSrr>V>+7h!q&;LLc&K%D$8wAfG?t2`@PW z8MVGO{qAVm?!Ne@#!$4l8ZJzoqWIs=rF`68%lI1{8jHZvW5=+F9s+wAgwR5)4?K;@ z78XtW&lD-!c^WF)JlwP>;T-?cbhPwpm6G6i`~8_|X|9K*HN?PP^^u~c9Hs;319StH z7-`kMML?m*>v0DfK03uOSUq6MLF>_uVJppP?g{>}VeF;`I{aw6?&r~X%Tb#pq@#;r z8l%}EP+H}cdS+CmzfwKd9u^qK@et|ZKh~XbO5hOK`cJ-*or0V~*-T#%*mY;6xL-*U z4U^I*a48%uwf`iCs`Hp`Lf&VZ#DT}7z6<=MbKne~n?N^n{L(EJZnN8M!2q>V({-m31jqrId z#ByF=;cY6)!V?qCeDoBT!e&@keDV%DY3^j4*P-tUW=n$v?l@5X++9=GiR8FwX_K8o z8Zs9x7Zb`aGW99j64~_cd^>t(?2Pmx)w(G;@UY@u^cK~a_w+C1stPiJC8c!Ax`r+y z=QJ=SqGI5Ymb!f#2jz#cQ+Hz9DFX+Zsk8|q_s1Bl~bkP|;toL-yV1eLH!pxk_k~2P$zh#M1eZ!}*s@R=ITva8i85U^15SkS=rFdp*YjXVU}K|_j`)AG!HYcL^N`HWv`wI9Y`g=)!zeFujFVgzp!JKwf37>uLxTFH!5 zb}s!ZJpLmQ4<1nh=+Jd`u}2{VLXNx1%H^EQxx{sO2YLM2kWp!?2O>&h^g9a0KiIH* z$bP^RP!{){6F|X1%J=uP7D=ncWDCRp6f5yqWgFLohPpWn`;w0v1N zR5}v54)#VL-$d9LK9}Ce&XMTtj!WWPFvo`td=UF2nI~ONOX=;GECAWn75I68A+s&QIyugu{l)!F!PY*+#8`r=s65_ z?@g@cVln|mM8`Dz?DfNBlQ*&HQ=|w|SBSRDlysohIlH_ChE(lG}aWasf?&*CMV!&6*e!ejQ zBy?sqn`72Qu_p&~5R7%9Q;&92+8}u$+liqG77W@4rdwDO_O90K@1-6wLEzCen-W7265_IbM(*)eMY0zJDVpaLOa%z%@y}kc ztTE{)QwZ4We&@#w81mwK)gm0RC5*=#W3L3UBSx5T|c`g|{fKq9rym0D^fJ7*Q~O#W60 zwWYFGD}+<6T8DV6161Q31beki>+UlN*5=^MIqMH(ip6SD0DVJl93Yc@zqyi-5?Qeg z`0W`di>iQ>nrz2;7WgkhNwQ8t6i6e7Uy(jt*)ytAE-AWRbzjh6y1Seih|`4m8$2}> zxG-t%P~08v7btBfAXbjFbS?(Fa5`vjJ{0l#%4Xl3d<}f^1zq@~Vqz4^L--yGL&aS8 zs;W&#CVa7>U>hWzXzVA_`{zH<6>kpa00d7DKw3q6ca_fF_CEe_)`l?qo~KXjE^6l{ zE$&`lSg+C-Kq=MUDJywwWwJEBbw81}H9k8YF>{otvk97)z7}OU_s3ydrqA`_(wL2* z&if+!EZMjg0RGMI9_DK#q&l8E7QP+rV@_0R7i_jUSxbVcx3wFwYI}~DOO6WIG>~al zfD7#X0=5m`T5VmTofSl>-{2J2y&A{%QK<#Ej+<@M`!-GGU?=Qi&x&Z&%d08v02#G% z$qX^$LELXI#qd+!mlJU~O2PeqwxiDk%E+L>#_M+{GmDJ%C`HQYvPbzW3GQQVSsGGy zQGVgc7r9-Gb5W%BZvQB2^IFKopQ@9;?&^SZZjF@Eg|-gXL_L1+xGv+*qy(yS!X4h_EqbYmvD7OlBSVhLLmGwD zQ%^IM>RKM}R_`z49NSdp_$)Roa%QG1A1$ja7o49#VL7nm(DGkOostQ}#TgV=Xm;`Z zwLI~6c~(bWEhQrgKh*(PVzSa#|CMm2LGg3)1%uBXpzUN_7LBpgp6WQSQE||%GiUe= z->;9}nB@4Xr-5&R`^~Z`1KIWehS;NJ6|Zm}G|$uO+V)^I8q*ERYPS2D6t|?-sy~ZNT42ZHEgJEALoz%rAq{;6zagKdE(&l$Ic7b1(nFjs8se%CeCfY@nn6WfXWa{4p#%UF(d0g`P;19}4&TIUx<=nWz;U(0JNG0+gL% zib`tAOUKqhqH;cByR2>Zjk?hn%zN$`p_&Je^MqX9r+-&yK!(;u`s*1TXOd~3?{L20 zC&DQxOrRCg`&L}i@4upej|X)A6SXnW)EQBu9+^-kv|qgI_F}Qm8o>k~Js@7}_L{;} zVaepZJ9P9Pvr+9zz^4WZc$b3w)aFwcw&>>O27NL%dd$rY#bRZ=GbIgRH3>e{_6dmZ zyaQpEMX~DSr=9hZM>GaBj;1Ex%-z?l?Z8LSfO`Zi@toz)0T}^Mg<&1Ze6t{I49&jQ zzKnSd-b1|@luk}s3f-$h*Jo-b$me@W{bRQ2`_n!^yt~VrH z((zRCf9nB$oO%2|6eoe?kHjZ6O{CVqyLM`*8e7lk&S=H&(Plbnrmbi}w5Br)`caJLRN6x-qluSs*;Gm2& zK7dV;*N1tD{zLJgJ2I_Kk?{Pa9*|309JU@TAcQNoYlZ;@p^pL@43LOK-rhm|r4BD> z5JxhjCGUOMF+F@719NOw)H??&n@Qm@d-d7^shSw(oB@WvLq$GFB@4zKrL$ z7q!@5AICYqlJ2fMm80@ecrn+G&2@{MH?eXkfcdS*?ISDEw8W3T@_(V~H@m2Qd_j)7 z_H68ko-(AMt|8C|rJ-aA0U48dW~~9h*`|qhYc(qb**pOJlGuqbYufk0=4Q!K)NpO& zin=%Q^hx9_G^gUUYZhJZ3C&uZen~p=vw>!cFKF(gnwC4xLX)I+uXJQLkIFrX`iFb& z7f9IkigT1h(;6M{m(`Ob1l?Rm{`i0sFM$an_hg@fUs|!$CQppq6U9b=x6%M#3tsq~ zKCM}KSANa*x6Tw;^{f;B`s&mpJ=-k5D-s@-f1Y4*kjSQYA0{Q#A1Ni~b-f%`d1W}= z;lf)ml(Q|JNro1QU&Nh2B43h9ssX+kA>Iih!Q-KSwJbNQHheRtu#6)6-3NNm`9{Ot z3o`h#G!=i2Dv|Vdz~o7aFaZ4!bz0?w*W1sz7ys$JNV>9g!1lC?ryFork;cFA!0Qe6 zp~>nD>K^0pu$%hl4!Hw_4NGUzYY~Qy7vF|7_;yPtF72@^U+{I{he4eMZZ`!y5(ggt zwa-l}pM~DDSE&?npl{eZ07Nli^U1O^-tJnW6?C zquMU;AAgk@&jW*tB8s$ONh0gfLL6r z9DLZ2Kw9)B803wC^>RMhbp+{pf44C7!^1emvtH@IZQDw%Wdm_6h(_V5#qN{ zSfEVdb7v6gaP6=Af|y2Nn2MM-03l7*S(TUi&>4VV z^$FmWCi1S3NhmbsgPY2589Zq6%4pIe7Mez8Xn2`ME*3mJ^^_@6GHGS)a!9BUlp#L2 z>Auy8AZIut5Ln26$VLWx(;Hx!@d}i&0%RF*o7o}Ks2#yN?ZF6sSs3333azQR@kx{r zL=8vkRkD@4Rs=0WMm95s7*81CB5YZBA-U&qS@{%V@S$^@uDcgWJcOq;2zg|A-vqiizyWgO;&Rz(uG>0ZiSQ`*Pay6n(_2H2enX z20}xBy7xKNnYq}F(?q9z#Mb5=WxZ`&g;h++6xeN5$d|7Q(98<7FJcR;Bhw}|N~Bfb}*=!B-qU2_gX4Afj8os7!+Zu|;o&dqM`KqPQPEw$|Q zS1q#y%z>1-&wOD8fb$$9*L#v$|3^D}Lax&fjo^4)LQ~5I_HZl1{NlMGb(002UJGqZ zE-$@e`}e)?p8>NT@ue8BM86Aks`Q|BTnzA zc1bm)*oT2c=#nz;bJhCQkeV*2ewsa^A6`MqmZ|%+%_EaGRmBMupBm!>EkA=QnSG?M%>Aj%62_24(d{o*iADQvH2}SgV^LAIphy3 zIDUnhb*{|L$EI}KgP^|H4WN4#@N=;#K zMBH&C}Y~0t^CN%WxZWpu=L)i4T*bt=a0mX z(f$N;ltXJ%4D}U)DMTSalTy{~;YROGIZ9(EUq^TcWY~?1}6UaxVTr}P6 z($aknbX${vOX;3~deE_Q+i#*APT`P~HlDKC`Drt4E4}erghgU6z!ArLbA1+B532f$LT2)IRYe5w4E)t{^bGvU8 zzm5Ym%&nbu# zA7`AE@YR_Y(tPmn>TCFx{k>P_$rs|>-@Ly1{PMg#lr)-gfpXsUFQNRq-t_saRQ%Nk z(9pc|^^%0}?Zyu`;!--oM6<=fEawh4mu#0gwWdD=UUt^QjmN&;oUO<98{$r4KMMF6 zl5C>kMF>k^+t9{buWL=}JGjLnzz4=T00UXHX(`zDXaI-KV-c??{eCE2!-Pf5id;{Q zISQajh{Unwq5%NV(g)c?HVIli9h|ZwQvH6N;E~bXZx zy5s|1*G_p`78c{k_8+pUzkY^>pKq9(&3FZKf=qY@HPj&Gzvtj0?ON6lbb9dACW#O$ z6&DvpYf*k#ka*%r=tVtSinZ=&Cb@544W9VeDZ@B6=;A>-sN=LUtrJs+{Y#b{ z6i;?Fm#4(29Em%&6?y)$h9gEbv%IY*eZXY7qbWIWtOgHg(rD%0@=*0!m(VZht+}ro!azj4C&>ZOc(;t*>aDjK^0H7a3`L?C(ciTr6mm|s z%_>$*;{LTLt~8qDxV*e5>Gj=|JK?cq%EfveN;K|#&q6;2kG(G{=)P()DE6~y&||~e zY1Rh0khLOhe8+iN7LB%nQ~=#nQT=KFc-}ybCzynRG zY0NBn5!U=2{gkZwh+ZUZbs9!PAp|XP2N^W_HIUut=y)FstyT>6h3=&Bxh(S!0%{?dm5hD12+o!Zb%=n zW%yueZWRf5Cl{=gjYahK^&^;7@U#G;5bMM2plQlC8(5AGq*_X={qCr{08J;8A57mX z*Ud5P$Ie8=Dr>&)?=B~wu|r@DL+(c0>UX~5Tz@#{tY*^#XexhiTyWQ-gzwt4J8N|R z2n+KFIYfX=-e9s1FFMHH1bMV+##sztc(>RAKg#V$;J>3(oS?SjSo1zoTUW4AMp{t9XM{ywrSAzukP zBPam&ymqy8dxrXG#(%~d@hrAW%#=F*sbbo7r093NBn$Bm?Pulxa>2-oY}gdgHjDS z0+Mla?EQd2BO`>(5Y_40&OTRH063~cO z{_taIO|lLd<>61M+9YbK3SU@vmg@J)=h!}|fNX-(!`jr-CnA$7rB}tx;RtMIL_*PN zMUkZoYR2tntM$Wee<_|#@%H%ZE8=}e)_=KB#<+F*q5LVO-6OH6L8vn{$qt_GtE9Y8 z^&&(fJziA*dZW2MtOu**Tnb;cEX1QA7C^<=U$UlWEJQ1I!&Q9F&_Jq`mt338ihbJx zdpH$)+^%!sW0K9RL=d((@(AMLU!PlW1ag;j@;v82G#AQh750nd9@9E$i02v_U_FKF z$ptr?B9vn>A8X~`Va zK4Jw_@$OSDxG4MENtY=VkJUe7LY|Nt@*BvM&Q{?VnSJSA#&kSRioEhE{FX@kE1zol z5r)%BRAvgj%h8IO&t87kH!;)4TuD6Yi_?t{EEGBUa7sZFb7n`3@!A)Dt{m5@!=bEk zf1C)y;;Hj(Np|`Q;`fZF`2)fO6seUxG3{#G(yzfl4W8k1C|y-OY!U%27uVvWrOrD0 zWU|Z+Vl<=&pg-gg&EifF>`$cfO9^mWwc#_Sf!E>r&>L&Cq8rS3bh|;-q}wj#7adFD zUlA!D?3v5W9750?ZdKZ&P=LPlgMh3 z`&VG!Qj!Lb>aekzPADGb6p>{~@ znfFAa@){78R0?Uun!y{zZg-n2*E!!lclc3*zF3d6kfoJ)m4y<+d64d!rAJhe_7XmR zK2^CTcZN;afg(SI+tD;D+(0c$r5{(+8K&Ach7L$k#aifb#z!Bx5)J-MbY4!L_NBTQ z@mSYwDSIJetQ`oi!h(OjPRh_rM$Yt`LzTBIn>N#$Q=?WAxnYYSzeS(XC8NyB*y=Y) z^sfewK4xTOD?LM4?4T7SBR(7@r`;-HB*_n+R66g$c!B)bfpl(DP93I9HxGNtZFkEW;Do3G76bt z2~>Rz659B}v8>oGsh-nm8r;^RRlc#`3Uh5?mcJ;m=I19u+$r>baagr0ih`Xi{OuJ~43y+#yS%*ln4v;pYAfJ)xq`7BUcc1}2HtZte5xA2 zao!(MSs5eY+_PUUgSu05O+s8fU35WR$@dTv1v4(ELbbB{?5{_KerT3?4)X)|Iie3j z(s)EUxO}^qP-uAIem#PY;yr-iNU1fXSElCzo3S1a@etJ-47lw#bPv1d%(gEZ3g<+I zCUlw3{M87x78wyH5e!CmU_HoX^j&!00?P@hGmJ{HShPFgIuU&YXYKU%q@h zr9EoH;zH!rG(fC!KO^Rlr5sW--d->yV7Hr&GzA-)A*v>;?*BeZh?glyH}(?vEOFzZ zmk3_vu#2*3Ccl2p*cb0HUvY$?EG$RwcytR@D@YsB0S2bkCfhZH%4e~it~lB-@}YJ( zJ?yhfpbyMkMw?)-*1BuU9Y$7$#^B%vYO4L2PPw3?;jXs2p&%oN(qe7l*~GtzxAx|C z|E%`g5ZCyknEB!X%RrWO7sZX*v~K67n5nn}Z9fM#qz0KM3jCpvZ&l5V{nx|ozjC|A zZ6-3Xi@hoGX5DhoSNLK#SWZu5@R3QMM6rf}vj zJ6wANS`oT`pFM3MDDaN05a7Si9T7}n-_Si&17Uv?4W3=ts+n75@1+=4*Tbyp^iU*|1l`S-W~^ya4S zKMdV@((QqPTbEqddS{uBfkAhB=T?B+V}2LtDsaf-Dt2`Cv(6w2X9;>8J+fOc9um~I zi#HppFn+5uprSSc=+6=npl6K!qj{AZsoK8B0?92foFovIT6_}Q z+Utwqx23e@^)y@?E|TzMX^M@5Eon-(;v(!Pi3Anl49<=C|IQ`0z{hb!6_UGcO(|N8 zB;zoZ6+{1&Me&E*7c1NDJQ#w*moH@IxCzbLR1#EP^BBbq*>iB)J|(oQHLKL$tU>wq zq*m@sbQ%*cypTsTjBG^7haCmkaVfPl9Di@DFNt^iq1JYCUvH zH=ICL;kexB#j8Wo62D{hC4e2y%y8T0OPE?P?yvm~cQF43ykVt)|*T zt8JQNb9sHhi|4F2KDVma5_P(gXP$&pCH((5ph8qr&ZfRs0Kq~`UE{E%yOfZV%*#XR zZ@hXPkePRd$6nWEN6ugJo~Cz5%iFLWUWpd6=wmZ;`+rIFcR(I5h|5k7oaik$!pA%W zn52&$Q+yImzaN&LJ74$n7io69a(rgCfV2o~JH3=tY8OX1^g`&CFW;iP@su=MpkGZ_ z{)GH&^D`gz0zIiRt?b?HvET|qm0y~~SL3^tp@Ver$)gMMm9n8p0@4X7A0qv4$*xfH z)62m1y$$!upZillhrom4AaI6Q9{*%o`)(|-&clSAdyJ-dL>Tq zL=RjB3AtFvD>PP1Y=+_Mt5JTGE+Og!)^kYc$#m5IgXTUTV|IzRIy|YdxStfnT%k(L z2@?+VBw=7`n_bdo|15G~i0zJBAa%8upb)w@=@TZzVRWzgfx^!MX?5TH)+H6M5K2*3 zp$y-y6Y)6X1SDbm^GVuig!KUS`L}bykvS=@VtZO&WA~?^oF=MZ5NT z%vh_5Ww7ykY2`tOe^XQcnS4!=%%MMUDfmXD`+$bL?9KftHiXW+2Z!2@C_cV9#t5cd z$`~Q;7d2E{R)XJ6shZ&BQPd+a^vE_-I(`JN!wbB>kNJkso)J0CBA+|C=fN1)DAJux*i=?j{wGxjvBC0|9q!s z=AFcrLm-yjK`muZJ3bB-z~V*aD~_6K`-BA!OPdarmf_FMH?>o(`d<>~Qip`%-F{jx zxr;&(!9b`I&QkE6ckKH6=<>-H;;p{q5-J|B^8!hL#?B##Z@eci+tF!<{ch6-GTPo`6nVGLOOMx%*tIYCSj$9!qODwj;!PzzCh-%Hl zXMrfQAU{yN%Y|Ewf7=j=)5)*TQ8b^U{{$aChWMdURF>{aIg+3W!Z<`&aZTME@>su> zfJloMy4Cm5jY3#3r`P_m_*4JVfvz!)5 z$m-v%jJIIJ$Ld(}_@2r5yuql-xX;|1a|nraJTy5dXwK^>;dDGw9ZU&AC4oQ($I!X( zhgLx;RO>F?Hi}GJ{>j|o25JYaDnDx1P1T;RWwr0I!T;lWubVH20X{(o%X4*OCJpN+ zbJ1zf#-OeyUF_(DQ3F9&_sp9DY48;9(-j;JG9Pm;11i}?{k6iPHK9~N zf`%GA)%#bzhqh;C*zE!o7@OF1R^=JaGxzJorxFnLVahNexe`ZuK`w<_W+Y&!?Ka5h z0rg7q8%sAUv#4h{=Zd}_SFMyBn}Lz7 zmw)sc(N@lzf{33dYS!B!(^jv=huI-E#r}lZ5tdIvq|Xm$8*53&nJ`{e8x?gc!&Y|S z;~$W~tPIFx?%|L!j_q5ItI|q5;QkB8nURG}X=gkjBPXf70bzcTAJdukXYUo7Y;&N) z9VNFEzYJ_^{}ws&QOLf#;bk2j9l>DMSir+9`A7sMz`}l262@jA`olzqtyY}@_};5d zhla?G9xgVN!{FuHkU(cEq-&Zh8}+6(3-qAUkzb!SXGMap~GmV*ta3+DZoFNbuA(wZ{kSP&h2Mq^RodTf0Eqwk!FV?=H z;))PS*lebQ)%>ac@19SqXsVQk>^0I+IA=OO#rSGmOFH6!vCkrs~! zS^iJshr{2m7x*9@b<~d`TB3u3&%7acdLW&Xk6cXcI|$wDkh|>s+J9J&Ldwfp5l8bd zn%I-z)4C|Itze!dTVaqB?v@uXNiXhD1^0MDYeDUM1&_{=6Nn<(24 z6Gbhw>E%nB7%%0zq|8r~O{u2e`Fn5voAIJnUe!WHN_O5M%RG|4F5AVV(0eTa@LbgW zuBv9_wRjou#77ZNT~#zIz}}(V1e(1>i8klfsqqZO=(pcf0hOxzzgLXtOG{jV$|0)v z3Q-Q34AC*j?pud%7Rg8lHAn`geS8Lt>7?@LL$n9fyynR$C4!_JTI8sRcn(eF*wThy z#nw@sM3k|*4*tw}?BiO&gCe(2t1&&DrhAGLRo{l+6v#jy4u}IFf6MGgz+yAcm|8Ux z3#E_PjeIQicU7%bG#TNfg?u&Bo~*OfFd*Iz`)A|;b7A7KPgd|rK` zI`p6cQS`JZV3?;W$>OEUJY{(9%OlP_t0z200EbUxNU{b=k4nH@M@vZrgf1-X+|3yH z?88d)_Dl5QP7R|SHi5e}ml0rnGO3xBrLdd_-MZp`1$Ue(!kSc%z#dL`#+hA4>v zdf2y&=Fh}?ClK&`numl>pQSFW&y0x`F1%Fw&Y-)Fq%&|u>Oq;OFxSjLtn7k+BkAWi zEu`fIy#_aIDubH;6vF2_+wkvwaFakvLetIb4q5l`ZB5p$i|UWGJFL|8o&hD_n5wEy zoY)PLRDcEs#kNB~9F$91tyr#eb`?HEf-0wpnIo_yv~o^-q7Op^CUW#WJzULldWg|4 zr7f_P{k+dO*+9qwRH!QAymt;L5$7X2R3dd>>R>I)&4b}utwBb1H$6nwoyT6xD!^Zg zSzMK5r5eu5+ezA6RDrGzWLFJ~$heGXQ_e=MD9c}GtvCS|LnM#eI~@*=Hy(Soqze-} zHsiQ+IqOlh=sU=2l>48xlFsez9_VV&=Gt8AvG3m-{cm#4wR|FJ>-N~x2sB>i4LJnx zEQdU*4b0XR(762Egwoje`*Ulrzm=2Dyc4PUr$-lbKs`9p->r3)8y_irpxW}@Sa$_u znUZ(?$22jtmsVoeh{Iu3%qF&rH_%1MDSK6=SzJI#M`XNi(}Ug~l>#7j7gmx8E?as? zb`2Xid0#$91y!ym4C=jS2Hgib6npoPC@8vQUXyL2KhZ{;Fr9b8>CQUZy6#Vpxuaj~ zk8MX6cw$p*5BY^vnha4sU<)zhQr@_l<)R(G=0Zk?+4lk&=6`!-Qc#AJhZS2>z`q!T zdW`hnKJJUU0gx=Rv2s3v{OwSCbAl|L4cIWE@!_Jfs}4}g$$v->eO|I)oVO4R2P2)(h$O|y8`cvEl=%Ti`65hjSJv0w;cpb&S@2i!Knsp!LP$E@67>K9UnBCJ?#Gv*?e~-FfZE8qR2zss?k$wzSRQsQiIU(&I;`x38zM+QN85+i z>v82WEM?NHa{NM33QZ85C|$!(*IEEID@KoBDpHST%*{WsNtvP|IfX7rIVtufW%L~l zb5U6hllyV7_uSLjn;3oH7codqCJJDcPKrh*l?eXmx4j&7E)iP!Q$J@26>UQXk4^o? zzR&hN{`#IQKOf>2bvEQ zCn4#{w5*a}8qG@T^oHzhS0~f8n7S#&(lb zNH=_#4UT$iFiD@5b3)v#4FZ8#PEb+MK8{Sp;c%byVa@f=&fj_4)Cs+0u#9LZ@f7LH z7j0IdP&d=_vhQpUf!8Wlz{(blaf{}XR<~Jw%v*W5ayORdEUfwK9vM{nVHTfxIj~7Z z$ca7qLfJjjtp=td#}8Iw_t*mVtNNpx#q8lU$3xiR8ff5W9a=3rvb1kZfs|j3Nruj) z%X?~GsKlvO4O)%S3_d>G($vgh<6K%SW4V^3*AX$VGm|ibuEu`EqX|Tfe2%c(aO{i@ zH3zk}*$qo^rFj;JosV8d^^)608bt%06^k*^u9<264%9lKw>H;qRuN06qC5hQ;JvT5 zc`m%UGKlvQtAO4l5eKf6oJbd#8ak;8CV=Pu#skfO(;V^R1<&90ye9D<6~n0(*hVj z9CS|8ejR#31{fIYAd84d_X4K^aI4Z=M13=oXw$y+;={)D%yZ<_x8us4Ti~-E8^TKD zC>Ri~oyj!NSB~0a)ItQOHw$-@R4)H$YWW_|nBrW7T?r?9N6cGTMrd8k->c-2Cxrq# zx0dB>u`cJfNt1Frqn>;5 z^@B6@-r*n+AU-|r7?BPTcucFrQ$_OSiml-?bl=K&M- z9?CWe?jftB>M^F}?S!G@;0I>_s-Y7}7VHpt4UMziGCO&BX{ADsw>O|a5w=O1ci0nL zYBt44L44%1&rV9yyZt)wSEJ+)0te{BAgW*-xhx=>CEE%Lsv58v+GJ2utwb3>og*vi z7|e;O@9#^t*s8?XLcbs*ZFJPT8{U9`<$Yf%nKzZ-n}`(PsO!UDAK*(n2do0Q{g~Fr zYx?q zj%@cqwFww1HtiW-X6bX(S!wMBR4LpLifzm1v zpD*nyH282^HPlZCw~-;>hnoS4h;i58h&lMP|U3zcr4qWr)Y7Znx>Gq>ME8gP{t&TBLXmhCKQuA_4cA4IC%Y|x>S zGqB%owm3SY>?0}MwBge>&ep0xKSTStmJ83Tm8W8Ug|*qjEhCWIZBNxB&7>y_wKp9@ zE%Rq`xaO%6 zI{V*C#$c!%+fiMCtGZqPqv*^7nQ;F&zS}Mg!!T?N!!XQ|bMCp#nA;GADAiV!vN1R1 z3Q0Ml2t^5%a#n;w6dkDeMpWq1>F4+V^Y`<-pU?aKdA&`aUl~==X(HS?XIHo9uYtHP z1a+v%!LOxqIpHkacz>e2uP6{U6?hD}6-ugzLV8@6hBmQpyZ`t`f2*~YyFPCOQUX?% zJ_mXAp1#BOHV@mqY$e8SjxG$yJKWSnHU!)eKkxR&IXx>vRu*7fni4splj}yJw4KU@ z-=DoH6<}Jj!>%ztWnuA8eqp83?G4ze@E%@sHwY!30*#oCcYcljzJJE=t*w0LeBK5j z#KyrGkfm&FBzukJN{SI>5C9_+D8G16X!FT|M-JMl={^5#2CB5s+pzr_0H=p{z$#~g zse7S=Wl##_0N<1_>K_FZ8T>GuIF^BBJ8xWYs4?r_FZKJp&=pu4Cm^lEBB=5BKNE`Y z&~^b{VsTQ8xQJ^0Fr&3b?7@KHu*%vnR4C&RJProgPWvB86DhpRlhla?M{6(gEvLF} zf42L~aW5tQrF})Lsn2fTv`|``O3`9C>uoH@|BQcvUIy;nJaYTFsz$a8iDc(Mb zfAlLb7Bul}#^MwlWyd3Md^?WI*P{8pjl#xx*>mL$v!hFjne%6+htV4!mAjkQ$e7qJ z*@u&GA{9-260ErC`*G)Zw{nE)4S4M^JXQcikq*pj)IvjtRPMvM88vi1`dx34NIOb2 znR)syU1eC@&j$Hc8h5rPZ}k?ISl|{JSiM!k$jdwT6;tD>8uTVa(Fdop^4K|ON!MAh zi(?^nms&5}kIn0z>1TXsW3yOqu4~Gkf7Opl(D1)nKdMp_fjT9@0vvBvd=*N+ANEm_ zKc9f;Rouk?=hC0LTH1n%clGorw;nL$A{M4!M*o2M^e4n+8D+$d(5qidtY3d~?6GJy zB~J4KK5#HyMV_)CZxL)RCL+b5CFyZr9K)~~cL0QdJs8xd>zMk0$%Qjq3*X@U5VmvBP`q%+1M*4%wEsXgW>;chkYA9*f5Ap|1V(}LzKLOQ4IrU03 z9xhtg`B1?Or*(=|@hU1Rt%52X1_T>5rpR=<=9n!U1~% zo(Aey2)q-&5`{tNs@jL|cIEKd%*mr{$u*IJXg~9B{iw(Vw;Nt(Kd2bx!0(2w}X8*$Y%28b|)JhWWSN~wDg&<=^ThuCrmtpJt60F;Qk=pGN zUk$?E;?>{9s4RcLDEg-2$~BJ@h-?*4g|o=})S;(gfyiLS2YI{DapZj#IE?={c&A_(klt&nW(Teu@YNv z-MBCCEQ_iU5>=+dZ$~_eudrbTCn`Yr&LcYQAiq1>zSFI-Z=kd3= zNU=Cu>Nr?H1$p4=RN{OboI4vXKVTqF;Xe=p!k&!c3qC~tq*9k$8(i#Vt;!4A;{0`t zZjb9ZEyub-V6s)&)wHBnxdRH5gL#8_JNXa58O9hkkxh3d*x}j{r<=%k z!^3Vy*v*=#xnsDjD`XY=L0oS!?1yT2OsaD95>Q1~y6r+iAb)AuP3;N`$81C7JmO99 z!R@mUB~P0#>Pe;ne6K$i#-Xg!55s&s!1nBmkEnmU$}6GI5%yD(!^5e682M@aeGS$^ zGDt#Yw-0xYM$ZGGfZG2l`&IB6`pN6H^qC4R`27X+a-o*C`P*O8+7 zh5n6Pj*VeV$E^rR%{RM`P(w!s7nHY4)Yt8{w+KH~P!3-_`^A zCX?*BCeWLw(#vT3(sf45aG2bhUwOmq)^E+h^d{wiA2pB9$3j1WKVyKT+;G z?6(V2NdFKiqo#%l4xSDCvP-=sTT#*mI>re6xwz+M)4D9QhGx`?Jv#i=>5uS|%@W-XrbKJk1o9w_qcT99@} z_H=4n+m)2n?A-k$J#dbj>SgPP8XXp(-84C!r3s{z>c`|#v+Vw&KBk$b&KVb6rXbVC zNrC3FNAB3A)!NDH>SyR?ckZUA>8Z~0!^RC|DpO^QOWQczq#d%CxG>Z z58u**bGxUN7?aazbo*Tl~&T;D3a|nEcURr?)1g`Qp$!S zS5$!}Il%+NH)jiUahlx{H@J`k#Pzx;^E&*#3DiJjOeao={lN2fv9YrR0%l+yyG8H6+ zBm5`TMcToE5`v^CfL{Nc><2f_TQu-3`{IXFnrPsqfK8@9$Qs?1_ta(BZVXl%69m(6 z%HU5xK13e`q^HYN=}VD}qACvj0P4iqRU)u2rOQ)47^G1op}$BxFk z4qz53@59JnB~iTpa6^aJb3QrTR$9b;j*zGfmxEg_QDzSH?O7T(0ZbL(7a@tS)Zr%! zxnE@4o=9{-&zZD+NxkQ=@BLI!D-tj~Qe`cRq91|BC_M1ZIXaIM@VD0$Ci4J1{>loR6gr~g{GQbgpk^Xb_ z;Mk)3vpI>;#hCK8XSJs(AJ59*Jpc6B8U12$2m+7l$YOH}JpK$a`w;=u`5TIHrSdV| z!SI{awAQTaGOYKcCY-)C>YPMTmE^C}0XX6cV!O(cuBDe`ML{a#B3)pMIBR^?-~^1* zFJJ;BF@8?KPux*P)B;Tr2a`)Yk#sw-hO3VOgXD;S5m* z+}y<%vQf)KzSF4&1YbRfX(#|Uy;JsPGs zX-FOLA9+WCsRw3q87OkNaYdR=6-md}^mM_2^xi!Gm_2)#>N{iH@@GW|(pAPu>3MXv z4I1xaikUo#XXOlqJa9Z8VjWu2K1tuPLPKy;a#q{FYg90JT6(zyU((N z{MVNf7=-HCUU&CTfbr#7lSwnc8;MH; zHR;iRjG)IP0#4Xxw1u_*qw<&C7cA00&B+niMyi43tFQy}Ph?W&`jiV!9LM5=V@@b$ zP3*v6_qa#~D+G%aH22JotAwdsO$&R0)eR|k^olD&U3!Y+yqCauiRiSpuPW7V+PRn= z$er61tru&IW-!;-R@ z2JMO&47)RP{?k1<6Zt#Zu_ZiVyk5{u-|Z+chLrMe)|Zv5Ne__UD=%*~u!EEyEOQ!O zUQ!A}5(7Qnp`IN-A^C&s*53BvE~{6TS7xc`ud_w(RQgmIQR~jP67x6m7EY#H9FYC# z%6Q?twC4WFJzVulfRNmI>dHNOOq`@0lSG0fLhh<>UKPN zKlk(VNrfv84R|dHQ$|)U7H${Ds*l2bk9tbgMxT2SoDD+De>O|2`)0PfAI!RJ1Oh?( zN~RhQbTkd*&gmsKen_}8~G=w=c`@3P-2jTgfEzV5;7ioXorvyzc+5lqGe7?m$^kGZbWyqr> zEeUV)4!_FEhFAabz6^;u5P@|SZ8Nob<{%e#be|Dh?dHjP`0^e}L443@$^ajr+cG(@ zP&eMI@<9>ZFRyOxFps1^#7LX2GG19UU4T6vgj(S!tyvfaZD2v;cZY52tuXDPoSzDa zW3DUe@S{nfC~JNC)u5X~=g%^{m0w!r%wbVDQmX6I}|MH3IU9pI0)^P@i3} zNoE#G*|ZKBao$T2GYc$+p>A>wI8slSk;5HwcM4HPxAEaizZZ^Hs%q!q_lH37Km+NZ zl+i=X&FG%q!3M)P0N#{BlS;gOl(x33@4~vW$B!99Cz4vSzL+w3#Gt=jT zBlCoz5K3~HpF{!UWi5GLH3S@Me)j@*KOUyEgCPXTK{S{+;QCqpbCXhgYFCnRX0-4x`pxTT_=j1#io*fkg{kUSozXx`z-ruUNn8CAzD;{S z7p~XR4P7_gffkyhz`j+&sDpX3@N*r5H^V^t+y0tnS0EhO)vXsNQV4%u8)hj(y z1@RyyjzX<_T8ol6w}E6ukLQXo-`THFY~VpznVkSX=Sljolp+=a;+SQuBD7b+^FMs- z?Np1P{$uQ^=#ku}9L?NTuA%E7f&+GZ`Ag6N;WZ zxp zilxmsbRK)8KgNW<>tVPaYqd*QZ0FF=O#-8LjO072}hH2{vgMTa<&(tNfJpTPf$ z)_c8Ft^rcg2XxpZ`O^Ss4k_!%Nxhnl79d-yT4;*$Vsb@{Nt>n{X%OW6|2!nod=YlsV2yb?`IWsH~h zuRvtA0wvpgQb7m42Nf#&ta;2PT`uJiR8KMXQu?s{yL_8cU5VS@Z$$mMWgv_JN8!Tc zQo|jXOL(om-iev|6+*3k-#eT&ThtCQUC{1A<0!jA#Ci?Pv$ir?1j=+CybPs+7wiDL zj&INa;4DG#sJtn`_$fQ^iOi&4Xt9_Z=TK2v-oaAdB7P3=urmEGxza35u|K1MV%v!FhFww@4I+T(5V9}Mc}@Y126u50>W_^EJ9 zi@L?&nM}LOcSVEjj}+|o#LX2 zxPQ;?8yJ6kqOdavYf;J{!^wD?12msp z7G`#QUJ)rLKaBpP9L-FCY5Unw^diM)hFpgXFHn`>m*r|h(F4|aA2K>-2zMmy!M@op zHtRcMb2Bj76Yq()4fM`}DLd-cltM5*I9z1ZCJk|oBJn=c=z-(e!9zKakF~~Uy?SQ7 zS}z=bXj+b5lTnJ7F!jP*q^`pC+YRgFDQIVk|a3P9sfR=pG zhas`?>sO13qiUZ0SDc^PS4$&v3{td$a+_evDXHrse-W?f!B^18Sw8NFrYdDxT=D{7 zM2om9s=Iie<(pK;)%A+(zDUB#J_)v#tUI0Mb2lGyNs?fE|Hq3htVI;O1Upm{6b-Gc z%>?YFKJ}@?_sj3c`&P6TE45odrdp#D5W8r4#S^mWp`Z_Hi zWb}_>nwnn~UyoZ==)RkM0I@71HA{bE)rn_d#k^6K79h9wgh0DBD(!gIaH@6C(x%){ zg4o{W*TIzCETMz6BSotxP<+Q@ZrElb0s-L1wU;$_oV+MW9pC}t9rO-UD-eQudQCOu z>-FqVlvvER)b~Q*^xr>^T<>-cO#PDZV^e-OW7ST3()Ps2H_7 zj}Nvp?QP&H9>f%c_D)v(1BR@)Viq*k#Uz~>i23*Yf7=EL*z(+C_I;m0Y45Gk#J>*T z(zbCtp9|=;dh(&Yh>`75>1|m0ck#2>$C?KrXSvTWZ79514mKArJ6%`Z_O&&wXu);U;{y2xbF;!=-6GYa-oY>8 zO(?dmX0>}B?&cgpSeiO^?VmyKuy3C` zK_AH1z3hJe#_Xt`{N(`_Hp2wEJY34aN|nQOcYL;UzGk1BLyGd{yeC=DU&BOSW_4YJ zc8#;k)ZPes>L#Dj+m``KvO2q5eB#f51iW=_FW&S;N#W^3DyVp7Vy^Qwy~$^=+!QCH?iWXQFuC*aAGeM) zToqIKhmc#!>cy^#cY!oSc;9>f+(@vG+-3qx8Tb2FUGDT2E$prjy}D8Z7SQj}H^BWr z)92ocbQqB<-|Qx8;E`L^VlVSyJhQmsad!>g(a}%Y@COmd^M0CVe|A7@bj3NV_V4|5 zNEsr#QcfzTZZFLziL$r(VUoZ9>}rdA0)g>ic_LEEi~XW*Rq^weWX=+w3V0$z0 z+qgd~kP7(vm-_9H27&HdRp`49I7H)mn>4)07qIYyv?~kCQ*xV^c_wfWmF-;_XvXjQ zCa@zopEeer;~}rDYcq~$^$=8XEQQagcW7CgU19^BfrG|)U4psyp_j>AX^-^RT!U#} z|2JpAudS)a(!+z#n$x4+t}_Uv7m+8G!06kz&X?t?@ZOvz;h^>&>-oA%P+SJNvCWK2vR{+d091}Atw2gNQ|)h$Drsdd^|1g^G=I0`?`X}i^j(>u8yOMa(&ox|Ns;R<=YVpP z=y?g7qoAL|i*r2ayjxKHXK0EclxyS{l89$Nq}NKyTuobv_9@@ZsgJWBSXfH^3khAh zc}d^^+%8b7?)<5p2J$=KUj?Wua&Q2+IWzQbq?gaG|@ z=B;L<8$}B~@o%6AbdNB5$+1tOMqw7601dvBChmaR?%gSf9}Z~iGgbjsU>cEY=xbya z89tm)wtt1f3Ag=4ql$^RRxy*!_HWU+h`itZNhUsU`mQZXeRVUY<$E zOOzLG`3SEh)n1VH-%Dhi-1I<7f*$?184Q9zApEY^rF$SAP-H7csKo`tQLdfwp{)cd zPr7)C7-Tf~xIgUSILg4l^W8}FL3FRXo>&cW2)qRWqScz6Res-5u@p7vmj>-Ve!b7V z_xs6|qJPP&%62@Qxk+y>-qiy)Hi^9_=s$tw_hhRxj!vIM(0+h34 zj28n0QTs&n{js7-&bspNr*lP#&23DhbB0AYBLGjrY@n-8RR^nRqQC_{v=`L0$zy5? z2=(^w&^m7y$4nT;BO~HnIZr!ccQPn$C*56?NV!D|qRyT%cUH0uTZ0?-Z~gOUNF+S@ z9Y!MZB#lL+n!}>Ye}7yxzv|Fnf}6UXc`Dmv{@OT8S@Zh=Uy!Q<&kn2irA|aS?nP}&yCTHp^zrW;H|g4EK+u3 zT1Ytbvp4?suBu4vlTI)|WG)j+IFydM?Je^LR{Y?t|1RA9>#Zg|7YM7$$AC8~WYVFD zVG^KSH)88_yU+5q?$qC*3HNf}eHwXQbh(}0a|Eb96wWCB{4vaMdldIeJiKfo2Qa%9r*cP~V%5FpKSO@Ha zt_YtY328QPmYwrq*q&LbI~Q1R;t7@7CW&BXHweI?}D|FyKAl>HR_8GO>hx9(bAO6q$w7;&v_|RypB8b7+ zha9*}(Nr9|O@6D$5FJEuS9V^|I>+urtI_@CUiy|4q?@DgR=$<-ki2sn*i@G-D%$*f zarHWdr&;q5q{*NS+@0J)VOoQJOQS18Ij>EA;#+#}KF}8KK0y}Scfm$n2F_yl$i7`W zQ2V~!)!+t1sCnJuIpQyzko!Owy6sO$)>g64Pl(`+qYc5uck@?GWe75Nf<78Yk&?!P zT7ml!6-Z^THobPi{p#}<(S2EZrv|J)oyC^T{gM;_k43+Qrw%-PCJU_Bc=zYG8l%#s zEjzI&z}>QS7RC09lfPKGHPS1)6bx3mn}21LE5Of%0|#_uq|jdqLyk+zv(F*VLa$_B zeBq}ZU1*QO+w{c0c|5f~>b1AoU>-23a(DSR zAMnlDrSaF5WM4zko$tzfIfNG9oUiLDpU9E%PVX0R*Q03ebT(VRce4N1O^umd`w3n; z(;I}x5(5&W_p95rRHcJYxdiq=;DBR~gb)h*Lr1n9Ue>osWw!Ss)7{l6NjZd8-Dq<7 znK>e+2<8&ORwLGH_4SxJ#y~;_ss(y4+zRob^xDf8diS2$L_BtEKsnhwM>Nx(ym%E# zqeEbChqSQ_uHy$!!nYf{WW_DAU(ej{uAn@%x2c|n*rqJiW}U9Fu@Wvg0@x{w=kY6_ z!(jKsr5%&K&W&sF(aJ6^5>IR9=2+D}_n}9TkqbJKz-(DVm#HU` zcG+3tt($YB4l>C{v8{p!A-D$taTNB|48mUC5i74%*FqCas5+c`ku`YA4Pi@WUvOb4 z6=9&zTY7Igu+9!>vkjg+^Xk??@$zhu5-55Zc$)ytWs$e!eo($}3B%v(txZyge;gMV zM(Bo9hK^SzqNM>e+M0IvtTP28Phfu86jSz)#1Z?%ejk9@KmJ3=>7kMQ@v}21$K&koUH=-`a(v zlN;}lg5B{}a8( zr~R7BZf=3*kn^%%IHAr>5Vf2Q{j;K%V}m%3{v|%E2J!(1-I4Z6g%3O(>8)nRlS?k$ zJ^qry^pvEwvgoSBwYzW3#OUAp;Ht*n)qINMLu&F9Gasz=Y5M(MQ$iZ5X z54CzCFW)l%>4ks|h%U%LS4lSSpU%v0M(U(KfSkAS2xE%g9IN;1Joqyp!08~Kco%s- zloqW>f9$pc2zF|^s5<5Bm&$4$)|lSCCf3UZPu7R;a~2%TwvND*{7bF=D?92^bSi*H zfQTo*xwX`LT+D^G%+QT+JkMsm+q7e2`L}n9(+_434tmNyEkoml#gLOauhfvE)~9h< zfw~*lP7$6?kz*CMcE%o6_5Qk~Qa*=tITmqw_ixm-G3T@B`XW^+0SYI%Thz3=kPcIN zDE;;wQ=rkTiO6>{4MrY1#7Yj7s8aj0Zk~Ek8neZJYK*?dI_`kzNK<)k^kH7PyndlW zW8%-MH;L>1O8&fvTao{($RQWmqA%v&cF(^~OklMo2r{h7cSmvG2wuUfCuAvrmNzj~ zQ@Z52_1Btzi0?*K^NP5gT0}pL0Nr2x&gga1>AvyWHx_-4*UG!9so(uHJ>3)+NMwh4WVTwz)afa$IF#U;oS2X{2z$vlJCb;Xn zjP1tFoZxKKq?=|x93Q5OVeZ_C_W=Bj6;ptsM4<7TiuWt>_qny1fYDq2@5d&`;MFA~=S~1~L z3HUnynOs6N*;vEoPM*o|>yK zjVF>AVt9Hu@bbBS5!{UvDUa7;CDP}3*qYQKxRLUk*z~0WedQt5Bo7Bs&^537j^F{A zP+zK)+KKFz=E$tjVLaMv1e4?fhGI;hiv>+lB=SnX1fyz@gycLhNvAmVMh&P8#Erbd z3$N70*op6B^It_Z5ptsQQ#n1S3j8*2Xn0#8bE17}RXfM_r7z;f-1LccOwxIWzNd_h zqE;9AUUV(ie?9K`JV$l0q!P+u@fMe>GZFg++1LVNqzVpSU;|quu<)qd{P%cLm3*d= zLGei>G}E5Cd(VXS&$bNC*Kh^4);ql&o+HUENsN< z0fVuuVZUOT5f>;&xi1Q}&$I@f(9UiE$3N_N>U!re1Hu&xSnzh&B1FqdNaH!<@26z` zdBG#jha|vTykGZ7miN}Ee@-zw6Lwk13Jb=D%1DMkIUZ(kOmCyexI9AN4m^}CH|E#n zw`(-88VbZLdDls7iwlrOKiZqu=Y6$S?pe{shB zScJNw>5Ex=>p51hl;&Y12$FefLl!eXP<~FJl`^Yr3!rYq^tbw0?0W&r%$jM6!BD1~9 zJtl4Y_RXy*E<4$ZB|>+H&CV~Fb}eYu4eTWYp9Rog_U+2=0G>0J3$rDi$v2x3E9I8S zpH4z|lmiCaOk{^-gOyX(!wS$If@TXe0~97qTX^Ae#yy3SI$eYr-}k)l3cZE1tlVAa z_Wi(i-7qazNexi;#G{O8SJ`fzShobqY6q!Zd%Ft`2)4{mwPs~wYBK*2M6Ut^4Z)Lq zaFNYdshF@Fri;o`YIU0^<}+)oK8pX>8@Ge0AS~1HQm#Oo-7KOvE2hGgOr}sMv@xPP zl}e+T`d0imX=-X=VKFz=erbm;jkLGVV`MQHi3>K!b5)Ev*#}5W0v4+7^;q6k1M(>< z-v$CmIeu|nB?rH{DjZNYfZakTmhhtrKATY0E)OUdbjohl8(odOsGN`-L&#PO&1wh6 zfUQhPN?xU?pL{}EF9t#|D#xT4?Zmj#Ox0aDU$gLc@jGf7dN+i{k7w|k@kJND%oeyQ@cN!-<$bbn@?N@O1fQoD{hAy zeXVu|0Bl-l#!nl-+RUtb5D=K4(|Pc1YLC4|c6q1gH+|#6@=h-p;vFmnrj~o(Z(Ua8 z&+XIS>xIQOd-LTZV_xb>MD0LIq`ybmB%YKzmff1+H>B#U#~c(ZLid9{~={^*$>iIB%Np2p^$#nbkD<-Q#`Y;_eyr)lMivd&FdeW+NrWA zm)uW1K(8=IC&Xi~y+bRQCpuj)nT)R|SUdSR)OG)kH8g&2tF%ZS;VGbKJN|)M z*Dj-1w@CloE^z}~_U+5eG2_4cM40>o`RKD{{bct%qF7J((uPG-f}M;e+WU5cX1hR8 zIPVZt`I$x)bX6NtTVOsGb?l1|dw!t5 zv7fwL&DzUZMiQ2#N(Rek6gB3~7St$Mds>ei_geh=c#5J&@Nf4^$z-AZe;q_-UoO=|w zTlrA**BD9~+k~xpaIe$DrOgzzy$(#S)FfO=3kz|{bb!q=U0*?`==_BggA|ROCa*fp z9(l`jjvwUrwDOU`JMM`{Tel^P@+EbBeff{mp)R}-2iQyhQ1DbQuk8UgG(>ns!XTx? z737~lJgw4e6Gis`G_gyx!WNL1uJeNhsnScQqa>QO>U^!YIqSH=U_6(-pJnq&lb_l?zzC?dNuO{;fh&N{V7bgozqax^@p1Wlt=*4^+zG$MgiLfUIx+MAWK%Bh})+h zD^+q&Ubfu3R}r7ALul4?;4Xwu0;FaL52VWA2>bw>{N_%!B0N;Nvfp1m?S|Kdesxzl zj=+tAy>L}Gu9rB?zL%kuh>=#n4^#yYgU?bFDU^$;070pJWfRG{+-<~Qp}^A^dpE|U z;$*d8T*h!B?Je!mcw7Hk#pqQWN0W*;e6+Jn%`IU^YGz63<7r;VtsFViGl z=ELEoZW(hoo@cio*}LYS>QYLI4c4mq!`newal1HKbE zX1VqVPr?YH%+Vf)ClstRn3nzs%B3&oatOzRg-iyZhi)56Aj%NZ9RIp0rXGq?Es(nW z?w;!AV|{b2WA{E{mboVRxrb~C$ud(MQ!L5Xgca^WwoPezQCX*1u$x`AG`tI1}7yg~=6BkbwnBkpBw-3d^exf>OEqZ{a5M zyBQX_$4N2S!{y#5csv)RB=kV5sUv=-pjPdL5y(Cd3D6H!z;=bd8Thz&rLdeFXyc{Q z!el5%(X95ISpKv&K~8c-=dFs*;8YLaJ6VVW&fq=KMCJfY=b!DW#v|+i%M-<=z!ZKO z&Q@9#ee6|jCh`PK(^JT6qvtrucyj_!iyv@eFI!#Rgo$}U64-eXmLZ5wIk$9(aTu}_ z*s6G+o_!t*$7WOzf+6mh;lr8$`TZ_4l7{1hri}~H;!$sD+Q9X5(ipMA7R3dYq^&fN za5;5;sXIo+Ybdz$tG~j02&*xy*Wuz(_=LBhSz$3E-M4?bXZzE~ugTfzt&5r`=i6_FR|d%XF8UxL-ftUlUW>cGPGGK2X(O8kQ6~K9^kwHVA;}S)dLh*v61OCBSA{!H+&Il9xza) zR;eZ>sMNHe7*LCC=g}8rwIfeEE-JslCL9A=EBju=`pHW+kLid(y(6T^bsoZGDPWAs zQ?$w&QsRvJ;fYh9FvUBT_L)n!Xgit{k1wQU(g*~?Et>mb5{bOCGD$mgX-9TasqTjh zY5&)qx|6qQrlw??dsDkbiG_vPPJ@N5S#eCYZX=>dW}VHjoPw)LSjVxzx1#MHNK|xM z^m|gMre4e?z=KT!;p+H{EAst#KN~ESkpWqhxP0WA=|GBZK}$8O=EPoreyp+-4++T8 z1IGUs1#jgm4N#RqcAOthtClD#L2*luxG&kzc1Z6)=N4CmiXCna3`^dRBiF+Nv*GHfKUm3eJ+3A4}Qzd@^p#LN_n;_ zQvm}%)!QH~(F?lcoc_brnw-eF|KvfNP~7ee|CRT7y{d%kSY#3t@b1vi`mUDd5?$uL z>vwOg3xGyT_-0N7KV2At&xsjF+!Sr`>GQYQ*nu zaMj96VY+M`M&-CI$-mC%>1sD?tn-K5S!HBQFzyN$9?-{a7MGzoWdy5#%OO)NJz-r# z_1JeCIM=!NX+VZ*Or#!ss}Id2vkC?wSMx~&+F`EViF(_`W=};`tVqU4*%)A(K3pT_ z!ENW_9(`$$*SRY+&cn${)$e;#bTLlovrZt4$E`t6!eg9Cxmxe2wUOTkUz!cf>tb_? zI>YN7T7nTNoIs87--^Edo={LoSDN?)+)tW%iq!_zP3~#&e#Qwt2=t072-U*L+N@Xn~3)^QIT_*qmwYSPHzN@!WW$h=+>&Cj6pBZtu=!f{G+oW3I6F26uon?zkNCK*}k8xI1c2}xE zG$U3uNjKO%MXTOyTrMo{wwKhI)>3=&ycf&+N|>;N1=V~j))MSV65AisN`_PZjGd)xRY8gbrPy4T8GT_)C9{3*Bx zJQ*wzkHg{y)G}!J50Kdm&#xIe1k&%b*`K7+js{Ro#CjJ}zNBaH% zSgc}}rF`}-`xc#GQhEGZjd=eIoE*AZ%YbW9Q#k&cw5W?!@Y`;fgHb`lGWvJ3Gsm{$ z&0F{@ZEQB71lR`(a?!!yWd0os`l-nM!TH;cN(N_u8F3)n&`o+$^7hV_FarH+ zpR7Ux{P{FNR9?nlt)@bKtll3;{kPBE&h1iaYmHXWT&L)>f$SMU%e4U;TrBPe&ZML9%Q*>? zHO2ixsAuBGm%vM<*{0j=dBKIPbI|j#c@~>x1^2~;0k$&~Ct;6h-{suCE|omZ`x5`5 zk@n!C<6z`F%-ZWy@8M0qG>zB-NumqyMw#O9m!QrAe=xBR11S|l-hGopG`_Tx9}dEWov+HWxf;(%QVJr!{oaZptUBKZ&Q z?EGJcC-RfI{Uae$;?D32D#LtLRPk*xiHdqaPeLr-2hBTLOR9-4!tVrgDQpN#23}y2 zaA--*1LAcDa51Ckls=MZO+0-D{BBGVJ@q8l@{Wp!c!;9oBQ7E-^3O+QJ+7=;tcb>9 zL7=C#`B&~tQDc@~3UN44M1Z-Ncd=K;>(#tuai4RbsIrY!3^gGrx#=wgeR;o$sXFbuz$_o{0CKZ^C!0v^ick>Sq;t}4E{5v-{fB5S_h zs#EM*vtkrb(+?DIET$uYhkpeVGb$k1%pmJJVoiFCo$$DbCjS;%M~QK?O&Q!$$=4e1 zYkonRGjH=O8?#q6&gbK&5DnYiQa%=s`-=G=o7Qk;m#JOiKgBmY1^Hw4Z5(NUtih(L8CT&@sH{N<>V+c94k(&#fz1-WSGtP1556O$9*`inzxebMAOro1 zs=c;7^pdJHGk@S0b7ngKPYuwisRG&>ETND;dXwsKvx-#{D*T4Wp%+pM5@7$;T2X)Q zL7nObcSzI*?OSN{iM@D%;pHB%+k)YL71i%Fx$s!LK9`SeXI>lgi0(PO6$JZNWmzn#RKsE|Mr`tu+(#r+5FvJ%vIUs;Qa5@pq^)t$l)Hv9-d#23r!YOy zl;xKYUs;4aYPje!~89oVvrJXsW#6<~kz-7j{&tivO8B%Y{?&;7_DK5ue*UtX3 zt}*ec*~^=t6}{V#_YhGx{9y0P-Z$g{udJ&zxnkS7DA2Hj$ytioby3sxz2HRD()-PEJu7In)AM2l77jg(Tu1(dqTxF5o4V0uJ{8wU%yPD`k zk(tVGw}S)zW!Qs_g>@J+gJ^o9>Vo<2BY`>^E>Gssj&}|7)w!3a_7l2Kr+chx(xMLxruF~%3?dbLm8M2f8G9^Wa$z+i2m3$5Oldb)c& z1;lKu_H*!6@VYjApPhe-lcNg}d_EvymT8j~&~tuO1zfFZwT{GyMzOM%NQRQf$1Mgp z-zRv^JkKBnDHQr<@Wh;J62$3jV}DV=_IvYg74`p7bnfv?{eK+a-E6}!48z9Uhq({K z+~+>`xnDv^BIZ&qbH9v2<(@lH6s1xrb4f%cN<>kquUZ#Tx~Tm8{(GPE*Lj>j&gXMJ z@AvEZeD=~VWYR_?zhYDFWDx3ca0lEHhR@E5BA@a$J?QnbJSI$SBz-G5?c?bhSNpbl zSMQoKXR(|A zh^ohrRU7)ecqSHW(3sCQi4;7ob0%AcV;}GdZ3{W%f*#4ySsauza1W zh16IRCeJNf*C|BNW0DKD>^HZtixx(kI$j0?5Z<0lY~oYNm<|2ih0$YZy$8;jRvdS4 z6YoijS8Of?2)81W%ic80eK;j8FC z>u)hx@DZ`;3IWRcd|ZEe$2_duP+YT7dxgRpfuoUSg(1~ zk_$+=Fp2`#lv|)7?W~ad<`LzB$bw6!;c(Rn_;n(Bk#3Ic*SFw{d=D9Q^`MbXjj4%9 zB@Q1<=ojEzORUIBE0rPq#1^|=ddz)UZi%k-u`6n3j5y5e#iue&9^dIERg+3engy>J zd^1^cgRUJ44%r(oVi5d|siQ|Jx?;{qe=^15eT`#FA4D$Wj2)@elOeW7=!ni$MoSkNc|NmgCoST z=7$glcrqE?+-a}0hiY;t5Qd^8qW~z-lMqFb#P==2Z@>LKpkz^_XLoc?-s4zciUvrc z;tS;oBoF6P;av$I^;25hq={F&Hkr`XI4mw@dXPJ4hc9vu(kmg?#4Otp&;(ayi!KkwshhhsQcB8-IG`q1&9RSn8t;3Un#xhm{(UrL^;d(S5B;Kk-Q^ zJ9eOiKR&aw?HBxZXjGvjPsNs8`)4jA0np)PJ0quYK+XX-BQzlQu8mxA5SMSynf$;D z6>9%V3a`@OWK_4gG;RpIv#&zGPqQc%rG44f+;Sx`s(YXV)!VKgpv}Q50b}rNf&8ph zoX*iL<4C*;9;h>wPbPa#5$(uiqWjdO9tEN%5OjNW^Fb`H+=C{im+oGJoBKV72c-60 z4Nj~A3|PJW{ZRQ^`y2i-cN(TcVsh$HnhnH)IY2A)Jv8TXgykHM{S}C;x{`3+8J9m5 zSgc0!zvle66{<4bxM+n?mX;{ji{t;PMNfF2CtdVk_9@OideeR=2jwtb2qMi8mAOns zh0PPrqwox|Zpmu=!398hxSG=;SB9vKG}{iVdbn94{xB*Z-BVzx`!)rLm(}1?1dhJn zlRhi8$iLDPV7O=4VyHRnWA2fX%l--_oq4emg)% z4yafX_Ype@aj0g~%zSy>+bpXFP&TwfWa63kVf zEFU_E5Wc^*iLZ8&nZ)Dv)=K(qI1=@ISl!D!|_LOdItj&QJ#Ql32xy9nEr}MY?*UYy7|Y4`M8KiPX0Jlsus?5OPpVle z>7mno!W;)bszL&GU*CEpLVh=Weh;b`LuDhSqNnBh(N6^S^A!7#j*#fajzoDE z-S|$0x&LMx_bU=E0E@>|=`TgmFjO&jp^5Cr_Imm3V*R>m;U{#6Itq(6tv#29!{FbZ zORGDF+K17Sh$0)wb!3&QC~{zFp=6vLIu*;H_{+ehQeOkQ;h)%7GiR9^wa-^=mGD{vxupo6&@FR#IJSYmw4)7&UKnXyp?^J9)TZ+9 z1Tbm{INII(qRDd}Vwr`kQpTI(&qW4I5pNBxC)ZW^M?>b$*|Rb+ z!I7!jV`1WBs|?xf_W}8+WmhhZ9;XkHtj4(jRsPH%SD&gjF^?K~TYu;R3IVXW<#N~5 zFZ`L*DYu|O(+!e^IE4gY77UL8 zwSb2bA;cxvl7q$7A7*@aN{g%&UsI&0<=-9_AeujN9#s{$<+5XS1`pqkMwpP6Ebw1n zSb3Vr$YaJp7l`RmcRHnnuo7fw<%`9xkT~sXpzUf7zph?geJFb+RM+t}&MifHIy2*&fHR49G zFyABndoe}_Y_awSRD72w(8w{;?73S3;Us(^rK$9o0{-p z?o#WNV6qCveM@@%>W{29Xrb_dx$*2U$hge%E#V{>L}6m}QM`sPpN7InAUQ8ionkW* zBYNz2FgxPCE%a-NLWDVL-pt>q&FSh6d+6?N?YedmuX6^3IoZ zfA~IR&W8=;)#rI($5*YBkAGo ze>^(;)xIEUhB!bb6~k6K^P_%_f-3Q>@}0jvD!cpbBpHbvQDIyctc8zutdfUb7#7z< zsn!>xnpTl_6OxIju|N zuRKheS*jj0{CVZ|8}hc+*R^Yjtbs<0GfZ^Q_d1TCGa~vNXOmqo|k;FiSn;<6~z8?8OzJ zb=STS$Mdy<`>l_`5YVfopwt~Fd;t|NXN{AsBl(Jko*cnYc9JN^%`w>PFKlB?B7+xU z;Xz~Vu4khUsShmnJ^kLw&TEqQc5x`J&5FNaPv<&HN);O_m;w)0Zw7bgd~?JgpZAOn zXJJ#p;$1HjkCY1%c^sgZs!Ua1j&ZW!>~0G1NSDJi8k)6}{4Y@$u?BRn306Vu#W`sF z=4`0rM6YZYE!zYa{Iqr9_{kqbb5!P8+g*Nqdb^mI&?8*D-@ICI`BG)y5IRs>!n-V6 z#XM`TsCBbsc3j7eS!59v7Jz=uehqQrh{l?7rabU6m4x3oJp834SerD^F15X z67~vo3Kn<6GsO^t3PJ?oJ+AvHs_3h(gUj!4v-AQUonySB1^GSBp;3vqP;(j>C-+7= z(jS2*Hx(i@oX$28%>hFeJhpv-rPhG;^<%HyEJeRdq4hK~%CQ%3HDt$FmQn6AMgz;+ ziE6Xd=vPbpt?t3=^%(Vi#rnZ*8)M^R)GJJEK(H@~{NJm=g~OF5dnS?0RucIV5B)5CKs zE|Vn#|E5tfpyz#w7mvWVU12{K+3)1iL&rvOS#;3hEr)As$*fX#UuatbWh<08fw{VCWb5 ztrqR|R=2f}C1xX=Bw3`L|4{T#LRggar88Iqa!71vda*76C!Oj+4fe`A-l=71XkW*{ zucA&)LPsj#NmU9>*4DWF1Jv^Vb^73Fxy1PJBOED4 zpBd~yRxZne!wd3AN$-{Qkl2;sThOG_>}7g#tVMm`C0({ryAcY79?{FvB_J?Mw%8>m z7H5-rop9G>pOn=ZUDt{De`{Hy{+Y-^NBqL z4x>tUI7oxfXSG=Rl2QEbX9}F0T#GA1pK#dtyOv!(dpcMTXa;0&x}fJ~tcCMCT=TaB z$bPiPntk*M*Ck)SHR0cYT`9q7U7f=>LDiSnZCU7Q22mBY_cGS_@DXqY zaTP8iUB~ZbB**3kD3SF(L@VJ315k2kbf4H3;yTF))q_6Ybdp%rvu|@5Q}w^_$!ZH{Ok@C>swO0y*(4bS8C7q7~V838P^UgB<)7vs@cXms94 zYto{I|9@@{ZqbtA&%40)AdtEo8+=eMr2nvh{0K{rGi!qe)FN^|mFB-~a@G;sdWl1! zI0%@wMbiuPre(5|M}T`p?+BVUSYq8ffQs1PcFCHIkh(ed*~sG7wu>xbiJO*@CJ^kA z19a}J$Cz$_pq>q`V%KaPqOYr7u=faeLeKgpZnbyZ2h?KUp^2)aiFPN*u|9yjhtlI+ z-H$;2ij%k>eXzPU?X^3ZJc$TTcU!-grwcZFAsU|6l|jZ8_n%xH$pDYu^KG^U9)HUI z=2l;f5DQyJKWc2=_Jcru;$;BLB44KJ0&1M=3@?oEjIG`O60ki z)7d{;kc;P3N(p;65u@Z!!u}AV-AeKNDMnNgo$BU1pZsQm_Jr;PVR$m5{pR%oLc(35 zVj-D7I^&bdir5wO)O)macp`e@^+*%RXljf=I!5P-pyeG^?bn9xqm|)7Qm2{u@sXPz z;Nf|3;nfm~-#nHhg6g_E2GXRbye=y;-$)WF`1>N2gIWai?Owny0?;h&e~WacV>>V}C(!=nP)!r#jx*zw(Aj6nq`SCEivG79viG-X0eji+vJS2oH-79! zr4LTrAiF&Bu{`9byUP2uaaSvo&72Cw=rTl;`0U{l=BbEp1USo!*o z9aEY`@xxSzPu!41S&?fbSoeaA1;SY=@#ZL?Kkky1DEG%BhQ+hzt)3$%GD=ybG_|$- zv|S_T^kg%5QZl%hSawE}-R+zTN$A>D$6%6?f5lsW790^j8&yn znt`1H%`OX+oYVLCHn;9q74C>Bg9d1)Qs$gk&g^=#*fn1t7wT!z<-u+dkLJzh`*=Fnx=<0*TRINl70wZ3h+-qEC!iGw}P*d8vDVe84s!AVepG z{wG2&{6aFx)?yS4t?<#;E?phl`^sj(t$fz=UXejI6ZBuuBFzzj_BO>0f zhmpUs)|r|&H#X#gJ$~5v0MyHs%bCdkVqc8vBZBcHlx($#CVK91F$N$ce4Gx(_W2Ec zmsgA-$a!Pj3FN#%(Oa2-Y^~bhS%B}pu44wUhF($wC)gNQl(h-24;l{<*XPx2!;Cu$ zEa6?P0FlkvgA-HK3*j3GrsZ&s!t1mu5zsj{ant~^H;oaaa~n` z*EH9ik`WXGl&e{puqO$rFh?3_yjZ2A;^tX*&;3I}p+e-l1x#mO`OF)+4EBjF`9PVouayol}=h?C#e|GcSyL7%=q$m+tLP)WSx>Qm<_gpU+BA1zJn*@GKE%{Qf6B{Taud*jD{Jec1MEt6| zxX&HAg?_1XroCVi0O3CC<{e81&H^Y&%G!xuFMflh7bh&?a!Db(PM-j&JnLqHqj7)Q zYPM{x5`{yQGqtijl_%PE0?N&&)M0v!EPhiy!Qvsi@yL-t!<+RlMN(`es1H0!%V*Dw zAAlPJOaNZ;yd%VpHjagQVR#_4{}JzLkZR~3qBk-3x4;86_2&gHMHYKK!r{*V zY!hkev~TNIdahl0p^lvR8&~mJ)QNRFKr#qFbxpqA5GwbbWjxYC68pzd?0ks|!9dDv zY0y|)1MJwN&D#Q6y;k;pJZ1toiucL-(3Fu2aY7$8_T+F6Tm&imN5A&Mz313u8WaG# zenG!N2m<8uue`)7)P@O$V(YY(D3gI@1}fTxRuGD+@O-LQUJIZIc;rh=eWZd9u4`s7#WF zyn>t8OP@U2)>={pAWI5Ia_0lHY|dF^R~?$icm_C_5A_afj%xu#$F$}H_vQ%FR?z#uc|nuK+&kZYS?aSY^X`!=$-UO8nz5DHC+p|*4~N9^g*6Nn4dFR9001P^ z{#1pt*DyXhL3{Ef=ISO<+U8V20sG!~;)8e5FTJU1dNhi45p(llkIB6NpAfZh(fyvp z^UtD4p-)aDJd_{xXpDCQCUMAECI^2$MN&VC_Ld7k-#@SSsu0o!N=uLaSCWP<7U$4B z-HUDY9&I;RJ9*k#Z|_&O)-F!ouG>`C{pd+%{=Q`oOBXUz2 z?@2^z{?on45xsX13lFZ$)pZ1R=a|6P(eo&M6VERtU&8@y&Y72s`up=!p223${?{XN z;8wxjlb)DP<02%&JUQgE7cL^58_RdDHgEB!iqpq4h&kjuz@M;wQ;&CdK{P=ZxxD8N z`1*3s3vdI;NR_{HNM*a@wG~D)-}NU(g~Tk(WDJABk`5H%32jxh1d||7u|mCZ2bKMM z*ro?=3gPp-Nxq_?(9i8_&Mi?b(RJ~o{b@+hXq@@l9jRndi^j;gj90tW4Sh@B>;muy z&NXaV{(J5-f&s#TldSB~J!Y+1bP#fx$?W*`jvu+5{{Dw?b{u4ikDdPD=MOFu`JPk? z6O7_k<2=3QPwY?VhJ@dVihdnmG>o|8x+`*Kk9dD3D&Tt(1(NS%D1uBB;cr@Ez3rQ$ zYX-Q6B<@{fb;!cIynT=>xB`>UDHL*9)SiL+p&jOVGopa==dYKFj|3o#oB@81g0D@Z z^g{0m77QC_LP_Nid3V?FCvrrQGP#D_tdL36a=nYxp((%dp1}8{pYXl4pt2g(_pc{= z#8w4Bm|A!y>VT@LTWV(d=tN1l$8Wcm6MGhUZU=JL;D%Rz6yC{w4MC17$x4EB=O|{S z??&C^{)vp4d1TFffNccaB&O!n3@Clu!mh5pziwAf5h0x#jW5stVa|UuU*2PK@o_Y4 zsj&2*KM@}JIvX9gwp4^sLWmWkd`ZV0EwjP`0)@TYR$q}|0&#F~0KwV%gC`JhBdn8M z=K&6dqJck8$x{h!fW89Z)w8OS>&$;2H__7dM|DqfHp4fx;J0>jx#ZC&h8G7M&2DP* z5qp1Sk$pk13cCxneRs5SM^r+I8tnn+x5zI%YHJGJ5+nnxF8np#hDE3-GR!aihVLEv88pvO#y$9Eae?rPryrZ-bvvktPab+95%v( z3Q*+{p}9wZUq+7!C$vnA3t$>_cr|0koD-DPIczT-I zIKft+?r3bho5**v6hEwXX2D!4i{Cf4q_s#QsB1q5nZ>pYE&`i_7oXetN(IXRN;eg= zB87n5+}c9FroLE)TS+3+RKxf7S^@N)Zeaj-l(Alqn`SpuChP2#rzh0C7oGZ6FwTA_ z*!fV%&to!mV&KR@#}FDfp{ z`N}8mBWNq_7fErJL87QIpc`T2{mXGj>brc)gqSYHkQ;P@;YGj^e1PRqrLo7vxKkEq zsm1l#hJH4pspyAAhed46qEWAXLR`zJ>gpO(_6Se9`p<`0p)12z!7#jm`bK#*#Fe2n z_wmWO_*4@W`>MV0uQe-uJ<^eLF)VQ z89-CVKp0D|SBBlz0J&{yk<4(rgge8rul~TMGAS#|%Ns{SGN$lU48#o9Ed4E#y zlCZ;fP{Y+#-Q2DV&-xuOpE3L=FNw-oK_VN?cWE%q!#s28YLI)4ZrXISaED-R{%-nz zy{dDFJH712yyNgs=_#|N{gaqSE;%lo!-*g;p-lLVaBJdb{ON?9naAr(YoFcKgx1|X zXbTSYST|=CWzn2xl=S~@Uvt8-_;DnudrEm1Gpb{m)HF4Rsm}iVPobm zdNi<*gzJ%#H+vyAY;V~@npuG%k#WJ-z(?0BC|x*B4{HhWWD5l$@9-HnKP;*uYarMn z#BnEqW!S~)TN9aO%gL`<$#<0aX6gFc!w+|{K;7-_UWGyEbJ=LJy@2C=9Pb=iT8YZz35W1cQrQl)meOQWLecm*NA|Uw3#tN zcIn!(u|~+dSX^Lg_|A)hv+~$i=%T$H)wPg-Hn2}NuqVLWI;klZ`&PxHA;;Do7J4|q z5p0PcWS9&1A;meavYS9ZA5qsZln(*H)NM#CpH#Ke!dUwmTXM?P3O;@XAz3!V<-j>; zGRRcMKTpl7S)?XG;4I*xs`&8&viOy!a%001(>ZL+D`jBeH>9uhRwgKQAR{L9V_Kx` z#=>_vT;~G{;5m~)6KE6OAtl?PTP^6^`5f{;z)OqOe@Pm^hGVKO3!X)vE+YUkt-bylC?LEQi~q4azTT4$w%?G)VVGK01mIV+N6T0oOXm zrU9ogBR=!b?cM6V4i3sUWsf8gD)RQJqgdx}*2MD%?KE(>h>Lu^(sHUCg$8b}6j}Pr zkdPd#C>z)EC+Nt4W(>{TyIJ-IzY#=y&)&giA?8xXIX?%o`CHF5A&+{k%O zC@yCZsdqI;uD4sG_4_R$<*iDwaC~s@-Oh*1q5SeYh-I#CD(p;m@R|9R=n(AQ?knWHBE z>hMGpj!GVrTLo*Zk;tqXb541&N6~>Ik|!iPS??PHC6jwx3Ot4n{mHTkMxc9PQ*ppN zSgLFIK`W8iaKdk;iU^sxI}>>%oi$ahwok46$c}0G&mDvVu9nDSEwx}@)hoSP8V?K_ z2ddJ^=+#bUyAw4V&OT#bIXrvcxOtBTO|>~xW)S#Vnk<`r0;}T3QMtuXBXCoUlFP`a zk3LB)PGa~;yPtcPnos#<(PCx%*Bj2U1SU$Zi=&{K_sdl`PQP0s67#uQmN5>M=bdq_g^fmvPxh$O}bzUsWx?9WklFZ|j(zCIZ~?QA8OyHQy! zg?2mmCMirjh6l-SEE0m;lj;NH+hkwJA)Iy@LnX^G&rlJ~r~?w-+|@_qc!yZ4YjClv z(1+b za`sk!u?Jd*D>o^u1DT=HE|%LNon|75n2O<0_44Y%hrre={Rk*({ULCvp@MR}E891l zB#xx>ImFcXGW0>fPNm)aKtSlQn6}5URv{VdITuI9pwnR6K-YFr<4RW0cmXSBco2Z@ zxK0n4XbT&=sob6IY40$sTBEg=^!fZ>SBCkQPs97o5^JDn(p9{)&s`I`_yW>2zx;?j z&)zD*gK-CpkAH62mbphf*E{|m{-Zmm6rlGh;z0Icw;F|yy2_Eddxro=D*1nm!P$cp ztLUD5NDI5PvXiP`=H6ciX=-1Kf&f>L2kR4(Uhmq$c6;1W!iBp|JZ{w~M%`?eW8oyU z=j7NwCev!lPR=6TTcl-NgHX3W6!|#DiLO@vAzp@_b6_jB+>@aq%lLA;Hv9|SRn(ds zawIBRTGUM-zqrq({IEm7>w%tZRjfpS!FTkKr)~pPYsxy3E(^DUhIc4Oj9n;jf$k-F zFXtH~w^Nebr9}yRUqq{XpC~q3<0ko*sTNIT4Y=MAHqJn<4YS@HpZ~Tiq)bneM0#uL zgT#tDquPd+xZ`H+`{{MMle*igE@WeyM&bfkUrh zAlqFY08GlvB1VsFJai_XDnF; z&!ND#qpe$6yUS`cd%k%NmJ_(MOP15=bHa~2ksrOSY@?cj75ORh2JTUB5f-BIg=Dsm zv}VVx&hm`NyGX9(QaQmBYAbYLDT3@&M=~(TL2cUEaN1Utz!=G_)4 zNe~eE7lF!vg+xhxK_5I+Jw_7}$rmX<)?vDW#PE4zOguh&2610cS7$?tu=KH2;)W4Q zOx_CpdUXjCf6+$p@)L63R0Gccr-d$_)%pnDq;l4C&zV7S)9f3ziPG+vJhSWOR6=aW zm`*>|nbb=k#Z(b$d4U|WjA{}O=UI6hD|ytaGwWnw1;EVF{#LLKbSUFX;?$q$)F{NcY^dP+l__w4oh6qBg`WpPcdM5(>bPxXFfu+1sDAAhI_brX}iRf zjqg$_ZfHR0Sb8-rDzMbjlb|^H;4v za?UiP8yo_X?cZ#vm?Veg|uE0SgUnp@P94W`RB>Ggc(rTL|NpnJDJ1P|z=uYRm+ zS$o=h-lapQTqj5oFLAdl#Kv>}_DkdHFn8>BCR{9@(Ja z4A~G+3I!#RKDBw}--Az3)Ql7RID}11k~InhG@LL)=H9UJC}EtzJipalxOhy(G1}`e zUIkZ@s^4n2<{Xvrb=7AnnxU@|fVli*W=;BOd9g3;fz^!mS9U}?=I66#jFE}PnifFs zZ<^C5qeDjvs-CLcmwf;t>7|#aHqRZep@4?@OXHRg#?t@dcbq7YCQk~;>OP>o^)4H5 zg!kCLHv7IxwyjW>{@ak`G!c?I(~W}iG|LCbV#Ci{Ay3KLq;9-gL#ySq4ULzW+v}Kr zY{;om5V~G!CG~ZG#!8s8L%H@%G%VJYFt!Q8M;!P;x-TyUjNNX1Ob-3^;i1U22mIYK zkT5yXq_+0}t!aefB9k5w0QIyiTkn%>S!9>H>$dq1D(Vx9n@)2!8x!K}f3aSY*`=QV z%{xzOczmUb(|_el{BWwB{Z+TM5Xfy%D*pjh#lQP1gjxkqVa!j1CHSD<)lJeX$VxoF zf@HVrHFR1DH5qQ5^t)E+EK6B}I!pOfQ3e;$p_te^n*5Ogz7YeCJcrX*PY?7u7R$OV z;N0Jvh4+X)4frE?v^;lqXzt@Fi>u0Bj--WuHsyv|b3`(>N9|Ybwn$A;+ zlr={d2nAA%_=_hF~cR%xOq$#Vw zW!bR8hA(N2|D8C~KRE2NwO^$fNNK_-#7EnW|Dpdl!7RN4kH0)_fNjYV4~HE(`i#5X z*g28(0M>SXl7KiA91Nz+Nu@i+2ITpDMLEt{@b>L2vB*P^q%(&OYxm1fiO}U>46G@? zs1RjU^n1v7lmm? zuSQ1s$A>=hDqDQAP=eRb6QFtF^0mV71El|MEz;BjIB#UM_`2(N#7lxOz2ajQ0Cni! zA0m@x&5v{e+qr#m`&peTQbdE9DY&Qx`@=iyOUvnAS1(SNTm-%a^!q}V>Y8%MNHo*) zO^h(m4TmYE5O=%$x{A?bvC|{+nB7s2I!pduhG4z zwdoz5@Hq2ul%~Xg3VO|fUPRJVdIWdv?}QBz$WvEi?u{*0{=O~#0`;S$?95WR1%jR7 zV!mw=4JyEWR^o(2g&-~kiYt|f!Q%8U1N7;qVLpV5Mjvi@P4e$;&cHkNp?&woO!@;F8y-G+PW6*rc3CaJ0yOD=?< zaw-zG>hTZZlu6)24m9?7E}UC5b$U3L7H99O9eu)d-{p#`af()Epo@5}+jWLS91bNT zBdg=OttTrdhhHht@wfHd(h~0rF!Ms=u<`eS%9rzi)nV;;eF{k!qL1G3H;avRnuFqN z^P8P;*-mqAqBY!?LzOA{C5zdit?E*-PKBorw!SjXCjiEt>D_dgfGTmpl!w86Y8I(_ z41}?QV-n$d$Dz`Ba18qoJ&~I`YRz?z0WcP9P?LFj0pj-~;h+O|e>}W(By9)m#&a*p z6Scrob$_5HKT#^u_4$rRUAgs<$Dep)j^f!rdK6S>>FVGht<6UUc~R)$cArU zl?6lh4%1jPer%1!E1`rRqXpS(@?>F%oCun+K;(@(ftrHP-R7Yp> zv>OIRaohZNoU)SzVOit~2y2w0E^m1f(RuDzG+nW&K~HZGu5)ymEVx{Y!|($S9VJ68 zEWsWJsUr*oFVY0|mH*eBLkijyRq&QBp;`}0h7Q7jE!k38>Jt0Q5dTf+)3v)>26w3t zS#R59^*eH~->QP@jXyI;eT4$qKw*|{p_G1QHb?9KV*Zfc9u>??BN!;c_COb z1ewfI&ld_3f9U`}e!CY47N3sSP>NT0io%s1%4@DCO}S}&aEfhFvOt9*b5DeSYm6^c z6o96KJmHrh?8R&`TRBi=`~=kGi2|{w8ZYF|53%X$9?o9S6)S;5>hl_nF7Ss3kT#fTIeiRoVk5Jrnm)`^{MYh6{8r9*<5@(=U>WKo>y{`+l z?mqsYu_64;&4bce7z_=m4ehTG(3Z6(u0ypX?j1vh^^t-s1_D|lGk$SsMD`$zeH`mB z3Wx>mR)rUT2c|8s!)@zimC*iMMTDoRA0OzN=!^07Z~tWNCk1Psb5nHj0rx|*5`Eug z6OXLC)eybc-xIG=VuL*O93c9jci~zx|5Fi2ym=~q(#;W1Ey7=J9?5?O@@7(;O~7cd zy;S8(A%ChTfn9ZaQ;GuW05$V1U3wvW>f^-KGkmr0dObb8^{7|T-Nfe+?G|PAxG;BW zez}#EwVMu?h$+w2ovhk?9Dkt(1H`Bmkrnxctd>*rZ{WeXIwkE!>35Z+R0fb*k2=8e z1S%i{ZDsFvWZnp@km=MKT_|=Gf!PPqVEMGZ9tpE4mVh|);2haUZOOM)!)O8VeuZGv>01wm%UCY_$k;GoS#J6MT;4*P3CHfCKq1xSr&;s@Il+uB#y{Y+f29rVe~CR1V(i{=2uQ!&SRQ z)o@KoaYOH$#|c1#t*9h5nP3_sE2D>0Yzr3`9%c&4f{P;^LW_rdyS4;E>uhOmsgJ=_)~Y()bVr*n=^8Ps}WU2bGK z9fxCRW2yyymm_s!$w%wopLugt%YJoMhiIJ|kb80t)-eI)o&ueyF4CI}_x~x%|K13t zb8i4Y%AJv1`S{xel#0!1gf+Ll!rJ7!1cphVN`PY@ldqvv+oKop{Irs5q64uPYJ={f}5 z6L*`@XC)Z-5Sfa=C!{X06*f_n)@$G_kxjsaWX@ji@nZw`{xIhlCR{}(^ftW!yGG0s z*zT1Ex^nWPTF+kV>YQg#r`)z$ZPoyb%}$CQPiBx3UVy-S8VyVVTo84q`+ppN=BD$M zWNb6&AuIh~S>JPDnz^tX(XOYgjLnQ&b&@D^W(cWl1#SfleUlMpA#)$!9<|(CLynot z%_3B889FZ1ri%S;bjIRLo_RN-j6*)4MW^?N))Jh?PxR0Sr{a-u7+|!e=3!4~+rB&_ zKJ@WQNq3L(RkOqTST$Z`j`A<>+#KOjCn`{6>aD!B_1)A|qxeUyH_6zw)@~F?>kmXTG9acG#`N zi4WjM4-I<1_E}AGSZ(JK(tA(93cb$vS;G3_?F%e%D8Fng8FAGMzOSgQC++?7Of0Y{ zi?x}2B3$`G+$n;NX|ocaa?NggumKQXG>Qn(?m>+xP<<5lcZgnY=TJka*@$>+0DBLn zBWVkHECdE@ioEVY7hSt@)Pt|RvH0M;U%528Z&Dht7PrB-eK!?{B4l~hZiqBZG#$se zscH2gmpIS++V`b82 z)uJNrF3&#k5p^L=At*;pFFi33+hpMWbAsf-CSDK*6c$UBUUcf`nkMygu6JG1XF{wWFk;=sK& z9#)^U2T5@1UH~qgfEbs}zrT|roYbfC`z8IJy(2S-Z-U$oHy83pjV4Ux#+-*(t-(gi z%#Yt75czx}e8NXxDg^rr1EB5D>MTg5tUyavfXyF!_iE3VWB4q*Pc&9K1{eeEs}aV= z5pIO|w4d5@5$l5|)1Oi7Yp=F|AKHb8L0@qPW;H=BMO_c7&%t0^0qSgiy!wFVTCG!A zrWh6uY#V@j&xx(Tzk_i+9X^vD4fszF;>Mv&&)kgKYo<`kopvk+AR-GkXb6fD0BEpuS;s}) z<%RjK+kMXk?yi)vgv8*UmyqOEf&9GNpZs!w6@%J%Ke%1g5uX4DaCD4HF%dRLiy_h^ z*iO+k_$^O9`&$=B%nyRT)N=VHF+$g9N%(B2#c8(3PPX%Mslsx3?`7M6YCJUsMnw2! zVVib=69h1dWjNAeuAhFWuyoj`hzT(<(x8GBJcUD-76=Etpr6F1 zTPzDC1WFc7IPuSCVZWrW`zMaY4?}~+U}~N(Y2yub zv{y!5=k0(b6iXR_63f66g|)5)`yUEPT#0r{$9<4!pDt9<{3!5M5d&8pQH*8(ozXV< zCxcu;^~Vn|FFYFVna2o`rh2@}jA6jR&KD2(4&d7ULOJ|*uE{iK>;m}V&hH2QSpm!B zzx$5DmI4k|5lY)@#k5}0bwXKJpFrsjoJc0!`AS7zThvbacgf2NhH~qZ?)W$U2Bkjy zP?W~q@$;W8BRVmKc{k*$zv^sc2+uj)rJGfg;8}<+%eV6Jn`V&b$1E{EqFq zaL@z|v}ofEoP3$ zL!GPKv-a9++F`Um(354beNx$keQ3GVs1O5e-s!zNYEG3i^^T zHZ#Mp%`gnZFdBxDyP5la=AQel5JgRh7~3$TP_D@>M5!oBrOf@7LMpdHmv2NxS4sK# zoqyhcoyYm}d_J%D>-BuSEBr4LW}J^h{VKGRpGf^Vk-Dolt)#%n+?z>5ui=Q7N|oaa zxCY*Rrp-}D--*m8B-+iR#8}c`!|0FrQf-(#Am!DJ_s8|719)gn(+7w&+vhKyTiq<< z8B#4i9-+{fKpmq*^R+NdM$E4zaxH|j;#E~SA*K^P1?vC*E?Pw-`i7)y71m>n*!kpI z#4NE5G8|t#a}R-)yCcmX3M@3KEe&9tv@hNvYGA@yGhT_Ect};P zrZA#JDc{9vz*#`5Onx88^g_=hIZfZkpK>n8RHl!;E@a4e6*!k)zRlB&lh-i~JjA-l zJ{c|WF@D1%L8T37ndxHL4@4bvu$qp!+D3tcJt!f)E~r*8kOi)0+Zv+L8cgBd>EVwC zV8zMTL(Kc-8qg7zXkLM*(z7g^st?POlIX*?JLgSd;@hzDm|Y!%M57O7N;;4@*xRZ# z#o8o!sZa2(VorEIkW&~^C%0*H=4$81#$HT;vO@QN;j7YOXFPx)ZUi8yWE4~hRdp6< zzTIE4rAQ`d!eX<;Wb!ocIkU*TcMXQO_`?=>PBq|JoUYDyNU7+~I8T+!TB3Pa4mZ9! zGDQ6u@l^KRRRbNOw+PET7fqN@VHm%o9K%ZV91sk4zhNo`H8F<#X$cAaRjkZ}}gXAb;@Y zP~)v`cZ2)T8DU1m2gcb;43!9ym!qTQQDKCj7tY!=qM+e5(K<^*C^#D55rmEE==Ge9 zcX%z%9}hK2C>YQfU5)oY%bs2Y1aiEPtD1?UeElI(o{F+b%Le^ zVO?semabxY#hj8sD+lGG_5D6ymxO1yo4i|GZgomz$c}2tGS&~Sc|!!$oDN0wB`0VA zwD=#H{mKq%3<(3BJ9R&4LK)#U?JhhkMU*EfLm!C4&!!)`>R|d^f~BaPTu?=&W%dH@ zgXQ#soewK-skDu#thv*69MI~)3j6q$)Swj+fV3jhm#;=O^JbuekI-*x%Hqp8<9oh9 z(3o1=jHu9n!Iu=#1{;&8ocVng3Jeo(*8Ejsj0)4gPuAU6Z z7{@p8GK}peO%%*|Kv+#K&~UZc(7mpSqbqjUj;NRIz}aerW5S;)6TD7J=Q=YZ`b|Uv z{pE`Qtk0R-fR)dSXJGG5siJj);)LZ>kW=J}XB;-jJPNYJeAu=M5(yMme{8HKw^X> zk(Uo!p7AKvh);}k{3vt$l9Yok)Tm^@UVf}W&fz^B5r4;0!vSLWr9AOr;|)tJuE2?A z{-Yyak=C}$Mr9IDV1gUf*Zd*Zc@>@VM z=8^SU=k=2CCK_Hczp}7!;hm)uFQG`sNKQ^V%uah<(OM}S=!-cfU)jCMmTQ$fA{tjL z#B6hHyJ;GRXN~g=!$mLbHppSgPqG|P+)UWWh~CcyZ&xbr^*!{1=*q@T?bO>t)P106 zLwX$N(tr({?KLgCa!DTQR$$!vZqI>@I_B6pC;UQE9v<*{<~KtuUV`dTH&Sc%$7%w$ z=<8xCo6IL&%5->Kc3NAK`6GqnuRBB=xZSRpvo`qt@9=YzeydfLcP9PAhXMAZ0s}%E zQ2z5SRb^b{h@ows!o$w~F0sVZPd)pMJAyHovln{L!Q3Bn&smL(F{y|bgw!cxqMb!} z#SEA9hg7u~O`|Dc4e>tAES>%I8wT8YmSG1tcTjU=9IPgHOgTSI zB+<{HxjU!x7~;DIXJ{=O*O{oCuk(s%w4f-=B5n37vV3uLv3oqu{Bmy41Y*}lHnUye zg~#!mkq**jRBtgEK{X8Wq})L);r`=SVSg*Jk42WapVvXf#>9c&T=cJt17AtwT0E^7 zLHP~Bvln*4Qw#ks5cxRCk#@c!8PC%};K7=Wb!Ackcr06RG1?J#6TyzPl6OVs-)ZcI zM}(p~MX(BJcWTp-@^aNeB*S?lBr>3!PyeqV)c(rF^c`}b8H5A`E_2RqAln+^hkP#p z+fwe6k8`Q6D1sxBw~pLl{U0IT8>(EWbfR48ve z9t!d2H##V}+rXEs@+;ZL(bR%k;~8+|Y+lY8K|IF4!PeRKUF=&NwzvOQcf7_(*PyKo zBFzlwb2v~yQt4Oltn*N>fQhQJf56)$tKWmk;#?|@aeq|UpwgdOE1?uLuWY4$`pH4p z=f9pfiHffLQ{53o({P}Z3R|`CB2SeQ{9?Mp{WAblQK-yAmVcM8K(ht;TryNZP(+GXUe!!Kt%+rZayE{UiYJ{$Cl)e+qLpmotQGIbD zi@X`AapOk%0`}k8tw`r@G2>{Vf7Xes2M~i{cZM?QV6$4p`-wm=x^;Q5JsV$U$=mit zgMwMjxvu;#2khguZ~WW1ZC?fXR*_LVvbm_QY52&?EO0CU1}S?Mt_KYeNzwqSiM0>e zq!(4b60}oUlKQy zEizT&?TfOZAs?QDbS8}+!<`|Ag9{5)qbmHI3L7Cx`#B*PuaE&sFO?stxya8qzqT>< zY1?v^d`E3*nWIdzooRqNf(wQICIh~AwfMSWT_C_ydKh<%ysq-zb|wE3dF~r++WLnClSxR_8bU;QlUb!-2n^TkaX68uA@X4SB}^qwi^p{jy)E5Sa#a%7p}+RJ$ufvjMmXBIIcLE4f)(>_ zY@$K5=+n@x9}u0dVuX(60+JHJG~V%~Ehk6mF5$V2WAa<;pAclFeJa;0tHe>*y)fPH zAxCdH{M{st$C$q-#$(ey$6i5uZ7|d~9y?+Z0ix$njvXS5uA~EXvJN$t<9P|zz^6et zffEcT?<(AX$i3d`I14xKs)u&O2QsPBUhuZJm-APnI|?=)aD8EPAcl0+>U*tNR@!6y zo>Tz*ka8#(->c0~`=RNY|AKRtC!8kQ?y9|O7sms+${xSKh&H<5`Qb9urK0XbVoTcr zJ~5#)Q4o;xpP!49rCWkNid%4GiDXRY%p*?Ce_lJ_WdC(~$jVT*%>)^8=^A8n&WNf(e4Gv6Q4zFs zFcMp7Rr#HncK9h<=QoKrAdt=ubDg*@9TR2p?k~5_f#%Y zFx9(WKXznXdt^!(=|O_pf%Oy+JaF1$NfCsgg(4~kR5PU zO~E^V5MibYe{lnCt83w}H)888a{y#axSkz9Y%>^+S2lyByDo1JW%Yt!y}cd93qw+g zdRKt8ZK~%KNo*29;pI!j5QE(Dd8V)O0aAX6wx4cDL6Pn5GYkrQ5{2K(yk-OxZdjl_ zj0vXag?wd+7J96LnP`hrq~CVxoGFm&o^!kMBNYDe!O0L|&lU8daC-9hv;q$MMWI0E;fvr2?Fcas#w9!9ugk?|wh}(zD8e#mrZ4NNoy# zm)b7-a&7ljDF6r+hDpIuCw^;LysE}y_HBockI;D6(WESp{M6`&Y0zk{kf-mV(3Os0 z&ww9RxS-JLBGZ}*INo3uRruZH>8{}8>h>$)c6ba8qvKr$4rYY>WP z@aXf8M5na|wNRA2UFvj-)vhYQj;3KiMwfd&${gKgnWnI7KGtl4QVKD`+te_21l!KM z_)x^KZYKmb}J zo-wd}xo2xK)eUzuCK-~Z`;|uNfw6LRbx#;Uf%|m}y8F*Q)*tu(i6;l)ELzFg(Zle}O$+BmwN zLP4X^(Pwj z{Ua^|PEZ#^#T#z|JWXZn=6w-2UIC*MPgqxlBC{dNILtu`%{bAn;7Cz|!a~qK4<{1g zBvX&(1La@(DHQcyxbF!kNe>X}bXPCJhSf)8w#KEl_GY7}p~9K?rLn2k zqGSHd5+(Avhq{iV>n2jsXPTBn!U=vbvFKi4%J^{TWu>5iGk?tSQ&XOG6FqlYPWg-H zqgf<0CaqlILWh3R%b3PdlJNE#fjI1O4hw3I4c~#BbS$OPeyt)Pw|;=PPpErhQLK{z zblYjyEG7A6j6rf3C25&IZE9V$;vfFgN;1MkL!bbx!+nE?3s3VEwDJb~{3Eihz0+gh zFqL+t#&>me0tIFB4xVur=)UR>JDJm+rbUzJvX0Fsa`kbVHvfD~V83~U^kb`c;TN0( zq;YrKaNwrOhNEg9y>w5}HRnve0K?I~k}r$%d7=$f>hs9zmJMs|C2?FDKHUmr)Lpw= z#v)xvG`#fMt&>N&;lW{vbo3&tZkSA1L*YS`FB3W=XFJ@jwhU1ARiPoJn*l0ZDJbHs z$G>`gE);XoilgQw*w#Ni3GM^1&xv^)MqBGMe1t6}r?s~aTzpG4It^|TE92#wgTpe} z8Y?P<2%&z73d2TK_VO1=Ltl$r)L;RI%m*Q7KUm=7vM|7jwpb+=o9@W(b0?%87Kg0P z?>$(c3oel3e*-)-=$ltKQwD;iMOo&aHy~bDUpddapr@KBA;C51b)w4QfWm8dayB3$ zY2iC@!A*2ulvT}UWPNgYWKP+Z-;YZEG=yj0L3Lu8h_hRL{}#{0qT?B#*R|9^ z&oVVi$iAj^F^@%{-H2dxh|RT1!{u>h?Rw}e21Iwlc$^@u{x$g_IB|@2+lDZ8wc*6t zWgzZfoFmlwrZ|N9vcabj2{V;Md=8QKG|2w~=kh59sU_OZx?oN`NMQ_wW$8a3;1_AlmSc zDDj`wf$J@N<9XhP#~Q7^LV2HjFY|*BjGUZqBZdeFxGg>l7_mEUcO2_b$2S;dE-lBfv=;*KoIm}C@v4q0f zFsR7KuV!jgCFaFAn=%?{c8$> zpX{IG#8@VM>!600@I~3USCOEl-Z(z7B;UMaJ>?Uxwb}&lB??A=v<<%G%J^=HzAS#e zNgP{4C-x4N$6GKMCV$R2m>by>s>l{A*N>4cf+MPKJ0Gn+&Jl;zUUGoPezF{NLk1X8 zl|-d>kFR|N7dzGsT zUE??Nm}bbO6(@kTe0sIP&F57duOJQLXWFSm5G|I9aSjR9xjOy(iQ&5I#pI1JH`o2< z6Fd*Jh&8eS=((%B>=GiB3MzgJ-WbrNWfXXStYE!T4_Nat0?jCc-yS&DM>KNJ7Lu%z zNn`fr8izt3^_mko8l2?v#!J&0x<)}HLnQIb*r;V-Gak0*ihbIynI+IE8hViUIeWQa znM1*4`qVKJYSUw1sJN6=Lsf%T(TGELd(M}&dInVi$^kcWWufD9T+!XOH~F_8EkKd_ zp)%HJ^Je2S_GBwOOifctg_mYBSdlv%(&9aui1O*MRW*+R73>Eb`M!lPpDf7nV(Vmf zxgtX00ImdR=!+CO{;){wvVN zD?s`S>Ld8S#5qMK?+Z0XbOA*}tKYAsZUo+(bfX0Gx1l2U1Pv*&;jpgOFvU68aw+b% zdU6Cmlt)lFR|i^kOQ{WVf3un^eLZ4LM@lu0=1t?-dP&HzNzdLpyVqU-lOp9i2Ot1L zXX(Fvo}5PXEJrNfqp$gPyR(o@=pmx8??IJbsNGk~JIz)49^g}NGraU{LZm^z8d#T2 zxqQV%$%7Al z1{C==;K84aYr=cp#AMXV^kQ5Z)I7$q^zHbED@>;}5%M+mKX#P+8caEE*pFQ0L`ZBl5IOnAMQnd@+0 z%lqS|Rh57>rs^#qU$^hix(Qd@!iXC5*0 z<85%Q?U@4;c-Q(3mk5%4lzCiV$UpQ%B0@7T$m+$F=l7`knyh1u++kcE*#5S`Xx zXWR5kUiJ-l?~ib6Pr{Qo&*#utpmpCx`F8aIMuiXg!+?WqgFj-~*D(d^zE z1u|0oTe~KN;mJXzTUf%r>A1rsZx7V72*A0ausgX|^oQ9bNVfHFkLK-P#fVL=)oKiC zGPTrQ?u&>_q;Ya97tAftRGCGM$v6o9I-tvGrvQPkLJ!sWC~ZXv6bIoRYo2!IE0?|Q z+}$Jf{poeusvc^7YSa!;ecr`Kob9|KM@hp;_&A7!vTs3a8+P0wnN4MH$IzDO5vi-1 zXLm;o50UrsJk8Xjyn1|qJRmLJB-#^)H2h_1VWP(`GLWSzbB z6+^X2-V%41{3$USF-GRw6(ns+Z~XpK;06+@`g+dbB^cQT4NtEf_z{z6K+ z6f6*xIBRA09{vP46XEID^IEHrC3Fsa>=U^p}$j5Q2F zma(OC8al5t9kBUWP$6I?vQ*d`UayEQDl*WL)0z?EIQeAhVX?NM8zWGSLU*epy%z9f-W9GJG zCY|M!<`Qz9Ad1?7r7?1gY)0$4w1MK%uXRLk(g;&1G(kZQkRtKg=S}E-MoJDKE?fv) zPSm`p+2m$_EF`ufY71HrqQ86~`RVi(bBAz?UyOi}qlC7%z)?GN6(-B#C}GG9=glwc zAfsX7Ms`0}b7j>V^}}CjbIRApBQA7u6ge5c8GTeh7bc*UOSh#g)vDY7;ff|IK9s-E z$rJStJP)y@DI5n>gkE%F9LI$mNV4et$M^7$;4Z}0A0Gt^mF~K8FAj9^w-aB2ALV_I zA8KwfQ`ii|7Wju_xxs}2d=ux9C?=gcdnz*-6DKQh)S$Me<{b|-FpW=Wdg_-QfyKfx z_drHi_yGV3(Lh@&npTC zNWVmJY$;Y$Fg#+pS%ohfq!rQgLjdy^+ElfH6wAHS3%)}!88?#!JpGXoo79xK3zd!n z1}A4>k`)El7SUeoTGIl!dz;AIyRbLhW$KS$Gr}^gN1g+W5gvN`ZvvkJ95~YLp;UoB z<@TzZBh*m3#W0KmIpNwt>Qw_D9{T@BfD^vum+c7fui&Xio4BwsgLLsNKcy_&#;+u| zNS@l*z-6*bkN%;GiyM!nLVm~o!nDU>WzdI!F0h%l^HQt6b{0@MrYtROmm`I~DmL;49{P)9BCJwBvwC(57}hq|2Wr`tX^Nc=vj8}6eP z8MX(bHD_Hf9&}mv7_~4FOBAveh!;F#%5x{Oy>+i79<)ea`EnROibX9O#B zYf6EODt;I}pUeJOF2zn^`LLFiubOT>M(HC@LPOk_Pk zar}^-g1r^ zV^6dWbb)BE$iDUTZ*qcSQSuti&N~ICD6wL#rOgb2^qZUxPi$%$ka6Vh@ zNU&^hbOM!QxDC$^$y85AvxuzMH!%m*S&9Kz1?bjMZ@pyPZEt)A@sJQO!#>Xe=++s1 zOh39`>MtRysWPhvtA~zh4d|# zMn%_Y7eIaOAX@1TsyBPL1>O?-kel2|D(w@h>q>k{YA;Oi}R&xds=qosM$u z6I?uQi?`pAaxWLQzMh-mv`WKn9RCF? z>lPj1y(#HAEg-}5E=Ai?a*}mKPWG*`yn9{Y8`#OmiGkJFo$txH;Np0G)S8U6yq z!QYE;vT|!$q4RsW$>Ku~uhKk1HA`K@4hlg;Kbwe%yj=t{>`fZz5E|{e_hmwwWU?>}I*t~fz`@M_ z5}!E>8@{`goW2%65CSHRLs)#e3CvcAw2JWCpg3tIzC)i~puRH2&h`kq$8(GbLkoe-iZmV^^Jon6oOCvkg2K90aJkY86yR6SKW*)jmV&jIx!8Q~^SWtjKJ zDad9#V*!>E;3j#4Cg>?_xr#+F$4e-^t_39oZMToPM``8G04|(VQB1~G;FKn`?6X;l z2XA9**?^K%6C!0`Dg#BG0 zb6;LcACZg*rZ=<hOFF%0)1u7}E9duTz#+6S zdpX81{ANG*+ih%koZg?1qu1ciV+cYtN?x*a?5F+vfTxiTtqt)Nkq;}6{U(07Bf;9_ zbTQb<>qE^y^&5LLWU^HLcNZ!VHH|%q$0yTN92%|jNm07BR?G3vQc`6 zr_OsGDSL0?%(e>@DzhK zxzYd?vU^*RZanTmWCM@%;`yK+F8IWAt@9~_2Akg^O~8`{ZYWw-h?P^zNzCY>Z6WDd zd9FOi*kfP@$1e&j8@_|}AVVEQwav!tst?GkyTa%$U`EOwcH)~4%ETwh0492xV~6J0 zn!hV@^TB%CVZDRFt-C2CHx$>$4plOJXj&D0>a>c`EZMiHK1eZQ|DUXiGThrP1OWhP zp&w&A)HWyJEQjSn+y|EB{e4tjs!zY27S3S>M|YF8S{6E~`jMkV{5{_W!nM9I5)rEY>@j(^b!yJXPryl2VDQdV%f2* zcixL936x`NY2Q8XRwlQmCtK+FUzcK75>O4yMKGXomq+$|WO z2BN%!?;x%u+@PA`UL&I$TTRx5J+gsajy=prf_vjMyN+WtmJwO47N?SpsxuLSLO&D7 zNs@3(X##HDf2lz)0ksx;D$M3hO{(+WBst{cAzpZo=yySiKCU)MZqIqqSxHf~JESdj zO$$GIuRCU^_>tyB!eEQoT%d_aar8uhHRQNn zk=6o^f1$kR(faIrNki?qEkCtDT6#ad%<&g;Vng^o5kxIO=__F75aDIuyo&g6i*!d3 z?m-|W>FP%IwW9z9{mYC3MfDmH&BP#yx*n=0T;V7b6tsOD2iRqFiSq%36CKJfjCpc| zA5Qd25RyRDqv9ox5LwZv!dtuW`glx0?`6|jnjqwqm}o8 zl6vkd7J5P9SzTBt9U2^6JV!Fe-V0V&Am=%=1*naIar7dvVN$5ng?kF4blo1E zfar0TY()1nQ&-qQGJfM$5tqFBkJi@_i%g5s_sx+Q)~(F-5t{T>_{SSljOw^IKmO3I zC+gJt1Unz03Z-tcnuqon4{tYq2YM`E<@xzs+@7$$3NGgsTL?<~s66}H3l(3QwQr`; zJ$eYOO-k!xE~|nejUwW1+m>o)+Oq0=wn%U0`(Rgg0x>Q_d*5vYGgjG{i+xTp{Xl`7 z+kG%aU>OFz`yl46d@yLE^RvmAZr$Xmv%<_bH8JhTU4{*gPwt~J7!oW^sP*9}n);5m z6%+qi8VnbZp4ME39%^Mm3lIax?Z1N~U@r;xO?nSauOQD@Se+ZtaQtCQ%oMx~y|^>W zP!sy}fH05ZM7hBV1vH29Nw^WsF+sOxgcoiV^VJ$PzI>y2h91>?Y1go`CU_m$%giWy zddcDAS+|IM+wHy*9AdJcr}?hMbe>N$TMW?C$A$m3^#YuoEq(Y9b_o}n2wNP$OV-`2 z9D()kDsHNckzc`oFyPX*>)c<-!w-_@on(2NS7xoB#%ft;*}kjk(N-_a1B7VGAX*cb zh3He>nGw6PGBx>kW0&>H{vkhCfoTT{+wJWEQ7NcjV+^%E+2!@C;SK;`P;)H2wm+T{(bd$lwMa>`_|%rC1e27iG6YoRfI7D-IxhVaY&Wsj&JHG^Iou)*>^w ziw~7{Qcw;FEjJXsX-nZDJ6 z-rg6FO-W@~*XgkGw~BS1>$Q?2bV4B%jixnvL#fH_78g&q0d(oZ0piB&O}RcrH*19; zj~9mA^eKo;vOQsVf7|{N_BRF1xeu@JJWTYJ3b}R#9H*E*M#0pAsE^Ff6SGNHP5r(rGQ3Y|67`S7@2oN)0OxL<5Oc*!mxcSk@xKm7M%g4!SIT z4t(#hyQ7S@TE-%2NKvpCaj@67E8`}|E_o02(>Zta9rZ!j=r9H*VwqL7tv&M+9JKsC z?`^Dz4x5i!cV07%bu%9UcH~bK*FA^MRQ{J`mADm;70ETMCKV!1SM5m~U{$Sro}nwaaKf5Js3#7-+yNX^@;XX_z&#%$8_D_C}m*w_3+qGu=5$jLd$1 z|EV_QTtbRZG&MQwIGIQ#6MM%GXl);}?Y#cd;khgB5A+(`n`8fvO z$F4LhMsqD|+vOj~`9wO0l)1Sxmg2L$hJJ4p@*y9&9=Iuzbsp=Eo7{}OxC*nlxe|QC zhmkJ7>^|9@7laW}UZr*Nsjt7y>B0c_N+rj%ZsZznw&Z)%x6e($8~VRbfpcKZ3#|GZ ziXS>0jGm51E3r+<8=E22%exz8zI9f*!K#yL=1FdF?ISoz8`^ye&WbZ&RrrWc`uNA= zUxNgbRXncrvn<*1U6Rt(D&iJc+1Qddlq|4nlq_cb=`PUsAXi9_)EnQBNhmHBh<=l0 z;JrnS7TuD?|Ae?jD)Ha)TF>sfD)Cf}8)#k6xrEoZv8N9CY`^{EVr?G1g4lAg@9?rd zk~u4cId9(A7H{(BfeQm1vuEQuKHxu*!VE*FQK$LXig5{0%>6*iYK)M6Zgv?>XgPGo z#=v4k=EdD(_P@BZ8C+G2!QR0>U-6m9&)Q_qo%-M> zFUF+%%{h$qIA2DJX#K6kSg9rF!~TADPcDdrKHu(2NDH+yT>G$OW>5Z)eSK-2@#IL= zo)MWml`Ja3!LaR17z^_01Evsh%C#u&v$X=kP?kAuz#^%w*P zs=V%;z8yig_Lc`fvJA<3o)Kv_O49`Q{hIDwy=u_HAI5Vzb3{0?W}HiUTK%Rg=+Ohi zxTAVQ2#dw6cbTy6jU#RypBtIPC!dITYmhL1)(`okqYSA31!?78=dw(fWPZKR$FFt@ zwxi~{mJ(G)RLoNia6?5{G& zpU;x2i-;ezr}K@Egm|AXL|#KR^osZ@W|CH#w3L&-;)s1f99dHMtUWlIr zzG3=(fjvxffY=+?mtw8uF~2xx48uFxFn9h1lEf3ORZQE|Ye@&_c0&!GbCkG6 zTxpaY3NTgmbtj&Paqpvcsm%H4;K>j zbro&}Hh_r{|Foy1aB`Kca?2#i1wJ9cO0jlUtCQ_?WIrSBW0=VKjjwq1JpI4Hle08q zv`?z`^TvEUS|ZRd@s8vMoH!+8oFF9WZL|jl$@f9k7+=w=w=r-kP8?D_B=icnoYSI^ z^NUPm9S_Sl?ma6^S!6Lvh63N0`x*-bD`W=>@PT+o!){HO_gBEx`O8wstoH>6jywf8 z5o+yzg@#NZYgYUj)saPp7ZA$z6(a>vmo(jU3`kUNh@cq|*9!z(n`}B#8@fqGq=vt1 z)>P}UHoKij){Mda?jw!Kqy9OMS^u2mIIbz*w&}wG{|!@?D4@xE^aHuTmoS(oHaIXt zLa-bx9X9%a&Eq$FF(scNv*G?#0*TpI%Ri}!Wg?tL2x>&+bXJc-6_qvB#kW|PnJtB7 z3NFpG)ilkSuA+5p3(Ha50Za&SsG-ik%1d(Gt=~>OgzJH%SPz0|YNl%c6=m}ec&Cd0 zQ}4SQ2(Xrbea~f8egyzZy#RJWW|ThQbFVV|@^V&Q{ypHe2EbChr%1p4fxC{aS_QAw z#v9D8+$j%;l#{g2SNlZLc^drWuZ{!HJ!5RiAU#XyAwRmUIMF(Xz#0y*pxc_Wtsc2l z7HS&`KV|&)x;GRk7O5OFXWjnDFG^rL1U&Gmb$MruJmLwmfTKEozh%UG# zKYzS^gU|GmnzuA|+1m19EXXovi;g^-wG4iHkCdz^xv9lEjr8_9ByMZF>J-_?7?nfA zsG8ebS|ttTVV){BIUSIZP5(omHJ=j>6wAV7)IAkQ5}a>i~H&XBs;B(nuqzET?56exG40W1{UP z+U9;iWTg)^kMhCy4SkS#Y@ONrwlS2g$D|pYdTM!)E_JWyTjMGj3;QMK+poFcOLG>Z z9?U)ZR-$RyBGxS!dYaXR^>jmJu>T6KD5jxL`M^(>5#XGM>~sMIvkqcjjfw|A)FyG; z3x+&2^ZS7&63T6kfSX734nM%vePn(R9e^iWYGR#B2;wNrKv zLPl>V%0C+ffsm)J-U_+=O=y?-S;kz^EPYB-0$MKjE+ADk^g{D6%R8zJhLCHLvhH9_r+UP>{|%$)HqM9hJ-WdzZLDn1VADt>*Dr9DmJg-comTA zLWYPOjhzB4ykye?yWB|RO<`YKXBc~UaH(n!;wYL(Q>iiADW%-SGdM*@SAuTBl;te{ z`wJEi4No7B)$oJ_9L%91ja3MZQ9hm6hNDFZz7D1P%~k;+$wwmIHA?LJ5%U#L0ut4% z;0D!+{A(6AK-YbP#pS1_EGw}qbM&`-qb}1U=K6rK6$fFrKI{OO*dn$k4u+lWvP#@!bkm=}SFN?nzWt@$9 zwl&6??02VpsXEzEVa~Z|YUe?H!`2!;_{4dhCH;=?4C%$2)t_$G3;E}L-2JE9o%&^i zeP}(hR+ciTifjWQ{{t9#692_{b6F!pnR<`rd^Q9XsN-B|e>Aexe%6~->+6HFCLm`e zdJzBkSFFHXsL61$!4|@qPr>Br<5I}yR9t^cM1NP?rK1igS47>F&M+0DFU#aj0atoL z3}6lI1(1#mXhMWXEHf#yn}5~`pMfnWd9xg2iO|z=KeZRqsDVEILe6C)k>W*otD%0Z z{76@}6j+jBL?)ZO)y=i%~A7+TkR_$2aqn`#sN|)9bk^e5lSJj%FLgCej zT_2uQ8W6BIPS-f+^(%lCy*eyjS%xV;J^7Bbxiu+O#Fl;vdrQp;_bOjLeHio@%3iE)1aktt7dN&u#g;fbkhidpLM{Ti+pFoe4pO@;sbg7@oddTO?tC%P%_zs)=-XhE;21GcU>#kwvY)K1PVQOr7DV#>42{=! z2Pquxo{~l?3Y}8BN&+Z6-f++d;U47$bOADtU$ntS26rCZBygC38RQq4u@gh{fLehy~57*An(1IA2>$K zFa&k*%#MYu)ECwDoI7{xj8Iq(a>zyqm`^#KS1ds9vCX~~l4&zTu%eEG6X?BzShmvx zO1hY68B9zye`+zg_Bwc?0wiin?4@)%P+y&g zdzTRUQp9Jg;k4PE$dF~58jNx=?6KkrqfkKbHg`2BbLcb5K&K$C-m|el-Ek0>50Ues zI>a~F9GvnKV7z<_U}t}8bQw@1L`?>?w*|D_I%oJw4dn8vZ{YMujJV}Pi_;pSIFk`; z!B~K%=^Y6Li$V~bDCy@Vbq&J(5hf(Ita`?O_du+`XDV>t!lM00RP`Tal`nIcQi|`g z%#s@9W;*ur5;HJ(F(HddlY@yOt9=3XVTa8ZT2rk;i4U`ID!tM)WitU?UZAe%jISNt zA0=eW6C3H*Jer%#s)`? z`?|>fG;T;3mfb@GyBY8h8@h=64nyb04%!y{gP;+r5PUGA#*l0eoH;! z&TN6x$|=U;tsmzl(Nd7Ef9d=6r~MxbPrQ*U^U40ME!&Jy za=&-ywhkI_1Ii!Y1QE8f&>_z_&Pu#&E6zQBk=Yox_{`M#-=T9Q5C-hrZ=v~^d9TBc zKrfcHa&Oqw__9HwvB;mSs>10j>}jKia`aXOu$hIB6c_)i8MsD&%PnDFzo!QVY!xz9 zfd&vZC*5ICs-uu^J2kH<_r(e@^%%jat@qvNQD7)g`t{qkh=!=cU9ZON-;ZF2aJcxm zH&Hi#hiZ++FmvA;B0S%mF_?(UOFS6K?g|2)F}i$xpTiW|URa>&ZLa%|o+ofbkg*t_ zCK9lcqjE5Z#02o)DSX$PP!5lPGzu=mD<=85&aH1l{o(HpS%eyq@ypoIb?R4*LuPHj z_35FjWx;xI<4}dP&ZZF60UPhP*CbX8o?Ajq;=1K_7nDxNYAd0nvLJ! zL4WA-lZFY80?aPI`d2)x$iio6+&9t!;*avK-~=$pFY;n!CUV9|Wra+0fcfgc1oq2# zuzz7tD0U^Q;#L^$Rl@HyA_(3?@O{W(C>0{!p=kW*c|URiWiPiNDs5B#?lNPXF>eLY zdD*SvgOD^In%b=?>;s)hC5H>d);v|D)n}Ec zxMv%I!TrILA*9THQYMgYpn>I|3>mh`PLXjLGMyq;@-9h(A82g2VUxJXm^+~VF?1gO zP`Gg%zvb@S;BYt`4rgVZO=p~a_FmaDWTiW!lsnG2j_g$mp;C$@sbofGMv|nA^oyj> zRO07PcwW!=zMkj#eBbZytz-trII=0SCPkk67`L(D$bW!gu6DsR3cyj;%s^fbCA(BB zSLYFBUd8}sinM)O73M=N`$ij}NPvdRJ--1c3Wka;6VWv5J0eMTx5xrF?d{%OeS1DV znhn~(X*xU6$#;)LKq-{#+a2=#-!HR_FlFR&X+_~60}*64B0!_*LA6%PC$FD!a2lXL zS_JIh3lVs_6qjp7F@fPf#v*_M)89ms9|)r0o82iZ zjlN;vZX9n(B3wtpm;SrTw81G&8SSDbrbnQE>p6CsJwbp2(Gtsi_nnCMa$mA}er9bm z-l6;YnT4c+?q&$9JTQJ=K!(r>Mjp_SK=uBLlKkni7vdS}*X zq0Si2hdLhrCQk#aysC!3pVCcVGpT3|>Y`ug1$a#sa{a(w(3{1ZYxsr6p!RA2bS*s97auE^Kvi^KQJ&-waF5Y%r#TorRJ--hL z&qerGaSa4Ud#eE_`{rL9C`q<7$=X)e7RGzoZ&%yuwSHl7*UIv9c!N?y8ldEza|p&R za-b4BKgg!~f58VRr-z~bOOw6uKC(%ODJ$IQp?B|1BH^S12%@az+M7CXuQLs=XVZ zI39AlN8qmoIZ#-q)JZh<{y{;x?+|cD8HY;%tg_xMFT%j48bDk?aO9ny1|F1BmhuU| z+ot?IhzJhjU+W{p?OuK%K%fo9o!<~pn{j3#T=cEZ)&&rc32;$$*m&KOx%d!bLX#Bd zkOl0{wwGofyl~PYO};2a0wh4AZ)pnRoto#uq|OCtlmnN6uL7I`yU?7;5}w9pUN94o zM)S^)y}eG-TJ>`cJaE`9ay{8WVKJ2on5!hcwU0|@_>uaVv!m7U{v|*)ZOL`|Zf{(0 zMW6JK!{mbU?EoY|ikLrv5~TQCx#AG(xd|$Vjx1eiskij{v`uhrm40wTd^Sk!H;j;* zy=)*W)wu-qFT5bW-(!`?>ZDh0K-sh3o(d`UAS>vohE)yYCtTl(L{cm^Gee+=U1=n{L zCOVE&r(Z3*j%F2N)-AmdEL4Q;iDC4*`n&x2NAcg}R}B>N>};S6_E35QHs67F}JJt1?05M;$I= z2Kb+Q**<~ymTgGSB6dLjUVv=5s-$tCy6wj|8X@^xfolO_#pR$b^M#XOIWQ%}KtwpH zHzAik7qE)VKV{)3^Zpk|m-9}Vf+E_kO)bCk0Pwc) z-^+*^BpQW^CGQ;V(8)i#1ykG6Ra$bhaxq42<Ew$L{3muRg!b#; zp#K1*WSsT-<2cQv@;{3mH}w7IANL~%i>}eMB&7kkJ>Y!{dAj<08_JROPK>mR?b5e% z%d2;R<>E|Sdm^Ck=lQvGAEMxM_(jQKZd17jstW-9Rfwe(N@Lrr1C?Sfq0w7q>m-Pk z9YaG&)NZ+w4)!wWw6ZiaZSd4oYws0D&j3){t`I9;fjR6Xu&=y9aw0NUjQ$Ps2Yul= zG|Xtvcg|iP0aLse^+I=_u)OkA8UK; z%jAUL%^zIsp2$I0z<0|%dEa-q={0xM4?T~=oPgNtTaIel1$_bC(2Rg$Oun#-BhSUA zPA)AwAS@u(l)^#6#MPxM@Rtyo;3pX{pSe844D4}ilcmXFs{uR6m+C(4W88J5LFFOH z9^sKp7)QMj+IC;McW}i>9DX$OPB(VrvtLae#WJtf`CK4;E+~UHI~%seDp^MT!Wdh* zJih-6B0~V5zFHd(OUB$jA#ZF`#}q<>l%1@s<2!Bq;!~+EF>qy!5@DIoyBzx6#a?i< zzwcY3YH=fxn#mI;6O8VQ;gsP-g)Hd@Y4PKL6bviFi z-_SbjZ`mcM8T77!H&36ID3NyVd2Sqqml}ZvX3>txO776HYJbLF|8e>3DAG-lC005Z zsK@VnAEID@A0Hpmd}ozqdq3j{ycExQM*2$g?Cq>ccz8+b#n-~sWMs~z?h zj}l4iZ#85XS%BNaBP_*w@QeI~@D#Ow3!>?htW(Z1wipi(<_rMrTqFQSy>w0|ZNnP! zwC=KF`A+`T=C(uEs;w@#E1*z1aLGmCr@Av&lvkpQ)B*(}E0)|}V_GbC>+D0OfzGag zJ)s{-d<7hf$6TL^b)rD|(Y?wPIpy|~(-<7?E#}=K==Uj#&1lAdlGY55cIctW9G+=h zzcH&Z-O`m!fDjhmRtEX^QG4p-!9`{Pl=yv5AU$ zXKC~Jm|EaSdX3m$Q0Eol`0&ngjiHXO-V6roWg&iQMyHUPZ@u4)6W>k5rH6d0o(skes7 zRPEo)poMWHKVD1&1tNFe(jIcC3auAvHa+YWk~lxSn#JRg%b=cp-9Y8^5qXitaYuBe zI`zW+7l;b@_iv$ewKtM`>3Orb*^L(MZ^^WVBEg#6EB5hRcp#s>x@@p~$6nv{CIxt$ zNQ}Z+4n&iqAXxu^t$KE=nkv-`x8&fzC85g z&Hs$kTrsO{m^^FM>u4s^gnWMh65}^xx;sH`U4+)(L}mP(^*r(LV^}|7Lb7d&$9#)?jZqo5+#o9hN-r7-W$j4J(&<{{8dwWTe3)6`Z zVZZ;;`^m-ZQx6r&r2r;nrcPg99(*PRUF=D8{w?@)3KO3}G_)?r!C~G?Fl3@DbNOp4 zF`k*PazeXnoQ7xX%nF$c^;)u}?a$9-J;5nUYOpPUo>@Q`sMsE375y@C@Hme8W7wmg z5?*ogh1ayf5FYzO=@WOSxBRYh-g4IEKO%U(KMb@=?mz1QXKrA#P&WxSsH^b)*d{8F zWRnu~*%YQ*x}gE>)vfp?FYy2vCj3G6m@*Jh(wG&4@e#6Y(OX>84RNc^HlOjj5a{*{ zTzaG3y7Hq3IFNi?+ws?Z)(L{_V|&DVNM&hTy~E`V(Qyz{&WY(o%i(CW{5=RV<0bA9 z@&L2e0Z$6`sLl$JKvk;I+@uL!5YOu3mx%JdN79CdB{a!HkQ`SH9Lc zzOBh4M~8O(WJJZL%Le4foxAQg8Pmj?sQQ=nU|aqQAO3i^Za(}gtrMpZ?jC~%`A(l< zyJj23;Cuetx9E)8N$JEQdhK0G?@ony88iN`ptMX5|>E;5J_U>bp7Bz^pDZpQ3@r;=L!o_(D%Z|MEc9=AnZC zpQ8je@DgH3fy~d-J=nj<<+Cox9Q^7i*eJ;7x86Q2Tc~WzUoQDP-Wg7W!=6CgCrL6Y zOCBR;*~hGgh3kRidV2w&RQ)rULZ__9g}1x7*ndB3+XeLlKE^RJpz-iuTWg}E26z$oT(QjyByj&t z+p`G_niPreXq#mOAL)%$*t!Iy^*y?B!1Y2N$U>dR@iVv>`ACl*$O|1yDqS^*$PYbv zD!FXChMMn;qbM+ootV&Q4?62&^crUW-(;Nt0jcoJL=yHZl1xrN?h!Yz0=pJ^SjS!5 z#Z+ah&cF>~#+g=_Fj^`6WXrerHlxBO#0&t{R$V?o-sd(TPId=?j8j2^AH)jbXX2$X z#i+qO7a5@c6TX9>I$L3jz}>1b)D)Fx=pLXR@abogHKl(eV^Ggy&{T?Cb0%AP-{te- zmxTe5Rl%?S`9vX{R`-xT)T7r2EhG@HP%jOBXv?5`gbxn_U{fU*PAruaUrzLNckM%< z$o;V1#VOTm#Py|=ch%4#a?Y9vDD0^6HPBH7tvxBAzY{$^*ASB@u4}HKR^J1yhiLSe zx#|}56Y>%mhLg~~i&c>=Kuq|G5Mfbm>4osAugaWESz9oa(&gUCva&wlN!AHXCWAAjn>kb2~xAaSL+aEPT)p^T(P~>im zu(B?<9DOV^WMJuYd`&WSoQwG|^cWPr6$$C*epk)5oqfWDa^!}yF z0Sr5vg59{Pwz?W@2#2#tAT#Q)zn>%`Pr5}|Rl3w9ZGa%_eM3%B)OV^!^J}*XCRriN z9MmqBWqL~Q95)>Jz2!TKH~+r3Yk}pxwqJ1HAZ5Ss52t;ok$$Xfip?hcR3bz|Vr1AN zs91SP*ynlsr90$TiS-0IhRCDe8qO_74qP@$^WsN(D_DIAU$tl>PbZ*v2c1r|vrjfo zcuB;}5&JDXOj>|UX9auc&Mr{v*t1Q#)Jd^Jq$db}zhvq%g zXv){I#FV+sSO1C&{H*7;az&vJ|L=&k4e`r#e4d3O;Ga{Aomt9%eMvHnUoV~J!%rRH z_$R(~IznS;p&3oso^<)e+xZzE2IN@6+EnFqWhdve$(N*s8rY7L(i@t*f(kWYAZdTO z5b8kswb;VLHA2t9admnF-}5b16)IL~{&msrxyOn$z(NL*#c* zWy)QrFJHdG!(v4uQLz<~lp7#Huio?m4N}?;Wtew9&tQJOT0%;2NZ`2@0UDwQ;p$(6 zEZ>85mhouvc2h974_@DtQaVrJpIjsIy;i*o^O2>e%?jR|U(uNV=>?1lKq4$8o-L~+MP${8*jf`HHWTR|S0lZ8cNe=7(f81|aHuC~7L_ay#K2LH%ta-yid5EfH=wj9 zvcRAc)jqGM`AVaST%C2drIP+W?Ych2co`QlGfmCdYVwbluA^uguu8 z_Fzf7O2ji7NtOalo()ijwKjavxnzpforMI7`vqg4`m4418hmv_@RY!J*7@J_dg!@*-mS{L`0Ga ztvG;TzIhvYp}HO~dV<8sPoDNND>?RjEamkXDecUxDedoyLq&P9lP#~5;uT~nZ79Fd zf(FM?Q@!2_@dHc`w2f&pTRF(2QHt8@O?fMH{-b{B`P z@7$vIwB{d587(~uUA36(sP%bg{($!!`%Lr%n>6rD9T&oarZL!*AhGwSn=loyV7c4* zyp`&vC~iUCKMZsCAiafV<(1$^>Cp8dM}iu}%*Rx(xVMt0znu~4fhTC4?#P(cUU9+I z05zu%eHX6Z-N*c>W9-VuF4tsJE;9KgDeg`Q!-TYTD0AM+&2AM$!Tmtx2c(x6c;tLy z$`8A$i*G^1)RZl-x-+ulvdZRoOe2KfxlRjnKRlgJT1v0)>0KNCtQ#&L`L%#Hcz{X7 zt)K3}cTB|L<*YYP7y$x+hdh0CT)yjuU3o)ep#9|{Z63yQGGiCc0`B4TSq_jtUZ5wD zV2MRxUn5s&qKf#@!-#oSFGjS7&xLVkz#hPgD+;??Viy@Q`>wCqy6RY*3tQI_&j)zx zZ%!&pLZ2~@Zp-Lxx0a`m7DZ@ndD>6#g{Pk7!lVJ`T<$>_b)*Y^NOdL%ql)m%1YwSr zQ9TYYK7F^+Ubr8cenpwrT0e0u6*vqzZ)j^V;y+W&*hbo-L+u0$FJF_ho?C85*1Oin zWFJAm0m=%3)X1X!t!AP0U#od$Kq100^4mv%FBLJ^51}in9hTEq_c>r8zTaJ7saejb z%n!Nb{kx2Vu-RX)G>2vWCUyo80H)+!R6sf-aB&@cyQZg2;Zx9i)r!d`ut5Gmw3PYM z*%ILhLVV#T3hX`c0jW_9k!hieoPCY~-3j|rkU|3kM=X=z48ld+i`GBB0+ zQQ<5o`9sZv^fQ==aAEr`_zp)}Rn$!1qF6`AOy7p16 zSrPWz=*FRUy#PeXOuDlcLeCbE@g|_P!@ki>M=&lv<+^TbynQU0%nd5K<}-2X7HERdhVk{sn@D*Mh&$lv_zBS2(XwZW)y6PLx6MsoN&1hI ze4q@1ROGEC5ve*Fxi993aPPUd8_|sr;ke01h=)?Uy*~sGh5UlG48F7+C^Y0x9t%TyPeQYb>Tss>d)I&MhLG01ITBj*-cIXF|i8)r$3=?kQ zYKeQZ;2#?J9jZ*;EeO_fH3i`VjL%&_Fp7uJ=%#f=5!){fvWEr2c1@!m^6ZXm(_Q!* zGZYG9sNq-u!jAF2h!smFh*`wvgIbW+K$u_x`9n=To8gRsHwZA4n*ginikExra(@I_ ziqlwS%x#a=;ys<%Ux(<7r#PGmpw8H4l~vMfFeVeo_SCvfAbRDt$*h#f{$!9_(Ku4+;U5oylYm4~yvjMQ9qNdy#Oxz88N%cP6+StZ4 z@|?aH-1jn_*L^;i51T}de_QDASs*_;CPx9P`2$B#d8y*-Si&@C&?j}r^0T8_674b% z$90BzXe#&+8(xdd2K|`(+oUB1^|33#e@-GOMYmgX1BPZIy?s#ldd1(63DyIw6{88@ zCEQz%5^B0M1E?}Eh$&FkT}9m|UP?Y?o1v>+{w=bf{l31z{hhZ*jL;R~Uev;qWT5V_ ziO|E-c4_ah2?+mQ5i1(Xn38MU!uPcM?1TwudD?)-ho|J`clVXhhBD?P74ov8i#x>n z>pK!WgNga}RAYeh6_x}q38!BF|5$8IVhSXSpiz(=_?f@7^3`2fV;w;t zJe++@1wIH2*D7d_sx*H6$(&1LpQ7LI`YG^}5ghM4x$ji+P7-5rgP-vpL~0{IW)VIa zm!tp19mvM?+2ix@L%=+)nrzgP4lGlNneHjd|62#_0S~|Zlr(ttto!1Ga+U*Vc|U`ru$*qU%75G|jbN_Bj;>iGvZW_L%;8Q@adK_r&Mrhj1e9!$r#T({&Sh#=# ztES-jX07fIHeVtdX<&_fe?Gv#lQ+V)^Og(XQvT<2#M1paV#mPPWuJ6@Veo9>W)90*-!KyiA3QmanQhi){u z$54+-8O9W6?Q@7_oVlomfFbv(UuZT3e(u~&ihk6S-^Rb+_D5bAfGDojU$i)Lx@z-Y z+F1k*dVD|uiQLzSw#Jps&>!4fBAAGMm7gUJcduF}++))x5_%R)I7 zj5$@Ro$OliVFmFSD<0uKBA3zE@!;oF`fs@!w~g>b$iZ*ulkcy|R}8Q=ZJ+Us6xI69#g2azB^K3aBkobOTQ_2)vNf7fM;@>h1ji zD!wUKJkhEOc%$t*e8OZFwk%F(a6(x{hr-@#qmIZ{`h3EDh7Z`rtszvK8MFsLP9YA?aUU9 zX}{;k6Sh7GykBm)p|w@G=dZpFLvTwOOQjDn#FAD>hy}NYkqPf#S^h^c&qKLs08VW$ zx>_us5SH9N#(b`8t-3-})vpe`y7lhm%M69S(j4Bv9$oxwRi=V$1bOEmUOKd)Ylmd2 zDBS|?z$UFID0^`*gfzOfE3)mnVmt7<)@Q5|3I|NtzJLN9S99(A#HgKv-T@ioz_s<0 zyXL}^$!pPaU%HpH9nzAX{2r9#269oNqCKx}Nw1^TmI<|tdjTx-dqJg`Rg`Na|3GM6HcFFwvK>^zxYj@f8 z_o$wo;L;DMP0+wNmvb)cNgXdyq)%S2`4qSC(vsQSqc5-dB{Fl$xviF$#KJn%;87-Z zJHb*mB0b9I*`9`sydRQ0eh_ekg;~-8F1AN@afbILUu3cp=M>5;CMH=f_qbrEsE5=y zNqtmM9_7jkSAc@}ePcZy&boPpL+@2=PJ@Xa)+OZ#bB<$Xa8rOfb?T3q1vW*+H+D_; zy0qP7|Gn2xKgpio(yY2QARzHA9c^38|!qbxdz_0{{}jkgXr94W1Hs+n3`^0u->@ABv})Go1= zM1Hx;K68t_R^s9J%iX&Pa<{R;Rk>d_4L`8uDkn6|vGh9WzBFNFHL#ZHLJA1J?kdB} zA*wU*m~|j&=*xn_JG!WH%5;LuCPgfa$1)~gE*9xD)NcSR-h*uYUZBMBnHC+%t29@< zE#N{boFd&f4>1{&Tooh;;C|)a$vmn+%D7`m=3e^GSvp0$+i{<61pr#?NI zm;RdK{e6@$O}_^!(YB_g6Evl#{PqhZuZth2m9Zp+J@`6&cK_c7#7D&fCz8a=on6aZ zPahKh5x-$TGhaT{VbM+d14%EBNPfh0Ie#|yvEjwl3<8>NU zi~-^tJMtdE}LN$x%^#dI_D8}qXN^e^xy05Yszuv;rT>{h&;jA-zDZ01wVYJfy7p{K$z6iTx9*l=nC(AfIHwV;{c?;B+jI+YY zf?H75m}x{Ur*cst)7D7C+@q9epipHW#I*QyBy&)jMHdb?I0_b?Mm!p{R#g3+14Ji& zw;p9fd#)n$EB4SRtgu8GS_t_*9Vp)m;I2nG4HNAo;AK=+3)0ZmiTmDBfeCW#z2d7M zfF)P)(lgV88E!Kg1~KO)Buj4M?Ti~$KU3hFtT&;|?C>HhgUI)&pqZM|8$!|-giksJ zng*L-Sdw^0#a_%*WXQ90AYT+-ol5(!^`%0Xz?s5cnmHVZ`L<%HL_oVbE2xZNd#m$WXXdY=D8g34RJ%nj>Q#G9w8o1L3#spn&K zVjA)Qp$FaLR)9a*%foI6R;pCBGd_BL%ClsMvhzH}yQ*Z`3o7YpuUP6z|MRHI=7Be# zt%nUg9V5=4VOlzBXpjpcb)Ulp$!1hxaPbL(p?3<+yAF8Sh}L`Io?^Qw%0FM?4GxG0 zddfQ)vV)0RnJ(NYgJhKgOe#QqdMx(MHWkw~KQ=C3WmLyQs`N91kZY_9I3^f*;zkxE zwQxClIm1-YZ`hNmg0|@NkA|DN;+lnsD1P?VZU1fn(@nx1@(j<3CgR<}`b99b<=$jm zU}b?H2GHoLEEeMq2&$Umo~}*p^5O$?(c`W;!|5*l3FbkV`*)aw1g-?aQ|Dx-k$aFZ zA}$ku2fxWv#ZkD8UtpEX@k#@$%WQivRq0-bh}#o547YGPgJPfk93Bawx}Tjs<%_p~ z=-V9b4>3kr-e7eFThb|sR&G{=%|331ix?HIU*u<<3EbwH$&|b!mbG%JAm5coyWU&q zB5wRDvsfq=n;ME7CA+T)^E6qMxqKmG=IIy1YDFw(FW}qDXYCVJO(C~h<3X$L(WCs( z@iWxxp#}m&&;?ACd&%!%&m6$KFb9^|gU!3;fLCYmX7;n>V~Fx*u|Zm1@6VO;&y*_g z6@kpv&G~V`9b4x7bBnK`Rmx9D#h#=omuI7bk5G4*o{|B_`uI;fK?Ee8G8X_D6Q)Bn zTL1E$kS)u)G0%=hE#(K}P5xk+N~P}MZ!p!B=A|AZxjvcGR_v_ zsC?qaLd-If`dQjB{(WOel0E~$5=L0=boG4hV}ET@EmhJ&F9;u1p#ycu=@}2Y6kkkn z#oSxUZ1`9m^7L{|iyM&nTlP_N&pEWrGj*pjjl0l=TE4!Z%@WpsQqkitRd~4Z-J6v1 zSwWxGC~5BkkYtwyUi}}*Y32u3s{~@AfY+CFTxSFg9G&vkif6D! zh7Jp8AczzrP7;j3r5(`c9$2xm2Q6qmjzW(kjJ3@2sFNE=c;oX^QPm2DLDXSi{hRrD zu5#y`z5B(Vl`V-X#4b%j(r|l!a#HT_Hm`xFaM5-OX5~dl+hx8Fh#Kd5iJ()88czMs zW#L$Kld>IrwM5R^$0EqgByv!}Nk>#cP6^DxN$Wf|OE6#IIKS})I$&jT@dNLDz2eXN zO+K#W)13bGE$Kx~vWp1HKnvL4{(4f%rSCxmsNVZV}%6x(HdRj_-Gm zx+zI%7b*kZ{;|T5);-a#Ax2tK2!De&-QaJ+T$AU~IsKr)&K`H7r~M=A+VdGCtjMW{ z&h+s8@p-Nu=ht2q2CSTAKKmKGLP1kK4+5U>H-4cES8~=A z)GG!#e{yl53h%W+H&b`pj2dB1VJ4edj36^Bx*=gBNHen5R0DrBQLs6rwq{G|VqoaL zoV^xeq+o=+Yg94$y1p53A-jR`yrDg$mhGgMdiZOmY`NM0d-0ciHG)+IMJ2$-i4z$*5=Xx4ss`Df`KjVW_+4kS5vg@0+*#Q8?D2ddAUGag^=VMG zXzG}rtD;x{|56g{HQd|~w@}pjhMH$g=luu({A{1SZ<_iz2yAW4C-8Z*Y{x8mEDbWi zGq0j&oZDTvIu~u$WGotA{{>n-7`g*$_v8EgDnJxPNJMz;8l0y&1w&LF?b54)m7W_r z8$cpj1ZEDR%)laxF;R%1Mabz$2XoID&rL-@Re;kioyf!>_f$-`^mEZ+N4qXpb8z-y zKh_l~5fN__fDK8SV`VQoC-?!&QX0{F#pR1Ha>k0vT*Z=$a`FqVAYW?>&2_-Cd+e(T z@!|Tq=PX+da+oDsNdWrquSC5*3Ma=lyj4~csn8U4^&gj+beVNGvFS*PR`kjFW5V68 zATyDA(M5L@*EC)m1xMM~VN?O`%UwNuxZ=yVw~druc}MG8m^cSPhCkH2s>Cki z^W(T2WTnd5fnNs#q*u*{w8xGr;}9MR2EL1M-$36H&JQxyAWkIvy{;tVK1D*$Kr#&U z7_rH^@d-J)k%Rt@v{&Z~&t!Y%$IW&KL3;s8-Jo+Wo8>)0?8i zUHbj;wRre93#{`4cKP>PfXDSTsla+6q>icE2R-aDb@fKx2iYvlbS=Ks9)3t>Kk%|j zyo!wvR6H;YTI!r@7uYm3j{Uq#&@T*H?S35LsX|ezc8=i7pbc+fC<*u74g!9kWtz{u zJxG(fM%nR?11t&+aSF`Mqp`nxT1GPt-agN%gAOKCdl8mrF##(z!Ua75VS;BkBN=<5 z(R$KiS_hx(It_b&Dv#(4{`#N0i!(!q+8ocT(#vIy`cRtr7jb;UD7AHRPG^Bv-r3fC z36n)s62kT5m>rw?ZQipqEABj9BV^Bhd!{JY;?E@$_Fz% z?O-xjSq?MMi;C1x4mJ0?QTwv#k+YAkt)yD+-KPE{{spD7^#fuoYIbCrr+#M-)b1+M z5=K$#*+`;10U{{ewtcc@@wp#SPy>pFX+@y{K~_)1l4DdXZz6VA!sk=A2D9Lh2nyd) zP$~AQtc}ma8HMoN4us@6i)m63*O>hAYZUhas!$iterL{4oz;!^Wd+9|lm^=98anVOHu z(Nq8)hO~;os~=Hf*keut$KXPxK{rWx{|2&n-Q-q}NjrhxoLNU#K5#1qf- zd7i9$SBy7yopC#@u*K)%O#5cfs23->d#l<>X5u^^-SrSo^8lHsIN6(bGva0ZpOu47?0!Zc$yErIKyv0IpkG51am3btjfvt9LH ztwxAz`dxeb+x^w78im@bw}Avf0@rwKz!Ecu&uC5$L$Z^NIi54?t)bPAf!*LVzKYWU z>)*_BBLd?iFXHe-w{L5TxPeojiEr^u?8&RI{@%LUNb8PV&M0u{g+x{bg2n9r0{XOP z-xxFH%8#6(D{zC#q_TKJL_VI)xo&wH;3&|yUqIJbCh+n)i|$Sw z-)zx83Ch}`E7@n}=01iuwFJ$$r2#wYZ7 z6ZzbT7`hmx0ka$iYy{=)<06}jE3yCGBk+5^y{6p)e;sPs)#A|Y4oE~jn`FmEtw;rG zc4?)}oaR@ODinhhO;>6>gJ@^w$U2><{SK^piGLhC1Ln38lC~aop%RW6qvE&&1$f^P zstsd_#JF^dR(&k_2-W-L_VT1F?fe>0z&L7eo7N@X?{c|Ro^%ie^248)|wWo>RmIdR=V)LPd&@LUVz&LXD%g; z>K!mfV;9P{2>~!y_MQ(R9x|b!FDfXbB`c|e_!t=``hiMG*Eiay5|V69*a)GOqX=}) zL{V?BuE)C_f008rT)YD}O@JkY$-&q2(P0_1%|N4MpPYl!V?-(7@BO7QS2IJ*28<7T zbjui}&qK36FL}pGz~S592%#1{*-7~M`%X%-Q=UoptVj}f2g+I8ytrq@6Jrn18s0

    _-}LMNv($exkA^9;O-r=*xXjc=MItb7b?wK1@dGf(X+Nzm_M0Xx}W3lZq`frH8H zVnFu+B~kqIBR!u@* zDt2C88rh<8yQtN_#yu74l&!0KeP}ain}VJ+4^-@b)ligm%_BB?`5{Bc-zT7dxXfNY z&GRV)#Z<2g^dFLvZ8Dj)3nBI-o;zxS;4G)9N71 zZPE?Sj^-XM?a{0&kAoIs*KU_3;d zYZ)KJRRv&$1Mq$DyzVyD^1=h+WnI*U%D1PB*zQ`&%cds)XEC$_ zippG=YYX9Wt8mbvKUCN=Nb4fxWC5N80H%h|nXvZ6ah4vr!Ekw9S>e!NMN+`&`I$_D zR=MhtCE|;90$o5Z@nLB>jtSTZO~ItP4*V3m3Qw@tli9ft3I2J(h5RCwLM&tGPL>=U zQ3db~o)xrc2+~Q&JlQ3jZTacUuA|rykIb4Aen;RUbrX()V5c;6VyEa1g@8^})};1c zN=pjr307(%&k2i|tTouynADFNnhgC@TYL}=4xWZM>Z~OVYlc15eP0i4k z*VVtrEANOV$^4jDz?~%1V3y}zZ$J?56$~j~b=tJt;R1lYZKv2$!qQi-st8K5jg0bJ zk+zbP?quS=Sc=#SPrO-<=!lzio;Xo@X*akZ&v6s=xg{rBS9zgV&B+nL&nMxZ@${#q z>j)0az$eq1kHr@;9t-*RUf#AI`H%3z+RL1c*t#HB) z%r`P!5{5@p=@@G%s2hPTd6(^0633%+rzqDEjxy`Lbe}#rt&(w-VW$V^q)}90+{XGg z>KU3px2L@!J6Wyq&k5*yxA=t4W7x$Q^4KbXv5Xxh*cd+$~Hyu)y8QP0$5H<-~ z)0pe&mG6L_x#@UE*0x!Ey$0gzCdE7c`MZ3~mZ54@{iwPiLQNi$QY8g^!ybPt!Z@jcwb=6v59Q&ITr3WX9O z44^->o~nGQ@}iqqe8o?@r4~8n8=nf4{Y@y}s%}s3oH1i52o;h_? znx0UhC@RL;cd~k^X!;fZ&}T`=zE5&Exx+%nZqfd7(Ul+s3>FEzTVHB+%3Z~bAXqmk z3So@5F{MDe&xENVmxULH0@JA<3+hiyy)I!VT{DCeNj>@nTXAA6%`EKsI~K7+=BIO8 z-_AKmC%-Tce_zjqwxsk1$3v&Tp0o5Vbd$4|+Ez9@QsMZ!1pqT&^Q&FMC`(8G z3QBum-{}SsSX)!Cvr!3D+=v%!W=R2{xFHHcRvnSqYs>DF2&?Z<4Gc1a7K4-{z+jv! zN&&r~kb;5_+%plOT&s)+&8KrVlqgH11x3Q~rl*0U@%4odYGoAd2R)*LhaUxHla4{E z{js@@)QNlS=7nMfh1>!^Eb4Sf(?{ZsZdm3BT|17sK=1=+-k5Yq!p2KoWf)qut&0!$ zI<9dn>T@CqYVJxy@Z7tbsNk)dzR4xfs-R4DTn&rTt}bpf-^a_Mi)h0LX6mM9(0fo& zo(v#?tLOmYMd013#u^AWMPId~a6&erwa^LAvn-zQWPzV-Eb?MU=71vEC@{j$XRvq4 z>XLOOOwHfVr9c$?V|)&SP0#7UPbGIG8EqMzEtmVQP|H7GFoSaW^EY(#w=nd#(tJV2 zSFHrmfI?gPx5}8&dmuGkuL~`@0q1`YVfb~x7e~QjMoC)ubiTJMB4NY0 zx`wofpBNw@YdkyeFJ|O2moGIm`;|CkMuDDPBUWtZ!sUf?Xu`rE>I9-`@nw}LCJA@e zCp0-Fp0Wn}g*k4hE2^A#`+~*OU9k2Huz6jCc{r=$vT3`B)EUi@@Ups9>)>`*ihb8- z@dWoTY5hp2_Bh8^w$VH7dFhryE3+LNq80NM9UIl|OQ9g%{wwZtRmj^hm`%la^kI18 z7rNWw11}v)PNYxG zPHrm8snkuV6NSQvi;uex$#qFkP5p8pl)B@{`x1G(YH`SY2{(lBsLg$3RkhzN*5Rvq z{o^%c*R9S2F(FTg>53<>ESgl6Rl(y?pjNh61@9F_{<`Fj*Lwf$`!b>Mo#>aw=d$#E z*d6K>+JkoC2dQM%#xcz^RRU#9@QX&?sb?Hy)AR6F@f4O?o~;3;z_V}6zWj{dDV~yg z%?b1GXz;$Bz+&i5rCAGP;uH$Dr;ae20CBqGT6Y8AukzTwx^;S|z@u=Z zDczhoGu+Vb^-ubM8vRSB!)d9uZex?G3t zGrBns(jGj*j4ukVAjZ>rVags0hU@I`NxYfDl>D8-GdfV-3Dljvs@X64?njW1$_uB~ zxy~r8A1oj2RacUhndtLh%)?|Goxr(6YvgEht@uOtb&k>2A27#UK0-w@%q4Mn=({DO~vlI_~~Cl_nGl-6vwkDgUsA8rGsR@1Pi1 zptNL4hUXF0V34^ z#T^D#s`tXhE{8p0m$|+Hp~TxytG?(|X~`)x%~RHwI(4D%EKC|Hh+R=IeP(bNmV-lu z=bg3ds=42%mu5A8Oxa}IKB@cF)3f!ZM$p+Pccr}WfOr<@;Mi3iLKP)nf_2NB_i+5p zOTKVzhOq6BUh>A|M`LTUXAkv0r0kM)hp>*TAe!!vN!Z)bE)sWOv&t_#DIKVgN6Z9& z&Y3bHqBuQ^bMb350eymtJ~@8I=hT-8Ujy>-T*n4nIB2aUQAy>jsK`z@7iH#=Ucy09 zESl8&X2@sPGM-X3Er0`viCvD*u$X(yNbjlhPRF=7q9 zcj|KC2L@ymF7<`BSw%MS?8{W{@}xCuRdDdjMX&2+K1uEdBegqaEaTuG^{s;?@1I1g z&)HGcFaXO?T;@@fc$Z<``QmSX?Q7 zPg$IGl%%Sg)#$lo?5VN0*va57%mjXx#!v#rDOwRcAHt4QI0{6j{lD9Ef&31#HxH;6 z>{1@J*5S_Vs^BWo!iVv=&t8W_`m7-~S6NaQj+H8q!nQ!WSosyk_MX93^*#)!rrK4u ziW8EADjU1M0!z|7V{2H$&wCKn%^?j_{A#YV;Az3Hky=;J^~t0zTj6g204l2a5%{N3 z^xOA>L&4$TzD)3!aXwJolI~IlPavapm-ft`SbpD~s($;YUklgtq921L^ZBH})L=Bi zII7SGzqgwg^|kzt!qQ}^i&AG z`_O3kyX*=pe-cnmqFZ1zL-7g_A^2nT=zbn}qM#^w*{TX-B04ep%h)tPQ?38)>F?d;Y@&} z%D=PVnhsQg>dYj}T>H2@vqYG(jvq?|RN=ZlG-6lou;Sc%|%a`Puc?Q664^maBVmW_vFHe;0`oBcp_tdB6}K zJmeXJXDtNv1Ix8x&2!3I))D@s8fsRR;Z@OWYTz-1KvWEHHw2;Ks{xVvF3MC;7x_ZP z2wH(&-rF9y5E(10G?G-h`oU>|{i@b?_(u5V$Q{E=FzMC z3M`p9?wd=s{io{Hm~k0lHUACuk1P4QW6kK23Us*d&PQ5CTCL+;aO`jHn^m5RQ{3&; z!&ps`_fqC3Q?}hpsvp8$OIN#nrRg_#u5vs|-m^n)JGy3kB4B0ey*x|&ZhuNzyr&0= zK_B~xgauRlmihXgpimo0v=pjlVd8KIFqg2taM;cC{;vW^%U%1vd_3UoH=)$02+q|- zISYnmc*u|stO4ET?SL)=jZC6Z73kSGEpih!7 zb&c+sOHCp>&|lpEdh)ztHI;IsK`ODBd}juE%T5{Fvi)}TRsl7RkuzdX$@jQ}T(#Y{ z8_fRzlnib8xYPhCcPS&k&6Y=uYs^b$=L@}%%P&_zT(g>gZ7y^;qG`}vidg$RJO9JR z8>&Chv3EBvGG}vENPI}zb$fwEVNLVSZh!mx*s)Jv>;lNbUOO6Bef|OBKCr29z`uV& zAenUIJiF87O=-^=?A7L~5#_L~pBxxpF9uK9mOY1G0DPCqbIIrZMqI)J97=ct`Stzr z&n!Ni?5-=?mx#z(IM~*W$XkfvCptcwE0PLKLepJV3emZDU|m-g*JC??bl*~<23HOJ z{cHqC^RA_icdmm0rEhI7!j@)Q+XF&DgGaNcm-r&A)=s0QchR8(Kg{ABt}6f))MB5t zfI9tioC{9!V`A|RvSZgJ)tT^~S-_<(2X~Ldjop^#?cLneDIkslk^P{>TsXfg*|c>aG4bk~}rxk#g+|_yHSHiOB<;2|O?&ZsgJv~m!!|_&l_-p~3QjkPuh80*g%kdAcFT+K@hMn+bbmk;%CngOWVv-u99{+k!P`q z85wy8JJT$_0pFU@zIiqgf}{>B9~Cl22M5iC!j@7e4qNFdTFRtQc6L_Huz_)?EJ< z(|(?$>ru675FZY|Qj4`2dUq`NSOrYn%*=%G;5L#H$OM_BXn4s5i}<93Y(LiMdLeY$<*|J6SbsxKn`GL&aBW2&Uf9cTV+4$@3 z#&F^BsecIPKI^CT(zS`m8Enby!&eJ=d8J`!<*k&yqa=Jv?F3-)Wtl3@WzFuYhCGn| z)OJ~z=VrH^;|Zwke+r0QPw5{Dc+ggdMAW7zx}`_$>%-Cy+@_7q_o=iQD+Mcf*HcFB zOWex0yrYtrfYn1Cz>!}xWFU8vE^uX^Lc6kEB@SRDTne)z5RHlHkioI+cr2HrVbmbIYo>FDM+>ITRU+avzCy4~`Yrx$8Z0y099uIS4aRjg4p zT3pebWWC6yn8Njz@VXRbeGj^wu&%grR?y4MbKLLN`5@b@iAFVoh>nn*bDLDcU$maZ zh^~lqO~C!3TE}a<^4I&#oMg+Cfq35gUVDc#D5Q%KHb0Jtf+K@rY{Vj{6XunFT02@x zJY=_0UJXj9p1op1GAkxT%*>|MaHkz2mrGv|vZ4kWS-JteyTqr4n^IO>%9wrV0uHmE z6er{-&!>ya`;2}mJc?E*yqN!m*KS0kp%ZqIhj|zj%tAK;ax0ymcjcm`%^p+(Hz0|Y zLTM!Lqhx|oL>0&KespNfI&JoN<|zoMq+=&aEti<$SDvpSuTa(DrY*V1SryTm<>&rx zG=iCI@?2G75GF@Z1-eK#RX5cR=*BIj=-lYbr<3NytG20Hpv=4jlCr}>rZZz_P_tHz z!B!OeMYd}Ct)T>+|8Dq(438^kbslrec@Twbl`NS{!m8oi#NtW)>9%SS(ex2A*OD&g zMVs`+b=yPW3U(h^9lE+26#LR#Inbw1R<5aCT^@^}eq*7@`muqtvxYWcoq}iLBG**X z=Yv;G$sc-uHMebTZ}omr0q@V~tl2v3Fg#$NnPAC&BtUd*bZ37{*H?huK%fo93s)X^ zCoaYihvUH`%o9LeqMs)qwxv(%(1vaTj?R1FjZx3{03k0v!?G_G__=Vk?1qA@blo<^ z-oA%*NyHgFq%7BDkiKrOU=v@mZ{IU){gmu*@q0IAQ)*rG*X38-r1+k9Av-UR8!0`S zIUSdmC@kavygUFmdZ(7OFkMjF_W1*MWWudbb>b*p;GVYHyKs4g&z+#@k@?(6OlMXg1Rw(r@pPty{x(t+OUr%wXQ5Un;Sb{{wO z)|W5-NZ~?zCj(v@hf(W~#<_DVVDW%l04)}c{w9%UVa4uuUCyyz@GBa5MjKE(hqkm4 zrI)F$oA?2OQRMREpPQWKQ|z^Kbi;s!={_N+3L8oNAb5`)NT%SFmfhp$Ev;G4Xm>bx z#RqhlNNjd#TWsWE)_#f4n?<}#%>A*cy(V2;y`%PI*Jlc3k|Rgew!DrWIr*eoeY?Q) zX<=@PRdxHbU{&y<*ILNpM<9{rg$CHCDgnO}k9)d7>OP{@XBF)lf60bMe-*!8pMk5Sdj^%kcRqBMWY#Hk% zI}5bVO^`(DYatBN_JgQbr!7ryr9E=tniLFU_A&pHz66`)CQ;tw!OKcF+zt>O#I+g? z09A|XhLGe4OUAISIH*VE)+m3S*%;}MYgz~Y^G%e4`sPxn_5-bzXs#2f@&3??TqWCK z^)89aC6K$Am)9iwa3cm_u}1>(WVU|Dk5Ei2Dbc+X-TMcxvz;yXp;s~WBTH8N{o9Lt ziZ8-UI5kD&&Yr$%jl)479rh+RF%B2yxnjejh_qSHUaQ&Xf+9)_;&UBwkDcOFn;S=o zN$WBon=2_PWZ%n= z?GG0;SW{;4MKb}RCnCoW6w#h5O$VzxWI7gLSOB%!YXI1b1#8DgFH&+Q_bTN%^b3XM z2EZ4WJbyhN8ih)*o{~d5};{kEoVc%O857$U5zDvMPCcQr!HOj$wc6>SQJbc zU4q@K>1SK8hZ7@Bzf)&VnMER54sbmzyadx1Z%A00@R4Mj%9GF^6{+56hG6wpQDC&o z^CFkM^o+y9$6bzgDdpr>nDX}e*&)oS^JxmtiKPiG_w*Filu+C%Shsj>Usp5AxiT#X zjU~_y^9oP|GM0cXeng^E8YmZlT9js0NFIM&Qdl0phlC5FWVvUwhNfz2ck>0;@c5o1 zIRpC%5WH7WN8~M41xc~6PGJ+0;Ka?iuyWPSWJX*ZbCL@b=2w^2r58$US3k35CZ1nl ztX{A%k6)9}rxMH>!e7L<1B0%JI7gi%1swX5W^>Ig@P@rVech)+J<C_}gS|O=^Y4dHA zTuGsW0oxftdrj$eT2S@rv9?O;KiLvlVN=#5Py2T&MHaRW z7Id~G>FN;{&g@m&D1F_h9+9*@mC>YyXzp8;b#=N3eq_Q)o-5D6`bs}h`EhLjT3ckk zInpsvEJ;i;I3hiZ#c(RfjY_&gHrq`>Y6Om5G;9S>T%rz)NZgZWq#iT7gk8}K5%va< zz)#7`WZPiRhio+E!A>D14BN4j;;3R!*0*!R+w;nlEcK7>{ldpbgOab8k>b|r!>wPE z9sB*c+v*vwlevyb<0S^kz0UWrFO%GocVC1fEr!h!ipBJS;7t3t5fi;9kL9&A&>$;f z6FOo94n|K@_4+TcJ%_n>)omc~`DC+_Q1;&{ZsgD)!D^}%c-JX$<%z=Bn+qwvZ2|wi z$zyLv!yi+H{;j0!WIYg1&hrn^R>_u2+YybE@^0m7no#}*Sm3>`=%-FUUJpDYF(+o! zlt}tV_HjT)qJ<_&e0M6*HEz({@yxMAi^nN9NymmVFLL@OWR0Fo8ebegOVmb!)kbPB zr;<`+<+#P4Chmz@Ly#b-`ERk*w=uuUJ^KR*}SFN7Rb9IWMr{si4oI}~nN zfjF-aQ65ZNYW!fj;gIC(O#%`BYc z$|wWozRl!}mV9V15~#O=0To*(vxPy)AKJfv>ISBJnyHYY*1R+$AYwRV&5wQVnOE#j z_e3sjm!=O(Pnvp}M!*%Pu}&W!$&AEdrpG50$MpS>#uvR_ei9Z(E=$au>R#)Dr!E69 zJYvtA@tJZ5YED(tE+e4Z_MwP5k`*to4lV*wSeK?DAA0qV*3?6qG9NwKd{7T3Cws}N z>bp+Hbmhjxb%BExk(<7lCuO;D-ZJ0^e}*gQV-f|3?5TqH0inV;Nm?)1?FUpS`mdLk zvwNACfo^4%LDaoRETL>UdoyHiEMAiGZ&C=}moi20lJL~_uzw7mA9_$lxFygD$cY5^h6#p;d>a&pdQKPm4nc$U zFc8<4UnzvcG{1WZE|~fXC143yZ9Mc(2zzLcGs|piF}cDrI=6OsEmdbZ_0wTcSOjE9 zry;j8g#%D(+WAABD$KjSk!2@#9vFGpnE8u^(_McVaaxD%mwSWf)}bTX0=w$zDK96iz0rA6R9+dXM|5!0Lhp&@N9;7 zQ~$yT1)r&Uc~1b~&bozy@*BFBc)T2-(T!{rG#i2d2F1I?m`KzPRlTD#^DT2cnz2zW zeF2uz>ovrw+$R(p(g(LPF+A zdf{VZqM(#>E=-f}H=Yp;{9%ghT3v%f!`_GypP77Hv$uth@x~+uB;TtG@=@|B1iZ+!xZ zM#B7{)=9C!C)O22j^@03l985UsbWApdbii9vJsCpqG+Ugs2sNLl~@GeK=RM6MbSIZ zYwcMtn0vHc8htqJ^ikAhbTYuV*cx>tnW+|Xs0?C;PCY3K7h55IJmHfqt1IwAk4ZXm zLm#L_ezbnWVLg@BBH<4t@i{JuQAqUeL(#Iv^(gSg2_**?0$CDxJ>S^R@cuj#T_9jybqlFY6tgF)n zIwK{P+=|~Az!nyC$ui+RYC@p%J8R9@fV?ZU;KElSPHvO;boX9N)4L0c#5X9hdx#mQ_XTgZZ3_|FubdFU zqzF`JPI+R!Va=+}vcZIyJY_doGj)lzW|A`m(((Un4BzR#kclHq2GsiDpV)wqzU3|FbI~V@-^+KR%LNL|$s27tNDva&D7HeTJD~G!m@Yi{oTJ-F|tlbqZ z&d~p?b?v8lUa+j8%C?!u*dRU{Xr2c_M64G7V7?&T!!$gG0StkX<3y-MQ8L!|DaQ|_ zD);j82&)q^@E<$teAWxD5aR?!Du;Cy zoQ=JQTlz)Ris(DpHs+!sT@QR=r+$l$jeC57ReiUWlHQ=qv&%0H8U7`QqiCu{E8VGA zU-y~uUhqcTn9e(9=*QN<6tw?gq0iJ&hVKFRc7e5p7b}~rC4cdw8zg+~bi(B3AG}Ba z&6s#-Z^9_2aF%}Eo5R%0^2EF(Phxu!7$z}jS?wU;s2~N~7Q$5UPo>(v`#xz{2|p@t zEW7J)N9G}a{~JZrT);tSf$S{Vs0Hs(P98sa)eSsjOg7Z}^_b5!>!ws?LDE3*qd$LCPxAksiU@@ZjJwjbVhXttbXS=_2b(v@L98gPB3qg7EsvMVo z11XsP`z<@??nkW}%k_EiaD&9K!p+8tT4$t&+u%Zd0DcBkw&n(6J^#|D;RLPDY5j%q|9KAL(J(N zh%0z3E*$hlYRgvbl~0j0_94I_xY7i!0L|InZVv_O25%Yt^!_xFaywrb6;QTD`sm!a zaDvDDx@7_QK}V}*I7_O=8TXUW#j5|@UauexneuV+pyM$3hG z3fhS%akwAm|D`F-be1H^{i27+G_G8?*mK@u;%;Gpa;sHEf>`SHmG9)Kh(uhL=!8t6 zWZECmxLwP#m8d&HlL2>t2%kGh z_dAN#e%79JVmvSB@n5SCN4)pwawIyYf6XY)q%Hk!wbtUaB@8~AJD6o7eFu(!-w}b{ zQD{t4K3G(1J|=!DQT+CL_g@k97#!o62#j+_KIPBER+MTEOZm9-j#zlEhbW0q(51Fc zok;n8FjHG5HPx9`TQ}A|!Rf5bt4NLa%;c00lIV7~7yz`i^AIkWOw1_$Ci619@ZAuT z3*H-H#(zW9PX2K6?8u!q@RFD9`r$FwGeN;az_;3tOMO+WbQ2|=0?h;jXZ@_mjQXmT z!ki!Tn8=)>0a#M*5P?3lGO?;CtiWbQO?o)QSvR2``|9s2X$xS~CAfIt1femWy>sqE~_F0tnon{l3;NOJAV#mNG zJZ(Kks6YSrH~_<- zsKRt#k*@bI3U+gfPeC%bjr6$5%ni?}$=!dwH(#xhAA)DVcCLcbWh}Vp8`rPU-U9gO zH>r&4`@SB3uhrCDt7*eI*>s>N^04;0#KDJWV??(RiDg&k-B~biulN>NEw1on9cka< z=sUc-H;Ze-K!jY6t%!$Xl+`a#6L>ZcmZ|eO$~S z)Vph#(JW#{sW!HZ>H{(=(+6z9EhIA@1-w3*GSoXGmvm7$&HBMUmt5AwIrl8)JFMA$ z;l`+F2{c-LCV>>C(4_2gvdtIc_0k?b5OgPaj|y+wJ+`Z|4ID7*Fk2I(z2t0qnrK zO92@F*ckH-OlS65U-R-xTL%5v^|ezLyrpD@ptATsi5RvtRB_*5Ri_q~Zg%>5Dur~* zIS99OCw>Nai<-;Y=bls}25W2t1|;ffoI zlHyvBrBZnCF4}=J0V|(roKBAG1~&gT{+j9=Lu!#7-9!fTK70X9dkBq6&^2DHd6Is8 z%$VYYo8k~Spod#S;KEUZ8V86nL=$fK2O08dLioSfwkSbsc2u%@3+!RRej)PZYjFV% z)zgFg5@=lB+W9y~{98=mGr%_V>7NOs_S)a!vMtQsI|PMD9N0&fbzvwo1lPiF3j?|- zR(<;;9v|{L{jdwrDA5b_b-}tfD7kyr^Apj2Qn?$<(LT`atI(g(kIX9VxQAbC)BUB!O`l13xH*t&*+ZjmU5cGP zC@TPIZZKoXmnh-`U@h_KLo?p7)#nvAoZ?J&zDKLl@!jjw;&%7WtOM233)SK|M6saO z01WK?p2`b}Xu7AbAXn)L^PEN={tl&X-9ZuQZZnLP1|h+CpQ z*1O&sUP=xL-0c4GS~?WwswZBy{_7?4js#u0+`>vftn!m?t6mp;XWdY1aYW z?O?of@J^^E8~|@k^=ITtbdWMEjqG}!=BllyHwkj?U5~iav?o;2<}1dmiT*B}LSf7C zv630fy@fXINN~>TQn;4bg^kl`XdZ@njCMUDAmbL`f%)73!m39y&fH@mv`kuYGrU1> zx%(Z5lZlmv%ZqxW`*0h>7~%NP>D*zjc5Em(N>qg`^8SdZXf{&WP(-p4xC}ckH7AnH z-|w7}Y(!!FvQ-toaf#gT>S*+{zDcZ6ptMuHQZ1?+f1%o``$T+YT1C6aH4(<*+FZ3n zaPrepAWmKuboIFaGKWhQoQQX-E}p^46vx%Bwd1;%&=->y9#NZ87fxG(MQ~5fC0 zlD{QVHwa}vU58}nro-6(9+%^89NbPEKpI&DN2p?KC1Ed_C$=OK5qRK_1|Op1X-P_c*3d7>`C^(Exb@f{`Ok%N}bFcm>3q7nU=T)@=CBh@9TjN)Bjyn@Ovv%}0vc|W$;Ds-i$%_Te=F#<1ATh1Xh{(tlv-dVy5b@bQr8zA z*5hP-QHwF3<*C}jWh_x1ae0E|aALS+V!6yZ*S6TaidxTkGRP=O`4M+^J+6zo2V@>hVp^d@u*y)drF_QnZsM20k#-_UxU&&- zdMtMBZ7RD#X|LPS!Y=~1yw9<-9?pI?HtCGbS?BY-3)3D9%*lhi>4z)W1>kHF`>i^=)C)+oHsYV2C`g(s$t) zQt$QUHc<*q!}X;Ft}pj;Gh+n;y5N4f-cF)#NU}Rt6@Mj1`a{Q0^`p}e2RzG3($fie@}w46;kC>VbQj!K%+EXg6Lma2}@_<{3^(mZ}jnu!JyBd9!#H)Hp+SB9Gm|8?eWxT)plNd6b%3Qf}w+7G)_gNJ&MoV zZ@qlLq^AhOcVZu8$3A+*cnB=tl=HCeCCLkkXfY5Dbjd&@0LA?RwK|m+E>;<;?R=o; ziLG6kijWE>7YK5qS%;T)ieAAk&^H4(+(;L^K{sPzELbSmh%2A%WujQQPO zTi`e?GdkPEa(_Jah`vMdo#>y`t7!Eja#iKMM@(w;~(e&6*ZJ&0)9I2d6vj6V^3 zsiHc^frl%-RPAPHI0Oyy<=|}$0lqlL2D>u^P;*$0X9S8%=`H0p&pi`4D3)mIPfmR!RsD4zn4&Sr3f^nb5KCFj6f1 zMNFC$tKwlm5zPHR^OjX`LF*k|v_W1%M+SAqN#qV4CR$yDq~0GNl#o2XbHhgju5ea- za{fb}xWvITVfz|ppOdR8(0hIP-=tFR$`;B4Rv(a|lcaLqhPc~P8$6c{-@{FL8BaWU z$xm(8(7Xy_IB{5?npFvb^gC02qH|>GT@~wbtMr7uk-s136#dQN8fLK~r{dr9xbDd{ z?T8*7Y_2|VK27nQ_lR4BJuX{Tb_0XDcuWvCrjZ1PA+Bc|CB@Yg2<7K@*A4^vx!7e|nWZQz>0XE+ag+a`4oiI8=_$V;xP1bv}^f}k`A1ypR0ov#{oRV5JDM1VHZ_Zh3`r-P}X}Y&zX+I{91K~&a|1}ca z1R87%(Kw&}nbWZKMxZgB_O#kFjwRyI4`X@Jx19>}?koIT`6E;kkf;LKo0}^k_+|0I zBz3c0W_4c}oL69P?0by&<<(>LY(HzIv+Y2)%Zj@=QW;e=8#JwO*H-S{i;VDKeQ}Ln zzC#hSaS$r)enG)6*eCeF5L=|8V06sWI2RcdI_DYNtTTj0Gutpka(vA%jXX$T$@K>< zUHzBy6I6jmR24z4H8f6P(6RPYVq0~aW6iYxBtk9^YH{UUhr9Tcb`t4^ zfC0Nm#*s3|Q5vmex3t8JnzUf|1<@XZAte=^O1+N!l@;+O|I@ie7rwQD6vMPPLEk|m z>EZw=ef>YmGBx451t}fo`FU9o$E4w&8l;9o=U@2twgCcUW$zb_h_a?Z7>L}cSRh5T z#isxBL`zl&U)mlGAoQs(H-MFO{i&*7TfoI7yQM46knm&+*g;aXwU{o&>Ag#cq-{X; z!v%Q?PS285Ve8}+n1|L`=`EbRL`Vc{)dE>yqiuplBTsI)-n!viiO%DC4Ro&bx!|E~ zZTrnT65GLD;I{>s$cjn0DUtWk25gwAtxm92_;IL>xfo1j$F zp|=YlUw2I_Ai(p=wJ=G)j%eGtjdnpb+sdc?U4{~Au}m)BTb!BQ3%UP+RvaGi8zB)PXzm^JoNICih$*l|*Q)K8sn#=U==339tZ=pbm@O0SqWyj|favEXSm!N~#~W z0`Rf{DsTzCImRmv=MZf15NOODUT%LC1g^Gan`rX}+eKd}SSP0S9Tkp-1oUuIm?SRX zod|4ij5SaTaWVtv-K0UD|ZTS8GgG>buGH&JKClTc?l8l?-fg$$Xmb`db z<6OXV2ZWAqw569s?#8*Ib{6a+CbX=UY)Ki2l zc+=9`g{lzW*%|g-LU^YSrnq^@sU3FPIxo!}OzMMM^d^4O$~tbC8dqYO4(`hk(v&}H z{c?L22n)bo4`43?hacugUQl6R78)*W^<|`l!svAS>~C-PoGOC7eFI88ZI(SJyr=pc z@nQRiQD&-{K0_)0xa6e7!hf_V>QwcT^aMdb`Tm`%XM*do>XFU_EG^qC!$?wCvo3UW z=iBK~obAc!A+lC$x z?+?mrh3X0xZ4F-!vYL3)>Paral3gc(jh0+|A(fCz4c6-0E{s;glu^{11?(Z(Ga^pc zBRFzju9`PHCN}}C>k-6JRL7G{;Al9k`RX@`d$J^?MYV*u+L`pf)!>t^l~^nrAM-u= zL`5oUVEYQIRn$AuE0oanpWO>yZRW!9i(eJSdWKkYzn=k$EzLPn7n#R!-Xm=Ckct{v z1YOf#C>FABdfILGfcWE(GFX54d58pG^jz=__A=lr$PBvxSO>@$>jR&q{oQK>T>87h z6jw)BU1;5hl@47!kk->|oN~3mFmK)g*78+i)gp-q7JDh2r$oPLO90NrsUIzc9$}BOGfK2zkc!S87%VZ%I89BReyL zx*X} z(FKA!cF3&P202;Jl-6qjS zI37=#md5(!Og?W~zJ4G{T$6#;uBNL<+l1;Xo)?cF*rmCP&Gr-|gHzeBy&XvVi0X&D z=0(7yggV;utYp=%e3~KWmi1zRn@DH@o_XmuV9G+#>-J^wPP~~mEb)ZXl1Z^@He6*E ztCJaCZ(5kFw?~rP673`waII%gVe8n4DY@FnZ9^29-2q2wfHdYZz9;03AEY_RvOqJ% zogX|OTV|a?Y!GyZWnyIJu>_%;BAgeOc-G>t>6V_)JB_8k!>M%@_iV!u)n1P!lKX@~ zA`ELZr1L*hNECQc=)X6&T=pK|^g``pc+1E#csF$)tm=1;_s=pIP)su7sYgpyT*Qy* z&r%Rggo<+NH2>_YRV{=UexuZQkqLX#*J8T!4Mm7WuOB!s3v%@`7COB@RXR&zSiCNP z@8y;xb-k|B=E_TD06ZT};T#v%TcC{sX1chh$aW#s@{zbQJG> z`GTK5ruXRqNa!mUv5u%lE=&PK`Ry6ia6cONv24pJJ1o`?62K>66=OOqeHql-$q$_S zDBVJ^2sno#8bZ*`(J39C>SO-$h5*B?{kyP&9Fk4p1?%%1I0_{=O8kvlRf?y<&`9e8 z0&QK@{UHf8Hj@)Q^WGGJ1gtwTuc*djI_{=a0CLFoF;gH6Ujhch(u}RvrL_9da@&Cg z3gNAzK4EG~2g1L&iE|v;zTkp4==Fx#Dd4aPCf;%ozXv4MaaJ8Gq5wa*M*Qo;0|Z3wAV*6ba5hqb|H0zH@L#oJ6}KR7KFm zoWDi6U6zei1Ptc$ROYv9U?7I%4xk>}8;AX63~9;mLjVJHkcdIz=}V_x<#7%=rJ{CC7FEYSSf>zBwzv?tF0 zb49yarvjWCnS43%!8EJt__WWlD}cPn{SW2K?!FCZjrSTfoIWKakyfL>@0INISA28- z10%emwV^d0ULGx)G~krY$+Ni#V{wisoI(N>e=1>hPFene1nSNM;4mqDrbj3!TDRJw zX=iN&l`^admN|}EyX*RWHtxI@!0`_Hz2T>+w+Hp!kL}`+eA>q>P&i@6f3%&VQ+LpK=qMAt-m) zUHE^lgFsZH4!35p?Htwc-EIyEpnjYUOfGc8UT zYdhY*Lp|{l{QDpBloa6?`nV#d(jR)RLM?h<_EcgT!AI_l@`pog2%1r7*5zX7#`)wKGbrD%Fj2TEj z`F_ymp^~b$f7s?ZmMX&;7X^c$F_^J-O{sEO0lSoS8CVTp?(1F~#E77u-Dl5S)% zXny@kWbc-B3PafodbI|stMH1{3h|3h;a<+Rrx^ZrIb_N&SEPhp>OEJ!by;@9=(%Bk zA|7b;(Qw*&s^1UfE}p$l-~Cgyi`RL3?>Y+JB>m69f$Eo}TQp``-Rvz*5MjvZtZRVA zx(#LfW1e3rwXM3cN;`yFIDUAqAf5R%KHfZBge3l zFpvvRGg7&usM%T=^1&K?ssj3EpKj%+e+Nelm-OPLy>dnXB6c)hVfvw_&R3QHqv+h@ znQX&2z7xh~W`<#S#xRWLJeh0^8^fHH!yJo}QxqjOMi`k>DCI1QQmKe?%podCMJK%J zsNSS{)6uJczMtp%+}A(Xf7gB8*Yo?`h*D|MHFaFnbjw{RdK+(>0+iKv(9de53=j^G zotUe%b25i1{^R7q!qk5$9*Te$89I1PuBuWOKp#82p&sni8T#C8=Yj7MxJdA>43S!^5On%#Bl3R1Cuawd-v_tV9Z#X zlwjZBh?(0K~vX1wTzj$)b4c}g!0m!W1r%v=24bZB>6^h@rkc1V8&FaxdnJj#4UBI!qqpSIO6pPx>iJr*nI}k+G=`B}KiE$|MtiB7el& z@P4X?4;|{NH$cfaIp`YGn{O2~d#4xf<%V$xA+h(VJbnNte%r5gY;w~|;E}UDo2bbc z(KoFF2n-_Vh&Eg0KneIVddsx-OcoSkBa#MLQN2wEkBF&)j=d$>BR-vNyHBDww)7M% z$C3RCMUIY`ven=a4hycC2C(13b)TJ&I*jamvX}^{2S>r3?|9sm9?~mVk=f-VI*D20 z58pOb?*2-WMKXe6mAyo}TV<5*mxcSL%yhK`=NrbU+7* zZkbXa-I-B~qer`(hr1YlLC5H_Y_yDZztGd zb4Lo@Go*VSsc*kiCT_X#Juapk=S;@9r975Ih2EP9f86cq8+?Cs<>MeAgB00riXscFPVj5k`si5v`wwBO}vG?w3Hqtv3Cr{;MUwQ!$-#WPt_63C6 zmZSZww$_w=qO0H>r-`Qvl)H=2;3%c#$DPWdJrtGY(!2h%kj3_%NHO>>WzON;qVag{ zJ}w`hHo<|yA$h+d3qq2(AczXR)I0$%@=b`KVDB722Q{2S${m#ryV+BgY%D%%sM^b; zq06PT-x~OVNhgo-n}S*HG|HrL+PLBeAPBNPakh#DgsnnM$D!6-NF7KhHC_U(+EneT z%jG1Mg2d3&;R*=8Mg2+PS>Ljf_gjC??L6M?@d;m=RwO&q1tQ@lo~PW3DIVG2gB8^Q z=b{?WcClRSL^6M+6>PJ>A9{CG{42m^O>4Yn7@H>SJM(QEJOVZ-F@ZBbo$-6nVX!hk zp(EEr2OwXTOQFj(ef0M#%Yr^EWD%4AT^b*(2BK{QC@fiM>Iti9irtZ)_a zNY(tH&hUFq^o7E%J;DAY1@TX8F?r*iWRK7CVDFRyXhc{}RKteTNlF|43XyDZ^_$}Vwp z2Ex=CDIap|#$KO1$tRVf{96|<-EJsR>Z*jtF6M9H?T)?T(q~C7l61V_wCDEbqY4Y} zigpfn31AOpcIBP2+xXd#vGGg8z2p$eo-DiVX(YM3&uz-)pTkVt^pWXT8}Un*IeqGG zK+n2GpRiexxb6sO_6?%s^4*9kzN90*qypzw_CNEEWXD6HM>pqm6!y;^j?M?l7m7L6 ziTyH(N~4um?8s8n9vlj*jrMkXTOkDTto0oR>@lr3!jNwfG1esF;l~lzbAJ@2QQlZ@ zq0RYuK6kAL#~#3Pm6dirBti{2Pl#UIi&mBL@9eSJ+n)$}C+Hu5dp;VudZjqw>l<_; z{5-`&S_3yAnW6Pci#**^s-qJ9CQ5wv?WDQ2VQyBtgr_0v)?}x*MdS*McDpH}WgXVe zGUvB;lAE^lGzo6nWd4qr(e30GMc@Oh* zvvIbFilwI5kY0Ie zF-0;l#zq`4^G^wBY4BwZY*=7W_YdQupTkt+e||@O^2h%WV0E>xNuD3yn6zY=My71d zo9zFD8j|+jed!Mn#GXK4+8j0&ST*I?+YVAs%bDc)_=ky|VOXw@U8KQKD{v^~4q*HI zKVsTfcGOt&wof+vBTrq-h#p_>eD(GCKsi3@rgA{+ntN2>qczT)5PSu}P^Z}L$>ad| zAbVfW-)ZJI^f({|`x%*4f739>&%s>0vuVutxsO+=<`GNNRD3Y=)FZex_r5!Q%368V zg?Y=t+co7qnd6(uDU6UlyjS~o^l(Mcm|$`qtp-&E{&;$zxAIxoCozhbE^GrCh=x;0 z$DA*dgwJZ8EsVICI@O?TZVf5>RoA23Py7mp=(xiR+|iKF06gA1-B1SrVsT!+IK;@u z`}od3+ws7|j5$lXAF!!^Q0q{&WWx?J@(bASF=F{a&=OZ?sUy_ zP~9R_ClJq~yg@;u@JRja3NOF~PrgDS`gOsy57Gn41z`_*c~`0z%>uJ`ZrYk$a3{ks z!)jM(TGU^jbhN*LyaTaTa+%JA19!Pi`f!~RfaNYw&mQ{SL{f)vnU9Y6VMA$|wK6+! z{=v8cHeTDyWAUvS!H;Ak-=>sh0#F?pOx3wtTl|8voN|^H*00Fk^MkyG1w2-pR>D5q z|FH!4eQ%^ki?j>vFgTQDeYnm2=XF`e8+$uFFlWF;I_-VQ(D}0)X!SSDstYsA7Z0AP ztMe}K$&`jq7K_GsA(n|U)c)O|^<$wo&%e71IU7v;_M(5{W$WRe!&sbiY1!mv?^$c# zeMBfl9Z53~=0EU$h{Fv@mLRZd8R(j6jN+4Zr<17%zs}`9HwrcnEbyzde>Sc3VsYMg zcpEbzU*%XBEyh5?G9SGS9?WC5ViK<NrK?? zqYQS|BhbRJ9Ev)}Sy{I27)4%|v%@gU=pI^iM){DH03Me_i>>~4B`OE`asa0z8!pC^ zuio3v80t0N*_FQB7-KUQL=5u2Co_8}bVU-+?Z?+EntJviM+O?S+m-FYprD8Yv!|~D z?_ZO`K<5>B*kQfrTHYII&E%PHpy_osI!~VWA6=c;J6K&)EbCcB47F;#?RplOIa5IpEt7D`zGG4ZADFabUeGmmxtnZ9 zoEP=$Nx@Lvb+de{dh^hB)K9Mov{wIr$6;TL3#?H=a9vf7-=0tU^r4&*%;D%8Gg{5d zn0jRD;&$CDWrpLv#J22EFK+3~u8mZ=tL9Y~lSn(p{}ee9L&ni}P(44DK0QwRbSNuW z9qJ=f*Bxc>dt}~NhN}#g(qbQ>(0n++ZSM|rmpxA(}x$dm6?8Z z!@9fByK!?(ft#+$gD&jjLFwe2I~Lfy7Y&y&nfUD(nQ$motu&qg1^TBIB^f#Wh` zjMNRe<#MTQ<4#?PIOBSwr5jtM2ir|Q!2ZReP$B2vVp!CG$$%ZR zXEIsv_Be>Yy?A z`KwWkFFkgEqOO2=LuW9QzNe5Tj0P_1H@>KBI_J0$l~c?Q^h0rdS1o2?p3L^k_Xg&* z&dm?qjlY{N7#44rwDhjW@!DaKJ^L7F&*@QT+n?}ridsR?F)>PB6L)mFmc9?3Oo{Jk z7c6ewzHP^zJhYW}R=*CU_vzI3L_XH|b${rKoc18+Xtx^aqfZaSqIW+*zwhRWG$6+R zC0HQOzt3L^aj3^-dPm0OhMs$a$wg{|(|si$YZMng8S#V<42sz5INZFvd&Y!lYv`C$ zDEiA&fA25n)W71_-uI11s{X6cXb-E@ho-vln4(V?TR(Gs(QCBn&`yG#${^|k=p9Pj z*^Y95B%wgH6L#`)Pk|2i?%yF*y>nd1XQJrfTBOO8W*Vhb(o+ZmM}``}lVS#BS;XA< zsu?G+*%r;G7X>E-X3$BiuDptJJ&XR-voC%#<*H$}2CTT8Ss)d)-g z^S?{5cH<+pM;~*Oe7FuArYqHjWp4@LS`p~leC0?4s#kMN8zKERgz1bUcI*mZ+!Z{G zORpoie)6YE9Nw|iXUjUHGV8|S*nIU&t`vrZ8_dY=if7;7RzB+N1LAVIp-nM%tb-B$Y{S^42OK8wu6JF4P?g*e_TUs1-#<9!s)IiDCCguGt5`> z#Msu#deLsw5mIn3_giSqKCF9#NhO!g@Md$d>FNPK4i^KbG{yd}D8QE6_i4UZ$3p1I zlH{x}e~P~{&(Omh&I_ECoKUy#>^Sy2X8WR(JZwT?a{;{UiF_C7LM1K}Q&shBRU z7_kvpVB;5XK!$hUC(g~N^bL2^=@@y;u~XpN3`Vc(w?E^0d&%xjrhmBi{v>1#W{Q`- z%kex3%KFyvrPp_kzO>u??L0|mlA`?P!hkzs=!q1?;h5~_NhRd3jI}8aSMF}Rde;}D z?}h%c&9>3yePY}Kj-NiCxV>*vqn$p(P?5n033tvw^`JYnr(uR^ft=50VekmET27(% zPX;47Di2NxsrAKJNRkdxCTuVKv5_>zuiMt)>W*CI6;e`k6fzk-%|YE`LkjgCJN|p1 zj_DLDZ+Njhaq3=KO0e*xy+oU?VVT`fkk=rfjOvIvvi3cF%d%A-8SF5sz6bMdv3Ci|Eua zC_|wS+{2Abakq7bwIt>)T>UWUftFM)I{GxzVLRfx@+GpoH3g7;n+sK4AJEaxeV$SP zBtJQJ?B#N!IJ>sTlA2{ichU{;94{}Fu1q2nFG^o}m);u*OmO)w2bmK688ES+P4a~$ zVb~MfPrA7`%uL$hpM)a>^Ip8zzi(ww!qzomN~vBLOWihW^Wfl)?z$7dhe3-^fJd^t zE*iLX$LtgHs32)W1gl{Wj~wzF@=LGHh2-_80X*wQH*!HxfKEzR^8TbRj-A4*W4DWF zC4bDzC=S4CnnhFmgz9g9U%!dYdP+k=kZ4Z7d8r}!BWT+!b!T%+(@F13p;H|qsi&TXSbCUk&lah|47P3O)PEL3|$kAmF5Hyl0~2k$Ctj^e4O@p zD!Xz|^A!3`p-H-74^Hy2uR3x9XG&}%Y}u~S1gZl$Lzc3-jrPAMHW811{15jePXUBS ziXRgp-``sD|n_`05>l}>;VdJ z1c>7RrZe*x8!Qe8`?O3Vfm~#c57=14O7yt7ow$w1NY?KW{6)y6hM=L6sMpCSQyUyhGubDf8q=sIFO%B3yXiA@?`_@k^~drunaSx!X)u0dF3^;AITMwD zy`NYx&AV}F{+@1P5oq*@MW_8X?O|-@-90C-N#$=D8iK*#mqN_nJr4iX4L-2`#xZHu z;Y;?|L<7g@77LISKVW-Ymh}=z&(og|t^Jqb;ileARzRg86b>SZ@8j$bID5AZdU+ZJ zwOmeTb!Pksm`#d*W=9jIR5QB7g@!S5DB1x?NV=_}Mr^b+RGsN9nRDwIf!e(%^C3)shXD*stI45c zl=BNrYmn&s^DPfwHB$C0Bw-AEs6j&7i;0+PKk1ha4pJpP1n)7f{1{(8e@u)huc|R( z^aRy487*njY&la;pPlM_XjnttVy#}9vNdtJVOq1iJo+8#)Ep`ikc--8)2^x{qrc>| zziQx7LyBs0B2&22Cgw7h<1*l`+dyfMDjPVm^~z*ne*~vVIIPH|#b#ZbX7BOx(r=W5 zXiux&RXGV;^f5k4jIhj!$5Q5Dn6hS==4!`)E3P$T-wrq8-ax<7&jG~~w-zi=;bb@; z&p|KzkPZX=d6e=5v-Rk$?v223NmHBnFJsV*KqJ9Lwy)u*x(6id5)rJwe}KU*A3BgUe)pRbo$HSBN2!|%|R_7?=dzy7Twj%^{~gg94+Ng z9my?5IQcfuJdzU_&;1y`BMV|DJ#Go=0rfVV*lY96J8+Oy2N+e--gkT^;{(-HgK*hF zYXB;WhDErdk|xHc&QFQand_3J#v<=-=2S| zNV1v_f7v3KcGu4!-H?3?wuWNg<#u`Mls_#JANMXuw@ZiBml*us|4BjEY4rv$y>kxi zKT~h~>n>&gN*I}*Kzdl3J-bf`5G>|Tq@fPpG&kfAxMqpn581xxN_wiA<$di$OIy_F zc!fQN<1JT?*4J5%?nTpA(l33p%$QQf>{+dDH%)@Yy1psAHcYu-4B^})pU+Aj?1%8D z-kvy7lMcE**oy@iCb2FF$FlNsjg2;+rweBH#b4XJ%oa_=bO$KEeg4kWcRj9G^i#e> zscwd|amf5?Ub6STHhr={F@m>WpJr_ynqMSY;U60sqbthJ+?wLFTSFGZCmB{u1+K%c zsF3oVNy>bkoe1FiMH@rKYy+|ZaSH^#aS+HU$H&^yqhmi%-lSk`Y7ioJs%?D&A(U#T z0N>K5iViEvt&ss!A))?5(IA}cB&Zz(V=&gvGy1n8Z=ll=LkT)az#w5- z;^gR*)gge&L5rz$kj!cQr&+s}V9)$kp0Hr=H~Yv)xxm^ad-xAq@z(MvUfN@O1I6N4 z`Ao-(>ZJGEO*`cgwZn^-K)e&X$HA#M?s|zn-YI(kkE>)hsU685CxE1Y&JK^2>zCEp zeGPqjD~|AVEq2M?U$~)%S0ikT;JvH2_i81JDgz!0;BShSx}5x~3=XEkYqhJ7Z(y;0 zPsN;ZqK^-~j57|0qYcZ0$WkAPQZn=heoqSuy6zxX)-VH>4w}H&l{)Sp7N;aZM-+=B z2m^ozohF{AGt=B1NJ*Z@RDIkXaHYCR?B@DZsMQ~kiq@C7Xk_Ki_xYN;e{S5ZsPn`P z{(xG0A~Pv+R~br@o>=9@UfEw6+EsG>8gGc+&ZA22F%Pl$YIwTZkds4+eW}<| zzy-n}`ZaHwIG%~hPu&%ci}HU>A!HTvr`;P!XRF!va|H_-B+C zE&=I;NBc;&AxYR&T*iT-9OCSiOVn;*Oi3*4vYcSPtrS)F(PiV>E8v^T~oMZRx2SzLPljNN9{s9bHa zUMXj@aLZ$+b)K<$5O{~|S-Zk``#E$^_K&DQ*_-@9UWAR(MZVngWS#Rm`N;bMYH}tz z=n)wFqEh1YVwP?RiAPVc=vgqi(Fb#aHtQd@(>pG#M(?tSCti_x>HRJjmlWeAgBVIm z@yuFqJ0li=01eeu0QASTpp5Z|5+k}Bn0o`RuYf8*hIB$W3s&xo(FR87AX*1hmXO^o zWk00QRE%s8V0ektL_)NL{3|%av{nm^M98R(Vkd~Zq$MrQx0~IZCddQ0P_}Ax=S3%E zQGOmBF=1-M+KTxIlS#UmX0vm|3thyL?}n5~7-@20UUsv3f$)bORYB;ak|U?5D3<)8 z5Wfq2SlQY%4WDXI5TE&W4DT-w3Z0>fpoHZnDi)OBe(vorlGHgqbl&_8t3)=v)LE37 z9^ow@sQ-g6#3SXAY#g3Vrf6yH4K67d1br)YVoTj3X&?rr8@KLgG&+6m<10;!kM8sh z;-{_Mz##K8I`rYd*{>OBL#AtBB}h-jQ(l00WE#LdOn&3IIkSA|nIBn2FOk4ffe9&l zMeuHrcU|-Ro4QzHavUe&@;&H*&Ia?-niZfCgw>Y~4}DOC!=m5$Nb7#Il@IJHhC^l^ z!0iUlPO@xF77|N?>ZDKjpEOf#pq9y;&(DOmtOjMRJ>H%l2{>w|or**@m@h0o zg_??Gez$Zc=kJN&j0b4pUk9n2zo);@fUO(lYn@2jR-c^~8WeE<`S)x!^JLnO=P!TrSKX;oLV7nJ_?6)2M{{sz5|Y#OJiKlOVR_*z-A!>@lgt#MftiXcFmvjxMnu3}-ub%I2{vIUL zY5qS$BLBLCv>UI9O$wAw8m;p6T0tMH)x3SlX1Rwt-ep7A*1r3)pqn``LMsfKAkyh9 z^N)pvOb*G1POVyAq5r~G)ME%)#jS6B-UH`u?5I)ZnKHciMjPCb<5vsmfA#Z&Y? z%|9YWFJSBLNX{z%EZB-zS#3~Tuy3;~c9LIn8QdX2Gulp+Jbc00BX5$=PGul;7pF*R zq}~0PC!Y$#n1kRgdf-f}I2P$@j=T+jc@o@)gi}bD2PfU&sNzLlaP>hTJ3!X5_RIAL@W6d=vAFhf z4k_?5ew*lc(xq|_)rn-&CTE9<`$~tB;E#sdwbWe3wM}l8x-X;6?hL+)oe0{cY1gT> zBY=lCtfn&^=o=H9tk^ya%jCO$mbpDVcP~!@ zR9la{e>1kU3Vpu|zKCF(2Va8L{3m{)zE{xDp*WbNfV4ofZ2s!kEXsmZ4l(oN(yr`1G%ADcEjYQ# zQ7ysIOyR#0^7m7B#4!UB0uzp|xdNZ|KD?_6jmiE^MAzke#{SMijNg5(Tx9SV3?!0~ zWxD(Gxz)>>cM3SFhyzEo;_9kv9v(x`W{OQWi24~3tJ<=@V4 zZ|}Q-^`!n|aO3lC_JyKz=%t(lBbCx*j)H8MOmXC)6Hx=MYSeqgB4@6}7#5v`%fIfS!Rcz!yF5GRIswI^?^xqrI(6$^1ZvJWy$SG<)B7yLv}x>L z<+75GBLcV~3U_`}_A8npoAiB<$h3szU8w)8`&Nt(ArcjWvPUKLcg2vq&F9T6S%-eL zpRGi3fh);HhfdE@dgqPT%SQJv-IW;iR0^pR)2G!Jpb zVMNnlg6F(v@RVP{N+zXh80H7oCoUGdR$V>Kf_dWvFpnO@x~%?qFH&x~rwNWmro+OO zV#%6yRX|sp#G)iNG1N#GJba)5M!1MT)sT_$F@Wc-459rR`l4jAo6?10Ouc3H$Xw*a zl9<|f;pnfzmPTLD4Eb4zq)z&5`@14h1TXdNypbPMBw$W)ySm4x@6qz>&6OUbd?4fy zq9;K&=unEs&UyMJj;rq?T&T|Q4gSIvyS$X7vS^ojFN{v-stF6Z@;RgD9qs##X~D~- zlB_8z6<4#h`Cq*pQ5+;b5X4@G-5bZO-IJmW!S&37WTiJgopooaeEF6X32Qc{i*+;c~&pyid&GkUH+aPNbx^nE-k->)oIIhnB_%GJ$|Gq^Mz1jF_ zQS-?9j7k0cNf8-s@1=qz>Ya`xmEh9NfpAY#0xk&JD5JBfk)acsDj~qZluD>MwessW zVI`us`5M37V|QS~bTX@Uv~qs8OTGIt9!l ziAxJgowL_b<>bKbM}fZpVwE}UOB1*w4+*-uSDrl7gmznq@>%kh!F z9O(PY?ykS=Z2!yFroXJK0h>}lRS(ZBpLtQ*p4Woq(YCdB?_bmU)# z2K{A#&tGymf5~G0C7t${RP(>2kpGfI{7V3@Re|K=e3L57Gr-^=9sdb17(B5Vf7Oo(iA+bnb7pv(tY$HU5_)1Ap1q{g+*xf7#ypmrZqlSyT0w z<>J3A%==3rzqIi`gN$^CRFbvJ(d2}qrH#w6(UHrWQE1TSjHofdr*SjjayCy(Sxoxo zF^NX~n`=(_n@c7U|Ku=d+$Vf=so)e8;;(4jg*O zgA=@Cd1rm=;JpT6W&WsfmT#^J*LlFHSZSxJ1RSpfZi$nj+Lu(s$@nVhJ&rmRYL7^x z=aa1CB4s$f53-TKZTT7`H$TqNsgV;tnDcT5^IS5Vez}Y1@kIsVBJ3jgWjHXJJTmfh z3*6=NJmmKZx1-~Wh8o0e`6Nv749?Y6GVOQ>633X(uBgPu^&t~>#_qkvM>4Pn4jst9 z9uq^(*Wfyza^;~fS}d$OhsQR(J7jM5fdy}?e6;7>D^S+=44CE9bFpEYLJH(^lL6JPwK!I$6xbs2eYKfZuC7wdEuV%={XBofpSaU1E1Bz&-Ua1L&?yt zM#;O83BeL37?{M#*J}_6`pT)H3T2#%cvJg^@g$Xh{6)0ob+>;_=ZJ}e?=^>LUvaJM zel{>nNj!Zt2^_S3lbMzI-{6~Jx%bwQ5pvrXw3|FFpBsHh_?K4ebqRhwDzTL}^x@&3 zg(OV7rtib|F>_w0SrH2_?aM6vmyNJ!RdA4Oi=c5zV^RAuULBEZpxhcr^? zKb@?@Ec(#Hz#_qtY={=UQuq5}hJMuH=23*oNIHig&8!7-g}scM$`uzzgBf`)N5&Ho zL(ZTu_xyl`C(I@QPMRZ|L&*xG+mAVo5AU z@TO4onp$FZ>LRV~!Lr6@%Cn1i_H3XnlB%}@o7#7JJ_92Xa{q#rpYz+06tB)4{N)8K zZ(k6wU^Z{0=!Q8ijm$HOzNfQruXDkocFXw97NG=nbAI94_>oWvy;5ta<2QKR6eik| z^$&M7^Q;%WiiFe}v;#@4U)<1fxB4!NLh5DoG5?Wxv90jIs)m%JMUCBp>9n6Ijt98t z%J^+ipkl$5OtPEiM7Amq8@;gz?ua}SrkT8~6AIxa_-_~4jjV*riDCV(58ZHxnU9USy|nZeqiP1=`$q$C|Wf zwJhPaE5h@+f~(VG`bib6pykmOqgHep^YG&V?3m&<_;hdRj^sXk_fH>WyNpjrf7MFe zSqQ&d0~Y=U1l$005*Unbp4z`)%G5;DCmnd?N+GAlSy({8^y*b(&g=YhXMrW304i?} ziP3);{r%U}DW2JlMb+;hK)Q5S#||O|ZAi!K5tQ8_oI=k|Qt0Ru=!?O1l1ue~ekv>z zOc3fxp88db#-&VCRO_5_om>!Z=GZ<4{6(DJOGYSeLZRt_I6v!yOvtWBxFp3`%joa( zL<+@YABhY+$UmS@od8tXZUKN(;2cA8zimsoRr&09@@|V10MX`%?uyWS% zD!83*hWwGm-}(`y!0!GC2R1PmF)^7NH-#L|ugu!1Am(f>IQ$`XJ@&^oLN@4|(rtIhE!hERNzO zrN2g~%VQGtjSa$H+})@~s_0W$l3Q2td3&5tUx0Ot_HAsTstxfMN#?XEKqpGXhubev z_!e9>q67Y%pA{kPu|qTh$bP=6pqjOh7iKt^8$9N9*;7J1)I5G&{j>1TuqWJ+#uB|% z&#ns@%tM$vY_}yYd8Po)8>}RjbU_{NmxIFfx7mBmj}fY=Sme*x$t>4pX_rngT6CwV zqO|!|RnUpz6!-|w30wr~Lr&sQRG}f7mXQg6h*TqG0=qbE}kkYf0cBs*s zA{nmATfIk$WbBg!_sCfL8qRH5C;DSSTj1jQu+1Ncf0cp#;rmS^Uz82OyI;jnbdUv( zkY%)D=KOa307jCxxxq(e&kHh{-YE~Y#O6Qj(0!Y`GBzxth)dE=l_zguk@Z_}d>Ej< zSb#3qYV{iNZzWLGC_W$IK`FnTolHyY&jWeDof;n}IWVN8+xaswWH`LSm zE*1&+7DvKy?4j@es(f1Xf-v6z_hOquT)B{7;qMy+o<{46$SK5gBtWiQxOuJiY9!JQ z0NClz4zU<;ixC6(;D#L>zO-k`v#ficKI#M&_igVq3T!<| zsA*h$&I(Ls{^tr#d4%qlhPT}07MUb&CC@D$ zR|M{lAG>C0qYIKgJTV4&RP#mJK2<}!0Ebi;4*(#mm9YqfA^|dJr(?oW7Mb7=*VB~H zAC^uri9r_xsTzP%1&*)ciaH*l{369Cj0DAsGT3-MaF%6*+%Hrknr=`@Zbuu~tDCA! ztjQ=8x=va1+4iRe{nO#uuxExZMdRQa;%S_;(T%=wECvVLt;Vbxx)!={18pDPzk+%m ztNZl=yiDHFjQ@1WO{{)@ntv4Ak|4IbU&#^-icro9Ecx%r86NM(*8P7ezmLWH@0R2$ z6Vg>`JViTHJF>O>ZWm*ugnbXLno+QB@mxkxf?R7TJ43>Irbg&#fW;G?k2wUmhFI^;OKi%S@%=i4(fqfQpd{?!SXw&)QbTru+ zxU^h70|Jh5&}P@`FcgI1Br}UuD^tGe>rlW(cO4}ZzWk1@cTCp}K^xim*L}4PAs)ly zMNU|aRVcx{!?w z@Cay(BAD@}L*bgL4ag%pVL)wCIZa-!qz@TMnBZa+TUG_aF-E|5v?>7~vdfqV!_RI6 zxZEgp2-wWW56B+t)$QL$W&FeS8$`YVy2cK0EdUa1+({YOXA{az%)w~QHk;})O-xssk{t=x4mFe$-%Xyzq@9u(29abW9lI&SLZ>BQb zB(_lQLJehF`jPpk&QC-`_VL-I+m*O($|qCN;RO-vt@fmus4(KVK2q>%&N`?NCZuY) z)9Q)pzk+N~ejGE{5pO#sR>jy!Q(81idvy;iWv zO%DlG`V#uL2Nqv2^zu@TbDxo6jdxO0#y^d2=c^3@$Vo8}m6XUTaG4}fnqCt&NSZ$U zVpG`p>>@^J!|b1&9))bE_*1#bAZ2#&lY0q0%b}f-o31XOpQ^;HupR%fC)lwTfWd^J ze0%7MSta-N74+`)C8RUXhgJRv#|{E@N*M8o;m2j3AQcnH8^ha^nFjPgjn(m_tQEu2 zox@e;HR1W`^c?e1>&{3a^p=38&g0tL@hN4XzOOWMhyejX1A)h1GXo+|x@x|}k`4UV0j8RNQPaX-x-p#pEw^F-$^UNE3_LXWKLkRjc z=OwTTq|v!H&;Bsjk6znOzc^w)F?zY#_DVg?sh3D+BSJ2EFH_w@ORdQRG2k|bEWZHN zHE#4a2@uNgTd5$h^ftg9(rs}%oK@P~{*k98sd?JgvQBw7d+UNNMX|1k8Y*oltF1+B z=OM%6;fMPE&=)8giT4UTG+ElM^*Nzi`@u3pXxL6^p8O}U@s>WUIGZbda_V#B4=?1?oGo{6^RA@@!A%s}x9 zB&P|2$0U^)+4O`G-atMr+59@?Zm(*J`mEq6Gg0Jlpjo!{uES@E-NN0o&%RhX8Wlg= z0(GN2stbAd54ml*&NPPP_mzMhXD%zdCGP4p)Ey;&_Juq zSb?13R(JKcL;*S*c$8vXbkPUx5bFD2B{!o&UMt{1Yqd~p&?JyWDFpZ^YYWh_uOjb_ z=Z^xzniQ^Nrz>hm07)1Kdl z<0e;id>4cwb}Kl^%i&y6Ca_Ptk1Qpe<+Ef0~gXeOhAUs{$Bc^ z8IblbWQ8iWXhezP44LKn@Ig z^zQxBeX#htZ1<}z)7;6RbCkLsES6*)^T(%3bO(=(Oux^(DkC4DJbBk7!NuMJfuSs4 z)zXA9ehwsqI`voNlptGfX?+^BJxr=E1r^@?;KQDg$I0obI80!7H|OT9tfIbh7Gj)a zr~$9c5RT7aPTN#CfhW}XR*8_)2AE>0%IKV;O`%cHxh#MaWDBt=v2Dx}FBhcDwHZQuzw0ASR2Se>D50}9)M?puC?=I6nJdXzsFpCZ zpZP^n!%wEbEo5;ygQv9$E2sSghxhz*bB}d`zw|vH4T@5JwuRciM*0M>tu{nozk zK4`}#MqF}xB=6xhH@Vy1z}o&3UQeNa&^!C(H(vzwb)D=RBL6exUCYx493p*1U9nUf zSFNRvbTY#GCo=Z4NB^4%^13FO?<^7Ka8FzQ9MUzz6+2}$4iI1)00vWY``fo4ufQa2 zo^0=CLlG+otw<-~EcGsaij1)8Z#R^{ky19K4hNl%9<<%%{Tozn5O)3|@&I>2(n4E$1tkRkf0ZB{ntiG`Cb6EZ>I1&y$@3z=VD_ zEo8JHZ$PUqJJs^h0DroRQE)i*8M?$MV1D7XKHYheu2ROQoQhvN}-R z(PIawsGP*S0m41ghv4eV&Xlm0E$tO#rBly7A~id}h%GtM_|z1&BL;p~zrx4ll2LfX)= zDR2}v`Tk8|(ZTPYwdqyq7fF7R z-1K0z0t~Nn_oTSaz5dhw;eNH0z{ZaxVxVVwTlCOlcDMb(F?$P7TCpy%+RSDT`k)a< z1CropsRQ}AhSdj4ZDD<8v>2KDvIMTiQi9Gm+r)L zlv0jVq(XO}4qxB*Pw)4C@P5Bv&&TuO@!E{$wC$IB%qaSoX1(cG>XPYB~O@*pVx~g zMKC{Tu%EsjJW|T!t0wZPrtH7MyPzT8bHO_9kFF9RxqMsb9`6;0&Mfc994=WA_SELD z$ai3n))jx&+uRKbDeYINTvU-I2T1OCH8wGuTR3*B7IcYw7IlH=EiD8XgfeZ@bQt_^ z6r#Z?=AtjbFSxgYntXRT6}Y@=HR8iUaa4J6`RkHgWgIXaOkYNEGNsBX&x$(+z|q7P zPyd7msgU(dF~pugAn$HmW4*adH9r{+UYiH-nur<3fBC^J`+|xikl)DVL2#R z+dJLzB`Ldi$gK`w&*RO9F+(iKKXm2ZQWj{fzLUDg-^Q16Otioa|C4j5ZPbnPoO#zz zmsCk!x&M0I+;%ABCSYAh@S#3wj9=g!;pEz%kP)MT*Tajrw2weig%91P%?=M+s}|W5 zG<5=74d~K;mJqIIQ?tw@;_Bg}! z4u*Q&BBSSe)o}x3%9gesUPg!;sXA1|wtQRd{loKCAyP6RRUwpn6V@P$2TY7zE%2EVRS<)IcY%GGi5`1gD=C$1~ek>*>!zo%<_fz zmReQ7DYy*O)9jZVIq);%79n0cFJJN|MNz8LRtgIF?ZMCci4+uJEGY*&?QGagC!Dx% zYrcB;HIM?4izbf@^a=CL@`XB2?GF2DoX3!yUmZ#pKX*>-wYq(0Lv#!L1Me$pvqgPg z&BIB-blfGHDuTr5eldlyR2gO*OFBRd>AFW6MOp%4-#)AtlgZ?E zUiB2ric(vL!b?Lhw23{`k=JI=x$j}b2R3v_g#C9d@L|MO61QQ;@9toW~bvAKzkFt@sXZe2=i1@GGeo zO#Y%6_#1`aXkaSgg3b}80!zxM%QYE-z#k|4Z%n@P2z`%eC-sJWhjjeMTjX@nJuMe! z53JzxQ>bXr!@fJ}0p>kzxh^1x&Y0qSS1OFZ7R@0>WVRZ&KdWJVH0Icse$Dc%**B8x zMwmIHlxWJv9H-R|0z=EuM%IDq{+%^%fFg!Pt2z09R=z*;Z*LDF+9SdV&M_iq>d3XD z#pemVb83>xtZ##1hk(V`VNI@u2x*!`6qDX@ntYdWqK4NFG%!^&%cL6rtIH~F^#0lY zm9Bo_4AB(UA^TWNL_|g{>;eidSU1P~YM_0)w=Gqw@g|Ukf{kcLy|HC#zxY-aBrJIT zRl3ff+MSbz72XmroSemzRK$q3YOvqk0*c?LKToz@(q^BmSGn2EEkdK~JlJbNvLD5h z7ej!O$Sh|Ol?Y6ma0=>3}BksG97$yleo2Zq5TU zQV4T#+IlaOlJABZ81b>}QR@vIZxlGQ?%GYO_2$ytU>rl=rawa=eMN+JCWLMwZzpH* z-;EB6FiE{CH_+u$r#89uh&{=tjHaBR0={a!JAko5F6A0cfulu$K3A9y8r{K^xHY^} z{t+uIc|$oeB{6WQ3q8D$GV*LR$D&P3%)nVIPE?%j()J*&K3eOgXoP~>&^vAS#b>(n zM-R4pl}G(C&<^kt)V;>63xot%Gi3t0Gpx1ZT2*v!Xk@9fcb}XYVCfc_%U9eOrPV|h zTfO}oF0r-WH=-C=NiGC23_HyW@i%}u>zD}|&?V@hQGR8I2Mpl8`f_L|71+;xy*R^mOGW{Iho8yWvC>a>riJS~?UZ)HT}R)e9};c`=DKL@t>oIG1ui(kIh64G`WYi3%fl-L)X>TUHN<53(HAhkFI z1NjZ`_q?0URO)CxJEms4oPXX`$9>>)l*~B{&50Q6GLAIRiT`oY^L6ggfah1YuRGa3 z%s}|Iwc~X5@al$2O?<%YAIK5^*JgZuNKJ6cG$`bqkTscFHvCR_*t4kK*#m!0Y53|= zuIep`VQA?>0Po9<3d2Wmi{4 zv}&~)VzAcB4>oap#5iiTX?FY$+!MYf1r7NWInd00D=aS`H^CI`;r!I1{8Cv&Gw|{U zBh_2~)D+b?ueio55+pK7K!^vXfa$p;k*s7-I+1&si@Fd zptk9*14q3Vr=msxxC7ySRRM3H>ijS7;-~m*N~|y+pj$tZ$dh(w9CKJ0+2w~%0hVN; zw8Q1F&;}wjC#|7NT}O_Uoy~R|EYFgW{!c7%P?B!((D@7u*veA-6Lfc_*NWj_YtttL zG`aXVdcVpKnkNlJ*gXD@-+m^}(`i&~e`FN&8uORKr`VF4NzLfc$kV#KA5i79c zb->duS)D&NUKKKNTgIid0HT3*8dQ`_urfiA&=~pIK114XX>;JYrth91TKwA4BQT(5aPUXiFmZZF z(wT^VhUUSnZ_r1Ix5Tf#vm_?$H_#b|0 z)%57zMV?T_*kIt359T*RhPfm^}%O5B3h#`hw| z#b}Az2j-k^C-Ww9)GyCk%v&8^j4Gtlq0M!3Q11nss>42oGT=? zu%hOEikv+6q}Ma`tzI1&m8w=8ec&6@q7nK2X|=04vnT!c3ElFeks{&9VbN|r-B;VN zk6HOc2y({{^3ag&(78{2faTHT69rraEh?yaiLxj&i}CZyZqF=#VPFt8whbVI9g}O| zjbu9wyqX&|*>pq^*-8h0lMvka1H&iq6pal?+%Zz{B8q3q?C9v`7#zB+tF7fG-?!Uo zlT5mL5W%-GRq_KD?m|IjiwQQlw}(*=3z3ddn7!X4T`bi`%RhGz_~1F(SUZl_5%hIS zis!O{6jg6L^_H1sDnR0@nq4JJQRaiKoLBlTbEWBr$2;N0`64TAY=L?}tAm=A|GqrE zSwPGs`HD4aJ}0*6jV0U!>VIUOz+?FewFc>A{#)whGQp68tpca5?`43`TcKyQA3}_C zBkXy9-|1f@R&+_D>fHK=K;Ab)*d+a5m)LHHPWzI?@->IR_D8dhVAO+>{<)pWt@a-= za5?Gky>{GM{C6yLX-S{2*t1nvSwB2rbK$b_1fU=N8jx0<7f*JRhM7@|Ic;GJB2FHsL($tmrhf6;J+NZ;JO2|^pbI(L z)a8kx&9WUJN1QcYvhDDKLTQh|_s7}jY9TZKlHoa=2K1M1u++*!Hs zC>8`C%KC`vI&BL%wl%>}HJ7f60 z4O_?;?CvvT)cfVjGS(@I%DKvv`pV(%!|`nid+s4u4rv zPj=dcA`-F4#t3?x))28Y)4UbZTXzz+Xrag=9K3Dk(Y0GN)uFX)P{y0UDoS+Ku&N|! z_x?1Ncpn}4XL_=+iVO)NdXbqePnK_*){eZNl?mhK0!&^3FN40hfdg#8uwf%pO+6Q( z`^kC%79LK^@c1eEN2-VO6+P0^H%x2qB|f%r{#`+}ObbQ2R!q0)$NLP)OqI{$UI)8y z(+!lk10uhooMb8}Ejs&%)=}trq_LXLSO!xHIdQ>j2UZ)r|0!@3X6_UKjVfdwY=q$t zR%R{6hzNcUfxI5m6}Ie$rHU)^dNsIWlfpZQP_*?=%w)ylX?;#sDi`BO2|#Qk@M>{D zaBKlz8p`NnAUHt!2xarEvhT2D#fBOd<=8f(tpTzHI9uoajdU&$HA_29nGv3KyMUTM zbKQeq7OXW%u^BTgA`dZ*|Kf5E!KBo!0njciLrNS?&v0RDxI`);KDq*Y$g}?5`T*G! z@?I$(DEvnruX849we{P8U0~{ekOWzJTl;v1fc0njaj`i;+Hj|)7?JzfSS=LPF(lq~ zp!7`=SqSF*X749fcHQZnR2OXsJLqXIH%xz6*CaaZY3~ zKRxiYkT5S|2V*@ozWp{0qy`d)ypWXlyv-v-X&R@_M2Y>)0L~u;oY*qZdLUBKi-%GiXq27 zh=n{rN@FCvC=cxbdxaDF%Pw<#>a8p`%qv9lc#)?ppAO@b|$-d)=@)=i0^uL>Ud)p2>opS}+=Y1SsOQ zVVw%y%Lk|a+>$E!^fd(F>RBkV9)gY63KH*(n3dtN6+;q^x6P9KZ0GT*Gd1qpB-TX^ z!zsX8K*nw$`G+;sq6N7?wB4Vj-8Q|ui=2T9T#AU!033=rH10)(r<__CD#BB@__;g{?Cz8zyLb<;6s-?Rb)8X6SVZyzErxuz=$($FKg1o-RUvNKU@-XK(ug_L2qe~1FKRBN>kIg{D;9YP30p1wRkJ8&-h1+ zlt0p`ca<`e&Zu;pt*NXata0m`F+UExrpsIf1=qd>T&q8QShZ^(Yq z491>yO1zP7ka8D`Huf@%!xzye*VM|MS zon}a}o}fDNP3>P?`z~M!?nvAieRWa5SYE36aqoSFRYK;Z_YF##i@Isn$zFM(6a0o- zK~W=8lpp*&s@9)GqZUMDM}*vg_!a<6(L7dVJ;!X51P1QinKg# zHLfu_efUV;(Lt*Rv_w6lUAi>BjSc49-r=6Fg9u!eeQHY=mOS)A@?{cmQ4Y>+wEu0& z{Cv?zU1mv@{e-ielq`5Ue_A#NAq*UJ%X>4OUPI^+4HYp)R_Rs>sPC=sbAsP*elW0|I#HUj( zmO9N~*b{Y*C9?Wz1=>{uf5jf$gEUai)rgK(P~QZ6=yU;GqX_(Hgt+MxovdmnQ=UhQ zJGh`SiA|g_I@w6RYQlnzT~aGQC zL7#3o0)^=3;R{CFwZKSxDEMX~GDf{dG}m#xDi3l^UY{_&HR`f-mTtaff+w(Cty2`f zqnKM#`t&|@-sq@Pgb&BX;B+(wD=QT;>wPD+il+8WNn5%Ac5IZL%rj{(AORRcl_{z` za5P_xD4$D<;As}6_4UtF;u!=BL74L?>yym-#QmjS@gWL)VGwlNo4qL?c+=x(`yl6s zV9vbrn|m}!{g+L26qIcMJZ-Z6*>;$glRrkMXJgpwr>XGZuV7QXJC9a8>jy1`phU#RGTHUq#z( zVm|8e)nz7knJ@uT3*a3eqm6HW?|nh)6vl5rTSM|75?W*ZCa3gr)eSjDq?6}C&XPmH zk+4+2wW(xk>?e1qv~Vm&r8NEA8+T6B2VJRi*3p2iV8=*}#4h zlko_UW{yhdQ>CLgR4JuHA_MZ0rMMD2(_}ZTz3U5tnfsIewI<2MzcO)R#JR9v5qJp5 zwaS6CxpLgmSbh6ab#Vvs-DuOEq=zi0{x@nE_g{Gj+Us|-N^zgvi-^6h);_6J=jma& z6B4>YDSsiSV9*-nf@g?7;i;jF{n=Q%;u}83$(+gdDrR^6v2FL%`JtS>eq{lL765k; zkrbMMmCkqwTL4h28`)=+&XnsZs1XK@3ZJ@p#E6~SJ-|Do;Yj=UQ(PEzCFX6|$lZ6} zHI=CFdgx#vpzr7J`$0!6xKP+49}(j3QA#VUG*0@Ow6kKXpsl#%n_Qxo_6PcYKeWJDHoIaG)a{MC1E?97~C`QPEfHVSe`|LZ6J zl$QRPfkn8lSg+8l9+MX_D-ZAj+te5_oVyFFL1HCYW)jQsGk67ycD#qISZ{)h__s`r zJZUI;6Q(ej@#xjqK_OK%JUgQrTx|?73jtJ$4YjOJ2|(u;j6`GN!8X^DU1Dap?%7*p zt~FmOl@W2uV+^boBV#h;HdeM3X?%E&<2fDEmj$Nr;%M^6gp(|yr2NFyR)OMB=oMl$VTx6K z@5_vM2*LwyP>|+U%%(XWxD^Luoy|ewu#wFXx0sIVq~Bj}j6$sNC4t%WnaHzBmNLJEizd3S>^#-Zbda^E0d~H_`CH0u z2YSDjJBM&D&eOl*v7pv{co0ZBWKp@sb*EP zy^eWNwWJ#-bw9J{arfO%i+=nn*MGadRYt<4al%MfxOLHQ zqWOEDpB8D2x@~nxAuPrmCnin=RzEL&pcix4L-^Wa^!4uvosD7{vW#aAXLb|8Op=nb zLZgXfX!1~UpA~R$ZSDSUN^8SlPo$%`0r1zjTiJ-GV*I?NQu*Xl+OuV43moa(HNIwu zV_SHILOrxwZsrc~fEiH8L|Es=z0ibx1N;Q#$~%5>F%106Xy+4M4@eFor{~;b;+uYv zuRlV}=C8%^B`Qqh^{)BB~$ z;h1qeEXWkfKP|7r8^JthTiozdD8 zu&uct{U`3t;@`SmIn|#rGEee>U)hxinmc)&ORYP{Zc zn^B858sTZTT9ov&{cKNRKh1Q`1j0ngDN?V0UbeO zx;ykgl!+nVyR$71X=#oD?ZAdyU7|^eL^nt^z1Gm#TrsNQkzY^~k$p<;@i0PE;hpnmf)3IX zr}K=4(he0%s<&AfP&<)~rr9j$UN~GVp$H5DIhh^>k34{CT1xFXLd1u;+M&rLVK)}NHMG54CzeE66A~88t8A7H?T{vxpYyMe1kCW=>=5~ z<=*}YN9M5B4<+7 zi5U}+pDa}dNkaaNO4?;v;yctS-+Y7V{Q(SS8DVD;InaILF&=RK7bX4f1pdk8Tcw9)VH za)tkdi;Ng?(B7#40wKmRt~}`X$)}tjF9J9p*m)ey1_tIIa>cmY2|N9qKR->G9Ovdz z**HoH%-d+vsCL(Nz37O!F?8aFlf?}8sOP>O~r>^JMCxBPhMs*b95e*_rO)>k&% zkSp1U7q}P&$yB{P^C#qsFL;uXt8N;KvysS+=VDIK>HXCpwX-z$CwhtQf`PN~RN989 zIw^+s(YaR*{8XHuIy))`s*s9M34$Bc_>hXL7D z@U|mO-0fAF%6cg=rta7bPl}@LjUwD2){*Z@rCFIFwcp|doe4pFsv6l?uZzVkmVueb zWlQU8g)}ONly3SpoFq_eD)h`te-HOIjBc_o>KI~11lIGH{R~&8o;-ST^oa_v+11^- zx*DKtyh%M(=SETwG?O@CK5rqn0X^=E_ox|y?5dh{T z5!a69#D(Xiiy}y;&ks5NM7QrGT0>8}dF;3NTsiB-1hfdwYxGx`g4ab=Nw1HQu4v!CI1Dl7}QpsgO@F%K&)=?1Xdi~O0A zKY{;x-gtM}4sG~-2opnq8!Gh-3#y~~5Jg8!BCYv|qCH4`p)_0@re1b(VQL+P#Jzse z4xF$HtTx+oo%_X~#(5rcT49-hvV~< zS@|mf8GZWY6annJ5a@dyXwC!a=y?3VbM5DE<2_gg2C0IPo$|~{)$(c>=thyNhO4F` z6v?$qR+Vy8*m4d{xRP`BR0`aFv2?6U28_7$I%^5OaS zj^SYj}c@dgnZUXwM~`65#-M##I|zQ-DU)&&iBlBIqcisvT8rW<`c zn_<1B(;g3^`(3`&uBhc*>Hsvt%HHy{n|feEKxW$|L~FWOlg$x9A8AxXwT=ZOER*`4$y=62E;wt& z5UX7G?m{_8gGuR-j#=bR>x;n9(1p-xs~o)EjjU4(g?g%^Y9}$Z_}VX1(Uc}mJq*cr z9z-DJA&Q=Un9PPJB(GpSIEo&B%IiMKK7FZ zy88-1hbz`r{~v8Pdssud))!^0_jED0Edj9b^7MA@;$=P z0-uejNu^sSMo2sQ zkuNb(p%C-M&~3QUO$aDdGyk#!%J$LUwTNmLj>d;Nxt$k?+>$56u3ZaOp zd5$Dj?gwyZgj^m3jv=f(&n0RZR0YAkm<6FUQmTItYSRN3ty=Fg*m#H7Zg5$jK$v2$ zRXG5QE#acVOKU*u6_HUZ?*mQ}Ne0LN(SAG+5rROc0dD47d}m$}qxL@14D{G)sHyPp z-t_AY9-UTuK3{euX0B&R_$*OzRbmd;FQ3ldoEYv3IG)F6NBCjAeRQUa(msegUTdd5 z2B|tCLI0s`*{qAq9aOr=m2qkeKc>#X^FQ+L-KS-@E# z`%E_IL0CjrzyMz4H~=eHhdFF&nm~q6=0iM|&4|i@w@wXN6jjFOd0# zT)*f`B}PN?6-Pc(E%vjoYV3fa`DH7Pu+T&n0L9F@gI3C&D!Oed6I!V_pYCp*pqsORegzL|I}*YDhK6nYZ(e$+T&c_GRN*~$78&TL zGt%qI54rR~tw;1j)-uEL_CC!=VY4iBw^u_X^+Ye7vDS4G5#7ymg4se9zKX$Mr^Yev zKUN4Aa7TQ$n6WQM5Qsb{+zp3F<3=}=Tndk<#FM#UA!0DYIXNo(JMH#WRj6Z(h1&tC znvN4XI}fMw>cZCY`wl_WB6h+jWbIRzq6Ya<;$w*`s*eoT`v+_?J}J)!9bYlI?7T(w zaURj-ZWEP$6RTpZPWcm&K_|^wPOD@8of+^Q)#qFD4S06F_-xdGx_C@a0Vy*&2#|=8ZHC;{pGmJR=luYXEa9H zTZoxc$c*a;t*-DRT?n(P!9VBZZ{zQfZ00!qNAZAHpdS4#QAZyZ5>GSVlsNXmz=e!Y zQ7>iWVrnQ4XGmi2XM##kM58E1i$s3OA=9ywT!?YR?tFhXq|F@7O1@cwPW(?orHV{L z5R_HP^2jULsu@d&fN}N7CSZ$4X^fP(l+fI=_sDsE=|S9Rx_YtlDYeuzNxr#UA-%NG z0zRD=nP%unH%-&WouRSp%{#}L8P4`7C$-F*iUMjZpzMCcF)@U8 zdq<`e{n@`8dQ|$Tuw%b+=}f4L3~HHp+yIDfRu$qS1sv*nA2>!ASyvEFIHn@HE{otr z1RDQBn_g8YxDMh9gwT?O&KkJ(+nhfq7cP0^b#CzfGm(}uj2)2x z?IMdkleKyq(~7&S&O&$tcm+)l)aD0Zr?8#w2ng){I$iW>8%xl;+tO~ehd$7Ho{x6R zOg80yo0vmtnhc>9vl1-iwqlB{o@{n%rha3d6=KCv9&>E|(5xUMx9Rtj5x#%$oTFOL zPa%cW2aBbheob?2!}UjtB_3*>bHCXV7kVF*k4hFi=~xV%FMxd)eYCLAPj$D3!lQ9H zo-gr$#yjMIJx2<)mwERXy4j|&BuPT@=d)nRG;UP~Z;X6ZL)!@-O-{-;&jJT>Z<~`f zT^tWH2cLHg*rGtZzqjfQ%dk_o+*QPZ{`9f>^OmC{megLV;u8CyG2c0W5HPz=0 zd?iW7cG;F9$2^9;k`L}Z`nX_eDsk2D3Zd(bz|f?-a_6ZC|Jk;m{94{phS6xt);ADm_K)5}2CvmnkN93UTi?yen)2!|KE0LIOki zu~;@*iIn8i4>%{g_ho@R))!ihbZ8*do{gxM7Exk)1rY&TD074wq& znBa760}YI&C!;LpV=!3xR@VZIX_%A)-Qdk)UL#M>&M~FX&wrdjBVZrTVhAegJeqcUG zppOe##JF}O%N+#edixP_+@w3dx~5y;L{}5!dw6mah}@`lKf-lvD$j2-#{nAul+lGv_xR`U?zwFq@bGb6xVQv~43?sT>(J|FX9Ko?(UFwDq6D0nNaUHn-Zo z|JyshWDt+c!hG4K%tMcnTD@1jXH6P1`9R%@@=j;+J&stZiFXroWc77HT|`biT+c}_ zw8mF_>YMw9Vkon$V91A{d1p^fD}z|4lrQl&sr4>VTQqIyRgS@7SQEo zH)U7gs+6%08OKhv*N`qm6m}jetGxe|;Dhqd_eu{9|VCSe_9W9i}8$A zW6Cd!m>XDIFkg2&rxwuQ7IQb4C-@jvH-a`voxg?qbLgE26ONa&cdzT_XAI*h1bOL}sT(_h70Gfq* zVp61l2WNpga%2M=oyz6ns}j1BO&kI>t*uV5Q*|mHQ#~iVdEX>y1`p#?xwoDC;PY9o z*Xqqd0q>mAR9jm_p9TC_I;lFzOQ5I4tA!o^4t7Fea| zC#gwD!McRBO|0Ru`zqnpj6Xk5qV^lH>3mrSA#>5vAl0F#$24I&`nP<<^Dr|fgjNr; z`e!1hvo@W!190Jp{%BzR$pg9aE*^+T0%$OUwCLQpi#y$DLUh0RQe1FAjCh5U3 zHU~nsN@DyjkFJrLP&g@5crN@+PZWjA;OjdkXoC?*=(!fsvMe$hH=u1KCbt9JlCIeq zvhH!pNQ_2TyS?r<+fEZbQ!(cU^I}vrS_=+^t(MAmei+WG6TTC35Gs*M&59ib7A#Vx za#(A7(swK{-W!^;Wrr?Vy|2P+g**UG4kxnSBl267G1OV-Q^WTf($e{jNqY=y;jqv8 zXVX3a57@hz_$vuRB&(M_k@I}-tGf4)Nxmvdh337}EtsZ{rbGc9JJVWu#s}c;zxzfO zkZ7w_e=E}E-1^ZH<1ye$jc!GDZ!;r6eI#>uPQ25$q2U`6{?h>9+Mwn2jQ>#n3D29_ zIt9+ZgJRU}F!9!}RSfWy|;q}}CQO2wZlRr85a9c>sAOYc5C0xSN&7eyx?1oX)s7!c-w;_{soWo;AR&KqG%yJS zVAca`g5TR=Mm+=kstU7;U(E@Djn8Bu%$mAelL4ncso^~uH)aFNeBiW;dg^5P`Lb4P?BFdRi(Tq2-x9e@3r9NzZwu+NC3Cxp-IZ&N1hJGi}Y>1!9GuZ08y8@I(!dn90G^f78 zhLt|%6&@s%>)^#=g-1c3~Eim7WWhs>_MS;JZR=@J@ z-oa8|{i1=gozA*^(#we|g=cj$KT0bHaANT#;NQoETgq{-qu#s~@c>89)0M(+$bkM;N zN+bLcG%HlQ9l#sKbe#(MDE5jKX&`sF0QVz-#H-7@(9UI%S5w9Z@@|WiL06c;6Oym( zKi!Sw2}>FI8V}Ci!M!q4@|~cEc}{vj(BOp9_6BQsP+-$FVcdU*R6|M9LJ6<+I0>#X zPt;#^eBxGDv(O@NN@Nhc-waEjpxmn712+OI@U&tpL?PJo!^ z8yE!W=vAx=ezT5-`u{<6I;Ksn{eiJ50@AgI5Q5xx_$@k^x4EY*SN=}30XUoX56x-n(F4V8@M z%{a%=vx+vy`wvX3JPqmx4=iGY2x^4T!x`g)7hGKdGIm5pJ)i>V$tj>NL-yGlJ4H>t zzZ7p?T|HorcC0x=BAw-bqy&MsXtmiBO+tRvqn&U!OgMJoC-6@U;1y9Baz#b!g5{Pu zEJx_>P^*-wz^9?-&$4{!p)BDG_r!o36XC%^9VB~`UJtkYJ3zB5tsb%NN_6m+Xpr0r z7?f`1tJtKxKR9|QNTX*x<@;2p@og|)`P?C9IP%FZAz$B?{y7MhNU$uNA64!iOGKCa0K+T8k(hpo+GmUY za&9~o7da)3$I`h2@QRfeKa1Kilsjyjf5Nu6P|V7@x`d+@Nwmfi_n4Q$toWVCpBdp({XDuaah76 z(ZlfMptYl+;xTnwJV+$Hy?dC1&g)!=WlB59D1nebj0ThCecSc9kuCHuci+z&D)RqJ zt#xdD#9ZBg6&KUVtV>^%m8P%A{Sr}i_UjatT%!<)Ale#iUR+uc^JN&RBvbu%1|&72 z;z%xI<6Gs-+=DDdVLeFJ_ix5^HzzJ`XhRHa;cc9aiz@E2)ei|%8F3issU!F5&7;<` zV&;#skVkeKiUEHQ80yD{Hy1`@Xq}iFy!k#)@t@I3%ox}AQvAbmK<9Yb1vgNmcGR)D z?YO%pHD733S{9ggolMjyr2WRC5c0PPDs8U-y?Q|QOogS9{)sZ6v$e|@?ik2MTgJsy zF_-|nb=P?kZKbjqeURUIxa_Gu$uOp1Bt^y9_cm3l>Y-d+9Z(62s5;#|FcK>B_>oQj z#h2P2JP)XJK#osT6^1uK3Syski?+rf`=QDX!D#6$!d5Pj(u(<)&A`23piFW_qwzP> z=Eds_Xka{{_r?9%6;pLAX|OZ;$|a2K3wIz4`yWiPWrCQhUXK}u9aXe>L7v@5x{EFM z*lL_Zcl6$gH53V_)Pg@?&T!9Py2O8f!w|b8Q*a`Zy#^PMtNF|3m>DRECKb$FO_1Y( z%^s(mb!6UXx(SgTnj6!a+>q#aPJR=nDf=zX^4M9mt-6&AKj>xO(>P5|h|RL6AEN1# zdd=k}_+weN>3}2xJ_>4*>}cgvEtUK}MJ+g2Sq8dD!KqQ}hypiU&3e({{LLZe(vfI) z8^_wJ)J#hU`_yTj6?lT+T?=@MFZ}Q!W9UmGzvLK%M^V*pVWX(KGXX+K$H$QgsWZ=H zsGa3dC5uzH-mu@Mm1Z!2`}qH>SQ&&e=YvC!Tm+m#MpZ`TbhqG9DN#MAE2%w?w&Y8)#L|S5iZTPfg#hp@QYfs)C{oic82>Qp_THRbaq3J9Cr?Q7w}#EK^o+B(-TzY;nV9Gp0f-tv@wQ zQ8le!!CVH1!iioUj{GZ!NbhBT&zDa5PrHpfl2M~;8FsgUoZ95}9~L8b0$+^5Vg{bk zGf$}ILzkluN}B$_Y!~%B1Edo_WoonfHQ?gnsit3Ildbl3&f1%NpkV`U`5?pC>+K}2 zsI?-4C=;Xq61S7bQ0FptLUElT^%7B|AgZkaM$hS**Ao_S=X#|5<&)tEteg84u31** zo>_*)YIT1!HEcXk^n`>!{a-+IHd=(`z7L%K!qq}E@ZeLf2sho zawBRS^g{Pfk!~8|c^rd$^z)Sk?=ax?4k5Rrz~VzS-P1KRIn0A>=Z~XFhU>}e*Ny~x ziV285O0hwM$V8C+WHLti|xy?yVc z?U{Vtab%VzIJ}Hg5h_p}K`2I~GWO>3da*_?W0iV1z4AOcjL4r!H0QOaZOm4X%XhM+ zpMz9$g!8_a%)5^K%l#nSjtr@dP~5~1^FI(?wX@b}4MVBw>t_mEzj+z%IoI1o1pi;DarvCFi0o4_k0|cC49NFybEFX@}HFvCv((xmcvOi_dYH#3I zt-c`T=d;wlGV=uc@`H-1ER-f|os+vQSneiS5aSf~%eX-ozz1se^6QnW-lARAQ@S2} zS?l@8d1{K$Ngzr9H@6aX`icPtOB2)Rp_$EMarAMV&y^HwgMK23wtkzIp++&s096gw zDI~XB0sUg7k~Znjkqj#HC~pQI=sgP1G7-ti&mkZ)^O15~gdv3(omvhxm12JYx4kd2 z^|s$OC6Tf((6P#ULgma?Gz<=%cwx{R1L=<*mpdyrd}sjYeU==qKVb&dw8N0y+*FMJ zN7A*&GyVPl-OMoCFbrcGBbQ;A`(o~MZSE7fM1|Zl5xL(-&Ha*4Q9`9sgxqr}<(S>=a7_6~fR1N~|2|n^Z zt^>_>*H3+o?o?}AHJK$gw=L?TG866}X~uzaN}R5XnLSY+_Y*^We{!+Kj*nNU|I`7= zTPwhy?jlKTg#cvRYgfXzA60ZwG^J* zk2S;KO`T|_q2uZeAuXhr1r<9fh*5ds_r|Vod^q|AF?gol`dXO;#V3lMrLcW68GaJ= zOm*c*+Z6awclmaNylXejywXKV^XirpFlxGXhk3mFM&B+BUR_I z=f$2bADf*WG&@C4ipHtGHgP*WmS=to@B=W74Ifo+w~e(v|HzyUa|PHxp6%~dFH{HU zmI@MZ+AVNUS$0kzIi;`1zrN%Y;`L%A1^yCGM#*no($v>Y>_;uK2l^eI=U@0- zB{=AbLstGvdMmR^+LM2f>8eD)4#?xBRLT89qbbo-+Q}-m*P`9PAL(`~8)hyigiZ@d zGk?N8%TrVA%nHGAXUlVLCEl;SVe@p`L7&eA48JP;Y=*Zf(sM)acSulrj(eA)b{*%q zFNA1e_blZ0v4eG%Z8|3xw5D4Bgizv}CffUEGkT-b#d~(>>(S|VzjDtW!h8hQKojNXeni|b%uh1ltTuFf8X#{B}fkfB)C6J>hkeF*q_yuL{d!I z)gOWw2kQ1{<{o9OB);0sk;lLj({f(z*-73m_JhDEH^l_~xSK9SGD(qSh>EqyZ70{p zLHK=3R&HQ91+;(JCh%Gsdm0F@(U&81&E~Oi6^s+fn&zqJpQb-k3{mVq^EBwY1XOHYIyK@! zP<%Ko;pmLh-o(zO7JCNTR~2i`Cd9>iUf(!)C78~4a4FEU7U{>hlUYw?_ZBb_J>+`Zl^0kQ5H6w2 z*H7)i=BD`jd1D$$JQn39iWg8af=Yy|*Bz}xztSNTj%DR}!%$pVQtojTr96P!dofkUGMy)@Zhx$Uj;e2$Qfgr#tt7%}$y7~T7Z)WeEj~YdZ6aV;Z)R1uosL_$Z$=-=t26lvem|ewH%A}Sfp#|8!dt8vOyKLpLv*^6(qk+snP!1gz$PpC zfl0qGIT#y9qnjn5YR)T};jZTsmrXSF{u%)$=fb8=ywPnhBB9@HD5MRboil3Mk87a{ za}>Qma>Q2w(zG|${zkWjJFfpA+vM%J*~9YV{@#4%a_!Ot44$zfZ`%?5*f`%HV-v*V zIs6`4WMuKt5FG#CHMCJS1tw(%flC)EDgSgy2Z^3zxCw3Rlndts+IDz3gov;aD+WzY zGxLYD)G|DjM^Esl$OF&nxiJ<|D=jh__HfM*upAL86b>`|eY3fk0M5{oi3XFTj1*mO zCYJ)FbLRv-+jZ95qr56cRP6POPQnpA_Y*LfkC*H5k*;2j{HF0K(4R{vB)qosW_NSc zg8%?dM9?rp?92wF1Z=HSs_gj{W%(`@Ydp|wm_FaVP z&-|8)s|HPRO#_TMgEC~|O>W(KbJa9xJ!GntbWVxk+UBdp+w$ixT3-!y=?diiLAu3t zT!nM|>9nCciD1Wa^m#$})FtdE8sk!QENtVGQI>mAW?DJ6aJX0YnErShc!iv8m`L0( zrr<_S3FPW3vCSEx8Ri#q&P3Xf*7N}xcD+n_2z(e=Msq6$9tn|Gog{42Fsi;BIJ!Za zfC~WnC_a=CG7CkSU>{RK-8xQ3JSIg77r$(QR6Nhhj-bmi>r*mbE{YB^5Miy0v{Izm zThqqEQ9vKo6!meB>fZ(%r89GfL{+N-w+@JEC(<#%Lmo{)r+Q8@nxvQKQW-sBM55@S z^uiy|irIB>MFwemM)0hRQH`KN>oD4~5w-Y+J-yzAh{b`;DizGV=p<;G@hcu!$Tj5S zG+vW02$vbbIF1u$&&*Uvz&ci1a+4yXk{OEy21OoHbLJCTcmVTpV7*4^Y!$QSVNjwa+^uaTicO`O~|2;0r9yy za#)4PVe6}NFlPLkaK7$PTo2sh(r=7it~18WyqgEaa~r?4_BhIJ;QM5af`WZPF89Vp zXTH7j^V*UUpXdCiPfmWF+$>~%&HU*wQhfsSpdbiq5(F2?Hq&rC5d7xw;E$(#SZu)x z@+8#rnlA?M-oQy9Vx*jJGUw0;llgXyU!~?cu4omf8(A4@Xb-bPh?8CgqOW8ezN`d` z*u13#B>epGM03JPb(`d__gnYGQdFzs&t_9*=aZGZVW%{V~WZj^`UY znsfA|fnmOHf6}u&Sc8M?6vnR&OQR``Dg4GW$$|A#=c`$hX;$~42>lM~;KKtAE4i}( zKWy8P;aVQ!y_WG%=#YnD%41xMOp8}96RsK&3UyuM7EhwvVcYmOMdxf1GW9DTO4pKUZ(C_IhR^P1!Ar&tmJ(`qA4aR$c%{IbTkiOPqc+cJaM@@tNv<)gf?joC(sw?VJXrP=G>%iZfryWM9IkCBJM`*S;Tx?ZXyX{Im zxZhjGD@qs-o$asT2hGLEu)jPOl)VSm#mC;@1BBF%#Jv>4r@a=}58Th@2w<#wgaKZX~Gznbj?UNte1j2sJLK+E`H zHyrP%t#=afZsOK?XLVQWC1m|frH7uuPYCv5oP)IIGX0f~X2FVTTQYd^_+Nv>@q0!T zOvn|2hwu!Mf+ybHHSLd;eadEIEa6Fex8%Fj(+6;2DdmOt!`J38$KQk0pg;h!d15(* zpYWCZl)rnfvG!Fe2E3paZx<&pAo*C<3|904EnJTt-rLiPgg$ULKa-Se#b;o~$2y&R z2xeeQJCs&J3pZjPIxX+F1@f1Ayhd@oy&}cQ!bs^sTek&hhHFPALLNOo3$)I)MTb_6 z%{M9|cp z&)Uv7#^*{6advk+CUJxU6!RVjP&T>Niy8-LMMW^!Izgf)VBU+>yP=Sys~;B*gSmTS z=s=4H@>`j`3Xa})j)0nDbP_zji)m*H8Yg)ayB*m+ln-dBQ9;g8l^JcsYr4xoWk=bv z5x=$9>jHCuAe`^^-J6y$OMW2yI_a`Ruk+nzk}?CylVy4;Q;~Vy7(#L$HAgp3x_~cQ z$qMD+FCRMO!?dyw{YbdDPnYo&bn zQ!BdTL?ymYL&3BoLaJJmzt?=b5jz08jbx{PSOPfhKPA`w5cHf$uZ?585 z7J9)LaISP}g@M5jb)1>fXjzC*_L0DS!Wv~}oGkXiyQBV%3FOixzW1TZ8TmFMVD6bN z$rrp(AM-4Jbk0UHVW?*_gpsmJ+YEVIZyU4+Z;nuagyUYb15zK3&f%24iCP*# z`3-}#hEL!P7x=OABr2+$nI~6+ODPnci~vU?6_(OdY_MlyriuoIca|L46sKfDWJ+{d zNoFEd(YeePCEjZHQENroEU$gQ-0@my*Vn|Rygb6Dw%>}rJ!IrHLX zb>yYkG(&VI!&s zfC2-jjY6^0s*7sQ^^Z$$twv=owPwG6(cY$X9}@ z>KSAX%(}@>y7Zv$Ls!8b53j_v`>ipoRX!e-s25hS%;SO`zL6#$Nm;!UslRCt;T=W7}(}LJS+Sh=e#m=m!fBmcu^W{kt#XqCJ>=e z8hBa!K_mX{`73G{Bc4B2$SR5;--KLlgwKwM=A~M z++MZ=!S6@^BSd;_0r(X2VZul$lKsV`aaz?YTpy?{FpXm&WAe9y~SX8aSWr50{#ZYW3l5I3@uZT{|H z!9}@K;g{XJJJZaJkBjH1z(pMR;r> zkB1{Rp@^&lKz(q6f_Yy)_v0(ix=n^XH?XEWvTB^}ET2I2Wm0XS4=6Nqx@om4 zf9Wt>!qm6z?+uYn0$J(QHZ3NXT8oRzf0 z@FWO0f3v%r6qzt8neXY)%bPW~xwdnujYAK+HF2l7Pptd+`i}99?!x4=aD80J2;gS# zWp$r)zL35n+HMY&G`^uhEIJ2L`4uH6vz20itP4O(cYY0itn>R=l-?=iO=anzPNaf? zqTi(m#!)8FL&291ahq}h-gW3X7EX_dX7W%~Bs3xV%(LBP-d?xXnmI*N zSTn9x2b~wp)|^!sYDu=&5G{HKQ1eFn`0d(H4YD1Ht8f{Y<7f?;X8 zAzOtCPaI2l5Pj%eAgdQVV8&(5?n#|0sP+W|pT)1&`m#Kbh7SDowJY@&wKDpAoxe^WxQ6e`Xiu+# zIYyJB%RG^3Y>BhT|9HPT@yRFuR5BHFlGUdNNnUG4Eqr_NVkMy0Nc#=UMU{W1Z|<@F z1z2>UNixGm#u#Ni9W)ZOghCNj$=A=fu$hf-V1A{oqs47+1T>?uyyBR?pbI!&u9t6~ z<7w>eJE^c9%7xwnz74f)ng`&+e%|8_027*H4=Z2?FCmqH1F z`qrxTuS{UCEeZA)%LsSdR#8oHAu^+YC`J4s_X0Tn9uuJ1eos9QYZ%*IaBmplSc}$Ftr-Dejd+p9vMEps6av5AqZNl(E)-x>A%ZJ6*#g zIeYJIa+jQmaZ=!b(;yaE~Xv5aQe<8A-^1lyi*Q&XNoeo z#w!>G(Un{kkU4Z01s-S%E)>wfv=LDbG9zZP1Ax1L>)=ISvz{Es#2iUatq>NvpYfq= zQqZ(1P!w`F(F*uFhgK*yP3$uFMgQ=4F~whu)}88W1h*ljHDG}?sOkee3fHPh-zbi` zlq4c{y|AK&fN}$7z9<2DXlH~?Szp%T?+(DrdSE#V9?!@V{C|H9#5n5Yd=aXXlQ`-5 z+C*Ws7x@{mv?{U6c{dMpMNSR9bLmWb=`%S|Y%!tS9pn2TqR#+w^(7Nki+=2?Tg>*;9J`Qktv zKXUFtT}I{8+2-2f;>zgCd!onu^Udy(QlB#4?>2lojn>2P>k_E;IIi=D&Fx+GkWY%t zA>xnUZdPu$6>bm@xvKk07cYyW6lndzj{G;+g%5q=9%Fef*qrS2<2s(d-dUQtpT@pZ zeB4VAw9R<`A0l%fJPZjwKi6{(>q3+t@2L|}AM(-|LDOB$u z|9Bl#FOxr5u4se09z;2(XUkA*1mC|pm43&?BIMkTU)`7Vr*h2vMcGfV#f$^&Q>2%` zDFh2Fme76z@5S5*q}>$d0J;@hcJq7R7&|4<4TqD=&wNJ@zK@sFKB$)nNjPrqE9Y^k zxWDvnc+=KzAfiuek|jkUfIs^P*cJC`O|S$$4W^?cj}*u$QlDE@{3cfgv$8Z1d^1ZT zVuNL=D!9ivK;;$CRe+4*n8s2dUtQ6SVWA7WI?2$Khq)$E!SZ?d;N00a8v@04AD0Q@ zirP-*@9M%O{8Q1Ug$~1==>Y~v+LD3|sk!LwCDq?6WYeoW`oON^4tkWgl2azX9+o&W z@goNJk!fbCFcE|E9HFDR3|7+bs|FvZPjBSXgx8SM`U&aMwurX#!Yw)fa_N-ysD+O` ze4F}Zf>GHTto6cOgy!P?`jwSdmp`D_ZNFd)hmq&NM?h3acZv_@-sznUk)8P$_rfk7 zLgeomh&$a03fK7e=FY;PS%svn%d=yA3$TC|ecs>3m>7*d+b>bm1~DecOu~<{3I%A* z-dQ8U)0ncOyGYF(UU(m+?nkJ2O_UMdNF(Sz4tc^*{yiIsv6d_IA(L8aE?8L^N*)~H zRn$2PFpgO;)ZMWWv)eJ6nzy3rN38;_s3=~AOuqnOFn6fn!8z>EkRFOWGH&WDe^eA^m5SOqPy}T0?Lb#ooWo>AM}*q#WI-37x!N+OPrsVd zf?gV3mLsqhmV;&stJ8l1A{NUZSs7j#7#p%XZFdp<3ZK|;kEJ=h4nRS?Qh+=Z3ppY< zqv?4v^~$sVSfp~Bw*a9I)_miW_I9N8opVdXdV!QCy8$^Zxx)s}Gp(YdA~-%LGej*M zTX=lTLoY;RiTHrrq1~(#nm1g}b7b4aXj-IcEL%{whV6&M6;=Z#Ufu(I27#}gQ zG0;O2YHlmNnQ#j;$#|d$Xch!qST0Pl(E~q{-7AS$<=cRF$C3L!OQ(H++`#7m_Z$>o z$cqL%@v^;csv}i=m1T}QQD4kS(a3mUV%mM}<>kD=t7+6xl)^=U8;-H}0crxWGJ&I) z;z#G-PFr>(GfqV<)+qlgbAn_39 z+~Pik@_#o$p-eLLkU1AYfZKB@FhRWYON~UB@wf`@?Yo}HMo%U}clhuSAQIEN{P1mx}cdmp60t?sE!i6ypMWuN0>ySKG z;+X*8lc#?J!N_u8sBi3;V&T>qpDj@cZA*r)WQUc!*eoebED;UNjK)3=RLqjsNilu} z2X?so#v*WZvx;DV2V7#~#?f3y&ma*JQO{!8hE@FEJC}k{3(9aDPzVD%K~fo*Ek0R? z%{(mG>FN)!4!}#-tZJ8D_MVgw?#(4Q=g5{0ooaLwsN1@nk^g)&W}+7ey>Jv1CjB_J zsC@nE%(`2M+Hs-XO!)aAyAj7eF{s*HueN&pxw+)97B_wTz*hg|PrI$vmX&rsjYT;Y zDL+BZKMO&$L)hFy_|~x(qr~j8vLXI7n=4xm%#PN#Cs`~e&%?{|VfS?FzW(yvJS(VN zLL{g9^*!p4HElAPnpPl3Plw$fy}`V@aBAjxv*XC+e@NJJ(7mS}w|Sl7-iZ%bz_hIF z;cQnc!PMVrb?%UjYd&%yL~?wtrCq<~^$WG7nSQ1OW&VX6JN`b5z@9Wzq4+QUs$!>| zpZwcz8Q2%j?mt9J{*0mOrvO^f1hL!vPvE-32KPR09F~Q^pg}TZPhALw&E(U}ZpHf@7^$<8LqxPkzjym#4iP z`j$xigEwyfyA>U)+L%|wDT3kc``c~Ex%_BgJ-L_1HfGN4=eGv1)UBJ@HkfwVPgy3! zOJP>6?`I>9MMNJ`-%F zA4+{0IQFYf1hWPoX_Sh-BfJw(CqO}IE*`b-{J`1a#)jowHP5Wi)8?N!;_rN>1?Qgk zib50&rQ2$V;JgVqr(vv*GEoRJl37;2>IX>3(caS0~!HmrB zlO%L&wsEB>Br>U(R451{8Y`0K1~dz5@L&Rl8|@6F3t2}b<*Kj)YV8M%VU7`Mg?s`@ zqAbXbjkMsLm**z>;KhZFNrqnqzz0w!x!(NcCUuo!Zf>QRCZb=~Kzn1Tv#0vo3|U+~ z&%)GGKG-eylvzN0aRY!y>ptyFm}iu}mv|ES=PLeGN?G&duaTK$ekau4n~AVTV%?wZ zj8pfhrNfom-) zfX7SVVGj_RYpOSZaZeZXd3j0DpZILr1gNyCl<8Ed=yAv!fI(=dc>kNk8Q@@3 zFa$#Kb?3?R0*j6iebawpsKl)3K)jWw&w%scIC_)dQC0uRT1n|76L9eQ1M~^7`Z+=a zdT}K;_6_8?&Q!~+fEL&~=^^#-07yxV$`CqeqZv`~R2t9ouyp&*F0%fi>y>fDrkj9# z06~GkC(l(cR;5;B(*`zG-m@tW2CEY;Z{mL=cmk_}pOFg)JdqCzsF9rqnjrX{(oRR-?jM_SdT#NK z=hF(NE5GKI`SE7qbY0K3+=p9Zn`dfD$)Lh8w)do6W-8ve8CvSBog_W>;R#E~hlDsS z*K3SlK}qVdP^iTbb+!IT6zb0ae#HM=zmgCsoht5k3MJ%qQYWNUHqZ0>_xG_UXUBy$ zg@obf17`iyg-KQjtPoWg3YG9m2z`?vbP9#}^C7gS&D%)ajsuf80gb5s5LcaE(e!Y9 zmU`hs-0LrYBzX`==|f+{ReBPf;?BV^n5aN6oq75accYj!*l9YPK^Y@qBLs1?o@3D2 zUE($h`?X@W*h}>p3SPyZUpfXCedoS-{VWG^!yOtiT7VUVV^;!#m(tu(UQwO2o4hEr zd(|>2*$Zt?RnCU~;0p*=U&MI5k~t5A9J!}%HI!U{=~m1^EL1qv6_GL~Ty&!Gu$2-( zzI1>bdQnN-9dX#R;O~oOLwGzI&5z8uZKf%`2^$5M_Rm*; zn4|7s`DNYT6<2?-3CnBbhzzyhOxIsrKk8Itf=T}aZkiv!^{s)oYO@B!r{E(MyiMKx z)>?Svq;qe80`oP)m*C+8^p2?0w)pL$@|%CqrntF_<9Ed*iT;6V7FdvHce)=|kP!#b zR(!qe0}iNP&245Z#KKcV>lSc1|Qd;p{5+`7$vnnPY~~Pf1O)M(D4m`($uyF5w!X zt=%J2i~AD4-};4zAizB1U%1UJ>&l=H=_rF_drzbSqech=B5COv-0@&Dv$FSxlat5h zrX%_1IOn+!LP22>H_a+8Dc#4El~?RzE>u?SV=h+L)b3+0UB0r9sk_^{kGXfhejju7 zTEjl(dSg@bKIX>FTl<)n+jop)v#@RLS1Y;nen9IGH{1KimhQ$?zgYPw`|uz1D|P%! z2mvOnfF*Nf{bFG5z&yGya7avYac(s?huUzbYiMFTe*DY)>VGfrP-V(~rV-uA>-c_! zh%@Qu%Bkb=OP6DIK~T6@^TC4?U+??yoTjnwqGoWK%(|p3JHtsvqX!E?au@^I{ZFHQVP3tC3Zww2Ixbyfx5(T3ctGf=|67D`MkBg!+n^2`TC8UBEJ9FJ;yEm`Rn%{_45N&C`#c>I^taUe#4iW z@Ap0q88;rESz6oC(GC0qJpd(h^HGvSwItp{I%W(tu=1*Mm*MIxp+}^z#&Dm_>!sR# zHkU46*k?R2_^x`N@x{8zea4T5`}Z*;FBkSP-4A>BF+)$sC-*VW=ce~D%d7SKn5&OR zcetf1@7MZKO3Zlf$gh1^k2#QqHC(-NU8McZevP(<2m3Xi+-tlJ%)&M`v$>hKZ;0F+ zyM>K%$$I8KQMF%u`|h3n2B&6T>~}gl-?886+r`$-{U%=BZ&|wgFir6=6pc_eu!K_Y zvVMddnEfth%#Tn?;A$|=z(8faZ)X1BzUR*VzjLtvZ8_|`In&`zHFqx>jUguLpd6X@ z;-z@*QtevmXsi_*M6`aPevW$<3zbm}IQaSCcz0N8q7IbQ&u!&%rm(^YLSc%$xUcci zUm@>f_BGB+-pVZt^QF7fnpGQdm{wiYpP>g=e@GJ&{0Q(3yTyZ zM+n6w=c_*)3@BAS4&`o}{Za2PjR*oJX64LsQoyX)l3Ku$50+ph^Wi z-bY+fO{$%u820U&ku}jc$yTq>J#W`hKG|IHSPMl4rU^U9>wl7Uc+{v!Je&DemH}N| z_IR*{YP3}buxDSH%L@n2iXQ%*`e%)ELHE0)9;Cpo%O*!NLKk*M=}o&TI9p5bbt1Pn zhLsrWpd`S5)7S()H&X(<_@RJUk}2a73p|-^%e@WLNcX%Iwr34fcz|b_m11basou%& z*42KZ&lb;@T6&iw^$Yo4?6q)!fXK%B28*EJCkL{N(|Q7Q!KcHD+RBVH7l&B@TrB?9 zis=L1WZ)L{vmmFk5PJDezYU_#5$C-83&Iz7GD5-n-GRTlKpyaFp_%g@pZ*9$s}o2l zvm5CFK9nGhe}QXpU;1jLZeLEz-X!yP6xXO#-*jo8z*WmeL)bkr=V|k?ttL(*UFRr znv*iThBH*^|C&Ul`q%tzHKaw2;_&~_Jv>pPCi<>$`SX50|Dp>(aWKcT-rxYm3bEzY zzYT5#^$$Q?)vC$Po=XLw9AIY7o1(wxOem`207HRcyxeZ|{=b)`5sMv^BfvZojW4o` z2oEqt^cn2A0iCiqwra|{`cqcu&vE}7&axwq3-2hOoDYX`!>%xYN-d zNS)n|X{I~`K(vt&NLl7VKhF`6NJ_LI`a~SvbL2_4wk?Jyb#vvC=S_i{)6dx;lIwzP zIMm~SJ#K?tv=B|7FNkC>Uz!tCwjvuau4!tltMDBZNBgq~#JzHf=r!%e<*vsqy@B58 zpW5>tVMM`*u`a-&D;#TiSn(*|gTR_7Fkq0jgLdSDNSNKc|52jHZ1u?1)PNc&Z{1$- zV1?kj*SM4_&@D5P&woJfoQ`n6K{UF4c$>a~?lgj+!Zjf7g5h`ZNzZR7Stj{CYLNp@ z@e+I{W1eK=Mn(E2VNpl9f?1W?#3wmtO}mT;2(-d z+UKn}a>5>MJsXMYdYCw$4J%EG-eg=AqbG?#?}wYlC3O;e9ml29V1j@mh#SGNCfM5Q z)jhZ<^P@Sb@2h;eDq>wlLcccESQA2M0eAGVmJV;3N-uaa%{E4^S{Q0*3kvtV)d#`uveoANp|Fb_PE? zpo|L9?&(=w?cm#kKtyKdb1fcIoFexkwA1^llldSMg-S1;?~y;BTI3ha-+J&8@``~X zy!8LNyT-;8gyAE;<)fI`wsUyBIg;L`IWzMqc(M^j;wNYnlZ3{A0|H=J`~@4eLO7gg zJUW8XR3wp0t@;jocWJqf2;)NR2;ivgrw2pQ2?4b3?WYmx^bQMwZg|c(i0p$(pElKc z47pxFWriYq@VBK~B8h`G1Gq;BkS6^q6UQk?dvkc8$AzhxK9=ca>}$T?KHZK%KV-_R z!T;_I^-nV1diHbxH+@sy*BeCyK25d@c{709=KZ(qWG;t(XKaG*n;*&gyCT)MD?P9b z-WoT+%TNhVlfCSK-Vap8qr#JGfL0Oub$RABHJB3VQ;l<561d}VpVXFsd1LtKY&UyP zDB=|k_N%YjcKpWxZh|*jv@%D=;Q8^*4#MNUJU^xTK|c6d!Ks@kaTXKC1GolyK)Jo~ zInAjEln=HWg$7CdbTh_abp&lqy79)qS@_5x#18j7NrM8Ode6JLY#1Y(o?U~+XbPd+ zXv>)Nm!X6nt-W>FiYU_kR}9Y^d&^!;iCwAw%WV{|5PYQP!=}27Mn6mR1Dl(L7%X1N zTsx&#>w-Pzl>#RokHkM(!cu&_XoqZZj=?;?F&FS2k6CX=|KU;MGMBOa)|kf7 zJ(M#l0RALBBOtBDt_7U@Jo(tznvaB~fFO$eXG8LykV!G-kvYXC_WtwX9KQ6BUU_f@ ztzGIuO{QTm7_jt1;X$q4aWcCcsm5D3?P5CYLGpVNnyDlwVT@ILg>Vyh3=x@-s*2T7 zMyg`{(LT-jexdM=FWQtko@*N}eY{@F>u1KRTujMM9{Rmm4;wQ9QOcIeyrD5wt4mi3`MtPbgpCnmm{zip7IS0oAiR=dyf;uTXh=v9bjRD1h5631y?pmhUr zuwv@62caU*3y-Tghiz%u0qI|FZ)ej>68dz7v(bq5sfu`+Zs1evL6Pm>Nj41nBE4g>ccdA z`CE17jC;$1Dv2jyKKAssM)Ts1xWuRYW9=;$oq&V$fdBhr&u_--oW)R zkv9qjZ!e886_GlYsy=s1KtQ-pJfltU8PCM5lK2@H?GQiO*wcGJ)m7fT*Z?Uo{WUx` zl{Lu_%V$IK!B&bmB7^I8q;!@v3H&D2f7)1nFA2JR5JRGBHn9Bf)L#)66mo5SM~+TI znNVj-BH^-s7&vbVWSv5LYa^xU^u6hUcjR=`EZX7fDh0b% z5gy(@NxELfG>2%fF=IU{M}&}dAdf`iuycWW#`+R~Ai`3Y{tj$a)bnm z2Mf^0hnT<_M~IvJQi_f?0s?(0bD*zBzqZLMqZ! z_hY{Oaxjl0;{kR@@qog!UZ)ivm6>8_`J*8IZSrG9I~SDLPoPLXoapG;h;Oj}C}IqM zTi6@P$BeyH#TvfjXn!f(8LABEaLqcIzN zz3d>`&_7z=N3j^EOaT|w4rwN;D;NfjJ|>)TGR@NdnS#i;xB`kBBgI}j2g0n?%sF6n zK2Jid-|pKPOIYlJp;F-AQNX~p36G6i$$uVWZazd+^8*s*8Yby(b$)##Zek1tu`7Eq zgtaZ!;F$Pr)P<*gHs*|VzrP3T@1Jba5L1{0;<(PjTRMk~ngQ(llJZZ1rF_`iAT4lY zphYe21$(!itvNuSI2%9-FKN2(0y5NpZ|B%Q-M{j`D z(D|nW*YD^-sUFDn^E>8&=Ez)#yV!qxynl$bSONUUAYB7{3<^Yz_k~qFjCeKM8W&6b z91O~)(az=3?H)}=jZ@EFqv9uNYt}meFi#Qt-4P|kkg)0q?{$8NxB9<7b{8?c1(OJ4{ znunAT4^IU7L-H7crwryp(J~XUCnmwHtz$!{*gHAkkwE!qPx!I7JjoNVhkEw-kC0hx zU+aWA5dIiO9EP_D|DdJ$S`= z{1oLFrJ7Q4*s40gW{J4Z5+xxavc+8hTibpgbaJ|`T7}YA;?`hqNb0GILYiGOdsr4SKgtZN z@z-=A@`}=3&_{rbq7hNNdTC$;1{lQ?E81d}-FY!tOK2pUb2-(;MZ0K+0|;pS)pA?* z0oI%m+zcY~DW$Yry|*!OVG}N7_~lxK$mhu_eFcp#QibATj(yH81c=TM;(0U#8q#e~ zQ2ZlPml^yRVK@NslvzJ5^~4T@85ywv+S2#RVnxZxHG0kxsccLS;PY&V7hnbzA*ttx ze2>gb=oEE^ z09`}YR-3h}<4C9!e!7o+U6Q&I%j1=$VzA;XUlcyJ@>(36f+3-Z)xMzXNI#73wgNTd z!t8$+&MG7`QQA3A>yycP8%IAhhmUsTdZWmwzjoK$p2z29GvR6Om{7v!{01OE=ZNB! zYgZ2&BE!G>TNxVU(bf%-sqls(dTr?_?8$-cm2(9>N!5xMtXmIk=fraOVT@Sey|OLT zsohj-e7k+|9W~Ea`l1M4 z<&rAtyg}6WVua!A$uq9nm!nl&d%^Txw_I6xc4uy8*ynyPYP)*1PWfjK^(ai36@sQ>e zG9G_3o-}*og^;*q2QXvBiFBBzONQ-gD`gn44gf)Wgg3&-HX3LO0Xyhp(2#F>iku=j zue#7p89jA9|gKhE#qm{#~lZ8IwIv zqxtJ8=j~1#QtBdk2n$GclHPz!7$B7reA=W&ar^Cm_~=t*Pgt!z#~aW~>k`g!(s^hM z%J-b3%X#R>*P4T3sC9ub>$Fi<{h)f^tk*fZ?Y}7sQi5;TP@TDcD~NMoZ-r%_EZR9( zAVopv@ax5`7b!0Xe7blxcte_MRkUQfXqEq21@_%?ak>q-ACQ^GYPeWa=9?`vaDav1 zOo5D>pOlT68r5*RN00pq`(%5TF+=DXtt~9b4aW;zDIjKu;biqNwriiv;=jRtgRWyL z14MK51&@K3q;$4=$z#YjX*ZVH%;3=D2tg;Qw%7Dq$sfe(5j_w`7eb6+1j*;E-#NC4 z9%)rLSR^zy(Es_TCr`;8yeE7-VbK{DjPr!ZK<f zCH(Wr8TwghwPQze6cf;kEUDXX92r=r-4s!oOH?J(FNL9P@?`B%VH`X_KB$f+)Psg9 zJ<@!12+n>b(O+m4uDA!SM(WRMSfgX%aJC-V0O({Xe!v^dliqh1QGi`4 zQ}{{WvBE6M1;+N>(gl)L}@?}BO#E-2j@pMelT-x zG)wbkw=ZRRsa+oD*>+>4bmKv&L%KtcY-)WqoLH7AGPBlR)Zt5TUs;|ZV^yI_eq#;2 z?RsVK8I=16&liIKXzYI*Xgh?0UmCi{VP)D&eg(Y|5pjYaLub%!>`Wr;GfHO>n6oFL zTK+RFE=O4t!Pf#-ZDD!DWEU6WmJ_UsDX3jIbrF5@EGiJd1AKJ{U-b}3tTX~1+aLub z*BY+LflhgWFaOtenDO15(FWO`K?d;sN760;jHLxQ+9)qe#Q=R={*rDE0-(Ba{?gJWo_Iy z6}Y?!*m|}c@_RnVi%6t?GOgyjob^HA*a(LNtB==nn~tfoG8u{jQld8O&9pb2r#S; zSmnxvGVfVnPlX)~$KX24=~XDDI`EQ8v1o%vgm6_`rcBlGcMUmCxZOf=7gGgUFhI57 zmuhV?QD*nR!Gp@PaIJm{EtEN@x8Zq6800HQ#Dh9 zsbe%cN4{Tii1XV!QMeH&n+_!6Cqvx>pOifA!1qLgZN$RK*8R1N$lrl%q^*}<7D)(+L>ewL2GJo7 zgtBCJSY6M55uyIFEk91LeTbQXuk>FtZCY@`>hxdxz%BZK#faM+mg9HlW6@|5e}M}m z5NqNiFZha|2=?K>g_!6{Pesyw!_57TUI*w$`Ba}ywH7G;?RgE%hKMgMMiL@)*9VBw{N|c} zH#V=~P0RUi;GzIEw(kLBw%k`^&+I}>^el_6qQ z+C!9_L=J?plTTj*G7Z6bDCcUs{%m{47@JyaR2HL9>TqjdpL|H_vy#5yqv8AFT;cb{ z@2q<%NwWaPwJ7t_j6Qa4nXZe)6zL+1>x_`XAepdfGAQoKOKpSa>R=-yObxf?{U{V$ zk{syv)7FYi7-UZ(^|&>+qo6arnC|wvPz>hme_D4#vCh_m$%rfP5S#GRkdf)QK%a%bg&(E4m(moyP7VA`|AZAD|K| z7N1M)&&bha)#d)nwB83~sX3G7?GlOIsUI5Dl7@-qk^H;FsKvQn`E(?F$!Wo5 zK@L-r7dozAe3?mFdaY$_WTo0KmlmMy1>w{LbcUNN;4mF|mHrJWCx3kEWbqBJqy0}n zgPUIcTuX7*-_33MYa*trR89O6vEFa6ktGDhMu-S?guoO=Bqww-k*HZv1t(D}@zquP z%&aFFXwGjJCt@K%4<^ysUY+`<1tPL5(Q9@o5Rz7W#)$})?ZcA!w{M)i=_3L(aSixTh|Z@dN& zw<2MQBFlXXj;VIYEa|Ls2||oKY{c@t)N>Tuc73RwUCvI!D-E-U*>YLvMo$j(fQ{IZ z$7zyr^)KLOoj{7e49RWuUxMVJoL_c7yi`1F)7{8< zZ}A)70Lb?c8ICCCtBE~TL|7y-?KCW2S^a|xX-GTk#FmPe(JL%nvT1iw zVervV=@JPk^SuyAO2B$Q^a?WfhSA%aIhlAP-Eb)h)B`VV(5-W4P{e{3Pb(w3_X#zs zbontSE#VuIw`qv(_r<7-=qHoo*xPJDGv@8_dpxo9+w|@2JQ*hk-eVQl(kMm zo*o;L8u57Z$l}5nGI!nu4k3$|6+;v*E6GIh-XleJ`;k4)Z=ff)>^;rpTwT!{CI`J4 z9IKNPU&$Ft*N!I1{G9!0Q7hGwt;v|Tv{NqK7TQGRG2aym!Tsl(4Gm*cxaAEDp<*T^ zV>bEIn%y4d$M@G=e8R?hhF!%lTZ1PbBl@$FIZ@9!^rujRP4Sl|c@hy-=^K0KjEOPO z7j^zi=Gx83@%`g2C*?m?=Q_m`pTn6lr*N*^QA&}tm@zvrcXy@#c}{zAEM(aQ$qock zU%PIWQjhy0eR&NNpY6mPhzoR@X8gMLf}jBX`U84Y^1(kma;&$^c-A;v1`B>6oD3P{ zvw%{*JRs!H%@?%szra2Ti`QcCU)Og2MZ)DQ{(z08EYd{XVrUSREGuT_ozP`@hXNUe zt$tMEVG-FN4}{4a;L#zH6>|SkMKCiu|98c2P+IliwTKw6L(Lcp?#uT%5LrA5ab^mH zl?CdR&rkKmc%vhKvN4bcO2BcH>!vZ=Pj-vYtsQt zXp`z)r!~Mm=()BG6SsT$wYol5CJPHChGs!%e&~WFhf$gRUbLm(gVUT1$X7)_jk%Z- zreWQXPztEEFf1Z*0WM=$Z*p;5Dl6?W<^AzaE7?90Bw_Ynk&>D(R(0A)YXQ6HrgMJ% zF~{AxEM_Z9RJ0f|vYVF%;gtb?d&-Gqb20y+xWe6lrkUWn0d=Q;o}NvhQC!l;766~D zw3(UlUF65QcoOBtmhvgdB*`RS(F#SHl2KVJK(PrhqkCWDr!6s>EUpI3F%3L_Apr6> zI$!L@xUc26i(AO=WwfV$A?|tYfL1_%N=dfeqb*6G!N|yV&kpT=vZ*azhAGj@3(&IF zB!%@%0Fr;D9c)R1E}4(RLb4`+1xogCqxPBUdNkPP!`74hWFcFdET>$G z@Cq?#sF_v9A8Z(UdE?7w#5eARvEpiP2snD=$#t{pawYw)RL~>C5QVuctjASW+>>5M zy+Z5P!&T9%0J4bdq2Uvg>I{$LRr)9Go00K((Cl2yafmxr_lXwo-a)N@0nRJg$g)nU zvYCxMO*3e!&*mPkpoXFk0zrUN%Y4Nnr{Eqh-bcg7f4-r*intzAhpTB!zuOd*-6-8i zp&J;$8OXAA#0WtN8q;m z-cftjyH_8nL@!)UMOFq|$9gA!8vN>&6sKSR5PU=BQhZ3I*@&=n5X5Nn%hZ=pyrgR7 zmYQngRM9%1QCs^!Kf#ElYKQ?l+9~1DV6XEKNv?&k1D(X40far<>ETbLm9Ze(0Hyqr zZ1|VYa71<Vu1|!{{D|<$G96kgH0EU_I4nzy`$Kb)f2GLk7SOIANESp{J z7J@UJt{2t$P76%%bO81dZ}uo*HTF6qfZ1>$f@lBq_06@SHCu~+?UY*^YS@f)JEhhF zNYAAd$PomI>$v2ESqV2(`3`Buhy@wM;*ENW!&Y)e6Yn5_T52WPLg}qh;INuRzX!9F z(ktUULooj4T^iwK&1yl>UcTxY(s2v}PS_wlzx-$|Kug#j~J@_qmzI(r;z8ecQk@T93R;dpD!~|smDp= z3KB}k8$$ppMd$CkCc3-vuTF8~XXV2pc zWPNfS^yq$%OLslKFuog>=AS}nNmrAId$=bS-#oFnv$ccDg^L}a)~dzl93g>gb>l~P zreNsmUv+3Gh9mwiPrJmUG=n;uji*M}rE*<5fX#nHFLLM?8|h=4RYeqid3Q1-a%7E6 zf|PrclV0C&_gF)?t?F`*NzZmtxv~g6+3WAlM5xBk)XnFnS|261-C3W@bwenSmbirp z;6g9C5mnoPzh6?1YBdNdpHz1zq{?1MaTP&qw=WD#&2ynOgqG-M=Ax zUsH|vLCxV^%^isyyhId!uC5d^V*gaU5K{E^&(I&PhO$6@am^iQHe!B*vG3xa*gqrB z-;2VB=;(C1@1`QGw4AKon)Hu7y}VX%^@y8h%?WN!D9w2@jTyT2d*-(=zb@K|MDuRo z=TB21Ma>s6*(9205HJAfcgsMngsS5Xz8}P=Fu>Bkeo;~)^>Zl6g{`YxV8+|1p;qnP zkmr5B@=;v-L2Nv^enuk>g1sAbItFq*l$DrN#$LC@-YO6#F$Zr|jU4%F<_9@_$S)G8 zT%VKn_iJ|QpSgs6E=r}CeY*j;b+A?3Y5Yz7(kh$FKqhij1Nfsm<2)pKZsrRcKC!r= z=QZM+c4_Gt2gNB|!fKs6`tZfo*av`HsLr;~0GkVyhso1{hX0*-TLOM{x=|_&AZC9X zDQ#2W*;jniwin4f<$$m@KveMAm|sJCbBG^nyTF+!rl*5)6HoJ(Q^fqgImU~93JlvsSqSo=x)!}@MH zuuyF?pssuNr}WkI1mT%%NI`4lZ1{77=LQeCC+Surh08W?-`zhPu{O+ocn>N!8aw(q zH{wX@#ZHy_iUVACo5PPaOu~;{TOP1SrokSSv8+AoxL`mC*m$Ag6TVf)AWY_J84%4g zwvH(ULfu5%tv@l3noJhwqTQ!GtaU(1y0Q_zF~l&r4|TE9Lq5?}z-fYdmyG@U$Y(bA zzE-^$5w2?Jqcg2^QLB;U5A?9-lxVin`Ie@8;E@Z`Vamox2m(7@#)V*W+JWT$YXPnO z31DrSo;p7cta7A>Rv~KErHUFE6gESKDR>U?PvM06)Kb8kbRLHdRv#1b8=>$p5N*99 zSRpi|I6J|>P0F+kIw#hq9?aH%;Y@SHZH~KnRO)`}SxVFW;_o$d1MyL6t?$|(+q3lR zmL0y~y*N*opxIpZz*;>20$49Qy$dC?CGB!62rF@u5_G`VZb1d-wkde^H^qMswfvi1 zh==%);0`<>7Sg5QT-8c5_2*Xy5SJekLOFcwlRg@w6ns@d_B9tw!L~a0-~29&HXaB; z-l`C7FWO-fso8ce0HM5B1IaUIk+18dU%dZSe6ZZ`LQfpu!LJ`FN`TM_+XhHth$x>z z={(>fS_giF=2e%1m#*E5l*3Bh?LmeKGTqq@iRNPZ!cQ6!n>F4@yM^q91b~Dt8>Q^6)2ISl&U#bLY<6)%Bj5O71pJer1iUYUz7y^~**7e|*`aaJj=bWP}M$!I2>8k&6%Yl^3Sk zP^!3hg`^OTUoG}yY*0=dNOM1*y93EKN9GHS#6cn ztF1>}#vcPJAwD0}-;A1wq%{Me@X|nv$ffB**=X(uBNr4qW(^$Y@^{a&EAoK@XK)UK zRrP8wJ5-8QPT}kh`l6TnQZBLU6L1Pl(+$cSp(>niHpQdLuYgr3tyNKPJ~)Kj@K0V8 z+DKNnbltWcUmEcO9&;IM_rvyknJ5to3&(hpd3OmITH0>K%r z?(+6pLpB!VuPVB!Zed`t3n%Kmkgf_im2v(!9y=4X=GDGBy~)2m=VcjPZK&#u=AHnmB2)&(hcbD^i;uN26F^2ZQ!233LM#E z5ajzzJrd+W-PWA(VE}(shvH7_D%xsuLL-*2VFJY!Y6yJg=%Ii3ce{8QR_b&tuXN@R zZ@!pp%nV;W=u5BcRl{qS9PIHrI3= zkPSG83L+P=38KFxf*VEb{r-U5$8afchMi(JfgGuGn|4ty=Aff8&=$U=o%c1+xBoc% z-^_fBK)0z)S$jlWqsW(;UUBLfX{wm&$nUuxh55t+k26$koz7_o?L|a>Zw1hVa*|q3 zMY*@YG<9F~L}gK}l~UWm@gPs_wI2O`6;{FL>6V3X$Vw%TNF1I}|7wkHxnC`f#FcY;p6#$IZ1dN zDh(@-9hh#u#jm?fs-;cOI{5XdKb)OAtTXBUtx;sr3G;)Z13Z(0ao?F!3kRztt z9t;o#yvAocZeyn@f3aw2oaX2u?12YYTOBSE1d4Zxf|25Zp>s|is}YcT`V&Vv#>CM^ zs%T<1M2rvA0Zs;!p;gu>U*UXBrFez8-Cb@-nw6>S8EbLFkP9JHaz+XUPZ|Lek;^n1 zornWdGb|XYf`0-%lgUfP;N7#L1$W~B-)vtV#ULaoM-a)5WaSDPsm8_Rff1?nOcxhf zSZa0-@Hu(YHwBo`4K$#=cPdD4k(Qe5xE*Ua&wU9rp!$qu@68J`uroDT=}{B`|En5( z-fFiSRj3pl1G?P;cPqx=Zw^+KwHWR~Zl~a>jL&Nl%guRvNzA4UF|5W;-JL*?AJD~N zDF&pO)VepfWwUOui2kt44?|+|fbEA_XV|3XK0i`VWW^Rb-_=)+=jV&Ynv#b+63oaI zTMFZT31c*qVbv^3cI*^<1ZYt9B8dA%u+2n2x6orakPn{AK@d}RID)-_CtSV?arL1K znKT)L$k&2w8?HIGa=0@p)3DkrnE;THatePdn+lA*&m#lh5;^`m@-#ocdq6k{l2*Vh z8DssNF8-99B8_aaCIa>zax(Khy=9`P&#{_rN4Ndv#xQCV`uTay!Mw@2|$pMe6DN zK$&z8IM6^@L1F7um!Gkb;(WN7p`rCqShB0=Fr%S$*}bbh?{RGlIX`7SA*Czp`EoL< zb?H~mzBI^GYS&<7AA?-`w374|V`WNst{M_tPxEtGDw44-qpo^~9GkG_T`6IBGfL@# z?Tq{%2KSgp5YkXt_l%q*QThqb{&C^!hj!)tI+K_C<)nrg^u zW2G9#@Gd>>B_V8U?iubHxNZSThgoq#H%1vTM)T<)K05?En~>jRs1p-sj&i%a37h=T z!Oc?X=GJVcWW(NH=V!ADQ$tJZt_Ku4rNoCH+J}kp{V$dCu-Gn<47o+*Oj6P zqsfV7A3OFI8YaZAHQkXUghRgNw|wL3y;Cf-I^HT$c;*|c{TuDuQQ)t5+c+P9l0n8D zfL(2~N3TrVY**D_3i?>AUWhIG&Dp1C!WVMp414B>d5aIy-ls1Pd1S2`^B9|3&tHs> zc}C~?zIY+g^<8R|?B!w|)jn`SSGngohzC^9nY%X!@*b-7%i{c_HE%I_dw-mFv{pDW z{4#lwpYzF0a4+ZdTY74|VxH7~q}HFX*)4Tq-yWTHkid3q(;u-W>hA5zG_~ooR-f69 z-2yu+yt=@;!Sz6U-vxkov}x8fvpiy7-6{BM9S0s6vWWoec5%yk436i&FqQpy?J@{? zV==u5a?Ei75|+^gX%^Lk_K%4huPO2n&$(#D1c1%VNsD0=J=ziORo%CSQ5Z?VUczkI znIi*N9nNn>jC;Q=#h5Yz<0Bk(#iE?}3&z;bx=yw=c<@FZiG~ONur(FQXwE%5c$4^_ z|8Fu(Cu9J)?@}f#9}LD3;@M>+GFXQM?%5gF9MT!4f&J-hVKX)rj2?$RGAJ?k7!V&( zpn$jwK1Hu41TF%6HW1E$cuo@n#@h2^{v5^b#Sczm>ehbfB_r0iwiWBSKt8;uk4NPN z5Anvhqge3xi>cd@!DXFpx0vEFml9-k_~`!0FTT3D**OpA+qcgsX{B$g2X&Kl%=0{G@(T#mygR0r-m&4FDI z+!C-qOJ72zUFFojESwng!K;d6q#rCBUMhn1k4O{e=RuK9zH!8GkXa15I^i?i4E>Xx zaA~9d7SUFtX8H?pY!5z7=z*#jauIffa6J72!Y=*hA;0LzyM1q!4ietFGT|-(W!yZcpFR6=jEJ%~Ul8Rl>7dF2=ZGEv+Emm!{6+E*U zj%Yxwx4d;OWze?&xuPdr-IQ2eZYk}0HwZne`eD)=z_bZ*ne?=wk&|`rD}&{G!14uq zwH#2eoa<4|DvQQTc`y?%G@Azo&l;0szeOeUQTNBdmfDy2r5p@(GZqQC?AJFX6U|1H zy(rLb&)41gv|v4vmp>Lg_s8w-9kZjK7)KY@V`<`%*VfAUU~b9$S;Wr-^>uIn!u||i zXbp^y*uKLB^YwSO9(0YKEgI8Y|I46zp6r5k4VHMsVSK-eF;^I#QFfs+@7Su_vU`K|TIu2ACsyGV zPmV3R4R3_q|K1^FaybpWSu*egmJ^K)E{5bi+k5Tefi`m;2OBG|-|6or$$5|Z*Z@+!E zIsUvEHnBGOfz|PG`Xx&Dm{LCO_N8go*Xb+i*Ttt{)w~+?HvwxG+*hj>`7+-4%JDk0 zq=klN>zv#FUH&{JQ$OF(cmUQUHqA1A#%#Q*+QzsgX*_#o-txAzlHX$1kFi7TH!1`( z*YSl9d!^W&Kl=9GPu5+jLcPb%N@IGj&UGCB)9`BH{FJ3UY|yny{D0SGVMs0#Hhk`p z`Zrd^6TdlI-?xGFyGDT*s8W8pXzRs8O*;=G8Ox&}crKwC#wZ!b|_-(a6%hmo;Khw19> z?ylMX4s())r4^ZCZA0y_wL3twcW~^WJ2@Zhn0L2=>$!KZ37#!l{kWH#Yh?= z*2Y&HKXruXUpVql5WGFIFQk0pvCul{*$2}2sj8yroD(D=O`}>06gDLsIDQdoPCC< zJeu`Q9)+g<(T+!F8SG}X$a+m?iMVbmj3vD0WP)7B&jO=DQra*X+9skO_m{y9q!%nxGIofxrD zgOFAg@UZHm`;l@)Keto+4)llHxRvVH>*6K+Gl)PH$?e-_>3%v@HEAOgF*?DXxzq)k zN$tZdeLdfkQ%C)R7D|V0eU3}sqwfjqJ^cebblJYyzdni#IlmwI5hGjh(dJ*4Gb9J` zEXxz}TJ}_(4`Zq%QA^6+=86pU4;h#P5omtoOGm1exmmJ<_ zgxc?CffZ+-Q(v`syGL+>6+WYgwEtWJ94{eegiK`8mEIR%eGafUZqJjxhzJ!*U7)Lt7ZDhBZ zg7s|>roD9wQF&3KGzq2D^9l3FWBinG)?+xg*w1hzs`s#1LJK&2H{;dE>Y#%|F$ZK8 z)dqgv%NJ>sx{qLg@O)-wA}sUl zsREWyQHPG8cR&e zY9w8(UnxUr)$6m?;Bb&|MhUW*0eYnJvLp5RZVE^wjkY19^<S0h zzAX_{l&KoVu48Q+iY9T|QOHZ6kwV&FT5T(LWt5lBEbqkxcW?H+`8* z(6JkkJ-uizvTfis&#N|!w3Pk4vw9&2duM6E4AXz-jGLw{{d z3NjM4(Mu+g>W7qQV!={Pzm4C7jBRtPjRt!?pm}C3TW8VQIwA}B52~&ZSqJbJO0v8p zJX>1C2p%URYQE$wf5>xNQt}3(+W7hk!Z63ff3h@R`Xb$HWwb9yz_>`U2zNA{gb-$N zY831TP0zJhpJPne&mrii#PUA4^!&iV2Z?WNWIq)k|YXocB=zm;57&2&*aB*wwg}OYD<2i0U zKZNS|lTOJ=7ycCW)Aw+pOfBm^JHe=LcRhE3O;EH$FB!BQv9KzuHp~$ZM-Saj3;wGE z&&OKQ_Fe6dq%PGVJC`aD_BnmsL(lEfB%|@~Y;Q;vW*st`8n{rbe$G5CQOgH<-20AS zBG$e{d}Nq~&b@w(s-TJD32PNxe6J~gdCeX9qq8H`J+Vy6x{IPv@{=YxE$5vdDJpLp z*sEgzC0*1R{EHQ~AZ&p*$P2w4Ov-lZq<|*__v_l61u55+C0wrCAPYS!7McD$WvnG}Y%I4O^uv;-^zT_)_(3h$-eegVNBe9-r?8{yYkQ7ew z8;qBKJ@hNWxxXK2Eym^ge45 z@XuC~blI)ruwg*Zw!!m)v>H8F;?L)Xezyk6F_2OSTXPCbyg|GxE2xfxiNsRWD5C4@ zhuJaB9uOUaKDHcp#V|)g;io7>K~vSm(6c=S!|+epVC4f1OS9VcH-^$tgR7dEeK7Ee!t8y1r_j#V^VpWNyU$0{L*+z%JVe1_*WmRDUxQLQ zUG)(i8{_Jy{2y(?Y)7iFpkZCg)wy|Afl!BO)>F$KT9Q6a?Dq1wxQN&--&Om*BcqMV zo13EgP{*>=K9dXy2dxmKsWR4BO;;BP)eXvdZ>{Zgw47pfQBClot~YN=L}wy2KGnRa z{SF^~?q_?I$AeeH=>UZyF%^9qeKpOcCV|+fy8M6*@;7T5ROL~3eX`21De+WadiCzK z?s^pXI_*cJ?$w8?7-_v{3rq)P)#{Xk7nxq7QZ2gsf`qD(QNFugl82?=*<`7obd)q< z4v=rOasEJBpaV8ZK&Q~!U!pSm<8k+XO)-l%W)401k1dt^e*H65^A0e}nIoSnoqV5@ z!o3sA_?2Lc?^@^9B8DH{6~@?OO3=O;>dCRnVm3@7R_%pb$mTNM&`>9?A^+IiX#O*FYJvPaA5}%) z#UoF2Wt@WxwK0o>a2e^6M*Dkjbw6&6O2DDE#J83eY!SDmyXMdXynu~i(vY5;1PNb; zLyE=C7xb}EONJ8(;rVmW~g8k&G0$p7DEZ@igW=h}JX5Z489G zEbcjT7_j|oERd_t&d1_~5FE?q?t-$?^YmEEQaI?{32#Vh6n85bCOcrRF@ z&%LNSg7=NoVj2>V?e5;}t8;^ZC!yI2+**ok9`?t9`dLbd2h{Z}`rnh7fQOlXi{L>4 z3Y$%T-SpW=>r+tV{#?&QW$uA%g}bj2HUqW6@R8~Yn_PqHaWa|YObaGM$a%!`ij4d- ziSUp;9ONY)m7|Fx`}U6}!DE1Amr8h78MZZ?IeI}A>E->8CG{F|=5cT@dDBoPTeY@P z?0Kl!Ta?y3DO3dpKTIm}%_HxU(#V-dWdDgwK*g=%|3(fS_>Qi0B5eh&^x4-olaLtJ zx$UuF!qJSVLjDR3tpO<1KW5t~Jo+eoKA-Sjw+m22Mi+(Zrah^&1PFui)^;Ke!~5<6 zZ#nJ@<4TQ5uW_o4KlMsqrkKX|(JY)Xu2ps*BbyFd+G+N@{k<0*;O5u&r0k+URp#>n zc3xoKFK~oV)t_ae;-lhaUR$wL98t83T#D3fGIk`pd zn*h2@}&pX8gINJ?&G0qTS9n;T>2jThV5#DG=Jz>pbvL(t4GT`eZ$T$F& zUv;>e)M7nZL6|0A!2UpgbzTsyIe!LheULDC=Ve-ZzV8e@}`Jktr$4 ziZVGiH9mhGB+x}c5XAG3-J?s~%Z9rgeRLtu3a{n!Gq2G#qPUjbX5&Jnx1Wy zHga^#+GQYlwrVLHs7Qbx*l;Phs`G{?0FuVpcc%snht|H<$fBt{J?gp7N6s!E?wKQito?qOB_6xKg2pjKx?3%9CJDwq`=Tp_XgB~V_!u^$*INai^OV(XQ zJ-R5%l)67Ur!Y1Mr5Ra7G=8B7l>RPjnv>)r%dU3u$^yZr>r0qKc{QPjHyTmchb$MP zVJOb|^9lk2w1fNa3e!W5-b90ycu@#bO&l_0xy`~HYqU&!Red_z);wfC;T`s`OL~pL zW=ko=9ntNPhn;Bt+@^(1&jZ-`qQvUgiC2|V4+0#6_sZ@OTWt+)>Bys%Q>BaSukMQx zd#^Mjh63b}A}|;1M0~!70rnbB>g!l?cAlIvr%=Ih2iIIsL0Ip~M~s%tYk!f){i5NK zUMp}3QC2p+oe4|kdLAz=Z7HRl8R|}|;UFG}9Fz1{x=czI6Q~%}3zZJ6!W5cn9*jO3 zVB#grznz(SQE-gl6pm1n;Enqoj!+m~2PE%VPL565{%Dgqx%@!#zqyl&zIr8JWnPF* z%`NZ~7n4GJHDaB-4hZ|^Jg^Mt6;1S%05OtxR)`h4Jr{>Ow->u>O>fzv)31qm*-Jfx zF794%9;3)04#qz8&$K1)`_aTU&SJ41K$<||vF6gDO+YaqtKK5#$3w6Vq15j{iuD^_X0+cCTe*?(%*5I!<9G7StP`|_;81PJ zG`^HP7&9{QTA(A7thR{dXI)&5)mirqp92 z`SJTl_n-y!|1eQA{L##*;{-@mU$P-Yd9c*iaM)U<;LEn-tfc(g|4_o`f26b+Dt?U> znA9fY51<0!6F4_}i2*aGcNeabM&r=5juL=L;9;IJbk1qgQXs3YBm!4XTNRO@F0fNX z1r8|$><+3uJ4?6S(CrSI9GS9@J{c35fh*^goftdNzJ>n5(M=imlmJ-$oyYa}KXogx zl~gc9B(<2|tqI3_$d>7VAD%g;F6MRy`y4F`wBpwC>9?pcb#&ap%B@y!|B}a$F5q7jfiELG^08W_01F@Z{%8<%=_%b^O~`4 z?9>5WYxF-^Ij>0&^mJ+g^ngUEkS?~*$Uh)K&I_GJCrE!tZNn5-r9@d6C{Og+i$qT^ zpIv_;AdMDRrNadj;pM+C@q0C<2c{O~)_(}YS_@}a51Q-=)vYLoPfa}gXN&$NIyHE1 zdsVULxZmb<-_*OAAoF7+tC0hnko8rSWu#H2bOW(k?YqwIpU#O$z?+%aH&bu>Emq~H zR<31k{4o6dqz(|NL)X~{ewZON#Y8FX4zdq|;tEZ7g?&_ePzSM*o_A;~`^O%_GTszh zoh@!kjnbI#mY;AWyJxuQd$w?`` zHXmo~1j~mUDyVlFV!Si^CB)uht)1vT`v$*8e^>Qjd|~49(?KlZeSB}~0ARjunOyeH z2JTa$_U;WiKyg?84Y#kZcP_fMd;<_Blrb%+g@&m=5#7I1_$fOktM}w+`+jJ#X?P%Q z@S;}HAvDm;O01@{VGZXWz5~0|t0479uso6rh4jlG-*Qn-r;r~>P50}G9a*!=G{(Eu zidm&@__tEfI+%1nN@@W;+{ceH*lVqG2;9x3Ti*zmItqseT+#}q`a?ph0V^?kTy0at zd&vk`pkh+|Ag->d{Ww5AT;^*9p$2byd}+hxuAkGN`7pRxi$eP@QbI-Y#MH2G7PC+L zdZ@3lGEN?#6q@c!hAq6S^w#z1UeQaxl%z0jVbSUicRQ#eaZWnfLi5l`%8BIR{xnz7 z>sK|aA0m`f4`&b2>=EaXo+n90v_AA+1)IM}2MF!Be0gawVL_Yad58Z7pq;jiGWi~6 z)MQ2Yg%{R=5-o|Gfvd3kAoN9p0v|m2!GXO+hTn0=i8gu!1;0>zG|>Z=`WKO1PpN9a z3bVV&`#BgwP1EdrRqcV&ne|vz6*%yF&r^+YAVLoBX5S*UfhC-AX%1M882&RKLYcA! z(k>@aE)GMG)7bf7%$|d2KNsJoCR*B``oMLnJJ9n( z#`6{@sN|YfdK{VOsT>*-FZ8UX82(NsqEXpujC$%NZ0Y&;8u9X;0$5touID>Phkb*R z^E!`{gO*g!NGf#e9eX@H51vRn3e8&ouXJ1Qf|(3GlrVg` zW|a(|U9g|l!=xS%+CV6Nzk0jgcGTT>`3%)oKJ&NuL8^fV9W6JhMk)7)6*dJ|>ex() zM0k0oM@XFB^aSqvYVX7%W72P!4U@M)b8wl$uFLF1)9mYm`u_r`_U$rk zTdF~ZUVWo|!ca}0)%ipv^Vf;;C!&ce={7X#j+h(#h^MPtoMnr}V^?60Yj=Q8AK;bI zxQMfPPeB-Hls zdAF~w{gajOku+S3u9r?x%I4(|9eB$^D}Gi!umOKF`X3tTOr0nxX-lEkGyJdJNTb@D|Y3lSfU%qq{0V3*DUT#&;e z04bBsk+^3z&&sJ9b&_21OGt3ZYj(~fm#47n2I?BH`)vaUY7A($Zl1t0+hxl`r;5TD z6NzHq2DeAx!Hs45rdVo(Vb^|OQ+Le$dw)W2p6pUwb(1iMW6~2$Gs-tE%E{M6JVPGkOuUE z!SnhC`>5q?lPJA0T~>O%L3u9{8Kj`uluT^1)?y+W%GZ-$#=JA6)zYMaZhkHcr4-?L zH#xg^6F3yg2St+v1KZr>0Ge1NoIV=|B80kwJ(KRdhP|-HSxpi_`xPRlU)i=$(r`T- z4-+eEkQW?fFZ=EUd+o(~C+oA_$(HLDlge*PPkNtoteqYH(agvYrmT>VN8X@y!cg^Q zA)?jkZxkE|M}pqv#p1YKP&xC3j64HL>Z-<4NnU(2MF?#M=vE&^qtPjY1oRgi(lVPT>qxPeE<_A#d`(}ux6mEBRA|`%{N)4(v}CaFyUvE9m%xV@UR~T{H^)ph zr>M~Qs1U|)vy0NAiwv9>dn=-@h`$KOi7Q0`)PaMd2*XLWYrSh!rBrZtm5AT;Y;86GT-333<$nNB1~ zWTDVPix_Y$P1B(_H|6C+7@@7)F~ z&s1g&%^A)oNDY;6v}I_((119DEpAp`1DKZT&fc8HEQia8fTglys@!N~VQ zZo*G=ldhbnc2bt|B?%T)53|;~A-evZYGz`m=qEHON4?ynr-ts#_bnpMdwHmR|8c8P z{1{(LSC@s2?1O#283lyT(>5S*vZKvMhCzyBJaEVfAOoq&%?AMnl8f(CNT08$U{Yqq zE!zR&yuY1%MzSNac;_7og*MH!d)VdR59?_P@*Rw7$C7;3; zInwF$y69+oyeXcJX6kj*;Rm`xrf$@O|07<=bI^86%a8CpA~zwIDZF5RACjQpBrkBf zH*W@h$aV8aIyp#$_EIHN7;@JE5A=bkErDj>5DiFisxJlXClGb?6#XG}rJsRL2bMn|@Q+dF& z!5M|Vb12RD5Ya|tZZIIv^pti={U*tjRADBMc{2_Mb($&0wGsKbpD}0fpKG$KWi&Z$V7sWc!I=tdza$}X?c4&r=2nOQdYpDR(V2$@}XoItV;XUp*Oy`LSog7qCE@# zqjZdRsOpeg_)BhfYWgCW_2l@54o z@GtT|<^6a&Exb3T#d=8|e{vU`2^E!5Huvi6r+edeQ7RjMwqmt~CBpENtXM05$^AX+ zgO4cdSjDh5gHLF0 zSNG*AparE1^vVKMts{)Bqyt?qMKXD@7Xi&ZH5g$y+r5EZ=}r}aYq_N-%v(We!L4=6 zwLq(W&}kL!TrHxq0nkjU)j>10+}Q4Pb_}*iliXA$!hMVyA36u21@ElYVTJ1qpe?9M z21#V<3Wz0Kd0#UiB1X6}LHPeW=cZ_qE!}#g0*Vgw-JKJDQCSbz3V4IU;)OAluh{jP zBqL^)WIOU6bh$T@&w(|+PBvJmwSVbF#7*<4`7r5%?QmY@OTKS zXnaVyVU4e$4r;7uL>>XyT{Zb~$wdG8J$8(Y7|vnu{h-dve%^O4_OGI}X^|tXZ}Fd9 zzT>08*gy_SOcO7S!lXzFy}kmp35L&CaTAq*6HW`2Lrpr(bl|EmvNFh5kUt=utx48$ zYpQyT!V11`i}@4IU2Db&!v9Owoq7pWXONQ6Curi@y1u{`%q4Gk=I$rkIAnWK5Zi~2Gx#E-i^{x zPCoI;)D4rTw!mV3Y0(jerlf9xnq7SLgc=?r9^nCu2g%|tdxz^K--=u`dFtUHO7dxR z0ctsgb;?-BINVRp@|aLm{uK`Keaz^sD1+2FXk{0qfEp{YPXEWznZPss|8abm*%&s4 zVc3{^80Hpp55wGxVa_PBL?~rrZfb7jh$1RNsVL=&hzdz`q4ev};pk8)|MlNvkH@yp zXYcR(dpx%9=llJU5|_q|c3O@e#V?zG9FOo=kQmoM4468*d5;4Xkuh4Grup z<7SuGWOBejSZ2!Y+!RW5Cr|4qJQIfUY6CgNf&>u8#__RK*g@+Y zGQMIpTJYl?7p?HmMQ4_-)<2c-Zk|2IOX^=$uP>k^yhtv3Wde(P($5kamg7i_+h4cs zM|o|x+VcHv1g4s|Q9exNq_T;FmK=S0A3T%w5V|KiI(l(}w+^;_6mX;%0!#$(IVhjq z38hU}EQi!wb99=Jd8ZE94>M2XQ`aD0x7hdZ#cbDEV94N6t|W_!%u!!-*f!c=9%Ivx zYXQZ(kwaqkTgCRfO@z4;T!<)9-ExGS+g)S(74vm#Yg;WY%m1s-wwX@;zRZ~`k+Z}z zwrzCgdqmvpcR~G60RF>y>jFblO{jbV^z%0M#l0NnM+Dz%QdXnTn)F$i>OidOMsvCp zGJ-XGULO3jtu@fgCHWr=+sbV`qOn7RgUM~Z4$-PnI#0KN5_L%NQa_%;fCZVqK;tZ{xok}7cjXeHQFF6Q(`!u;z$N{gXDGU3kBm~^^k*Lu}Gu|U&9KP zeHt{9&tx#jEv4sI$P9a!R1HP`CS0K%xM!vovXpEq;|%ERl6lt`_o_?Tpyz;J>$UAi$&$N(QNxK~hHfVzVweW}%;vi8#$6k9iAOq)CF*Lpd;a)ILr_ zXwvdU4RP51mZ(2ojQE1GNIDu)EL-ru5EXLk` zev)_0nS;$Ep=6Fq;ZBPBVBZ7z34SifVQ3Fv!TyQmLUdY;WHkCW5XmBWd((KuyD|Hg zCr>C0;W@a2sB?g+VfizkvLuzTk`gk5DVSaCtnY(fK|}5?e{cb-VdYkbBCZfxt%Z0Z zz*BBgh%>|_2XL0J6VV~*xY3O_u!rNGEYi>Nxu@tuJ<}v%B*ogd?=ld(9CyrA1#S|{ z(#%`b76PC$W1fW~GiCYV|QIeEgVqb!Sq=qnv0(IK3GFXY!*_Y&q z;2GfB74Q;bylHHD`j6_-PFZ_MShrN;HNAxR2AjN8E0ncroSPlHDUQ^$rU?h5R;7E< zYfUY8Y)ffYY~qdOGqg5^2`7tsZGxqhNVbl+xtNUCbpK3>tnTt7oDL=0O9B7yaSgi${By`(w$&X7~#Fs!)rhj zi%iPRE!8>`#?k0C`?Dt5;j{H$E;uRKWSl>{`KWXMk68R{IpU;Y5i z{qvt#BN#f&XcuwdX9K)=7DuJ}4wcB}%@zlo%0OuPzi6n-L>5a}oy-jzv&JPOpaS{7 zc>loOOiedfTj{?3VfUsBIbNq*w8-L`k(w312P@YV07m0w`(Z-%n8FoYu4X#3gQ8R!&*|6G#&myrALCJHJ zEPSBSes{NpMTT?aOgSiz>?o13dq7huus8$;7ENZEC#n9$M(ZQ`qaMilC==0*?O)CY z{EkRJ1`9#~+b$ai?Ws!kzPY#tRr_r?b?wAuVMh}sw)UseZ;~0g!cJoh@L!0beMW!g zGk8RS6K+b&%o$fk?IWJK;%T(Or9$+X_Wl7^iAPP%SCy2EI2CKav{T+_w4C1+AY~O7 zP%Kg~fBv3|I4|@-gES41v7W0Y8aDV5l>0H@_te5lVwm{)GYUXp=Mk-pq5|iniS|fQ|ldm-84zJlj1StP1AU~{uJXXi!y%y-dRYEmYb^;N$@~>^b zID$kjFhh7n=oAAO43GJ(uz$$=H1LC1gC2nOQ5sTaFktm}38s9uTrCI&r-UjSBkC@k zDz!Gs2VY$pPVAGo{`mw3hKlXS@jM|})81KkRVxu+jRI1{ns(crRZxS6A$`oFsjeBj zvC!!O?c(yx6%eM;3(!}$r=%4RJ6&>Cvb&#I`&`TQfpOG-h-4V4a?b@weEMP`cw(bV zQ%vUN=IdtvF{zoFH@wjT$JiLQVj9kMs=p$76wsOpym8@%sjhA>j9GE|4Ec_xMxd}H z*TUS;TCK5X%)oGlJkL{CkzXN5_&;QQo!G>w<<{Q6i-BZAmSgQQis*Qo(2(GK%!V%$ z6#DX;fDkFjQ#Ux~GjeSQ6+_epoIr&%E4Hgr0^|#TtLgyLRVgRLH)`?{5qC3&Z{DMK z1ZpWOvX>=tFdWP@an6f4)HtsMvy2u` z(K9iUZ2N&&m!I`g;H)^s=j~aptVgG0+`>`R0YtkevMk;P6^qc~g9tAP1}3vWw7*tV zdJoj^a#1o4IV`i|px6@GD|GBm&UHuq?PNo^Y(>txgw$5=bN9fTTU)@GR}EJbk5Coq z- z&QH+KF)>qL%LJ0v%&iaMQ;-muqEJ8Uvq-;R!XjePlJ?vkAO0bw#CL}K@3%xTegP`H zyrBM}J7a)xA5=W8dWoYXE7ugjRaPx> zpCq)Aw@-KjnH?pFLJ5!4$M=5Z^5J6)eEWES?G99lc-r#}BID>YI^vY1-4xI|Dr zOcQ+Rh@wOz9H?<}m&9v;j}9)|))Fe_LNBN*Pk80hsFxP1!?A))UawdSpzyJKq(b7& z<;rEPI~R7P=y94RtLfc{w;LA=~z~+OdK!ILria&|EWF3f;=4 z`>DkqWeo+a5>!5wHn=c$2OZ_V554x2IhyyJ@@5Ve@5qP1yg_8t(>T{(5WC z&njVsIQf2|TJjaS5I0$bXVD;Cv`7q)Yci&cvnEN-gbg407$piu49cl0=c>w*Qm=$6;c7i$Vl9xM)A4!3sMUKmh?PGMv zB3?BA-Z&3oh-5MbS^5$2wjT1nwvz3_Q6~d=K_+25MT9&fx!B=7#})srDOLfMo9+3I z%n(9#IlG3OSxJXdF>RD`l5FXJu1czI2!xFyL)N%c-VlRYj#zYx2N8KkBh;|!LO*cLl%N* z_S(z?iy!j7Ze8};Q&7MNw8vR#b{9$b-Shs-Ec;I<#gRr}2%eVrW0wP<$v8YG$>5>} z?%4u25=~4fO_my0W+YHtrR@$Y9FfzFftu8*FE)v06Ex( zyCVAv@6Lvxo0EPAV3!=VvVZtw;>-ZEMjN7EhVrzZ?jn-F;9R6k6I$0^KrGEWP`LK<;Sd1zZEgmMFezHxyYpBf&a?8s!LG+N zuhp`q|H2*bVGMk|lWGVrt&aUDl(kh0KKMar)K}SS@-p!3Ow=9pIS(nXH;hw6if|nE zFq&XM-Je78uq2L)ei=-^hrVrAl&pl6Bbq@qhjmBh@bm)xOpO67MBp-6{z@Wo>gi7} zgr?4>hmh<1fWN)HD7g|;B(S$>=yYdddkD&4(gjjFXC4m%j$XIZY_}v40Xg3t`xLyj zIEJZaGy5wBC|(p(e1%CT!t}20(*tC7C^t%0uWZ!%AQB9QRgzBhx{5f|6Nu!-6>XO0 z`j8XH;cJGNoKWtRM*h(g_d0X@cj+i2#ql7;aap>84HW*7uN4=YQc{i^jV!@79BSY9 zkTZ&Da4I5~uj-zW>p-Ie8K#j>?xnUW=Ne0FHz40zOZ-6OOOGfHH~xNsQ>M!$iPy-% zgAz3OWTj)Z!^&>$13Qdaf425u-Xl)7~~?$oZ)(?`TQ&5Z#egJ4GG?!?a+RT}HIL zr2FVTV5+Yj7uER*{==NR!XlA-yyb>p8viNeNoH{|*0cct^D9hRrUaVJ1?o72y9E+3 zfE^#(={2aR^{SM&BGUC9Uxm(C_4)-_ck@GKVRyX;ra!$t_rgv@>Kce@lhe^pb=@%l@-GZ+7|*>WA@TP}s^m1io^l?NGOlnU1&|EH1`fUmaskiP?U z2WSC1bA1I0N;ka}k~_svO3VO~)EHLOY~O2P4`bBHZlDe#ec}1-=ZZqiQ<*n9PA6_x z_J`US7kaMtbUjpvjt^By%@)#9Pu4SV=oIzOH&&iE9776I&EBcjD11~LmgAlv6(dW~ zF2{gyN$0_BvORVELE$t(e{7((9}qHUr1_*&aLv7-Jva_Ha-$KGthFF!E>sl0@1mI% z+4(!~K9_`s>JJ3?xtI-1HG6TD2cvvB)Sk>p`e+K5e?v$Wm=EjNOx8f{!V&F0+ROvW z0K>ccd7>($&73u1v7lW-fOm_sk%xCd5C`M42Ih_)Yr3-UCaRFt!|DmEns~Dz`hT5L zVlPuqpjFzdCurIyP%4Qj44U{0{d$8+slSRk?|OV`@=HSxUhwr`6;V}!TAdI@pt@|= z?1P5mi*|_vLoLq5$`xLT-7nO=bT1@jC9kMyFL27Uc&P^m6fE+(s6bI={6>((#MI1O zP#iSzPfO)EA!zw0rxN6@a&;3ZsszasJ?UQFKL1w7*UvxT-|7gYRX1+_i|xC0yZ>M8 zz_aHsUb;mM_bOE5Q2=!SpiaFiATEmaSiNLpx_Ar>q&CHb=~YR95zc6c2WLN*P{$G0aFYEu+SO2o+N}-AWvg!x%OUPwi!xM@|mE#SE>piSYAi&JZ;5}G*#<$y z1)#RKGAr^>^w8LYFSp*NSekH zNy01*_wf$nFo;C%LnO-i%U)soyxrzf5Pi=nJ)hU0QMIB3myrT>9}DNv9E|eC=Wo!$ zoD&(~D3PQWo2$inSw9b8GxOndGV`U~TBR^TLhiQET6n{-#wD{$ht%RdipUy7*Gns| znuHa>3l57ByuXA-BL20(AcxdiRsikWTb}<~zpi~mjP1C-8~+t@apL#Ricas-iY1Nb zS9N+z=VzzxCaMJ_PTuL$F;@%d4(E+)^_I3aG$q}9TEQ$&*C!8?~!o;CiKFgx0)Qd5O*HE?~rF(dmJrf*jB> z$4tDIMMZLhPN36Lmon*oCgBA<@!~4Zo_>&0_;8RTI{O)aTBmyGh-6sYOq`dXs?-}M zZ?`8HCa|7a$g4I^L43FqYm*P9s+D~02{I9NJ?m8Sqnl~ypKH2XQ4}_QY(Y>RmU-!R z#1KC^v~|){>8w0`mvssTf1l8KxqPa8Y#z<4{1#{!@lonlOE=OL{fw6{c9Jm-Jq82< z#2GPX@xWcc{j*L3z(&h=w&|kEVFSXgNbp6`wZLlz6L&Qow=tRFf(rLS$HRO*k>U+; zK$+G|oE!celtUj$I*l3yP7Xr6W^p2_ffegl+d)>&euEwpMrs-@c&h??Y->T|0gdeY zftxaOqep)9!>#fpZ@hNGX${_O{%j{I%fqEBP}r+@X=Mhs(1!#e^B!yE?wZgFyLmk# zK_N~Y^Mf(n6T2lY&pnbULsOYO-lkYOYZp)G^@#0iS{YMSj5Eh20QE)L~3>?;v;InPzNa54ZFPrcjAtHNVi!Le-p2;8b z^^m;BYJWJ{j$#5tflBgzExX&=x|_!Gh>DBDcS3L8j4er56MVW?-4m}I@Va@uI5b_h zR;{jy^U_#0eUZxT6^%C2C`r_tvR&$Cz;H^pU9; zfy2zn40!}3Q=Wi?LWD)>=M-hb$$`wkUcV!=P1$cv41NPYaMG=D=`pbGQ{C)8&oDPK zp~0g96Rn8H$(_L#M~J~LUZOi5_YUB^4dXhrXP;g`w2ui+-hR-l*%@_$YRqr@5VSs(PM!wHTdc!*>M#tC5ZxZW! zXdHH*!e}Y6Db4OS-~KrJO8Pb>^)#0f#z*4=Za$Q38